pytest安装和查看
安装:pip install pytest
查看:pip show pytest
pytest和unittest区别
pytest
1、自动识别测试用例,以test_开头或以_test结尾(通常使用第一种)。
2、简洁的断言语句,使用assert表达式即可。
3、有测试会话、测试模块、测试类、测试函数级别的fixture。
4、有非常丰富的插件,目前600+,比如allure报告插件。
5、测试用例不需要封装在测试类中。
unittest
1、需要引入TestSuite来主动加载测试用例。
2、断言语句需要用self.assert*
3、unittest当中是测试类、测试函数级别的fixture。
4、无插件。
5、需要自定义类并且继承TestCase。
pytest如何自动识别测试用例
原则:先搜索到的py文件中的用例,先执行。在同一py文件当中,按照代码顺序,先搜索到的用例先执行。
搜索根目录
默认从当前目录中搜集测试用例,即在哪个目录下运行pytest命令,则从哪个目录当中搜索。
搜索文件
符合命名规则 test_*.py 或者 *_test.py 的文件。
在满足以上条件的文件中识别用例的规则
1、以test_开头的函数名;
2、以Test开头的测试类(没有__init__函数)当中,以test_开头的函数
需要遵守的规则
1、.py 测试文件必须以test_开头(或者以_test结尾)
2、测试类必须以Test开头,并且不能有 init 方法
3、测试方法必须以test_开头
4、断言必须使用 assert
5. 断言的区别,可直接使用符号“==”、“!=”、“<”、“>”、“>=”、"<=" 、in、not in,比
unittest断言更简单
unittest常用断言
fixture
pytest 提供的 fixture 实现 unittest 中 setup/teardown 功能,可以在每次执行case
之前初始化数据。不同点是,fixture 可以只在执行某几个特定 case 前运行,只需要在
运行 case 前调用即可。比 setup/teardown 使用起来更灵活。
@pytest.fixture()
fixture的作用域有四个session/package–>module–>class–>function,
session:同一个目录下,所有的文件都只执行一次
module:一个文件就会执行一次
class:一个类就会执行一次
function:一个函数就会执行一次(用的话直接把函数名做参数传到用例方法括号内),
可省略不写
设置autouse=True的情况下,所有方法均会自动调用;如果同时设置scope为class,
则在类中多个方法也仅调用一次
配置文件
pytest.ini: pytest的主配置文件,可以改变pytest的默认行为;
conftest.py: 此文件的fixture将作用于该文件所在的目录以及所有子目录。
部分插件
测试报告:pytest -html
pytest --html=report.html
失败case重复执行:pytest-rerunfailures
pytest -s test_one.py --html=report.html --reruns 1 --reruns-delay 1
–reruns 1是指重试几次,后面跟的值是重试的次数,–reruns-delay 1是指重试的
间隔时间,当失败后,需等待多久时间进行下一次的重试,后面跟的数据单位是
秒,每隔一秒重试。
-s运行显示内部的打印信息
多CPU分发:pytest-xdist
pip install -U pytest-xdist
pytest test_se.py -n NUM 其中NUM表示进程
运行模式
运行所有case
pytest test.py
运行tes.py文件中的TestClassOne这个class下的两个cases
pytest test.py::TestClassOne