一.使用pytest,默认的测试用例的规则以及基础应用
1.模块名字必须已test_开头或者_test结尾
2.测试类必须以Test开头,并且不能有init方法
3.测试方法必须以test开头
示例代码 test_001.py
python
import pytest
class TestCase:
def test_case(self):
print("执行测试用例")
二、pytest测试用例的运行方式
主函数模式:
运行所有:pytest.main()
运行指定的模块:pytest.main(['-vs',模块名.py])
运行指定目录:mytest.main(['-vs','目录路径'])
通过nodeid指定用例运行:nodeid由模块名,分隔符,类名,方法名,函数名组成
·类外的用例通过pytest.main(['-vs','模块路径::方法名'])
·类内的用例:pytest.main('-vs','模块路径::类名::方法名')
命令行模式:
·运行所有:pytest
·运行指定模块:pytest -vs 目录路径
·通过nodeid指定用例运行:nodeid由模块名,分隔符,类名,方法名,函数组成
·类外的用例:pytest -vs 模块名::方法名
·类内的用例:pytest -vs 模块路径::类名::方法名
pytest.ini配置文件模式
pytest.ini是pytest单元测试框架的核心配置文件
位置:必须放在项目的根目录
编码格式,必须使用ANSI格式,可用notepad++等工具修改、
作用:改变pytest默认的行为
运行的规则:主函数模式和命令行模式都会读取这个配置文件
配置文件实例:
python
[pytest]
#命令行参数,用空格分割
addopts = -vs
#测试用例文件,可以自己配置,...../testcase为上已成的testcase文件夹
testpaths = ../testcase
#配置测试搜索的模块文件名称
pytest_files = test*.py
#配置测试搜索的测试类名
pytest_classes = Test*
#配置测试搜索的测试函数名
pytest_funtions = test
以上为示例代码,用的时候需要把中文去掉,使用ANSI编码格式保存
参数详解:
·-s:输出调试信息,包括print打印的信息
·-v:显示更多详细的信息
·-n:支持多线程或者分布式运行测试用例
·主函数模式:pytest.main('-vs','模块名.py','-n=2')--->调用两个线程执行
命令行模式:pytest -vs 模块名.py -n 2
如果有5条用例用两个线程
线程一:1,3,5
线程二:2,4条
·--reruns:失败用例重跑
主函数模式:pytest.main(['-vs','模块名.py','-n=2','--reruns=2'])
命令行模式:pytest -vs 模块名.py -n = 2 --reruns=2
失败后重跑两次
·-x:遇到报错测试用例则立即停止测试
·--mafail:遇到指定个数用例失败就停止测试
主函数模式:pytest.main(['-vs','模块名.py','--maxfail=2'])
命令行模式:pytest -vs 模块名.py --mafail=2
· -k:根据测试用例名称内的部分字符串指定执行测试用例
主函数模式:pytest.main(['-vs','模块名.py','-k=xx'])
命令行模式:pytest -vs 模块名.py -k= 'xx'
·--html:生成原生html测试的报告
主函数模式:pytest.main(['-vs','模块名.py','--html=报告路径'])
命令模式:pytest -vs 模块名.py --html '报告路径'
·-vs:综合 -s,-v功能
分布式
使用pytest-xdist分布式测试执行测试用例
参数-n auto :可以自动检测系统的CPU核数
注意:使用auto等于利用了所有CPU来跑用例,此时CPU占用率会特别高。如果指定核数可将auto替换为具体的数字
分布式执行在根目录下输入执行命令:pytest -s -v -n auto,
三、pytest的测试执行循序
·unittest的执行顺序:默认按照ASCII表的顺序执行测试用例
·pytest的执行顺序:默认按照从上到下的顺序执行测试用例
改变pytest的默认执行循序:使用mark中装饰器
python
@pytest.mark,run(order=3)
四、如何分组执行(冒烟,分模块执行,分接口或者ui执行)
smoke:莫言用例,分布在各个模块里面
步骤一:在pytest.ini配置文件内添加配置信息:markers
python
[pytest]
addopts = -vs
testpaths = ../testcase
python_files = test*.py
python_classes = Test*
python_functions = test
markers =
smoke:冒烟
g1:组一
g2:组二
步骤二:给测试函数添加装饰器@pytest.mark.smoke
步骤三:执行测试用例:
主函数模式:pytest.main(['-vs','模块名.py','-m=smoke'])
命令行模式:pytest -vs -m 'smoke'
注意:此处的smoke不是固定的,可以自己定义标记名称
如果想执行多个标记的用例:pytest -vs -m '标记1' or '标记2'
五、pytest跳过测试用例
无条件跳过:
添加装饰器:@pytest.mark,skip(reason = "跳过原因")
有条件跳过:
添加装饰器:@pytest.mark.skipif(表达式,reason = '跳过原因')
注意:此处的表达式得到的应该是一个布尔类型,表达式成立则跳过,否则执行测试用例
六、断言
在pytest框架中使用assert进行断言
示例代码
python
class TestCase:
# 测试用例
def test_case(self):
print("执行测试用例")
# 断言:语法assert 表达式
assert 1 == 2
注意:assert后面的表达式需要返回布尔值类型,True为测试用例通过,False为用例失败