Как я могу передать функцию, которая принимает параметр из аргументов командной строки в pytest?

#python #pytest

Вопрос:

Как я могу передать функцию, которая принимает параметр из аргументов командной строки в приборе параметризации pytest? Я делаю это, так как в зависимости от отдела я получаю соответствующие тесты из файла yaml, который я хочу передать для параметризации.

test_run.py

 def getTests(dept):        
    for dept_test in dept_test_info[dept]["test"]:        
        allowed_tests.append(dept_test)     
return allowed_tests

@pytest.mark.parametrize("test",getTests(dept))
 

Но я бы хотел, чтобы dept выступал в качестве аргумента командной строки при запуске pytest.

python pytest test_run.py —dept=»anydept»

Комментарии:

1. Даже если бы ты мог, ты не должен

2. О, есть ли какой-нибудь другой способ добиться того же самого? Мое имя отдела используется в качестве аргумента командной строки. и я хотел бы выбрать тесты на основе названия отдела.

3. тесты должны быть детерминированными. вы не должны передавать какие-либо параметры через командную строку. если вы хотите запустить yaml в зависимости от отдела, жестко закодируйте сопоставление или сделайте так, чтобы оно могло динамически определять имя файла для загрузки

4. Извините, я не расслышал последнюю часть вашего комментария.

Ответ №1:

На этот вопрос есть два ответа:

  1. Вы можете использовать переменные среды для передачи параметров в тестовый код.
  2. Тебе вообще не следует этого делать. В идеале тесты не должны зависеть от изменения значений, если только их не создает сам тестовый код (использование random() или аналогичного допустимо, но не случайные параметры, передаваемые пользователем тестирования). Вместо этого пусть ваш тестовый код содержит все отделы, которые вы хотите протестировать:
 def getTests():   
    test_departments = ["accounting", "hr" "research and design", "engineering"]    
    for dept in my_departments: 
        for dept_test in dept_test_info[dept]["test"]:        
            allowed_tests.append(dept_test)     
return allowed_tests

@pytest.mark.parametrize("test",getTests(dept))