PyTest параметризация светильников? Как разбить большую тестовую функцию на несколько - PullRequest
1 голос
/ 07 апреля 2020

Итак, у меня есть этот код:

import create_account2
import functions as f

#Import create_account2
@pytest.fixture(scope="module", autouse=True)
def create_account():
    create = create_account2.hook
    return create

@pytest.mark.usertest
class CreateAccountLoginCUpdateDetailsAndVerify

    @pytest.mark.parametrize('country', ['US', 'UK', "CA"])
    def test_CreateAccountUpdateDetailsAndVerify(self, create_account, country):

        ##Create account
        data = create_account(country)

        ##Login with account
        f.go_to_site(country)
        f.user_login(data['Mail'], data['Password'])
        assert "buttonLogOut" in f.get_driver().page_source, "No logout button so login failed"

        ##Get the original object, before updates..
        OriginalCustomerObject = f.GetDetails(data)

        f.update_details(data)  

        UpdatedCustomerObject = f.GetDetails(data)

        ##Compare objects
        f.CompareData(OriginalCustomerObject, UpdatedCustomerObject)

        ##Quit
        f.quit()    

Так что он создает учетную запись на веб-сайте США / Великобритании / CA с Selenium, получает объект customer из API, обновляет данные клиента ( Адрес, телефон и т. д. c) через Selenium, затем извлеките другой объект клиента и сравните исходные и обновленные объекты клиента, чтобы убедиться, что обновление данных пользователя через сайт действительно работает

Так что все в порядке. Проблема в том, что мне пришлось поместить создание учетной записи, обновление учетной записи и проверку двух объектов в одном тесте. Параметризация функции с помощью страны = [США, Великобритания, Калифорния] кажется хорошей идеей, поскольку мне не нужно дублировать код. Но я не могу использовать прибор? Не похоже, что вы можете параметризовать приборы таким образом?

Так что в идеале создание учетной записи, обновление учетной записи и проверка того, что два объекта различаются, было бы тремя различными тестами? Вопрос только в том, как правильно передать данные. По моему пониманию PyTest для начинающих, это должно быть сделано с приборами, но в этом случае это, похоже, не работает.

Так мне лучше провести три теста? TestUS, TestCA, TestUK?

1 Ответ

1 голос
/ 07 апреля 2020

Приношу свои извинения, если я неправильно понял ваш вопрос.

Насколько я понимаю, вы не можете передать значение для приборов Pytest, как обычная функция. С учетом вышесказанного вы можете использовать шаблон фабрики приспособлений pytest для достижения желаемой реализации.

https://docs.pytest.org/en/latest/fixture.html#factories -как-светильники

import pytest

@pytest.fixture
def create_account():
    def _create_account(country):
        return country

    return _create_account


class TestCreateAccountLoginCUpdateDetailsAndVerify:
    @pytest.mark.parametrize('country', ['US', 'UK', 'CA'])
    def test_create_account_update_details_and_verify(self, create_account, country):
        data = create_account(country)
        print(data)

# output
================================================== 3 passed in 0.01s ==================================================
collected 3 items
.US
.UK
.CA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...