Как передать параметр testcase в прибор pytest, который используется из одной функции? - PullRequest
0 голосов
/ 30 сентября 2019

если есть, я могу заменить 3 статические функции как pytest.fixture? так что я могу передать аргумент из тестового случая в фиксатор customer_preset, а затем в другой фиксатор setup_customer_name, setup_customer_address, setup_customer_number?

моя тестовая последовательность равна

1: run testcase, pass argument as list.
2: parse argument one by one and pass each argument to each function like `setup_customer_name`, `setup_customer_address`, `setup_customer_number`
3:return the query result from each function back to testcase

, и у меня есть следующий код

Я знаю, что есть другой способ, которым я могу просто передать аргумент из тестового примера и сделать setup_customer_name, setup_customer_address, setup_customer_number в качестве устройства, косвенного для устройства. но только на основе моего кода теперь я не могу этого сделать

import pytest
class TestCustomer:
    @pytest.mark.parametrize('customer_preset',
                             [dict(name='apple', addr='apple_address', number='apple_number'),
                              dict(name='google', addr='google_address', number='google_number'),
                              dict(name='amazon', addr='amazon_address', number='amazon_number')],
                              indirect=['customer_preset'])
    def test_customer(self, customer_preset):
        print(customer_preset)
        pass

class TestPreset:
    @pytest.fixture(scope="function")
    def customer_preset(self, request):
        """
        """
        name = self.setup_customer_name(request.param.get('name'))
        addr = self.setup_customer_address(request.get('addr'))
        number = self.setup_customer_number(request.get('number'))
        return name, addr, number

    def setup_customer_name(self, name):
        #do some pre set query number name
        return

    def setup_customer_address(self, address):
        #do some pre set addr
        return
    def setup_customer_number(self, number):
        #do some pre set number
        return

1 Ответ

0 голосов
/ 30 сентября 2019

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

Если это так, вы можете определитьфункции для прибора, как показано ниже.

Чтобы использовать значения в тесте, которые фактически определены в приборе, вы можете использовать параметр запроса.

Здесь в качестве области действия прибора используется функция, поэтому вы можете определить переменную как запрос.instance.variable_name, если область действия будет классом, то это должно быть request.cls.variable_name и, используя тот же синтаксис, вы можете получить доступ к переменной внутри теста.

Здесь, в функции я добавляю "!!!!!"к вашим фактическим данным. Вы можете изменить функцию согласно вашему требованию

import pytest

@pytest.fixture(scope='function')
def customer_preset(request):
    def setup_customer_name(name):
        # do some pre set query number name
        return name+" !!!!!"

    def setup_customer_address(address):
        # do some pre set addr
        return address+" !!!!!"

    def setup_customer_number(number):
        # do some pre set number
        return number+" !!!!!"

    print(request.getfixturevalue('customer_preset_data'))
    request.instance.name = setup_customer_name(request.getfixturevalue('customer_preset_data')['name'])
    request.instance.addr = setup_customer_address(request.getfixturevalue('customer_preset_data')['addr'])
    request.instance.number =setup_customer_number(request.getfixturevalue('customer_preset_data')['number'])




class TestCustomer:
    @pytest.mark.parametrize('customer_preset_data',
                             [dict(name='apple', addr='apple_address', number='apple_number'),
                              dict(name='google', addr='google_address', number='google_number'),
                              dict(name='amazon', addr='amazon_address', number='amazon_number')]
                              )
    @pytest.mark.usefixtures('customer_preset')
    def test_customer(self,customer_preset_data,request):
        print( request.instance.name)
        print( request.instance.addr)
        print( request.instance.number)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...