
小伙伴们在做自动化的时候是不是也想:写一个自动化测试脚本,跑一次没问题,但想确认它是不是真的稳定,于是手动反复执行好几次?或者你在做界面流程测试时,希望不关闭浏览器,连续运行同一个脚本多次,看看有没有随机性失败
如果你也有这样的烦恼,那就来对了。
今天给大家介绍一个超级实用的 Pytest 插件——pytest-repeat,它可以只用一行代码,帮你自动重复执行测试用例,彻底告别重复劳动~
pytest-repeat是pytest的一个装饰器。只要在测试方法上加上这个标记,pytest 就会自动帮你重复执行这个测试方法,它的常用语法是这样的:@pytest.mark.repeat(次数)
在自动化测试中这对于验证脚本的稳定性、重现偶发性 Bug、或者模拟用户多次执行某个操作非常有用
我们使用 pip 安装pytest-repeat插件
pip install pytest-repeat
只要在想要重复执行的测试方法上加上 @pytest.mark.repeat(次数) 装饰器即可,其他原有的代码完全不需用改动
import pytest
@pytest.mark.repeat(3) # 重复执行3次
def test_xxx(self):
```原代码保持不变``
是不是很简单?接下来带大家进行一个实战项目!
这是我们「懒人代码包」中的一个实战项目:模拟用户登录商城,搜索购买 iPhone,并重复执行此操作两次
# @Functiong: 购物脚本
import allure
import pytest
from tools.get_driver import GetDriver
from tools.read_json import read_json
from page.shopping.login import PageLogin
from page.shopping.purchase import PagePurchase
@allure.feature('购物自动化脚本类')
class TestPurchase:
# 初始化
def setup_class(self):
# 初始化数据
self.data = read_json("purchase.json")
# 初始化驱动
self.driver = GetDriver().get_driver(self.data[0])
# 调用登录方法
PageLogin(self.driver).page_login(self.data[1], self.data[2])
# 关闭driver
def teardown_class(self):
self.driver.quit()
# 购物脚本类
@pytest.mark.repeat(2)
@allure.title('购物自动化方法')
def test_purchase(self):
PagePurchase(self.driver).page_purchase(self.data[3])
try:
assert PagePurchase(self.driver).page_pur_get_info() == self.data[4]
except Exception as e:
print("错误信息为:", e)
raise
# 回到首页,方便第2次脚本运行
self.driver.get(self.data[5])
if __name__ == '__main__':
TestPurchase().test_purchase()
解析:
@pytest.mark.repeat(2):表示重复test_purchase这个方法(函数)2次self.driver.get(self.data[5]):新增“回到首页”代码。为了让脚本在第二次执行时,和第一次一样从商品首页开始,避免因为找不到商品首页的元素而报错
(在完成购买iPhone的流程后,页面会停留在“订单”页面而不是“商品首页”,如果直接开始第二次执行脚本,会因为找不到首页的搜索框而报错)
pytest-repeat() 是一个轻量但很用的插件。它可以在不修改我们原有代码的基础上,添加一行装饰器代码,就可以实现重复运行脚本的目的。小伙伴们也赶紧试试吧~