Pytest测试框架
特点:
- 非常容易上手,入门简单,文档丰富,文档中有很多参考实例。
- 支持简单的单元测试和复杂的功能测试
- 支持参数化
- 执行测试用例过程中,支持跳过操作
- 支持重复执行失败的case
- 支持运行由nose,unittest编写的测试case
- PyTest支持很多第三方插件
- 方便和持续集成工具集成
Pytest的安装:
- 在线安装 :pip install pytest
- 离线安装 :离线安装方式 下载pytest离线安装包,并解压,然后再DOS下进入到解压的目录,然后执行Python setup.py install
- pycharm
判断是否安装成功:
- pip show pytest
- pycharm
pytest类定义的及方法定义及运行
- Pytest测试类的定义:类名必须是以Test开头
- pytest测试方法的定义:方法名必须是以test开头
- 执行:在pycharm中右击方法名或者雷鸣可以直接执行对应测试类或者测试方法
Pytest断言:assert 表达式
- assert result == x 判断是否相等
- assert result != x 判断是否不相等
- assert result 判断为TRUE
- assert false 判断为FALSE
- assert "a"in "abc" 判断包含
- assert "a"not in "abc" 判断不包含
- assert request is None 判断是为空
- assert request is not None 判断不是为空
Pytest方法级别的fixture
Pytest方法级别是fixture是针对每个测试方法,在执行测试方法前会执行fixture初始化的操作,在执行完成测试方法后,执行fixture销毁操作。
初始化的操作方法:def setup(self):方法来实现。
销毁的操作方法:def teardown(self):方法来实现。
Pytest类法级别的fixture
- pytest类级别的fixture针对每个测试类的初始化和销毁的操作,可以放在一下两个方法中
- 类级别初始化的方法:def setup_class(self):
- 类级别销毁的方法:def teardown_class(slef):
方法名称固定,不能修改。
Pytest配置文件
pytest的配置文件有固定的三个名称:pytest.ini、 tox.ini、setup.cfg,配置文件是存在于项目根目录下
[pytest] # 标识pytest执行时增加的参数
addopts= -s -v #标识pytest执行是增加的参数
testpaths=./scripts #匹配收搜的目录
Python_files =test_*.py #匹配测试文件
Python_classes=Test*#匹配测试类
Python_functions =test_*匹配测试方法
pytest测试报告插件的使用
pytest-html :通过使用pycharm进行安装
使用:在配置文件addopts选项中增加一项就可以了
addopts= -s -v --html=report/report.html
pytest常用插件
控制用例执行顺序
- unittest测试用例执行顺序根据测试方法名称的assicc码值的发小来的,值越小拍债前面(a-z)
- pytest正常情况下是根据测试方法的从上到下的顺序来执行,可以通过pytest-ordering插件来控制pytest测试方法执行的顺序。
- 安装:
- 在线安装:pip install pytest -ordering
- 离线安装:下载对应的离线安装包,解压后,并进入到对应的目录,执行Python setup_py install
- pycharm
- 使用:@pytest.mark.run(order=x) #X表示的是整数(既可以是负数也可以是正数)
- 全为负数或者正数时,值越小,优先级越高
- 既有正数,又有负数,那么正数优先级高
- 没有确定执行顺序的用例优先于负数
- pytest.mark.trylast #设置用例最后执行
失败重置插件
- 安装:
- 在线安装:pip install pytest -rerunfailures安装
- 离线安装:下载对应的离线安装包,解压后,并进入到对应的目录,执行Python setup_py install
- pycharm
- 使用:在addopts参数行中增加对应的参数项:--reruns 3 当重复执行成功是,就不会再重复执行。
pytest高级用法
跳过:
@pytest.mark.skipif(condition,reason=None)
condition 表示是跳过的条件,这里reason参数名称必填
@pytest.mark.skip(reason=none)
reason表示的是跳过的原因
数据参数化:
- pytest参数化实现:@pytest.mark.parameterize(argnames,argvalues)
- argnames表示是参数名字,是一串字符串,多个参数之间由逗号隔开“username,password”
- argvalues表示的是参数化的数据[("13700001111","12345"),("13700001111","12345")]
argnames的参数个数要与argvalues里面的测试数据的个数要相同,否则会报错。