unittest是Python语言自带的单元测试框架,Python 2.1版本以后已将unittest作为一个标准模板放入Python开发包中。
-
TestCase(测试用例): 所有单元测试的测试类都继承自
unittest.TestCase
类。 -
TestSuite(测试套件): 用于组装测试用例,通过
TestSuite
类的addTest()
方法。 -
TestRunner(测试执行): 执行测试套件/测试用例,通过
TextTestRunner
类提供的run()
方法。 -
Test Fixture(测试的构建和销毁): 通过
TestCase
类的setUp()
和tearDown()
方法。 - 保存文本log的方法:
python 14.unittest.py >> D:/log.txt 2>&1
import unittest
import os
from time import strftime
from demo.TestSet.testAdd import TestAdd
from demo.TestSet.testSub import TestSub
from demo.TestSet.extensions import fixtures
if __name__ == '__main__':
"方法一:main方法使用TestLoader类来搜索,目前引入模块中所有以test命名开头的测试方法,"
"并自动执行它们。"
unittest.main()
"方法二:构建测试套件来运行测试用例"
#使用addTest方法构造测试集(Test Suite)
suite = unittest.TestSuite()
suite.addTest(TestAdd('test_add1')) #addTest(类('方法名'))
suite.addTest(TestAdd('test_add2'))
suite.addTest(TestSub('test_sub1'))
suite.addTest(TestSub('test_sub2'))
#运行测试集合(Test Runner)
runner = unittest.TextTestRunner()
runner.run(suite)
"方法三:通过defaultTestLoader类的discover()方法,自动查找指定目录下所有匹配模块的测试用例。"
"使用TextTestRunner执行用例,生成Text报告。"
#discover方法可以递归查找到子目录下的测试模块,前提是子目录下需要有一个__init__.py命名的空文件。
discover = unittest.defaultTestLoader.discover('./demo/TestSet', pattern='test*.py')
#使用文本方式执行
runner1 = unittest.TextTestRunner()
runner1.run(discover)
"方法四:使用 discover()方法查找指定目录下匹配的测试用例,使用HTMLTestRunner执行用例,"
"生成HTML报告。"
#使用HTML方式执行
from HTMLTestRunner import HTMLTestRunner
now = strftime('%Y-%m-%d %H_%M_%S')
result = open('./demo/log/' + now + ' result.html','wb')
discover = unittest.defaultTestLoader.discover('./demo/TestSet', pattern='test*.py')
runner2 = HTMLTestRunner(
stream=result,
title='测试报告',
description='用例执行情况:')
runner2.run(discover)
result.close()