
Frame--unittest+单测
测试结果通过 编写 设置断言:使用 运行单元测试:调用
发布日期:2021-05-14 12:23:05
浏览次数:19
分类:精选文章
本文共 5084 字,大约阅读时间需要 16 分钟。
单元测试简介
1.1 本质
面向对象编程中,通过封装将类属性和类方法结合起来,单元测试的本质是对这些类函数或方法进行测试。通过测试类中的函数,确保其功能符合预期。
1.2 单元测试框架
常用的单元测试框架包括 unittest
、pytest
和 ddt
。这些框架提供了参数化功能,简化测试用例的编写和执行。
1.3 参考资料
需要参考相关资料如 链接 以获取更多关于单元测试框架的详细信息。
unittest框架
2.1 框架介绍
unittest
框架提供了标准化的测试框架,包括以下关键组件:
TestCase
:测试用例的基类,所有测试用例都应继承自此类。TestSuite
:测试用例的容器,用来组织多个测试用例。TestLoader
:用于加载TestCase
实例到TestSuite
中。TextTestRunner
:执行测试用例的工具,生成测试结果。TextTestResult
:保存测试结果的实例。
2.2 测试原理
unittest
框架的核心流程如下:
TestLoader
加载 TestCase
到 TestSuite
。TextTestRunner
执行 TestSuite
,生成测试结果并保存到 TextTestResult
实例中。unittest.main()
模块集成到整个流程中。2.3 测试流程
TestCase
:继承自 unittest.TestCase
,方法名以 test
开头。self.assertEqual
等方法验证测试结果。unittest.main()
。2.4 测试准备
- 安装
HTMLTestRunnerNew.py
测试报告模板,下载链接为 链接,提取码为z13q
。 - 将模块放在项目目录或
Lib
目录下,并使用import HTMLTestRunnerNew
。
2.5 代码
test_case.py
import unittestfrom zy.Code import Addclass TestAdd(unittest.TestCase): def setUp(self): self.t = Add() def test_add_two_positive(self): r = self.t.add(1, 3) self.assertEqual(r, -4) print(f"测试结果是 {r}") def test_add_two_negative(self): r = self.t.add(-1, -3) self.assertEqual(r, -4) print(f"测试结果是 {r}") def test_add_two_zero(self): r = self.t.add(0, 0) self.assertEqual(r, 0) print(f"测试结果是 {r}")if __name__ == '__main__': unittest.main()
execute_case.py
import unittestfrom zy.test_case import TestAddsuite = unittest.TestSuite()suite.addTest(TestAdd('test_add_two_positive'))suite.addTest(TestAdd('test_add_two_negative'))suite.addTest(TestAdd('test_add_two_zero'))with open('TestResult.txt', 'w+', encoding='utf-8') as f: runner = unittest.TextTestRunner(f, descriptions='20180929', verbosity=2) runner.run(suite)
3. 参数化
test_case.py
import unittestfrom zy.Code import Addclass TestAdd(unittest.TestCase): def setUp(self): self.t = Add() def __init__(self, a, b, expected, methodName): super(TestAdd, self).__init__(methodName) self.a = a self.b = b self.expected = expected def test_add(self): r = self.t.add(self.a, self.b) self.assertEqual(r, self.expected) print(f"测试结果是 {r}")
execute_case.py
import unittestfrom zy.test_case import TestAddimport HTMLTestRunnerNewtest_data = [ (1, 2, 3, '两个整数相加'), (-1, -2, -3, '两个整数相加'), (0, 0, 0, '两个零相加'), (0, 1, 1, '一正一零相加'), (0, -1, -1, '一负一零相加')]suite = unittest.TestSuite()for i in test_data: print(f'正在执行 {i[3]}') suite.addTest(TestAdd(i[0], i[1], i[2], 'test_add'))with open('TestResult.html', 'wb+') as f: runner = HTMLTestRunnerNew.HTMLTestRunner(f, title='减法测试', description='第二轮整体回归测试减法方法的正确性', tester='华杰-zy') runner.run(suite)
4. 整体代码
code.py
class Sub: def sub(self, a, b): return a - b
test_case.py
import unittestfrom zy.code import Subfrom zy.do_excel import DoExcelclass TestSub(unittest.TestCase): def setUp(self): self.t = Sub() self.wb = DoExcel() def __init__(self, a, b, expected, title, case_id, methodName): super(TestSub, self).__init__(methodName) self.a = a self.b = b self.expected = expected self.title = title self.case_id = case_id def test_sub(self): print(f'用例标题:{self.title}') res = self.t.sub(self.a, self.b) try: self.assertEqual(res, self.expected) test_result = 'PASS' except AssertionError as e: test_result = 'FAIL' raise e finally: self.wb.write_back(self.case_id + 1, res, test_result)
execute_case.py
import unittestfrom zy.test_case import TestSubfrom zy.do_excel import DoExceltest_data = DoExcel().read_data()suite = unittest.TestSuite()for item in test_data: suite.addTest(TestSub(item['param_a'], item['param_b'], item['ExpectedResult'], item['title'], item['case_id'], 'test_sub'))with open('TestResult.html', 'wb+') as file: runner = HTMLTestRunnerNew.HTMLTestRunner(file, title='减法测试', description='第二轮整体回归测试减法方法的正确性', tester='华杰-zy') runner.run(suite)
do_excel.py
import openpyxlclass DoExcel: def read_data(self): wb = openpyxl.load_workbook('test_data.xlsx') sheet = wb['model1'] header = [] for column in range(1, 6): header.append(sheet.cell(1, column).value) test_data = [] for row_id in range(2, 10): row_data = {} for column_id in range(1, 6): row_data[header[column_id - 1]] = sheet.cell(row_id, column_id).value test_data.append(row_data) return test_data def write_back(self, row_id, ActualResult, TestResult): wb = openpyxl.load_workbook('test_data.xlsx') sheet = wb['model1'] sheet.cell(row_id, 6).value = ActualResult sheet.cell(row_id, 7).value = TestResult wb.save('test_data.xlsx')
测试报告
5.1 报告样式
报告采用了清晰的HTML格式,方便阅读和分析,包含测试用例的执行结果、详细的错误信息以及测试时间等内容。
5.2 测试报告库文件-HTMLTestRunnerNew.py
下载链接为 链接,提取码为 9eqt
。该模块用于生成HTML格式的测试报告,支持详细的测试结果分析和可视化展示。
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年04月28日 19时08分50秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
大数据在不同领域的应用
2021-05-14
页面置换算法
2021-05-14
推荐系统资料
2021-05-14
文件系统的层次结构
2021-05-14
减少磁盘延迟时间的方法
2021-05-14
vue(渐进式前端框架)
2021-05-14
权值初始化和与损失函数
2021-05-14
案例讨论
2021-05-14
传输层基本功能
2021-05-14
问题的计算复杂度:排序问题
2021-05-14
算法的伪码表示
2021-05-14
递推方程与算法分析
2021-05-14
主定理的应用
2021-05-14
动态规划算法的迭代实现
2021-05-14
最优装载问题
2021-05-14
最大团问题
2021-05-14
圆排列问题
2021-05-14
课程总结
2021-05-14
认识CMake及应用
2021-05-14
CMake的主体框架
2021-05-14