【问题标题】:How can I more accurately report Pytest Selenium passes and failures to SauceLabs?如何更准确地将 Pytest Selenium 通过和失败报告给 SauceLabs?
【发布时间】:2017-11-15 17:36:48
【问题描述】:

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

以下测试使用夹具浏览器

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

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

@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()

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

【问题讨论】:

    标签: python selenium pytest fixtures saucelabs


    【解决方案1】:

    我的 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()
    

    【讨论】:

    • 谢谢,我希望今天试试这个
    • 我想我错过了一些东西。 AttributeError: 'Function' 对象没有属性 'result_call'
    • 您还需要创建其他功能。我们有一个驱动程序函数,其中包含用于“远程”测试的 saucelabs 详细信息以及您可能会丢失的信息。将上面的代码包装在一个函数中(随便命名)。我进行了编辑以包含我们的函数名称。
    猜你喜欢
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多