1.为什么要使用pytest
pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。根据pytest的官方网站介绍,它具有如下特点:
- 非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考
- 能够支持简单的单元测试和复杂的功能测试
- 支持参数化
- 执行测试过程中可以将某些测试跳过(skip),或者对某些预期失败的case标记成失败
- 支持重复执行(rerun)失败的case
- 支持运行由nose, unittest编写的测试case
- 可生成html报告
- 方便的和持续集成工具jenkins集成
- 可支持执行部分用例
- 具有很多第三方插件,并且可以自定义扩展
2.安装pytest
pip3 install pytest -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
如果已经安装过的,也可以进行更新升级一下。
pip3 install -U pytest
查看版本
pytest --version
3. 快速开始
# _*_coding:utf-8_*_
# @Author : lu
# @Time : 2019/11/2 22:27
# @file : test_demo.py
# @Software: PyCharm
import pytest
class TestDemo():
def test_one(self):
x = 'this'
assert 'h' in x
def test_two(self):
x = 'hello'
assert hasattr(x, 'check')
def test_three(self):
a = 'hello'
b = 'hello world'
assert a in b
if __name__=='__main__':
pytest.main(['-q','test_demo.py'])
然后,cmd进入test_demo.py所在目录,直接执行:
知识点
- 如果只执行pytest,会查找当前目录及其子目录下以test_*.py或*_test.py文件,找到文件后,在文件中找到以test开头函数并执行
- 如果只想执行某个文件,可以 pytest test_demo.py
- 加上-q,就是显示简单的结果:pytest -q test_demo.py
4.pytest用例规则
用Pytest写用例时候,一定要按照下面的规则去写,否则不符合规则的测试用例是不会执行的
- 测试文件名以 test_*.py 文件和*_test.py
- 以test_开头的函数
- 以Test开头的类,不能包含__init__方法
- 以test开头的类里面的方法
- 所有的包package必须要有__init__.py 文件
- 断言使用assert
5.pytest用例执行规则
注意,下面讲的都是在cmd中执行pytest命令
(1) 某个目录下所有的用例
pytest
(2) 执行某个py文件下用例
pytest test_demo.py
(3) 运行test_demo.py模块里面的某个函数,或者某个类,或者类中的某个方法
加v或者不加v都可以,加v,打印的信息更详细
pytest -v test_demo.py::test_raiseerror
pytest -v test_demo.py::TestDemo
pytest -v test_demo.py::TestDemo::test_one
(4) -m 标记表达式
pytest -m app
将运用@pytest.mark.app装饰器装饰所有测试,后面再展开讲
(5) -q简单打印,只打印测试用例的执行结果
pytest -q test_demo.py
(6) -s详细打印
pytest -s test_demo.py
(7) -x遇错误时停止测试
pytest test_demo.py -x
(8) --maxfail=num,当用例错误个数达到指定数量时,停止测试
pytest test_demo.py --maxfail=1
(9) -k 匹配用例名称
执行测试用例名称包含所有one的用例
pytest -s -k one test_demo.py
(10) -k 根据用例名称排除某些用例
pytest -s -k “not one” test_demo.py
(11) -k 同时匹配不同的用例名称
pytest -s -k "method or raiseerror" test_demo.py
6.pycharm运行pytest
平时写代码,咱们都在Pycharm写的,怎么可能一直用cmd来跑用例呢,现在我们就来看看在Pycharm中如何运行Pytest
- 首先,我们先要去settings里面设置单元测试框架为Pytest
- 如果是nosetests的话,右键运行是以python脚本运行的哦
- 如果设置了unittest则是以unittest框架去运行
注意
pytest 是可以兼容 unittest 脚本的,之前写的 unittest 用例也能用 pytest 框架去运行