重学unittest框架。
自动化步骤:
1:写用例 TestCaase,所有用例已test_开头,一个用例就是一个函数,不能传参,只有self关键字。
2:写断言 Assert ,对比实际结果和期望结果
3:执行用例 1:TestSuite 存储用例 2:TestLoader 找用例,加载用例,存储到TestSuite里面
4:出测试报告 HTMLTestRunner
5:运行时鼠标不能乱放,鼠标最好放末尾和开头,防止只运行一条用例。
usage:
测试目标:测试加法和乘法 :
class TestMethod(): # 编写用例 #:一个用例就是一个函数,不能传参,只有self关键字 #:所有用例已test_开头 def __init__(self,a,b): self.a = a self.b = b def add(self): '''加法''' return self.a+self.b def multi(self): '''乘法''' return self.a*self.b
测试用例和断言:
from TaceCase.math_method import TestMethod # todo 测试的目标类 import unittest #1: 写用例 TestCaase #2: 执行用例 1:TestSuite 存储用例 2:TestLoader 找用例,加载用例,存储到TestSuite里面 #3:对比实际结果和期望结果 断言Assert #4:测试报告 htmltestrunner class TestMathMethod(unittest.TestCase): '''测试数学方法''' # 编写用例 # :一个用例就是一个函数,不能传参,只有self关键字 # :所有用例已test_开头 # :运行时光标不能乱放,鼠标最好放末尾和开头 def setUp(self): '''用来做准备工作''' print('开始执行用例') def test_add_two_positive(self): '''测试2个正数相加''' result = TestMethod(3,3).add() print("3+3的结果值是:",result) # todo 断言,期望值和实际值的比对,一致就通过,不一致就失败 self.assertEqual(6,result,'3+3算错了') def test_add_two_zero(self): '''测试2个0相加''' result = TestMethod(0,0).add() print("0+0的结果值是:",result) self.assertEqual(0,result) def test_add_two_negative(self): '''测试2个负数相加''' result = TestMethod(-3,-3).add() print("-3+-3的结果值是:",result) self.assertEqual(-6,result) def tearDown(self): '''用来做数据清理''' print('用例执行完毕') if __name__ == '__main__': '''unittest的执行顺序为ascii编码,a-z的顺序执行''' unittest.main()
执行用例:
from TaceCase.unit_testing import TestMathMethod import unittest import HTMLTestRunner suite = unittest.TestSuite() # todo 实例化对象,存储用例 # 方法1 # 执行单条用例,传用例(函数)名称 #suite.addTest(TestMathMethod.test_add_two_positive) # 方法2 TestLoader创建一个加载器 loader = unittest.TestLoader() # TODO 传执行的类名 suite.addTest(loader.loadTestsFromTestCase(TestMathMethod)) # 方法3 from TaceCase import unit_testing # TODO 传执行的.py模块名 #suite.addTest(loader.loadTestsFromModule(unit_testing)) # 执行 runner = unittest.TextTestRunner() runner.run(suite)
测试报告:
# 出html报告 with open('../report.html','wb') as f: runner = HTMLTestRunner.HTMLTestRunner(stream=f,verbosity=1, title="测试报告") runner.run(suite)