测试结果的分析:
可能出现3个结果:
- . 1个点代表1条用例执行成功
- F 1个F代表1条用例执行失败(FAIL)
- E 1个E代表1条用例里有错误(ERROR)
unittest里常用的断言方法
断言:预期结果和实际结果的比较。
测试用例的执行顺序
测试用例的执行顺序跟测试方法编写的顺序无关。
测试用例的执行顺序有一个默认的规则:按照测试方法名字的ascII码的顺序来执行(ascII码表对所有的字符都有一个对应的10进制数,对应的这个10进制数越小越先执行)
Python取名:字母、数字、下划线
查表,从小到大:0-9 A-Z 下划线 a-z 所以 test_add1 先于 test_add2执行。
自定义测试顺序
不要使用前面的那种加载方式(使用unittest提供的main()方法加载执行的,它是默认顺序)
而是改为使用unittest提供的Test Suite(测试套件)+Test Runner(测试运行器)的方式来加载执行。
# 使用TestSuite类构建测试套件并执行测试
import unittest
from homework3 import testmul, testdiv
if __name__ == '__main__':
ts = unittest.TestSuite()
ts.addTest(testmul.TestMul('test_mul1'))
ts.addTest(testmul.TestMul('test_mul2'))
ts.addTest(testdiv.TestDiv('test_div1'))
ts.addTest(testdiv.TestDiv('test_div2'))
tr = unittest.TextTestRunner()
tr.run(ts)
终端方式执行可能遇到的问题
当你的被测代码和测试代码不在同一个目录下:
解决办法:
继续执行运行test11.py的指令:python test11.py还是会报错:
解决办法:增加上一级路径到找包路径:
使用unittest组织大量的测试用例
随着被测功能点的增加,我们的测试用例也会不断的增加。假如说我要管理的测试用例成百上千,我不可能把这么多的测试用例都写在一个文件里。这种情况下,我们通常会把测试用例分门别类放在不同的文件里。
问题:如何组织这些分散在不同的Python文件里的测试用例进行执行呢?
解决办法:2种实现跨文件组织用例集中执行的方法:
(1) TestSuite+TestRunner的方式
(2) discover的方式
ts = unittest.defaultTestLoader.discover('./', pattern='test*.py')
# 使用discover()来自动发现测试用例并执行
import unittest
from homework3.HTMLTestRunner import HTMLTestRunner
if __name__ == '__main__':
ts = unittest.defaultTestLoader.discover('./', pattern='test*.py')
# tr = unittest.TextTestRunner()
# tr.run(ts)
f = open("./report.html", "wb")
tr = HTMLTestRunner(stream=f, title="乘除法的测试报告", description="详细测试结果")
tr.run(ts)
生成独立的测试报告
如果要生成一份独立的测试报告,就要借助于第三方模块。
HTMLTestRunner.py, 首先你需要把这个文件放在你的项目里:
if __name__ == '__main__':
ts = unittest.defaultTestLoader.discover('./', pattern='test*.py')
# tr = unittest.TextTestRunner()
# tr.run(ts)
f = open("./report.html", "wb")
tr = HTMLTestRunner(stream=f, title="乘除法的测试报告", description="详细测试结果")
tr.run(ts)