一、 pytest介绍
pytest是python第三方库,unnittest是标准库,pytest兼容unnittest
二、 pytest安装
安装命令:pip3 install pytest(可以使用国内镜像源)
查看pytest是否安装成功:pip3 show pytest
三、 硬性规则
1、 py文件必须以test_开头或_test结尾
2、 测试类必须以Test开头,并且不能有__init__方法
3、 测试方法必须以test_开头
4、 断言必须使用assert,assert一般结合pytest用,不单独用
pytest可以自动运行所有文件所有用例,前提是满足上述规则,不满足的不会运行,忽视
四、 runner
1、有两种运行方式,unittest和pytest,两者都可以运行,默认是unnittest,在下图pycharm所示位置可以选择
2、如果需要通过main下面pytest.main(['test_xxx.py','-s'])运行,那么pycharm要选择unittest,右键运行是以python方式运行.py文件,且左侧没有绿色的小运行按钮
3、如果选择pytest,右键是以pytest运行,两种运行方式运行出来结果一样,只是展示的效果不一样,如果是unittest运行,成功的用例后面是个点,左侧有绿色的运行小按钮,点击可以执行特定用例
5、 通过右键的pytest方式运行需要注意鼠标的位置,如果是在某个函数后面运行则执行这个函数,如果在类后面运行,则执行类里的所有测试方法,点左侧小绿运行按钮也是同样的效果,最保险的运行方式是点左侧小绿运行按钮,如果右键运行,和位置有关系,可能会漏掉
6、 -s参数:允许展示打印信息(unittest模式下需要,pytest模式不需要,有没有这个参数都会打印)
7、 -v参数:强化显示,显示更加详细的日志信息,会显示是什么操作系统等
8、 pytest.main()如果运行当前目录下所有文件,用./,也可以指定文件名运行
9、 执行目录里的多个文件:新建一个文件test_xxx.py,import pytest,main主函数,pytest.main(),换unittest运行
五、定制化执行
1、 pytest.mark.标签,比如pytest.mark.login,执行时加上-m login参数,指定执行的模块、类、接口。一个标签:'-m','login1';多个标签:'-m','login1 or login2';不执行某个用例:'-m','not login';排除多个:'-m','not login1 or login2'
用例通过了,但是有警告,是因为标签没有注册,不能被pytest识别,可以忽略,也可以处理一下,处理方法是去注册一下:在项目根目录下新建一个pytest.ini文件,里面按照固定格式以键值对形式写上标签:描述,再次执行不会出现警告
2、 -k匹配用例名称,可以全名匹配,也可以模糊匹配,比如:pytest -k login
3、 -v:节点多层化,比如pytest - v 模块名::类名::方法名
4、 -s/-q:-s是输出打印信息,-q是简化打印信息
5、 跳过/条件跳过
场景:有时候代码已经编写完成,但是由于环境问题或接口实现有误还不能执行,这时可以跳过
跳过:@pytest.mark.skip(reason='xxx'),有原因的跳过
条件跳过:@pytest.mark.skipif(condition,reason='xxx'),condition写布尔表达式,为true跳过。比如可以判断登录失败时跳过。
当在执行时加'-rs'参数,才会显示跳过原因
6、不执行某个文件:--ignore=test_xxx.py