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.

  1. Use the name of the test you want to run, and execute it
  2. 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]