没有合适的资源?快使用搜索试试~ 我知道了~
1.2 创建你的第一个测试 1.3 运行多个测试 1.4 判断是否发生了指定的异常 1.5 将多个测试用例放在一个class中 1.6 为测试创建唯一的临时文件
资源详情
资源评论
资源推荐
Chapter1安装和启动
pytest作为一个测试框架,可以非常简单的建立易用性好,扩展性强的测试集。这些测试因为避免了
大量的样板代码,所以可读性非常高。
你可以花费一点时间通过一个unittest或者略复杂的函数测试来验证你的应用程序或者库。
1.1安装pytest
1.在你的python环境下运行下面的命令即可安装pytest
pipinstall‐Upytest
2.检查你安装的pytest的版本信息是否正确:
$pytest‐‐version
Thisispytestversion4.2.1,importedfrom/Users/david/Downloads/myPython/python3‐
venv/lib/python3.7/site‐packages/pytest.py
1.2创建你的第一个测试
创建一个只有4行代码的简单函数:
#test_sample.py
的
内
容
deffunc(x):
returnx+1
deftest_answer():
assertfunc(3)==5
现在,你可以在test_sample.py的同级目录下直接执行pytest,结果如下:
$pytest
=============================testsessionstarts==============================
platformdarwin‐‐Python3.7.2,pytest‐4.2.1,py‐1.7.0,pluggy‐0.8.1
rootdir:$REGENDOC_TMPDIR,inifile:
collected1item
test_sample.pyF[100%]
===================================FAILURES===================================
_________________________________test_answer__________________________________
deftest_answer():
>assertfunc(3)==5
Eassert4==5
E+where4=func(3)
test_sample.py:4:AssertionError
===========================1failedin0.07seconds===========================
这个测试的结果是失败的,因为func(3)的返回值不是5
1.3运行多个测试
pytest会运行当前目录及子目录下所有以test_*.py和*_test.py命名的文件。文件匹配方式遵循
Standardtestdiscoveryrules
1.4判断是否发生了指定的异常
使用raises可以判断代码是否抛出了异常:
#test_sysexit.py
的
内
容
importpytest
deff():
raiseSystemExit(1)
deftest_mytest():
withpytest.raises(SystemExit):
f()
使用"quiet"模式来执行这个测试:
$pytest‐qtest_sysexit.py
.[100%]
1passedin0.03seconds
1.5将多个测试用例放在一个class中
当你需要开发多个测试用例的时候,你可能需要将他们放在同一个class中,pytest可以很简单的创建
包含多个测试用例的class:
#test_class.py的内容
classTestClass(object):
deftest_one(self):
x="this"
assert'h'inx
deftest_two(self):
x="hello"
asserthasattr(x,'check')
pytest根据ConventionsforPythontestdiscovery查找所有的测试用例,所以可以找到所有以
**test_**开头的测试函数。我们可以通过文件名来直接运行整个模块:
$pytest‐qtest_class.py
.F[100%]
===================================FAILURES===================================
______________________________TestClass.test_two______________________________
self=<test_class.TestClassobjectat0x10858fc18>
deftest_two(self):
x="hello"
> asserthasattr(x,'check')
EAssertionError:assertFalse
E+whereFalse=hasattr('hello','check')
test_class.py:8:AssertionError
1failed,1passedin0.07seconds
第一个测试用例passed,第二个测试用例failed。你可以很直观的观察到测试用例中进行判断的中间
值,这可以帮助理解测试用例失败的原因。
1.6为测试创建唯一的临时文件夹
pytest提供Builtinfixtures/functionarguments来创建任意的资源,比如一个具有唯一的临时文件
夹:
#test_tmpdir.py
的
内
容
deftest_needsfiles(tmpdir):
print(tmpdir)
assert0
如果函数的签名中(函数签名包括函数的参数和返回值,以及参数的封送顺序等等)包含参数tmpdir,
pytest就会在执行测试用例之前查找并调用特定的fixture创建所需资源。在本例中,pytest会创建一
个unique-per-test-invocation临时文件夹:
$pytest‐qtest_tmpdir.py
F
[100%]
===================================FAILURES===================================
______________________________test_needsfiles______________________________
tmpdir=local('/private/var/folders/st/05jlyljx7nqb26zdr8nv17dw0000gn/T/pytest‐of‐
david/pytest‐0/test_needsfiles0')
deftest_needsfiles(tmpdir):
print(tmpdir)
> assert0
Eassert0
test_tmpdir.py:3:AssertionError
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐Capturedstdoutcall‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
/private/var/folders/st/05jlyljx7nqb26zdr8nv17dw0000gn/T/pytest‐of‐david/pytest‐
0/test_needsfiles0
1failedin0.07seconds
关于tmpdir的更多信息请参考Temporarydirectoriesandfiles通过下面的命令可以查看所有内置
的pytestfixture:
pytest‐‐fixtures
Chapter2用法
2.1通过python-mpytest调用pytest
这是在2.0版本中新引入的功能。你可以通过python的解释器,利用命令行来调用测试:
python‐mpytest[...]
这种调用方式几乎等同于直接调用pytest[…],但需要注意的是这种通过python来调用的方式同时会
将当前目录添加到sys.path
2.2退出码
pytest有以下6种退出码:
Exitcode0:找到所有测试用例并测试通过
Exitcode1:找到测试用例并运行但是部分测试用例运行失败
Exitcode2:用户中断了测试
Exitcode3:执行过程中发生了内部错误
Exitcode4:pytest命令行使用错误
Exitcode5:没有找到任何测试用例
2.3版本信息,参数名,环境变量的帮助
pytest‐‐version#
显
示
pytest
的
import
的
路
径
pytest‐‐fixtures#
显
示
内
置
的
函
数
参
数
pytest‐h|‐‐help#
帮
助
信
息
2.4第一(N)次测试失败后停止
2.4第一(N)次测试失败后停止
使用下面的参数可以让测试在第1(N)次测试失败后停止:
pytest‐x#
第
一
次
测
试
失
败
后
停
止
测
试
pytest‐‐maxfail=2#
第
2
次
测
试
失
败
后
停
止
测
试
2.5指定/选择测试用例
Pytest在命令行中支持多种方式来运行和选择测试用例:
对模块中进行测试:
pytesttest_mod.py
对文件夹中进行测试:
pytesttesting/
通过关键字表达式来进行测试:
pytest‐k"MyClassandnotmethod"
这种方式会执行文件名,类名以及函数名与给定的字符串表达式相匹配的测试用例。上面的用例会执
行TestMyClass.test_something但是不会执行TestMyClass.test_method_simple
andnot在这里是表达式,未经过测试
通过节点id来进行测试
每个被选中的测试用例都会被分配一个唯一的nodeid,它由模块文件名和以下说明符组成:参数化的
类名、函数名和参数,用::分隔。
可以通过下面的方式运行模块中的指定的测试用例:
pytesttest_mod.py::test_func
也可以通过下面这种方式:
pytesttest_mod.py::TestClass::test_method
通过标记符来进行测试
剩余102页未读,继续阅读
Msura
- 粉丝: 58
- 资源: 323
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于matlab实现电磁优化计算功能,进行线型规划优化电磁设计.rar
- 基于matlab实现带精英策略的非支配排序遗传算法matlab 源码.rar
- 基于matlab实现差分进化算法,最新的用于替代遗传算法,是以后的主要发展方法.rar
- VSCode配置c/c++环境教程.md
- 基于matlab实现标准合作型协同进化遗传算法matlab源程序
- 七下人教.zip
- 基于matlab实现本份代码能对图像进行gabor滤波处理,结合指纹方向图以及指纹沟壑频率特性,对指纹图像进行增强.rar
- 基于matlab实现RBM神经网络实现了手写数字体识别的GUI程序.rar
- 基于matlab实现蝙蝠算法优化相关向量机建模对数据进行建模和预测.rar
- 基于matlab实现编写的禁忌搜索算法,解决了TSP问题,对初学者有重要的参考价值.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0