单元测试框架 Unittest
- unittest是Python自带的单元测试框架,可以作为自动化测试框架的用例组织执行框架;
- unittest的流程:写好TestCase,然后由TestLoader加载TestCase到TestSuite,然后由TextTestRunner来运行TestSuite,运行的结果保存在TextTestResult中,通过命令号或者unittest.main() 执行时,main会调用TextTestRunner中的run来执行,或者可以直接通过TextTestRunner来执行用例。
- 一个class集成unitte.TestCase 即是一个TestCase,其中以 test 开头的方法在load时被加载为一个真正的TestCase。
- verbosity参数可以控制执行结果的输出,0 是简单报告、1 是一般报告、2 是详细报告。
- 可以通过addTest和addTests向suite中添加case或suite,可以用TestLoader的loadTestsFrom_()方法。
- 用 setUp(), tearDown(), setUpClass() 以及 tearDownClass() 可以在用例执行前布置环境,以及在用例执行后清理环境。
- 可以通过 skip, skipIf, skipUnless 装饰器跳过某个 case,或者用 TestCase.skipTest方法。
- 参数中加 stream,可以将报告输出到文件:可以用TextTestRunner输出txt报告,以及可以用HTMLTestRunner输出html报告。
忽略警告
ResourceWarning: unclosed <socket.socket [closed] fd=812, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0>
self._root = parser._parse_whole(source)
import warnings
warnings.simplefilter("ignore", ResourceWarning)
HTMLTestRunner 无法生成报告:
if __name__ == 'test_baidu_1': # 如果为 __main__ 时一直无法生成报告。所以改为文件名即可。
report = REPORT_PATH + '\report.html'
with open(report, 'wb') as f:
runner = HTMLTestRunner(stream=f, verbosity=2, title='从0搭建测试框架', description='html测试报告')
runner.run(TestBaiDu('test_search'))