Pytest测试框架

1、Pytest特点

特点
1、非常容易上手,入门简单,文档丰富,文档中有很多参考实例
2、支持简单的单元测试和复杂的功能测试
3、支持参数化
4、执行测试用例过程中,支持跳过操作
5、支持重复执行失败的case
6、支持运行由Nose,unittest编写的测试case
7、具有很多第三方插件,并且可以自定义扩展
8、方便和持续集成工具集成

2、pytest介绍及安装

安装
pip3 install pytest
离线安装方式:下载pytest离线安装包,并解压,然后在dos下进入到解压的目录,然后执行python setup.py install
安装校验
命令行输入pytest --version会展示当前已安装的版本
pip show pytest

3、运行方式

pytest测试类的定义
类名必须以Test开头
方法名必须以test开头

3.1、Pycharm设置

Pytest测试框架_第1张图片

3.2、命令行运行*

pytest -s -v 测试文件名.py
-s:打印测试用例输出信息
-v:打印执行日志

3.3、代码运行

了解即可

 if __name__ == '__main__':
     pytest.main(["-s","测试文件名.py"])

2.3、pytest断言

pytest里面的断言方法只有一个
assert 表达式
assert result == expect //相等
assert result != expect //不相等
assert result //为Ture
assert False //False
assert  a in b //包含
assert  a not in b //不包含
assert result is None //为空
assert result is not None //不为空

4、setup和teardown

应用场景
pytest在运行自动化脚本的前后会执行两个特殊的方法,分别是setup和teardown,在执行脚本之前会执行setup方法,在执行脚本之后会执行teardown方法。有了这两个方法,我们可以在setup中进行获取驱动对象的操作,在teardown中进行关闭驱动对象的操作。
总结
概念
两个特殊的函数,没有自动提示
分类
函数级别(有多少函数就执行多少次)
setup
测试函数之前调用
teardown
测试函数之后调用
类级别(有多少个类就执行多少次)
setup_class
类之前调用
teardown_class
类之后调用

5、配置文件

使用配置文件后可以快速的使用配置的想来选择执行那些测试模块。
使用方式
名称固定:只能是pytest.ini、tox.ini、setup.cfg
项目下新建script模块
将测试脚本文件放在script中
pytest的配置文件放在自动化项目根目录下
名称为pytest.ini
命令行运行时会使用该配置文件中的配置
第一行内容为[pytest]
示例

[pytest]
addopts = -s -v --html=report/report.html # 添加命令行
testpaths = ./scripts # 文件搜索路径
python_files = test_*.py # 文件名称
python_classes = Test* # 类名称
python_functions = test_* # 方法名称

testpaths, python_files, python_classes, python_functions
表示 哪一个文件夹 下的 哪一个文件 下的 哪一个类 的 哪一个函数
表示执行scripts文件夹下的test开头的.py结尾的文件下的Test开头的类下的test_开头的函数

配置文件注意点
1、配置文件是否已经正确的加载?
通过控制台的inifile进行查看
2、关键windows中可能出现’gbk’错误
删除ini文件中的所有中文
3、在工作中这个文件需要复制粘贴?
是的,一个项目只会用一次,只需要理解当中的含义,能够修改即可
注意:添加完成配置文件之后,命令行中只需要输入pytest就可以执行了。

6、pytest常用插件

6.1、测试报告

安装命令:pip3 install pytest-html
在pytest配置文件的命令行参数中增加–html=用户路径/report.html
正常运行pytest
效果
会在项目目录下生成一个report文件夹,下面会有一个index.html即为报告

6.2、控制函数执行顺序

pytest正常境况下是根据测试方法从上到下的顺序来执行。
可以通过pytest-ordering插件来控制pytest测试方法执行的顺序。
使用
1、安装命令:pip3 install pytest-ordering
2、是使用装饰器的形式,在需要控制顺序的函数上增加这个装饰器即可
3、@pytest.mark.run(order=x)
4、优先级
0>较小的正数(1)>较大的正数(3)>没有写>较小的负数(-3)>较大的负数(-1)

6.3、失败重试

应用场景
自动化测试脚本可能会使用到网络,如果网络不好可能最终会是脚本不通过。想这种情况可能并不是脚本本身的问题,仅仅是因为网络的问题,那么我们可以使用失败重试的插件,当失败后,尝试再次运行。一般情况最终成功可以视为成功,但最好进行排查是不是脚本的问题。
使用
1、安装命令:pip3 install pytest-rerunfailures
2、在pytest配置文件的addopts参数中增加-reruns n
n代表重试的次数,不包括首次
3、正常运行pytest即可
4、效果
R表示失败重试
会重试n次,如果最后还没有通过则视为F
中间如果成功,后面的就不会重复执行
5、应用
在工作中,建议直接写2或者3
防止像网络不好的这种意外情况
如果成功了,可以理解为成功,如果最后都是失败,则检查是不是脚本或产品的问题

7、pytest高级用法

7.1、跳过测试函数

1、在需要跳过的测试脚本上加上装饰器
2、@pytest.mark.skipif(condition=True,reason=“xxx(必须填且是String)”)
condition是bool类型,如果为True表示跳过

7.2、预期失败

比如注册时要求用户名为6-10位,如果我们传入一个12位的用户名,此时可以使用预期失败。
@pytest.mark.xfail(condition=None,reason=“xxx”,raises=None,run=True,strict=False)
condition:跳过的条件,必传参数
reason:标注原因,必传参数
使用方式
在需要标记与其失败的测试脚本之上加上装饰器
@pytest.mark.xfail(condition,reason=“xxx”)
1、在需要标记预期失败的测试脚本之上加上装饰器
2、pytest.mark.xfail(condition=None,reason=“xxx”)
condition是布尔类型的,如果为True表示预期失败
3、报告观察的结论
红色的,表示BUG(预期和结果不一致)
带X的,表示预期失败
最后的单词,如果是pass就是通过,如果是fail就是失败
4、用处
反向测试的时候使用

7.3、数据参数化

在需要标记与其失败的测试脚本之上加上装饰器
@pytest.mark.parametrize(‘参数名’,[‘参数值1’,‘参数值2’])

@pytest.mark.parametrize(“argvanames”,“argvalues”)需要传入"argvanames"与"argvalues",第一个参数需要一个或者多个变量接收列表中的每组数据,第二个参数传递存储数据的列表。测试用例需要使用童明德字符串接收测试数据(与"argvanames"里面的名字一致),且列表有多少个元素就会生成并执行多少个测试用例。
什么时候用?
脚本相同,数据不同的时候,可以使用
怎么用?
总得来说,都是使用装饰器的形式
单个参数
@pytest.mark.parametrize(‘参数名’,[‘参数值1’,‘参数值2’])
多个参数
@pytest.mark.parametrize((‘参数名1’,‘参数名2’),[(‘参数值1_1’,‘参数值2_1’),(‘参数值1_2’,‘参数值2_2’)])

8、fixture

应用场景
fixture修饰器来标记固定的工厂函数,在其他函数,类调用它时会被激活并有限执行,通常会被用于完成预置处理和重复操作。
使用方式
1、标记工厂函数
装饰器,@pytest.fixture()
2、使用
参数
直接在脚本的参数列表中,增加fixture的名字即可
函数(装饰器)
在脚本之上写一个装饰器@pytest.mark.usefixture(“before”)

8.1、自动运行

增加参数 @pytest.fixture(autose=True)

8.2、作用域

@pytest.mark.fixture(autose=True,scope=“class”)
优先级
class级别中 setup_class > fixture
function级别中 fixture > setup

8.3、参数化

@pytest.fixture(params=[“1”,“2”,“3”])
列表中有多少元素,脚本就会执行多少次。
如果想要获取列表中的内容
需要在fiture中增加一个request参数
通过request.param进行获取

8.4、返回值

再使用参数引用的时候,这个参数就是fixture函数的返回值。
如果想要使用之前提到的,参数化的内容,那么直接当成返回值即可。
扩展
如果使用fixture参数画的同时也使用脚本的参数化,可以达到两两结合的效果。比如,fixture的parmas里面有三个参数,脚本的参数化里面有4个参数,那么这个脚本会运行12次。

你可能感兴趣的:(笔记,python,单元测试)