gpt4 book ai didi

python - 使用两个不同的 pytest 装置运行测试

转载 作者:太空狗 更新时间:2023-10-30 02:16:03 25 4
gpt4 key购买 nike

我目前正在使用 pytest 和 Selenium 测试网络应用程序。所有页面都有“Home”和“Log Out”链接,所以我写了一个这样的测试:

def test_can_log_out(page):
link = page.find_element_by_partial_link_text('Log Out')
link.click()
assert 'YOU HAVE SUCCESSFULLY LOGGED OFF!' in starting_page.page_source

现在对于 page fixture ,我正在模拟登录过程。我把它分成几个固定装置:

  1. 获取 Selenium WebDriver 实例

    @pytest.fixture()
    def browser(request, data, headless):
    b = webdriver.Firefox(executable_path=DRIVERS_PATH + '/geckodriver')
    yield b
    b.quit()
  2. 登录网络应用

    @pytest.fixture()
    def login(browser):
    browser.get('http://example.com/login)
    user_name = browser.find_element_by_name('user_name')
    user_name.send_keys('codeapprentice')
    password = browser.find_element_by_name('password')
    password.send_keys('password1234')
    submit = browser.find_element_by_name('submit')
    submit.click()
    return browser
  3. 访问页面

    @pytest.fixture()
    def page(login):
    link = login.find_element_by_partial_link_text('Sub Page A')
    link.click()
    return login

这非常有效,我可以测试从此页面注销。现在我的问题是我有另一个可以从“页面 A”访问的页面:

@pytest.fixture()
def subpage(page):
button = login.find_element_name('button')
button.click()
return page

现在我也想用这个 fixture 运行完全相同的测试。当然,我可以复制/粘贴并进行一些更改:

def test_can_log_out_subpage(subpage):
link = page.find_element_by_partial_link_text('Log Out')
link.click()
assert 'YOU HAVE SUCCESSFULLY LOGGED OFF!' in starting_page.page_source

然而,这违反了DRY原则。如何在不重复的情况下重用 test_can_log_out()

最佳答案

在这里,您可以传递您的fixtures,它为您的页面和子页面提供测试参数,这些参数将作为测试的第一步动态调用。如下所示。

当固定装置与测试位于同一页面上时:

测试文件.py

import pytest

class TestABC():
@pytest.fixture
def browser(self,request):
print "browser"

@pytest.fixture
def login(self,request,browser):
print "login"

@pytest.fixture
def subpage1(self,request,login):
print "subpage1"

@pytest.fixture
def subpage2(self, request, login):
print "subpage2"

@pytest.fixture
def subpage3(self, request, login):
print "subpage3"

@pytest.mark.parametrize('sub_page',
['subpage1', 'subpage2', 'subpage3'])
def test_can_log_out_subpage(self,sub_page,request):
request.getfixturevalue(sub_page) # with pytest>=3.0.0 use getfixturevalue instead of getfuncargvalue
print "test output of ", sub_page

输出:

browser
login
subpage1
test output of subpage1
browser
login
subpage2
test output of subpage2
browser
login
subpage3
test output of subpage3

当 fixtures 在 conftest.py 时

import pytest


@pytest.fixture
def browser(request):
print "browser"

@pytest.fixture
def login(request):
print "login"

@pytest.fixture
def subpage1(request,login):
print "subpage1"

@pytest.fixture
def subpage2(request, login):
print "subpage2"

@pytest.fixture
def subpage3(request, login):
print "subpage3"

测试文件.py

import pytest

class TestABC():

@pytest.mark.parametrize('sub_page',
['subpage1', 'subpage2', 'subpage3'])
def test_can_log_out_subpage(self,sub_page,request):
request.getfixturevalue(sub_page) # with pytest>=3.0.0 use getfixturevalue instead of getfuncargvalue
print "test output of ", sub_page

在这里,你也会得到与上面相同的输出。

希望对你有所帮助。

关于python - 使用两个不同的 pytest 装置运行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46368468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com