标签:验收测试 必须 加法 集成 通过 4.0 使用 str 用例
按照定义,单元测试就是对单个模块或者单个类或者单个函数进行测试,一般是开发做的,按照阶段分,一般就是单元测试、集成测试、系统测试、验收测试
1) 单元测试之后,才是集成测试,单个单个的功能模块测试通过之后,才能把单个功能模块集成起来做集成测试,为了从底层发现bug,减少合成后出现的问题
2) 越早发现bug越好,这样可以早点发现问题,不然问题累计到后面,如果做错了就要推倒重来,对于时间和经费来说,是非常浪费的!
3) 对我们测试来说,我们做单元测试是为了执行测试用例
创建一个测试类,来测试你要测试的目标对象: class TestMath(unittest.TestCase)
语法:函数用test开头,然后拼接下划线,再加函数名,里面的内容就是创建实例来调用方法
self.assertEqual(实际结果,期望结果,如果出错出错处理)
self.assertEqual(result_add, 6, "答案不等于6,所以答案是错误的!")
错误基类:AssertionError
完整的单元测试很少只执行一个测试用例,开发人员通常需要编写多个测试用例才能对某一软件功能进行比较完全的测试,这些相关的测试用例称为一个测试用例集,用TestSuite类来表示,用到的是TestSuite(),用addTest执行测试集,用到的是TextTestRunner(),用runner.run(suite)
安装:pip install parameterized #通过pip安装,记得先装好pip和setuptools这两个,才能用pip命令
使用:引入parameterized
from parameterized import parameterized
使用范例:
class TestMath(unittest.TestCase): @parameterized.expand([ ("01", 1, 1, 2), ("02", 2, 2, 4), ("03", 3, 3, 6), ]) def test_add(self.name, a, b, c): self.assertEqual(Math(a, b).add(), c) print("测试数据是: ", name)
有关parameterized详细内容请查看https://github.com/wolever/parameterized
1. 单元测试后生成测试报告。前提条件,把测试报告模板HTMLTestRunner.py放在python Lib目录下
import htmlreport import time #关键代码 suite = unittest.TestSuite() #一个对象,集合所有的单元测试用例 suite.addTest(TestMathFunc("test_add")) ... #执行测试集合 now = time.strftime("%Y-%m-%d_%H_%M_%S") filepath = "pyResult" + now + ".html" #在文件名中加入时间 fp = open(filepath, "wb") #wb表示二进制文件的写操作 #生成报告的Title,描述 runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title="Python Test Report", description="This is Python Report") runner.run(suite)
import unittest from ... import ... #引入你要测试的模块或者是类,打个比方,这里写了一个Math类,里面有加法add,减法sub函数 class TestMath(unittest.TestCase): def setUp(self): #初始化工作,这里面做初始操作 pass def test_add(self): #注意这里必须以test_开头 #写测试代码 t = Math() #先实例化Math类 result = t.add(5, 6) self.assertEqual(result, "期望值", "加法运行出错,期望值不等于实际值") #断言 def tearDown(self): #扫尾工作,这里面做单元测试结束后的工作 pass
class Math: def add(self, a, b): return a + b def minus(self, a, b): return a - b def multi(self, a, b): return a * b def divide(self, a, b): return a / b
import unittest from mathfunc import Math #引入你要测试的模块或者是类,打个比方,这里写了一个Math类,里面有加法add,减法sub函数 class TestMath(unittest.TestCase): def setUp(self): #初始化工作,这里面做初始操作 pass def test_add(self): #注意这里必须以test_开头 try: t = Math() #先实例化Math类 self.assertEqual(t.add(5, 6), 11, "加法运行出错,实际值不等于期望值") #断言 except AssertionError as e: print(e) def test_minus(self): try: t = Math() self.assertEqual(t.minus(6, 3), 3, "减法运行出错,实际值不等于期望值") except AssertionError as e: print(e) def test_multi(self): try: t = Math() self.assertEqual(t.multi(3, 3), 9, "乘法运行出错,实际值不等于期望值") except AssertionError as e: print(e) def test_divide(self): try: t = Math() self.assertEqual(t.divide(6, 3), 2.0, "除法运行出错,实际值不等于期望值") except AssertionError as e: print(e) def tearDown(self): #扫尾工作,这里面做单元测试结束后的工作 pass
import unittest from test_mathfunc import TestMath #创建测试集合 suite = unittest.TestSuite() #一个对象,集合所有的单元测试用例 suite.addTest(TestMath("test_add")) suite.addTest(TestMath("test_minus")) suite.addTest(TestMath("test_multi")) suite.addTest(TestMath("test_divide")) #创建一个对象来调用测试集合 runner = unittest.TextTestRunner() runner.run(suite)
import unittest from mathfunc import Math from parameterized import parameterized class TestMath(unittest.TestCase): def setUp(self): pass @parameterized.expand([ ("01", 1, 1, 2), ("02", 2, 2, 4), ("03", 3, 3, 6), ]) def test_add(self, name, a, b, c): try: m = Math() self.assertEqual(m.add(a, b), c, "加法计算错误") except AssertionError as e: print(e) else: print("测试数据是: ", name) @parameterized.expand([ ("04", 3, 1, 2), ("05", 6, 3, 3), ("06", 5, 1, 2), ] ) def test_minus(self, name, a, b, c): try: m = Math() self.assertEqual(m.minus(a, b), c, "减法计算错误") except AssertionError as e: print(e) else: print("测试数据是: ", name) @parameterized.expand([ ("07", 3, 3, 9), ("08", 3, 2, 6), ("09", 1, 5, 5), ]) def test_multi(self, name, a, b, c): try: m = Math() self.assertEqual(m.multi(a, b), c, "乘法计算错误") except AssertionError as e: print(e) else: print("测试数据是: ", name) @parameterized.expand([ ("10", 5, 2, 2.5), ("11", 4, 1, 4.0), ("12", 10, 5, 2.5), ]) def test_divide(self, name, a, b, c): try: m = Math() self.assertEqual(m.divide(a, b), c, "除法计算错误") except AssertionError as e: print(e) else: print("测试数据是: ", name) def tearDown(self): pass
import unittest from test_mathfunc import TestMathFunc import HTMLTestRunner import time #创建测试集合 suite.addTest(TestMathFunc("test_minus")) suite.addTest(TestMathFunc("test_multi")) suite.addTest(TestMathFunc("test_divide")) now = time.strftime("%Y-%m-%d_%H_%M_%S") #执行测试用例集合 filepath = "pyResult" + now + ".html" fp = open(filepath, "wb") #生成测试报告的title, 描述 runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title="Python Test Report", description="This is Python Report") runner.run(suite)
标签:验收测试 必须 加法 集成 通过 4.0 使用 str 用例
原文地址:https://www.cnblogs.com/cnhkzyy/p/9011785.html