4.1 单元测试
是指对软件中的最小可测试单元进行检查和验证。
单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试
unittest 框架是 python的单元测试框架
unnitest = TestCase + TestResult 执行用例 + 结果
4.2 unittest
- 用import语句引入unittest模块
- 测试的类都继承于TestCase类
- setUp() 测试前的初始化工作;tearDown()测试后的清除工作 (在每个测试方法运行时被调用)
- 成功是输出 . 失败是 F
注意:
1、所有类中方法的入参为self,定义方法的变量也要“self.变量
2、定义测试用例,以“test”开头命名的方法,方法的入参为self
3、unittest.main()方法会搜索该模块下所有以test开头的测试用例方法,并自动执行它们
4、自己写的py文件不能,用 unittest.py 命名,不然会找不到TestCase
import unittest
class UserTestCase(unittest.TestCase):
def setUp(self):
print("setUP")
def tearDown(self):
print("tearDown")
def test_name(self):
print("test_name")
if __name__ == '__main__':
unittest.main()
4.3 TestSuite
- 利用unnitest执行流程测试而非单元测试
- unittest.TestSuite() 类来表示一个测试用例集,用来确定测试用例的顺序,哪个先执行哪个后执行
如果一个class中有四个test开头的方法,则加载到suite中时则有四个测试用例
由TestLoder加载TestCase到TestSuite
verbosity参数可以控制执行结果的输出,0 是简单报告、1 是一般报告、2 是详细报告
默认1 会在每个成功的用例前面有个“.” 每个失败的用例前面有个 “F” - TextTestRunner() 文本测试用例运行器
- run()方法是运行测试套件的测试用例,入参为suite测试套件
实例:
import unittest
class UserTestCase(unittest.TestCase):
def setUp(self):
self.name="username"
self.password="userpwd"
print("setUP")
def tearDown(self):
print("tearDown")
self.assertEqual('foo'.upper(),'FOO')
def test_name(self):
print("测试用户名")
self.assertEqual(self.name,"username",msg="用户名不正确")
def test_password(self):
print("测试密码")
self.assertEqual(self.password,"userpwd",msg="密码不正确")
if __name__ == '__main__':
suite=unittest.TestSuite()
suite.addTest(UserTestCase("test_name"))
suite.addTest(UserTestCase("test_password"))
runner=unittest.TextTestRunner(verbosity=0)
runner.run(suite)
4.4 测试套件TestSuite生成测试报告
HTMLTestRunner
HTMLTestRunner 是 Python 标准库的 unittest 模块的一个扩展,它可以生成 HTML的 测试报告,无法通过pip安装。
首先要下 HTMLTestRunner.py 文件,将下载的文件放入…\python\Lib目录下 (或者同个路径)
注意:python2和python3,语法不一样,导致HTMLTestRunner在python3不兼容
修改好的HTMLTestRunner.py 文件
实例:生成测试报告
生成测试报告代码
运行结果:
生成的报告:
如果测试完全正确
运行结果:
生成的报告: