Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Pytest Parametrize fixture nod found

Trying to do test files in pycharm with pytest and I repeatedly get the "fixture [variable name] not found. All that I could find regarding this issue are cases of misspelling parametrize.


liste_paie = []
def calculer_paie_employe(tauxh,heures):
    total = tauxh * heures
    impot = total * 0.20
    net = total - impot
    liste_paie = [heures, tauxh, total, impot, net]
    return liste_paie
pytest.mark.parametrize("var1,var2,expected_1,expected_2,expected_3", [(14.7 , 25,367.5,73.5,294), (20 , 15, 300, 60, 240),
                                                                (15.6 ,  23.9, 372.84, 75.568, 300)])
def test_calculer_paie_employe(var1,var2, expected_1, expected_2, expected_3):
    calculer_paie_employe(var1,var2)
    assert liste_paie[2] == expected_1 and liste_paie[3] == expected_2 and liste_paie[4] == expected_3 

When I run it I get:

test setup failed
E fixture ‘var1’ not found
available fixtures: cache, capfd, capfdbinary, caplog, capsys, capsysbinary, doctest_namespace, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory
use ‘pytest –fixtures [testpath]’ for help on them.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Final set of data should fail to pass. (this is intentional)

>Solution :

You must use it as a decorator, i.e. use the @ syntax:

liste_paie = []
def calculer_paie_employe(tauxh,heures):
    total = tauxh * heures
    impot = total * 0.20
    net = total - impot
    liste_paie = [heures, tauxh, total, impot, net]
    return liste_paie

import pytest

@pytest.mark.parametrize(
    "var1,var2,expected_1,expected_2,expected_3", [
        (14.7, 25,   367.5,  73.5,   294),
        (20,   15,   300,    60,     240),
        (15.6, 23.9, 372.84, 75.568, 300)
    ])
def test_calculer_paie_employe(var1,var2, expected_1, expected_2, expected_3):
    liste_paie = calculer_paie_employe(var1,var2)
    assert liste_paie[2] == expected_1 and liste_paie[3] == expected_2 and liste_paie[4] == expected_3 

a pytest run will then produce:

================================================= test session starts =================================================
platform win32 -- Python 3.5.4, pytest-3.10.1, py-1.8.0, pluggy-0.9.0
rootdir: c:\srv\tmp, inifile:
plugins: django-3.10.0, cov-2.6.1
collected 3 items

pytestparm.py ..F                                                                                                [100%]

====================================================== FAILURES =======================================================
_______________________________ test_calculer_paie_employe[15.6-23.9-372.84-75.568-300] _______________________________

var1 = 15.6, var2 = 23.9, expected_1 = 372.84, expected_2 = 75.568, expected_3 = 300

    @pytest.mark.parametrize(
        "var1,var2,expected_1,expected_2,expected_3", [
            (14.7, 25,   367.5,  73.5,   294),
            (20,   15,   300,    60,     240),
            (15.6, 23.9, 372.84, 75.568, 300)
        ])
    def test_calculer_paie_employe(var1,var2, expected_1, expected_2, expected_3):
        liste_paie = calculer_paie_employe(var1,var2)
>       assert liste_paie[2] == expected_1 and liste_paie[3] == expected_2 and liste_paie[4] == expected_3
E       assert (372.84 == 372.84 and 74.568 == 75.568)

pytestparm.py:19: AssertionError
========================================= 1 failed, 2 passed in 0.04 seconds ==========================================

Note that I’ve changed the code to use the return value, since the assignment to liste_paie in calculer_paie_employe doesn’t change the global variable (because you’re missing the global keyword – but using the return value is better practice anyways…)

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading