📅  最后修改于: 2020-12-03 05:31:29             🧑  作者: Mango
正是在2004年,Holger Krekel重命名了他的std软件包(其名称经常与Python附带的标准库的名称混为一谈),命名为py。尽管该程序包包含几个子程序包,但现在几乎完全以其py.test框架而闻名。
py.test框架为Python测试建立了新的标准,并在当今许多开发人员中变得非常流行。它为测试编写引入的优雅而Pythonic的习惯用法使测试套件可以以更紧凑的样式编写。
py.test是Python标准unittest模块的替代品。尽管它是功能齐全且可扩展的测试工具,但它具有简单的语法。创建测试套件就像编写具有几个功能的模块一样容易。
py.test可在所有POSIX操作系统和Python版本2.6及更高版本的WINDOWS(XP / 7/8)上运行。
使用以下代码将pytest模块以及py.test.exe实用程序加载到当前的Python发行版中。可以同时使用两者进行测试。
pip install pytest
您可以简单地使用assert语句来声明测试期望。 pytest的assert introspection将智能地报告assert表达式的中间值,使您无需学习JUnit旧方法的许多名称。
# content of test_sample.py
def func(x):
return x + 1
def test_answer():
assert func(3) == 5
使用以下命令行运行上述测试。运行测试后,控制台上将显示以下结果:
C:\Python27>scripts\py.test -v test_sample.py
============================= test session starts =====================
platform win32 -- Python 2.7.9, pytest-2.9.1, py-1.4.31, pluggy-0.3.1 -- C:\Pyth
on27\python.exe
cachedir: .cache
rootdir: C:\Python27, inifile:
collected 1 items
test_sample.py::test_answer FAILED
================================== FAILURES =====================
_________________________________ test_answer _________________________________
def test_answer():
> assert func(3) == 5
E assert 4 == 5
E + where 4 = func(3)
test_sample.py:7: AssertionError
========================== 1 failed in 0.05 seconds ====================
通过使用–m开关包含pytest模块,也可以从命令行运行测试。
python -m pytest test_sample.py
一旦开始进行多个测试,通常有必要在类和模块中对测试进行逻辑分组。让我们写一个包含两个测试的类-
class TestClass:
def test_one(self):
x = "this"
assert 'h' in x
def test_two(self):
x = "hello"
assert hasattr(x, 'check')
将显示以下测试结果-
C:\Python27>scripts\py.test -v test_class.py
============================= test session starts =====================
platform win32 -- Python 2.7.9, pytest-2.9.1, py-1.4.31, pluggy-0.3.1 -- C:\Pyt
on27\python.exe
cachedir: .cache
rootdir: C:\Python27, inifile:
collected 2 items
test_class.py::TestClass::test_one PASSED
test_class.py::TestClass::test_two FAILED
================================== FAILURES =====================
_____________________________ TestClass.test_two ______________________________
self =
def test_two(self):
x = "hello"
> assert hasattr(x, 'check')
E assert hasattr('hello', 'check')
test_class.py:7: AssertionError
===================== 1 failed, 1 passed in 0.06 seconds ======================