标签:
介绍
pytest是一个成熟的全功能的Python测试工具,可以帮助你写出更好的程序。
适合从简单的单元到复杂的功能测试
l 模块化parametrizeable装置(在2.3,持续改进)
l 参数化测试函数(用例)
l 标记测试功能与属性
l Skip和xfail:处理不成功的测试用例(在2.4改进)
l 通过xdist插件分发测试到多个CPU
l 不断地重新运行失败的测试
l 灵活约定的Python测试发现
安装
>pip install -U pytest # 通过pip安装
>py.test --version # 查看pytest版本
This is pytest version 2.7.2, imported from C:\Python27\lib\site-packages\pytest.pyc
简单的测试
让我们创建第一个文件,对个简单的功能进行测试。
#coding=utf-8
#功能
deffunc(x):return x + 1
#测试用例
deftest_answer():assert func(3) == 5
切换到测试文件所在的目录,通过“py.test”命令运行测试。
>py.test
执行结果如下图:
===================================================================
在一个测试类中创建多个测试用例:
#coding=utf-8
classTestClass:deftest_one(self):
x= "this"
assert "h" inxdeftest_two(self):
x= "hello"
assert x == "hi"
运行测试:
>py.test -q test_class.py
-q为quiet。表示在安静的模式输出报告诉。加不加这个参有什么区别呢? 读者可以对比一下两次输出的日志。其实,就是少了一些pytest的版本信息。
===================================================================
从Python代码中调用pytest
pytest中同样提供了main()来函数来执行测试用例。
pytest/
├── test_sample.py
├── test_class.py
└── test_main.py
此目录为我们练习的目录,打开test_mian.py
importpytestdeftest_main():assert 5 != 5
if __name__ == ‘__main__‘:
pytest.main()
直接运行该程序,sublime中按Ctrl+B运行。结果如下:
============================= test session starts =============================platform win32-- Python 2.7.10 -- py-1.4.30 -- pytest-2.7.2rootdir: D:\pyse\pytest, inifile:
collected4items
test_class.py .F
test_main.py F
test_sample.py F================================== FAILURES ===================================
_____________________________ TestClass.test_two ______________________________self=
deftest_two(self):
x= "hello"
> assert x == "hi"Eassert ‘hello‘ == ‘hi‘E-hello
E+hi
test_class.py:11: AssertionError__________________________________ test_main __________________________________
deftest_main():> assert 5 != 5Eassert 5 != 5test_main.py:4: AssertionError_________________________________ test_answer _________________________________
deftest_answer():> assert func(3) == 5Eassert 4 == 5E+ where 4 = func(3)
test_sample.py:9: AssertionError===================== 3 failed, 1 passed in 0.03 seconds ======================[Finishedin 0.3s]
从执行结果看到,main()默认执行了当前文件所在的目录下的所有测试文件。
那么,如果我们只想运行某个测试文件呢?可以向main()中添加参数,就像在cmd命令提示符下面一样:
#coding=utf-8
importpytestdeftest_main():assert 5 != 5
if __name__ == ‘__main__‘:
pytest.main("-q test_main.py") #指定测试文件
运行结果:
F================================== FAILURES ===================================
__________________________________ test_main __________________________________
deftest_main():> assert 5 != 5Eassert 5 != 5test_main.py:4: AssertionError1 failed in 0.01 seconds
那如果我想运行某个目录下的测试用例呢?指定测试目录即可。
#coding=utf-8
importpytestdeftest_main():assert 5 != 5
if __name__ == ‘__main__‘:
pytest.main("d:/pyse/pytest/") #指定测试目录
===================================================================
* 最后,pytest是如果识别测试用例的呢?和unittest单元测试框架一样,它默认使用检查以test打头的方法或函数,并执行它们。
pytest还有许多需要讨论的地方,做为这个系列的第一节,先介绍到这里。
标签: