pytest是一个使构建简单和可扩展测试变得容易的框架。测试具有表现力和可读性-不需要样板代码。数分钟内即可开始为您的应用程序或库进行小型单元测试或复杂的功能测试。
一、安装
- 使用在线安装命令:
- pip install -U pytest (参数-U代表如果你已经安装了pytest,那么就升级到最新版本)
- 验证是否安装成功
- pytest --version 查看当前安装的版本信息
- pip list 当然也可以使用该命令查看所有安装的库来确认是否已经安装pytest
二、入门Demo
我们以测试一个add函数为例,完成入门 首先创建test_ demo.py 测试方法以test_ 开头
以函数形式编写测试用例
代码示例
Terminal中执行命令:pytest 或者直接在pycharm中右键 Run 'pytest for test_demo'
以类的形式编写测试用例
代码示例
Terminal中执行命令:pytest 或者直接在pycharm中右键 Run 'pytest for test_demo'
我们使用参数-v 执行一次看下结果:
执行规则总结
收集用例规则:遍历所有目录下格式为test _ .py或 _test.py的文件(以Test开头的测试类,不包含有构造函数的) 执行用例规则:
- 执行某个包下所有的测试用例:pytest testapp(创建的包名,我们可以在该包下创建一个testdemo_02.py 同时添加测试方法)。此时你发现只是执行了该包下的测试用例。
- 如果包下有很多测试文件如何运行指定的测试文件?pytest testapp/testdemo_02.py ,这样就只是执行了该文件,其他文件不再执行
- 我们也可以在当前路径下指定执行的py文件:pytest test_demo.py
- 如何运行文件中指定的测试方法?pytest testdemo.py::testadd_1
- 如果是类的形式如何执行指定方法?pytest testdemo.py::TestDemo::testadd_1
总结:通过上面几个问题,我们整理执行规则
- 运行执行目录下的测试用例 使用命令 pytest 目录or包/目录or包
- 运行指定文件,使用命令 pytest 目录/文件 或者 pytest 文件
- 运行指定文件中类的函数,使用命令 pytest 文件::类名::函数
常用执行命名参数详解
- -v 参数 pytest -v test_demo.py ,输出更加详细的测试信息,例如测试文件及用例名称
- -q 参数 pytest -q test_demo.py ,输出简化信息(与-v参数相反)
- -s 参数 pytest -s test_demo.py ,输出调试打印信息,默认没有该参数不输出
- -m 参数 pytest -m test_demo.py ,执行打标记的测试时用例(后续我们可以专项打标记学习下,测试分组经常用到)
- -k 参数 pytest -k "1" test_dem.py ,执行函数名中带有“1”关键字的用例
断言
pytest中断言结果直接使用assert就可以。assert 后面跟逻辑表达式
- assert xx 判断xx是否为true
- assert not xx 判断 xx不为true
- assert a == b 判断 a是否等于b
- assert a != b 判断 a不等于b
- assert a in b 判断b是否包含a
- assert a not in b 判断b中不包含a
测试结果含义
- "."表示测试通过
- "F"表示测试失败
- "s"表示跳过该用例
- "X" 预期失败但是用例成功执行了
- "xfail" 预期失败执行也失败了
三、接口实例
学习了这些基本知识,我们就可以开始实战了。以网上免费获取天气信息接口为例,来具体看下如何使用pytest完成一个测试用例
- 接口地址:http://t.weather.sojson.com/api/weather/city/city_code
- 请求类型:get
- 请求参数:city_code=101030100 (天津)
预期结果:
- 验证返回状态码status是否等于200
- 验证cityInfo中返回的citykey是否为查询的id
代码示例
执行命令:pytest -v -s test_demo.py
执行结果:
从执行结果中我们看到不仅仅打印了执行的文件、类名、方法,同时还打印了接口的返回结果。
暂时分享到这里,后续我们详细学习下pytest中的参数化用来解决批量验证多个城市的返回信息是否正确。