pytest系列教程——12、用例执行失败后重跑

用例执行一次失败后,可能是由于网络、设备、等等其他因素造成,并不一定就是程序的bug。因此我们需要多执行几次,再好定性它为bug。第三方插件,pytest-rerunfailures就提供了失败重跑的能力

安装

pip install pytest-rerunfailures

使用

  • 命令行参数:

--reruns n(重新运行次数),--reruns-delay m(等待运行秒数)
例如:

pytest pytest-demo.py --reruns 2 --reruns-delay 3

pytest-demo.py测试文件中的用例,如果执行失败,则会在3秒后再运行。最多再运行2次、

  • 装饰器使用:

@pytest.mark.flaky(reruns=n , reruns_delay=m)

效果同上

使用案例

判断随机生成的数字恰好是6:

import pytest
from random import randint


def test01():
    assert randint(1, 10) == 6


if __name__ == '__main__':
    pytest.main(['reRun.py', '-v','--reruns=3'])

执行结果:

collecting ... collected 1 item

reRun.py::test01 RERUN                                                   [100%]
reRun.py::test01 RERUN                                                   [100%]
reRun.py::test01 RERUN                                                   [100%]
reRun.py::test01 FAILED                                                  [100%]

================================== FAILURES ===================================
___________________________________ test01 ____________________________________

def test01():
>       assert randint(1, 10) == 6
E       assert 8 == 6
E         +8
E         -6

reRun.py:6: AssertionError
=========================== short test summary info ===========================
FAILED reRun.py::test01 - assert 8 == 6
========================= 1 failed, 3 rerun in 0.31s ==========================

***Repl Closed***

第一次执行后,执行失败,又重试了3次。实际总共执行了4次。
上述效果等同于:

import pytest
from random import randint


@pytest.mark.flaky(reruns=3)
def test01():
    assert randint(1, 10) == 6


if __name__ == '__main__':
    pytest.main(['reRun.py', '-v'])

用例执行的时候,对应的setup和fixture都会被执行:

import pytest
from random import randint


@pytest.fixture
def step1():
    print("【+】fixture function")


@pytest.mark.flaky(reruns=3)
@pytest.mark.usefixtures("step1")
def test01():
    assert randint(1, 10) == 6


if __name__ == '__main__':
    pytest.main(['reRun.py', '-s'])

执行结果

collected 1 item

reRun.py 【+】fixture function
R【+】fixture function
R【+】fixture function
R【+】fixture function
.

========================= 1 passed, 3 rerun in 0.31s ==========================

***Repl Closed***

注意

  • 装饰器的优先级大于命令行参数,如果同时设置了rerun,则优先使用装饰器的

顺便一提,欢迎加入软件测试交流Q群【209092584】。如果有任何问题,你可以在这里留言

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
作为AI语言模型,我无法在计算机上执行任何操作,因此无法提供pytest allure用例执行失败后截图。但是,以下是如何在使用pytest allure时自动截取用例执行失败截图的示例代码: ```python import allure import pytest from selenium import webdriver @pytest.fixture(scope="function") def browser(): driver = webdriver.Chrome() yield driver driver.quit() @allure.step("Open website '{url}'") def open_website(browser, url): browser.get(url) @allure.step("Click on element '{locator}'") def click_element(browser, locator): element = browser.find_element(*locator) element.click() @allure.step("Verify element '{locator}' is present") def verify_element_present(browser, locator): assert browser.find_element(*locator).is_displayed() @allure.step("Enter text '{text}' into element '{locator}'") def enter_text(browser, locator, text): element = browser.find_element(*locator) element.send_keys(text) @allure.step("Verify text '{text}' is present in element '{locator}'") def verify_text_present(browser, locator, text): assert text in browser.find_element(*locator).text def test_login_failure(browser): with allure.step("Given the user is on the login page"): open_website(browser, "https://www.example.com/login") with allure.step("When the user enters invalid credentials"): enter_text(browser, (By.ID, "username"), "invalid_username") enter_text(browser, (By.ID, "password"), "invalid_password") click_element(browser, (By.NAME, "login_button")) with allure.step("Then an error message is displayed"): verify_element_present(browser, (By.CSS_SELECTOR, ".error_message")) verify_text_present(browser, (By.CSS_SELECTOR, ".error_message"), "Invalid username or password") # Take screenshot on failure allure.attach( browser.get_screenshot_as_png(), name="Screenshot", attachment_type=allure.attachment_type.PNG, ) ``` 在测试用例失败时,pytest allure将自动捕获失败的截图并将其添加到测试报告中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

软件测试技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值