如何更准确地向SauceLabs报告Pytest Selenium传递和失败?

时间:2017-06-13 19:28:10

标签: python selenium pytest fixtures saucelabs

试图找到最优雅的方式来通知测试夹具测试失败。该测试夹具需要将测试结果报告给saucelabs,以便将其标记为通过或失败。我试图从这些示例中删除尽可能多的无关代码。

以下测试使用fixture 浏览器

def test_9(browser):
    browser.get(MY_CONSTANT)
    assert "My Page" in browser.title
    browser.find_element_by_css_selector('div > img.THX_IP')
    browser.find_element_by_link_text('Some text').click()
    ... etc

fixture 浏览器,目前已经硬编码以将测试标记为已通过:

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

    driver_type = request.config.getoption('driver')

    if driver_type == 'sauce':
        driver = webdriver.Remote(
            command_executor = 'MY_CREDENTIALS',
            desired_capabilities = caps)
    else:
        driver = webdriver.Chrome()
    driver.implicitly_wait(2)

    yield driver
    if driver_type == 'sauce':
        sauce_client.jobs.update_job(driver.session_id, passed = True)
    driver.quit()

我发现了一些解决方法,但我真的很想知道最好的方法。

1 个答案:

答案 0 :(得分:0)

我在conftest.py文件中有以下fixture,它处理所有传递/失败报告。我不确定它是“最好的方式”,但它肯定对我们有用。我们为每个编写的测试都包含了这个夹具。

这个装置还有很多,但是底部的这个部分很好地处理了报告。

def quit():
    try:
        if config.host == "saucelabs":
            if request.node.result_call.failed:
                driver_.execute_script("sauce:job-result=failed")
            elif request.node.result_call.passed:
                driver_.execute_script("sauce:job-result=passed")
    finally:
        driver_.quit()