自动化测试——pytest本身及第三方模块介绍及使用

本文详细介绍了如何使用pytest进行自动化测试,包括pytest-html插件用于生成测试报告,pytest-rerunfailures插件实现失败重试,pytest-ordering控制测试顺序,以及pytest.mark.skipif和pytest.mark.xfail进行跳过和预期失败操作。此外,还展示了parametrize参数化测试的用法,演示了单个和多个参数的测试场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pytest-html 测试报告

安装:
 :pip3 install pytest-html
 
使⽤⽅式:
 1.命令⾏⽅式
 2.配置⽂件⾥
 
命令:
 --html=⽣成报告路径/报告名字.html
 --junitxml=⽣成报告路径/报告名字.xml
 
应⽤:
 命令⾏
 pytest --html=xx.html
 # 在当前⽬录⽣成xx.html⽂件
 pytest --html=./report/result.html
 # 当前⽬录会⾃动创建report⽂件夹,⽂件夹内⽣成result.html
 # 注意:等号两侧不能出现空格

pytest-rerunfailures 失败重试


安装:pip3 install pytest-rerunfailures

使⽤⽅式:
 命令⾏
 配置⽂件
命令:--reruns n (n:重试的次数 ) 

 注意:重试插件不能和setup_class⼀起使⽤,⾮第⼀个测试⽅法失败,会出现逻辑错误

↑↑↑ 以上两种配置文件参考 ↑↑↑:

[pytest] # command line
addopts = -s --html=./report/res.html --reruns 2 # search dir
testpaths = ./scripts
# search file
python_files = test_rerun_pro.py
# search class
python_classes = Test* # search functions
python_functions = test*

pytest-ordering 控制测试函数执⾏顺序:

安装: pip3 install pytest-ordering

使⽤:
 @pytest.mark.run(order=x)
 
 x:全为正数或全为负数,值越⼩,修饰的测试⽅法优先级越⾼
 x:正数和负数同时存在时,正数修饰的测试⽅法优先级⾼
 x:为0时,优先级最⾼
 x:为负数时,优先级低于未被修饰的测试⽅法
 x:为正数是,优先级⾼于未被修饰的测试⽅法

跳过测试方法:


@pytest.mark.skipif(condtion, reason) # 使⽤场景较少
 condtion:必填
 reson:必填
组合:
 1.条件为True+有原因 执⾏跳过
 2.条件为False+有原因 不执⾏跳过
 3.只有原因 也执⾏跳过
 4.⽆条件+⽆原因 也执⾏跳过
 5.只有条件 报error错误

执⾏预期失败操作:

@pytest.mark.xfail(conditon, reason) # 使⽤场景较少
condtion:必填
reson:必填

注意:预期失败⽅法会默认执⾏⼀次测试⽅法

组合:
1.条件为真+有原因 执⾏预期失败
2.条件为假+有原因 不执⾏预期失败
3.⽆条件 + 有原因 执⾏预期失败
4.⽆条件 + ⽆原因 执⾏预期失败
5.有条件 + ⽆原因 报error异常

预期失败执⾏结果:
1.测试⽅法本身断⾔通过,结果 xpassed
2.测试⽅法本身断⾔失败, 结果 xfailed

在这里插入图片描述
parametrize参数化:

# 单个参数
 @pytest.mark.parametrize("参数", [参数值1,参数值2,参数值3])
 结果:
 ⽅法会运⾏列表⻓度
代码
import pytest
class Test_001:
	# 遍历参数值列表,⽅法运⾏次数 = 列表⻓度
	@pytest.mark.parametrize("data", [1, 2, 3, 4])
	def test_001(self, data): # paramtrize参数名=测试⽅法参数名,名称必须⼀致
	"""判断列表中值 不等于 2"""
	print("\ndata:", data)
	assert data != 2
# 多个参数
@pytest.mark.parametrize("参数1, 参数2", [(参数1,参数2),(参数1,参数2)....])
代码:
 import pytest
 class Test_002:
 	# 多个参数在⼀个字符串中
	 # 测试⽅法参数位置可以调换
	 # parametrize中参数名 必须等于 测试⽅法参数名
	 @pytest.mark.parametrize("a,b,c", [(1, 2, 3), (3, 4, 5), (5, 6, 11)])
	 def test_002(self, a, b, c):
	 """两个数相加的和计算 a+b == c"""
	 print("\na:", a)
	 print("\nb:", b)
	 print("\nc:", c)
	 assert a + b == c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

坦桑尼亚奥杜威峡谷能人

感谢您的认可

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

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

打赏作者

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

抵扣说明:

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

余额充值