Size: a a a

testing_in_python

2019 January 31

СС

Сказочный Сникерс in testing_in_python
@pytest.fixture(scope=‘some_scope’)
def my_fixture(request):
    docker = docker.run()
    # smth doing with docker
    failed_tests = request.session.testsfailed
    yield docker
    if request.session.testsfailed > failed_tests:
        print(docker.info)
        # smth doing after test ends
источник

СС

Сказочный Сникерс in testing_in_python
кстати я видел решение поудачнее чем request.session.testsfailed, но уже не помню кто и где его показывал
источник

IS

Idi Suda in testing_in_python
Подобное?

def pytest_runtest_makereport(item, call):
   outcome = yield
   rep = outcome.get_result()
   setattr(item, "rep_" + rep.when, rep)
   return rep
if request.node.rep_call.failed: bla bla bla
источник

СС

Сказочный Сникерс in testing_in_python
не, как то еще на уровне фикстур
источник

СС

Сказочный Сникерс in testing_in_python
хотя я вдоль и поперек request поиследовал лучше не нашел варианта
источник

C

Chuprina Artem in testing_in_python
Сказочный Сникерс
@pytest.fixture(scope=‘some_scope’)
def my_fixture(request):
    docker = docker.run()
    # smth doing with docker
    failed_tests = request.session.testsfailed
    yield docker
    if request.session.testsfailed > failed_tests:
        print(docker.info)
        # smth doing after test ends
спасибо большое, попробую сейчас
источник

A

Alex in testing_in_python
Сказочный Сникерс
кстати я видел решение поудачнее чем request.session.testsfailed, но уже не помню кто и где его показывал
источник

СС

Сказочный Сникерс in testing_in_python
ну этот вариант как выше, где то видел без хука
источник
2019 February 01

N

Nikita in testing_in_python
Всем привет. Нужно сделать тест разных уровней доступа пользователей, я хотел бы сделать его аккуратно, без кучи кода, но не до конца понимаю как.
К примеру. Есть 10 типов юзеров и 10 страниц, первый имеет доступ только к первой странице, второй к двум и так далее. Есть идея сделать для каждого юзера класс, где прописать его доступы (где от самого сильного юзера наследование к слабому). Но как потом определять в тесте есть ли у юзера права и на какие страницы запускать тест. Не хочеться делать перебор ифом. я бедный джун так что ссылки на мануалы в ответе приветствуются) буду очень благодарен
источник

EB

Evgenii B in testing_in_python
Если твои тесты поделены на страницы, то ты можешь параметризировать тесты на тех пользователей , которые имеют доступ,и добавить 1-2 кейса с юзером, где тест не даёт доступа и пометит его как xfail
источник

N

Nikita in testing_in_python
Evgenii B
Если твои тесты поделены на страницы, то ты можешь параметризировать тесты на тех пользователей , которые имеют доступ,и добавить 1-2 кейса с юзером, где тест не даёт доступа и пометит его как xfail
Спасибо, а не подскажете, какая библиотека лучшая для запуска тестов с параметрами?
источник

EB

Evgenii B in testing_in_python
Pytest
источник

EB

Evgenii B in testing_in_python
щас будет тупой вопрос по pytest

Что имеем :
N девайсов, подключенных к PC
Y тестов
M параметров на тест

Что хочется сделать:
передавать cli аргументом id девайса. если такой есть в конфиге — выполняем тесты только на этом девайсе. Если девайс не передали — то тесты выполняются на всем пуле девайсов, т.е. фактически переданный девайс работает как фильтр.

В чем проблема:
в function-scope фикстуре у меня просто такой псевдокод:

@pytest.fixture(scope='function')
def driver_setup(capabilities_fixture)
   driver = Remote(capabilities=capabilities_fixture)
   yield driver
   driver.close()

до вызова func-scope фикстуры на всю сессию хочется параметризовать тест, т.е. до

@pytest.mark.parametrize('a, b', params=[('evgen', 'pelmen')]
def test_login(a, b):
   assert a != b
уже должно быть напараметризовано по всем девайсам
pytest позволяет указать 2 строчки с parametrize, тогда все сочетания будут перемножены, но как в таком случае получить данные для параметризации, которые получаются с командной строчки?
источник

EB

Evgenii B in testing_in_python
попробую в pytest_generate_tests как раз нагородить уже сформированныe capabilities и через

```
metafunc.parametrize(caps, [cabability1, capability2]) передавать в func-scope фикстуру , которую в свою очередь явно в тесте укажу
источник

СС

Сказочный Сникерс in testing_in_python
Evgenii B
попробую в pytest_generate_tests как раз нагородить уже сформированныe capabilities и через

```
metafunc.parametrize(caps, [cabability1, capability2]) передавать в func-scope фикстуру , которую в свою очередь явно в тесте укажу
по другому параметризовать из коммандлайна никак
источник

СС

Сказочный Сникерс in testing_in_python
так что норм
источник

EB

Evgenii B in testing_in_python
пока не сработало и получается срань :/
источник

EB

Evgenii B in testing_in_python
как вы вообще в params передаете что-то динамичное и появляющееся из другой фикстуры?
источник

СС

Сказочный Сникерс in testing_in_python
def pytest_generate_tests(metafunc):
   if ‘request_modificator' in metafunc.fixturenames:
       modificators = metafunc.config.option.modificators
       metafunc.parametrize("request_modificator", modificators)
источник

EB

Evgenii B in testing_in_python
request_modificator ты потом передаешь как фикстуру в другую фикстуру, так?
источник