简介:
pytest是python的一个单元测试框架,类似python自带的unittest测试框架,但是比unittest框架使用起来更简洁,效率更高。
特点:
- 命令行工具,容易上手,入门简单,编写用例简单,可读性强
- 可以直接采用assert进行断言,不需要记忆self.assertEqual()等
- 支持参数化(pytest.mark.parametrize)
- 易于持续集成,适用于接口自动和UI自动化
- 扩展性强,支持扩展第三方插件
- 执行测试过程中可以将某些测试跳过(skip),或者对某些预期失败的case标记成失败(xfail)
- 支持重复执行(rerun)失败的case
- 可以运行nose, unittest编写的测试case
- 可生成html报告(pytest-html或allure)
- 可支持执行部分用例(marker)
安装:
#前提:已安装pip,可通过以下命令判断是否安装 pip --version #安装 pip install -U pytest #查看pytest版本 pip show pytest
基础用法:
1、用例设计规则:
测试文件的文件名必须以"test_"开头,或者以"_test"结尾
测试类命名必须以"Test"开头
测试函数名必须以"test"开头
测试类里面不能使用"__init__"方法
2、断言方法:
基本的assert
简单示例:
3、pytest运行规则:
1、直接pytest,查找当前目录及其子目录下所有符合规则的文件,类,方法,函数并全部执行;
2、pytest 文件名.py,单独执行某个python文件
3、pytest 文件名.py::类名,单独执行某个文件中的某个类
4、pytest 文件名.py::类名::方法名,单独执行类中的某个方法
注意:
pytest用例执行是乱序的,如需指定用例的顺序,可使用pytest-ordering插件,在测试用例的方法前加上装饰器@pytest.mark.run(order=[num]) ,将按照num 值的大小顺序从小到大来执行
4、运行参数:
可使用pytest --help查看帮助文档
个人常用到的参数:
5、参数化:
使用@pytest.mark.parametrize() 进行参数化
6、框架结构:
在pytest中,可与unittest一样,在执行用例前后执行 setup,teardown 来增加用例的前置和后置条件
pytest的setup,teardown按照用例运行级别可分为以下几类:
模块级(setup_module/teardown_module)在模块始末调用 函数级(setup_function/teardown_function)在函数始末调用(在类外部) 类级(setup_class/teardown_class)在类始末调用(在类中) 方法级(setup_method/teardown_methond)在方法始末调用(在类中) 方法级(setup/teardown)在方法始末调用(在类中)
7、fixture:
(1)fixture作为函数参数:
例如测试用例1需要登录,测试用例2不需要,测试用例3需要,则可用fixture作为函数参数来控制:
(2)fixture指定范围共享:
除了用setup,teardown控制用例的前置后置外,还可用fixture功能自定义用例的前置后置
根据作用范围大小划分:session> module> class> function,具体作用范围如下: function 函数或者方法级别都会被调用 class 类级别调用一次 module 模块级别调用一次,即一个文件调用一次 session 是多个文件调用一次(可以跨.py文件调用,每个.py文件就是module)
使用方法:
fixture函数前增加@pytest.fixture(scope="module")
测试用例前增加@pytest.mark.usefixtures("fixture函数名")
注意:
1、fixture函数可以放在单独的测试文件里,不与测试用例同一个文件
2、如果希望多个测试文件共享fixture,可以放在某个公共目录下新建一个conftest文件,将fixture放在里面
3、测试用例函数的参数列表包含fixture函数名字,pytest就可以检测到了,检测顺序:优先搜索该测试用例所在的文件,然后搜索conftest.py,并在测试函数运行之前执行该fixture函数。
注:fixture功能是pytest的特色功能,功能极为强大,具体使用可查看官方文档。