parametrize and running a single test in pytest
You can specify the tests to run by using the -k
flag for filtering tests that match a string expression. When using parametrize, pytest names each test case with the following convention:
test_name['-' separated test inputs]
for example
test_name[First_test_value-Second_test_value-N_test_value]
Selecting an specific test to run is a matter of putting all the above together for example
pytest -k 'my_test[value_1-value_2]'
or
pytest -k my_test\[value_1-value_2\]
You need to escape the square brackets.
I can think of two possible solutions.
- Use the name of the test you want to run, and execute it
- Use the
-k
parameter to run tests that match a given substring expression
Solution 1
Use the following command to see the name of the tests without running them:
pytest --collect-only -q # use --co if pytest 5.3.0+ instead of --collect-only
Use the name of the test you want to run, let's say the test is called test_file_name.py::test_name[value1-value2-value3]
, so use the following command to run it:
pytest test_file_name.py::test_name[value1-value2-value3]
Note: Be sure to use quotes if there are spaces in the identifier.
Solution 2
This solution has been provided by Enrique Saez, and it basically consists of passing part of the name of the test:
pytest -k -value3]