There is a set of UI tests in one class:
class TestMainPage(object): login = 'login' password = 'password'
def test_open_site(self, browser, url):
"""Opening browser and go to website"""
browser.go_to_site(url)
browser.check_open_auth_page()
def test_authorisation(self, browser):
"""Аuthorization on the website"""
browser.authorisation(login=self.login, password=self.password)
...
How do I run this class with different parameters for one test session in turn? Parameterization of the function is not suitable, since this test will be performed independently and only after that it will move on to the next test
I found this solution:
my_list = [1,2,3]
@pytest.fixture(scope="session", params=my_list)
def my_params(request):
return request.param
class Test_suite:
def test_1(self, my_params):
assert 1==1
def test_2(self, my_params, ):
assert 1 == 1
def test_3(self, my_params, ):
assert 1 == 1
It is executed alternately, which is what I need:
test.py::Test_suite::test_1[1]
test.py::Test_suite::test_2[1]
test.py::Test_suite::test_3[1]
test.py::Test_suite::test_1[2]
test.py::Test_suite::test_2[2]
test.py::Test_suite::test_1[3]
test.py::Test_suite::test_2[3]
test.py::Test_suite::test_3[3]
But when the second parameter is added, chaos begins(actual result):
test.py::Test_suite::test_1[1] PASSED
test.py::Test_suite::test_2[1-1] PASSED
test.py::Test_suite::test_3[1-1] PASSED
test.py::Test_suite::test_2[2-1] PASSED
test.py::Test_suite::test_3[2-1] PASSED
test.py::Test_suite::test_1[2] PASSED
test.py::Test_suite::test_2[2-2] PASSED
test.py::Test_suite::test_3[2-2] PASSED
test.py::Test_suite::test_2[1-2] PASSED
test.py::Test_suite::test_3[1-2] PASSED
test.py::Test_suite::test_2[3-2] PASSED
test.py::Test_suite::test_3[3-2] PASSED
test.py::Test_suite::test_2[3-1] PASSED
test.py::Test_suite::test_3[3-1] PASSED
test.py::Test_suite::test_1[3] PASSED
test.py::Test_suite::test_2[3-3] PASSED
...
I also need a conclusion in order (expected result):
test.py::Test_suite::test_1[1] PASSED
test.py::Test_suite::test_2[1-1] PASSED
test.py::Test_suite::test_3[1-1] PASSED
test.py::Test_suite::test_2[1-2] PASSED
test.py::Test_suite::test_3[1-2] PASSED
test.py::Test_suite::test_2[1-3] PASSED
test.py::Test_suite::test_3[1-3] PASSED
test.py::Test_suite::test_2[1-4] PASSED
test.py::Test_suite::test_3[1-4] PASSED
test.py::Test_suite::test_2[1-5] PASSED
test.py::Test_suite::test_3[1-5] PASSED
test.py::Test_suite::test_1[2] PASSED
test.py::Test_suite::test_2[2-1] PASSED
test.py::Test_suite::test_3[2-1] PASSED
And further. How to implement it?
Used script with two variables:
my_list = [1,2,3]
my_list_two = [1,2,3,4,5]
@pytest.fixture(scope="session", params=my_list)
def my_params(request):
return request.param
@pytest.fixture(scope="session", params=my_list_two)
def my_params_two(request):
return request.param
class Test_suite:
def test_1(self, my_params):
assert 1==1
def test_2(self, my_params, my_params_two):
assert 1 == 1
def test_3(self, my_params, my_params_two):
assert 1 == 1