单元测试
白盒测试和黑盒测试
- 白盒测试:是通过程序的源代码进行测试而不使用用户界面。这种类型的测试需要从代码句法发现内部代码在算法,溢出,路径,条件等等中的缺点或者错误,进而加以修正。黑盒测试:又被称为功能测试、数据驱动测试或基于规格说明的测试,是通过使用整个软件或某种软件功能来严格地测试, 而并没有通过检查程序的源代码或者很清楚地了解该软件的源代码程序具体是怎样设计的。测试人员通过输入他们的数据然后看输出的结果从而了解软件怎样工作
Python的单元测试模块 UnitTest #
- test case , test suit, test runner, test fixture
测试用例:
- 继承
unittest.TestCase
- 内部定义以
test_
开头的方法,每个test case 都是单独运行,如果一个class中有多个 test_XXX 那么最后在load到suit时也会有多个测试 - 覆盖度越高越准确
测试运行后的输出:
- 第一行给出每个用力执行后的标识,成功时
.
,出错时 E,失败时 F, 跳过时 S - 在unittest.main() 中可以添加 verbosity 参数,控制最后报告的详细程度,默认时1,0表示不输出每一个用例的执行结果,2 输出详细的执行结果
使用test suite
if __name__ == '__main__':
suite = unittest.TestSuite()
# 定义测试的内容列表
tests = [TestMathFunc('test_add'), TestMathFunc('test_minus')]
# 添加到测试中,addTest 可以添加单个
suite.addTests(tests)
# 定义 runner 执行测试
runner = unittest.TextTestRunner(verbosity=2)
runner.run(suite)
测试环境准备 #
setUp和tearDown
- 在每个测试用例开始和结束时执行的方法,用于测试环境的准备,清理环境
setUpClass和tearDownClass
- 在所有的 case 开始之前准备一次环境,所有的 case 结束之后再清理环境
class TestModel(unittest.TestCase):
@classmethod
def setUpClass(cls):
print('准备环境')
@classmethod
def tearDownClass(cls):
print("清理环境")
跳过某个case
- 使用 装饰器装饰方法,
@unittest.skip("跳过此方法")
- skip装饰器一共有三个
unittest.skip(reason)
、unittest.skipIf(condition, reason)
、unittest.skipUnless(condition, reason)
,skip
无条件跳过,skipIf
当condition为True时跳过,skipUnless
当condition为False时跳过。
输出 HTML 报告
首先下载官方的HTMLTestRunnerhttp://tungwaiyip.info/software/HTMLTestRunner.html
import unittest
from test_model import TestModel
from HTMLTestRunner import HTMLTestRunner
if __name__ == '__main__':
suite = unittest.TestSuite()
suite.addtests(unittest.TestLoader().loadTestsFromTestCase(TestModel))
with open("test.html", 'w') as f:
runner = HTMLTestRunner(stream=f, title='Hell test', description="discription", verbosity=2)
runner.run(suite)