(python) 使用@parameterized lib 声明驱动程序?
(python) Using @parameterized lib with declaring a driver?
我正在编写一个参数化的 UI-tests 来创建一个新用户。以前我是用 @pytest.mark.parametrize()
做的,但现在我决定尝试 @parameterized 。
我的代码是什么样的:
class TestUsers:
@pytest.mark.usefixtures("open_users_page")
@pytest.mark.usefixtures("login")
@parameterized.expand([
('username', 'password', 'password_confirm', 'email'), # test id
...
和其他参数。
之后:
@pytest.mark.usefixtures("fill_create_user_form") # where i fill non-parameterized fields
def test_user(self, driver, name, password, password_confirm, email):
users_page = UsersPage(driver) # where driver is a geckodriver
users_page.set_name(name)
users_page.set_password(password)
users_page.set_password_conf(passwordConf)
users_page.set_email(email)
users_page.click_create_new_user_button()
在 运行 之后我得到错误:TypeError: test_user() missing 1 required positional argument: 'email'
我们尝试这样重写它:
def test_user(self, *args, **kwargs)
print(args, kwargs)
users_page = UsersPage(driver)
-- 测试打印 args 并进入下一步,然后再进入下一步并使用驱动程序。
我必须指出这个测试有效:
def test_empty_fields(self, driver):
"""Try to create a new user with empty input fields - an errors should appear"""
users_page = UsersPage(driver)
users_page.click_add_user_button()
users_page.click_create_new_user_button()
errors = users_page.find_item_errors_on_page()
errors_count = len(errors)
assert errors_count == 9
所以问题是:在这种情况下如何使用self
和driver
?
或者我应该忘记测试 class 和 @parameterized 并使用旧的 @pytest.mark.parametrize
? :)
好吧,经过几天的调试,我们了解到,当我在测试 class 之前有几个固定装置时,然后在 class 本身中有几个固定装置,一些他们 returns 我 'driver',然后我有这个代码:
@parameterized.expand([
("short password", 'username', 'password', 'password', 'email@email.com', '',
pass_len_errs),
...)
- parameterized 可能认为第一个参数(即 "short password" - 测试的名称) - 是驱动程序本身。所以这可能是争论的焦点。
我正在编写一个参数化的 UI-tests 来创建一个新用户。以前我是用 @pytest.mark.parametrize()
做的,但现在我决定尝试 @parameterized 。
我的代码是什么样的:
class TestUsers:
@pytest.mark.usefixtures("open_users_page")
@pytest.mark.usefixtures("login")
@parameterized.expand([
('username', 'password', 'password_confirm', 'email'), # test id
... 和其他参数。 之后:
@pytest.mark.usefixtures("fill_create_user_form") # where i fill non-parameterized fields
def test_user(self, driver, name, password, password_confirm, email):
users_page = UsersPage(driver) # where driver is a geckodriver
users_page.set_name(name)
users_page.set_password(password)
users_page.set_password_conf(passwordConf)
users_page.set_email(email)
users_page.click_create_new_user_button()
在 运行 之后我得到错误:TypeError: test_user() missing 1 required positional argument: 'email'
我们尝试这样重写它:
def test_user(self, *args, **kwargs)
print(args, kwargs)
users_page = UsersPage(driver)
-- 测试打印 args 并进入下一步,然后再进入下一步并使用驱动程序。 我必须指出这个测试有效:
def test_empty_fields(self, driver):
"""Try to create a new user with empty input fields - an errors should appear"""
users_page = UsersPage(driver)
users_page.click_add_user_button()
users_page.click_create_new_user_button()
errors = users_page.find_item_errors_on_page()
errors_count = len(errors)
assert errors_count == 9
所以问题是:在这种情况下如何使用self
和driver
?
或者我应该忘记测试 class 和 @parameterized 并使用旧的 @pytest.mark.parametrize
? :)
好吧,经过几天的调试,我们了解到,当我在测试 class 之前有几个固定装置时,然后在 class 本身中有几个固定装置,一些他们 returns 我 'driver',然后我有这个代码:
@parameterized.expand([
("short password", 'username', 'password', 'password', 'email@email.com', '',
pass_len_errs),
...)
- parameterized 可能认为第一个参数(即 "short password" - 测试的名称) - 是驱动程序本身。所以这可能是争论的焦点。