python unittest模块
一个类,继承了unittest.TestCase
方法,就是一个测试用例。
一个测试用例test case
可以包含许多测试方法test method
,setup()
和 tearDown()
是针对 测试方法 执行前后的测试环境(test fixture) 的搭建和还原。setupClass
,tearDownClass
是对 test case 执行前后的测试环境的搭建和还原。测试套装TsetSuite
可以通过加载器TestLoader
从许多模块、许多测试用例中加载测试用例,然后通过TextTestRunner
来执行suite
中的测试用例。(Testsuite可以嵌套Testsuite)
实例:
要测试的类:
mathfunc.py
def add(a, b):
return a+b
def minus(a, b):
return a-b
def multi(a, b):
return a*b
def divide(a, b):
return a/b
测试类:
test_mathfunc.py
# -*- coding: utf-8 -*-
import unittest
from mathfunc import *
class TestMathFunc(unittest.TestCase): # 继承unittest.TestCase,是一个用例
"""Test mathfuc.py"""
# 测试环境搭建,每个 test 开头的测试方法 之前都会执行一遍
def setUp(self):
print("do something before test.Prepare environment.")
# 测试环境还原,每个 test 开头的测试方法 之后都会执行一遍
def tearDown(self):
print("do something after test.Clean up.")
# 环境搭建,在 测试用例 执行前执行一次
@classmethod
def setUpClass(cls):
print("This setUpClass() method only called once.")
# 环境还原,在 测试用例 结束后执行一次
@classmethod
def tearDownClass(cls):
print("This tearDownClass() method only called once too.")
def test_add(self): # test 开头的,是测试方法
"""Test method add(a, b)"""
self.assertEqual(3, add(1, 2))
self.assertNotEqual(3, add(2, 2))
@unittest.skip("I don't want to run this case.") # 跳过某条case
def test_minus(self):
"""Test method minus(a, b)"""
self.assertEqual(1, minus(3, 2))
def test_multi(self):
self.skipTest('Do not run this.') # 也可以用这种方法跳过case
"""Test method multi(a, b)"""
self.assertEqual(6, multi(2, 3))
def test_divide(self):
"""Test method divide(a, b)"""
self.assertEqual(2, divide(6, 3))
self.assertEqual(2.5, divide(5, 2))
if __name__ == '__main__':
unittest.main(verbosity=2) # verbosity 报告的详细程度,默认1
# unittest.main()
测试Suite:
test_suite.py
# -*- coding: utf-8 -*-
import unittest
from test_mathfunc import TestMathFunc
from HTMLTestRunner import HTMLTestRunner
if __name__ == '__main__':
suite = unittest.TestSuite()
# 添加 case 的几种方式
tests = [TestMathFunc("test_add"), TestMathFunc("test_minus"), TestMathFunc("test_divide")]
suite.addTests(tests)
# 1 直接用addTest方法添加单个TestCase,有序
suite.addTest(TestMathFunc("test_multi"))
# 2 用addTests + TestLoader,可能不按照顺序执行
# loadTestsFromName(),传入'模块名.TestCase名'
suite.addTests(unittest.TestLoader().loadTestsFromName('test_mathfunc.TestMathFunc'))
suite.addTests(unittest.TestLoader().loadTestsFromNames(['test_mathfunc.TestMathFunc'])) # loadTestsFromNames(),类似,传入列表
# 3 loadTestsFromTestCase(),传入TestCase
suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestMathFunc))
# 1. 使用 HTMLTestRunner 将执行结果写入 html 文件,需要导入 HTMLTestRunner.py
# with open('HTMLReport.html', 'w') as f:
# runner = HTMLTestRunner(stream=f,
# title='MathFunc Test Report',
# description='generated by HTMLTestRunner.',
# verbosity=2
# )
# runner.run(suite)
# 2. 将执行结果写入文件
# with open('UnittestTextReport.txt', 'a') as f:
# runner = unittest.TextTestRunner(stream=f, verbosity=2)
# runner.run(suite)
# 3. 执行结果打印在控制台
runner = unittest.TextTestRunner(verbosity=2)
runner.run(suite)
HTMLTestRunner.py地址:https://files.cnblogs.com/files/wztshine/HTMLTestRunner.zip
分类:
软件测试
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构