pytest学习笔记
来源:互联网 发布:octane render mac 编辑:程序博客网 时间:2024/05/29 09:38
由于对测试框架了解比较少,所以最近看了下pytest测试框架,对学习心得做个记录。
学习的教程是刘春明老师的文章
http://blog.csdn.net/liuchunming033/article/details/46501653
1、pytest简介
pytest是Python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。
- 能够支持简单的单元测试和复杂的功能测试
- 执行测试过程中可以将某些测试跳过,或者对某些预期失败的case标记成失败
- 支持重复执行失败的case
- 支持运行由nose, unittest编写的测试case
- 具有很多第三方插件,并且可以自定义扩展
- 方便的和持续集成工具集成
- 支持参数化
pip install -U pytest
py.test --version
注意要用admin用户安装,否则会报错
3、举个例子
(1)单测试case
执行测试的时候,我们只需要在测试文件test_sample所在的目录下,运行py.test即可。pytest会在当前的目录下,寻找以test开头的文件(即测试文件),找到测试文件之后,进入到测试文件中寻找test_开头的测试函数并执行。
在当前目录下新建文件 test_champ.py
def func(x): return x+1def test_func(): assert func(2)==3
在命令行输入py.test,便可以看到执行的成功与失败的原因了
(2)多测试case
当需要编写多个测试样例的时候,我们可以将其放到一个测试类当中,如:
class TestClass: def test_one(self): assert "h" in "this" def test_two(self): x = "hello" assert hasattr(x,"check")我们可以通过执行测试文件的方法,执行上面的测试:py.test -q test_class.py
这里对python的命名规范有点小插曲:
一,包名、模块名、局部变量名、函数名
全小写+下划线式驼峰
example:this_is_var
二,全局变量
全大写+下划线式驼峰
example:GLOBAL_VAR
三,类名
首字母大写式驼峰,否则会报错提示语法错误
example:ClassName()
4、如何编写pytest测试样例
- 测试文件以test_开头(以_test结尾也可以)
- 测试类以Test开头,并且不能带有 __init__ 方法
- 测试函数以test_开头
- 断言使用基本的assert即可
5、如何执行pytest测试样例
6、测试报告
pytest可以方便的生成测试报告,即可以生成HTML的测试报告,也可以生成XML格式的测试报告用来与持续集成工具集成。
生成xt格式报告:
生成XML格式的报告:
该格式方便与CI服务器进行集成。
将测试报告发送到pastebin服务器,执行下面的命令会生成报告的网址
py.test test_report.py --pastebin=all只发送失败的报告
py.test test_report.py --pastebin=failed
生成Html格式报告
这个需要安装pytest的第三方插件pytest-html:7、如何获取帮助信息
与Python自带的unitest测试框架中的setup、teardown类似,pytest提供了fixture函数用以在测试执行前和执行后进行必要的准备和清理工作。但是fixture函数对setup和teardown进行了很大的改进。
- fixture函数可以使用在测试函数中,测试类中,测试文件中以及整个测试工程中。
- fixture支持模块化,fixture可以相互嵌套
- fixture支持参数化
- fixture支持unittest类型的setup和teardown
8、最佳实践
9、断言的使用
①正常断言
- 子签名类,忽略中间打印的过程,直接表示出错的原因
- assert value == 0, "value was odd, should be even"
- 等于、不等、小于、大于
assert func(2)==3
②异常断言
使用pytest.raise方法(需import pytest)
断言1除以0,将产生一个ZeroDivisionError类型的异常。
- import pytest
- def test_zero_division():
- with pytest.raises(ZeroDivisionError):
- 1 / 0
有的时候,我们可能需要在测试中用到产生的异常中的某些信息,比如异常的类型type,异常的值value等等。下面我们修改下上面的测试
- import pytest
- def test_recursion_depth():
- with pytest.raises(ZeroDivisionError) as excinfo:
- 1/0
- assert excinfo.type == 'RuntimeError'
- pytest学习笔记
- 谭子pytest学习笔记(1)
- 【Pytest笔记】pytest-pythonpath插件的使用
- 【Pytest】pytest断言
- 使用pytest
- pytest fixture
- pytest使用说明
- 【Pytest】pytest的基本设置
- 【Pytest】python单元测试框架pytest简介
- pytest相关问题解析
- pytest的plugin
- pytest skip函数
- pytest+jenkins安装配置
- python 测试框架 pytest
- pytest paramiko 连接超时
- pytest的fixture
- Python pytest测试
- pytest的fixture
- 一款基于ssd1306驱动的12864屏简介
- Buff系统
- iOS 不规则的ImageView
- sqlserver连接oracle数据库
- 【设计模式】【十一】策略模式
- pytest学习笔记
- GT9XX触摸屏双击唤醒功能分析
- Swift 闭包
- CART-分类回归树
- 手机消息推送之web端开发
- 文章标题app开发经历的过程
- 找出创新点后的变化思路
- TogetherJS:Mozilla推出的实时协作工具
- ipv4与ipv6