unittest和pytest
前置和后置动作
模块级
def setup_module():
...
def teardown_module():
...
def setUpModule():
createConnection()
def tearDownModule():
closeConnection()
- 应用案例:
Lib/test/test_asyncio/test_base_envents line:26
- 应用场景:
做一些全局的设置,如修改配置值、默认值等
类级
class TestCase(object):
def setup_class(self):
print("setup_class: 所有用例执行之前")
def teardown_class(self):
print("teardown_class: 所有用例执行之后")
def setup_method(self):
print("setup_method: 每个用例开始前执行")
def teardown_method(self):
print("teardown_method: 每个用例结束后执行")
def setup(self):
print("setup: 每个用例开始前都会执行")
def teardown(self):
print("teardown: 每个用例结束后都会执行")
import unittest
class Test(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls._connection = createExpensiveConnectionObject()
@classmethod
def tearDownClass(cls):
cls._connection.destroy()
函数级
def setup_function():
...
def teardown_function():
...
def test_name(self):
def func():
pass
self.addCleanup(func)
加载测试用例
suite = unittest.TestSuite()
# 加载所有测试方法
suite.addTest(unittest.makeSuite(MyTestCase))
也可以使用test.support.run_unittest,不过这个函数不能通过stream获取运行结果。
断言方法
- assertRegex
test_base_events.py line:1301
- assertContains
跟http相关的断言方法
异常
def test_function():
with pytest.raises(ValueError):
raise ValueError
def test_function(self):
with self.assertRaises(ValueError):
raise ValueError
定制测试报告
关键类: TextTestRunner, TextTestResult
TextTestRunner
的默认测试报告类是 TextTestResult
,想定制自己的测试报告,只需继承 TextTestResult
和重写部分方法,
然后传入到 TextTestRunner
的参数 resultclass
即可。
例如,假设测试报告是发送给客户看的,测试报告不应该显示traceback的详细内容,只需重写 TextTestResult
的 _count_relevant_tb_levels
方法,
return 0,即可只显示最后一行报错结果,其他的信息不显示。
todo
创建临时目录
# content of test_tmpdir.py
def test_needsfiles(tmpdir):
print(tmpdir)
assert 0
pytest --fixtures # shows builtin and custom fixtures
跟input交互
加上-s参数