Как запустить только определенный каталог с помощью tox в pytest?

#python #json #pytest #tox

Вопрос:

Это структура тестовой платформы

test_pytest.py находится в каталоге тестов и содержит автоматизированный код (ниже приведены методы) для тестирования рабочего процесса машинного обучения.

  def test_workflow(caplog,test_name,test_params,test_step):,
 def test_upload_and_import_data(input_params, output_params,):,
 def test_feature_eng(input_params, output_params):,
 def test_auto_training(input_params, output_params, problem_type):,
 def test_get_prediction(input_params, output_params):
 def test_retraining(response):
 def delete_ai_service():
 

Каталог QA_test находится внутри test_data->тесты.
Он содержит файлы json, предоставляющие входные данные и ожидаемые выходные данные для указанных выше методов для различных наборов данных.
В качестве примера,

{

 "Car_prices dataset" : [
    {
        "dataImport": {
            "input": {
                "test_filename": "carprices.csv",
                "file_location": "AWS"
            },
            "expectedOutput": {
                "result" : "success"
            }
        }
    },
    {
        "featureEngineering": {
            "input": {
            "column": "MSRP",
            "waitTime": 60,
            "problemType" : "auto"
    
            },
            "expectedOutput": {
    "result" : "Completed"
            }
        }
    },
    '
    '
    '
 

]

}

Это существующий файл tox.

 [tox]
   envlist = py38

[testenv]
deps =
   pytest
   pytest-html
   pytest-sugar
   pytest-logger
   allure-pytest
   pytest-xdist
   pytest_steps
   datetime
   oauth2client
   gspread
   aiclub
commands =
   pytest -s -v -k _workflow  --html=test_report.html --alluredir=allure-results/ -n auto --dist=loadfile
   allure serve allure-results
 

В настоящее время, когда я набираю tox в терминале, он запускает весь набор тестов, выполняющий весь рабочий процесс для всех наборов данных.
Как я могу запустить рабочий процесс тестирования только для тестовых наборов(файлов json) в каталоге QA_test?

Ответ №1:

Вам нужно использовать posargs функцию tox — это позволяет вам указывать конкретную команду всякий раз, когда вы хотите.

Вы используете pytest его в качестве тестируемого. Этот -k параметр определяет набор тестов, которые вы хотите выполнить.

Вместо того , чтобы жестко кодировать его _workflow , вам нужно сделать что-то вроде

 commands = 
     pytest -s -v {posargs:-k _workflow} ...
 

Затем вы можете запустить один тест с помощью

 tox -- -k singleTest
 

Если вы просто запускаете tox , используется функция по умолчанию ( -k _workflow ).

Все, что стоит за двойным тире, передается в команду — в данном случае в pytest .

Эта tox функция posargs задокументирована по адресу https://tox.readthedocs.io/en/latest/example/general.html

Для pytest того, чтобы взглянуть на https://docs.pytest.org/en/6.2.x/usage.html#specifying-tests-selecting-tests

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

1. tox.readthedocs.io/en/latest/…

2. ОШИБКА: Ошибка вызова для команды ‘D:QAtest-frameworkpython-client.toxpy38Scriptspytest. EXE’ -s -v -k QA_tests —html=test_report.html —alluredir=allure-результаты/ -n авто —dist=загрузочный файл (выход с кодом 5)

3. @J. G. когда я использовал «pytest-s-v {параметры:-k _workflow} —html=test_report.html —alluredir=привлекательные результаты/ -n auto —dist=загрузочный файл» и запуск «tox — -k QA_tests» в терминале выдал вышеуказанную ошибку .

4. @ShelomiPriskila К сожалению, я не вижу очевидной проблемы. Когда я сталкиваюсь с подобными проблемами, я стараюсь сделать команду как можно более простой, убедиться, что она работает, а затем добавить другие параметры обратно, один за другим. Может быть, начнем с commands = commands = pytest {posargs:-k _workflow} этого …

5. @J. G. Для команды «pytest {posargs:-k _workflow}» также она выдает ту же ошибку вызова