【pytest学习笔记】01-Hello, pytest
程序员文章站
2024-02-27 14:45:57
...
What is Pytest
pytest是一个测试框架,即可以用于简单的测试,也可以用于复杂的功能测试。可以用于单元测试、接口测试
优点(官方)
- 断言失败处有详细的报告,断言仅需使用一个
assert
,不需要记住一堆self.assert*
(这里吐槽的是unitest吧) - 自动发现测试模块和方法
- 支持Modular fixtures,支持参数化
- 兼容
unitest
和nose
的老代码 - 可以运行在 python2.7 , python3.4+ , Pypy, Jython2.5
- 丰富的插件(这个很强)
安装
推荐pip安装
pip install -U pytest
查看安装是否成功
λ pytest --version
This is pytest version 4.4.0, imported from d:\programfile\anaconda3\envs\pytest\lib\site-packages\pytest.py
Simple Test
将test
前缀的方法作为测试方法
# content of simple_test.py
def add (x):
return x + 1
def test_add():
assert add(2) == 5
运行
pytest -q # -q为 quite模式
结果
F [100%]
============================================================================= FAILURES ==============================================================================
_____________________________________________________________________________ test_add ______________________________________________________________________________
def test_add():
> assert add(2) == 5
E assert 3 == 5
E + where 3 = add(2)
simple_test.py:8: AssertionError
1 failed in 0.04 seconds
测试类
如果需要将多个测试方法按照类的方式组合起来,pytest 也是支持的。
pytest没有要求测试类一定需要继承哪个类,实际上只要是Object
的子类都可以,但是前缀必须是Test
,且内部测试方法的前缀是test
class TestClass:
def test_two(self):
x = 'this'
assert 'a' in x
def test_one(self):
x = 'hello'
assert hasattr(x, 'check')
def other_func(self):
x = 'hello world'
print(x)
assert type(x) is str
运行结果
FF [100%]
============================================================================= FAILURES ==============================================================================
________________________________________________________________________ TestClass.test_two _________________________________________________________________________
self = <test_class.TestClass object at 0x00000248BE7EB940>
def test_two(self):
x = 'this'
> assert 'a' in x
E AssertionError: assert 'a' in 'this'
test_class.py:4: AssertionError
________________________________________________________________________ TestClass.test_one _________________________________________________________________________
self = <test_class.TestClass object at 0x00000248BE7ECC88>
def test_one(self):
x = 'hello'
> assert hasattr(x, 'check')
E AssertionError: assert False
E + where False = hasattr('hello', 'check')
test_class.py:8: AssertionError
2 failed in 0.07 seconds
可以看出,
- 测试类中没有以
test
为前缀的不会被执行 - 执行顺序与方法的顺序有关
上一篇: pytest 使用
下一篇: python常见排序算法基础教程