Переменные Pytest: как их использовать без funcarg? - PullRequest
0 голосов
/ 23 октября 2019

Я хочу передать файл json для определения тестового стенда в pytest.

Мои тестовые случаи реализованы в классе unittest, и мне нужно использовать файл json, отправленный через pytest cli.

Я пыталсяиспользуйте переменную pytest для передачи json в pytest. Затем я хочу использовать JSON в качестве словаря в моих тестах.

Проще говоря, мой тест запускается с помощью этой команды

pytest -s --variables ../testbeds/testbed_SQA_252.json TC_1418.py

Я знаю, что unittest не можетпринимать внешние аргументы, но будет очень полезна техника для снятия этого ограничения.

CASE 1 - тест реализован как функции ---> OK

def test_variables(variables):
     print(variables)

inв этом случае выходной сигнал правильный, и json печатается в тесте CLI

CASE 2--, реализованном в виде класса Unittest ---> KO

class TC_1418(unittest.TestCase):
     def setUp(self, variables):
        print (variables)
        ....other functions

Iполучить следующую ошибку:

TypeError: setUp () отсутствует 1 обязательный позиционный аргумент: 'variable'

Any Idea?

1 Ответ

0 голосов
/ 23 октября 2019

Ваша проблема связана с смешиванием понятий из pytest (например, инъекция светильников типа variables) с понятиями unittest.TestCase. Хотя pytest поддерживает выполнение тестов, основанных на unittest, я боюсь, что внедрение приспособлений плагинов в методы тестирования не поддерживается .

Однако существует обходной путь, который использует преимущества прибороввводится в другие приборы и делает пользовательские приборы доступными в unittest.TestCase с помощью @pytest.mark.usefixtures decorator:

# TC_1418.py

import pytest
import unittest


@pytest.fixture(scope="class")
def variables_injector(request, variables):
    request.cls.variables = variables


@pytest.mark.usefixtures("variables_injector")
class Test1418(unittest.TestCase):
    def test_something(self):
        print(self.variables)

Обратите внимание, что имя класса начинается с Testчтобы следовать соглашениям по обнаружению тестов .

Если вы не хотите вдаваться в эту пародию, я предлагаю вам довольно полно принять Pytest и упростить свою жизнь с помощью простыхтестовые функции, которые вы уже обнаружили или правильно структурированные тестовые классы:

# TC_1418.py

class Test1418:
    def test_something(self, variables):
        print(variables)
...