Есть определенный набор тестов, объединенных в сьют.
Идея: запускать одни и те же тесты, но используя разный прекондишн и посткондишн - т.е. логин и логаут под разными юзерами
Генерация сьюта:
import unittest
import pytest
from adminzone_tests.Clients import TestClients
def collect_suite():
suite = unittest.TestSuite()
suite.addTest(TestClients)
return suite
@pytest.mark.usefixtures('admin_session')
def run():
unittest.TextTestRunner(verbosity=2).run(collect_suite())
@pytest.mark.usefixtures('client_session')
def run():
unittest.TextTestRunner(verbosity=2).run(collect_suite())
conftest.py файл:
import pytest
from base.Common import Common
from base.Users import Users
@pytest.fixture(scope='session')
def admin_session(request):
Users.users('admin')
def admin_session_teardown():
Common.logout()
request.addfinalizer(admin_session_teardown)
@pytest.fixture(scope='session')
def client_session(request):
Users.users('client')
def client_session_teardown():
Common.logout()
request.addfinalizer(client_session_teardown)
Если у фикстуры нет параметра autouse=True, то она не применяется для метода run()
Как можно реализовать запуск одного сьюта с разными логинами?
сделал немного по другому, через агрументы командной строки
В принципе, получилось как и хотел: выполняет suite под одним пользователем, потом под другим, в параллели в 4 потока прекрасно отработало
conftest.py
def pytest_addoption(parser):
parser.addoption('--users', action='append', default=['user1'])
def pytest_generate_tests(metafunc):
if 'users' in metafunc.fixturenames:
us = set(metafunc.config.option.users)
if not us:
us = ['user1']
elif 'all' in us:
us = ['user2', 'user1']
else:
us = list(us)
metafunc.parametrize('users', us, scope='session')
@pytest.yield_fixture(scope='session', autouse=True)
def define_users(request, users):
# execute login as user
.........
def teardown():
# execute logout
........
request.addfinalizer(teardown)