pytest 介绍
* python里面单元测试框架---unittest
* pytest基于unittest衍生出来的新的单元测试框架,兼容unittest测试用例
* 相对于unittest来说更简单、效率更高
* 可以重复执行失败的测试用例函数,也支持跳过用例的执行,并且支持参数化
pytest环境配置
【1】pycharm 中安装pytest库文件
【pip】指令安装
pip install pytest //安装 控制台进入python 37\Scripts 文件下执行
pip install -U pytest //升级安装最新版本
【3】验证
pytest --version //如果报非外部命令,重启电脑
pytest 使用规范
* python文件必须以test_ 开头 // test_Pytest
* 类名必须以Test开头,并且类中不要出现init()初始化函数
* 测试用例函数必须以test开头
class TestJiSuanQi:
#加法函数
def add(self,a,b):
return a+b
#测试用例函数
def test_add(self):
s = self.add(3,5)
assert 8==s
pytest基本使用
* 按照规范编写代码
* 运行 命令行:pytest ---->执行所有的py测试文件
断言使用
-
assert关键词
-
a == b
-
a != b
-
True
-
a in b 包含
-
assert断言可以叠加使用,但是第一个不通过的时候,下面的不会再继续执行
* 可以借助于assume来完成
* 安装assume库文件
assume(a == b)
各个执行命令
* pytest 执行当前文件夹及子文件夹中所有以test_开头的测试文件
* pytest xxx.py 执行某个文件
* pytest -v -s -v详细信息 -s打印信息
* pytest -q(quiet安静) 静默执行
* pytest xxx.py::类名::测试用例函数名 ---执行某一个测试用例函数
* -x 失败即停止 --maxfail=5 失败达到5个的时候停止
* -k 类名----指定执行某个测试用例类下面的测试用例函数
* 失败后重试 安装库文件pytest-rerunfailures --reruns=3 重试几次 --reruns-delay=5 延时5秒再试
* 多进程运行 安装pytest-xdist库文件,支持多进程运行的库文件 ###执行命令后控制台内容解析 见word文档图片
mark标记
* 跳过某些用例的执行
* @mark.skip('原因') mark中自带的函数
* 冒烟测试用例 通过自定义mark的形式完成 pytest -m 自定义标记
* 参数化 mark.parametrize() 传递的是list列表,多个数据使用元组传递
setup和teardown函数
* 函数级别:有多少个测试用例函数 将会执行多少次
* 类级别:类开始的时候执行一次,结束的时候执行一次
setup teardown
setup_class teardown_class
pytest生成html测试报告
* 安装pytest-html库文件
* --html=./report/jisuanqi.html
fixture标签
场景:测试之前准备工作:准备测试数据 读取数据库;给测试用例函数传递数据;使用更加灵活
普通函数(不要以test_开头)加注解@pytest.fixture()
fixture是可以有返回值的,如果没return,默认返回None。用例调用fixture的返回值,直接就是把fixture的函数名称当成变量名称
scope作用域:测试用例函数 类 py文件
params参数 list
autouse自动使用fixture 默认False
* 作用域
函数function
* 它的作用范围是每个测试用例调用了,执行测试之前运行一次
类class
* class里所有用例开始前执行一次
py文件module
* 当前.py脚本里面所有用例开始前只执行一次
* autouse自动使用
默认False,添加这个属性,在测试用例函数中不调用fixture函数,也能自动使用
* 参数化 返回值
params---list 字典
request ---- request.param获取一条数据
测试用例函数只需要通过调用fixture函数名就可以
pytest配置文件
pytest.ini必须是这个名字 --->初次创建这种文件右上角会提示安装install plugins插件
[pytest] 开头
addopts 表示指令参数 多个之间空格隔开
testpaths 表示py文件所在文件夹
python_files = test_*.py以test_开头的所有python文件
python_classes = Test*以Test开头的类
python_functions = test_*以test_开头的函数