unittest核心要素
- TestCase
- TestSuite
- TextTestRunner
- defaultTestLoader
- Fixture
TestCase
说明:(翻译:测试用例)一个TestCase就是一条测试用例;
| 使用: |
| 1. 导包:import unittest |
| 2. 继承:unittest.TestCase |
| |
| 提示: |
| 1). 测试用例:在自动化测试中,一条用例就是一个完整的测试流程; |
| 2). 测试方法名称命名必须以test开头; |
| (原因:unittest.TestCase类批量运行的方法是搜索执行test开头的方法) |
TestSuite
说明:(翻译:测试套件)多条测试用例集合在一起,就是一个TestSuite
返回的suite套件原理:suite = unittest.TestSuite(map(UserCase,['testAddUser','testDelUser']))
| 使用: |
| 1. 实例化: suite=unittest.TestSuite() |
| (suite:为TestSuite实例化的名称) |
| 2. 添加用例:suite.addTest(ClassName('MethodName')) |
| (ClassName:为类名;MethodName:为方法名) |
| suite.addTests([ClassName('MethodName1'),ClassName('MethodName1')]) |
| |
| 3. 添加扩展:suite.addTest(unittest.makeSuite(ClassName)) |
| (搜索指定ClassName内test开头的方法并添加到测试套件中) |
TextTestRunner
说明:(翻译:测试执行)是用来执行测试用例套件(执行上面的测试套件)
| 使用: |
| 1. 实例化: runner=unittest.TextTestRunner() |
| (runner:TextTestRunner实例化名称) |
| 2. 执行: runner.run(suite) 返回unittest.TestResult 对象,可以查看成功次数,失败次数等 |
| (suite:为测试套件名称)``` |
| unittest.TextTestRunner(stream=open("./tex.text",'w'),descriptions=True, verbosity=1) |
| stream : 写入的文件对象 |
| descriptions : 描述信息 |
| verbosity: 写入文件的详细程度(0,1,2) |
HTMLTestRunner(生成测试报告)
生成html测试报告
| from HTMLTestRunner import HTMLTestRunner |
| |
| with open(r'test_report.html', 'b') as f: |
| runner = HTMLTestRunner( |
| stream=f, |
| title='add函数测试报告', |
| description='win 10, python 3.8', |
| ) |
| runner.run(tests) |
运行报告如下:


Beautiful Report
生成测试报告
| from BeautifulReport import BeautifulReport |
| |
| runner = BeautifulReport(tests) |
| runner.report( |
| description='add函数测试报告', |
| filename='bf.html', |
| log_path='.' |
| ) |


实例验证
| |
| import unittest |
| class TestCase(unittest.TestCase): |
| def test_01(self): |
| print(f'运行用例{self.id()}') |
| |
| def test_02(self): |
| print(f'运行用例{self.id()}') |
| |
| def test_03(self): |
| print(f'运行用例{self.id()}') |
| |
| if __name__ == '__main__': |
| print(dir(TestCase)) |
| |
| import unittest |
| class TestLogin(unittest.TestCase): |
| def test_login1(self): |
| print(f'运行用例{self.id()}') |
| pass |
| def test_login2(self): |
| print(f'运行用例{self.id()}') |
| pass |
| def test_login3(self): |
| print(f'运行用例{self.id()}') |
| pass |
| def test_login4(self): |
| print(f'运行用例{self.id()}') |
| pass |
| |
| from test_bb import TestCase |
| from test_login import TestLogin |
| suite = unittest.TestSuite() |
| suite.addTest(TestCase('test_01')) |
| suite.addTests([TestCase('test_02'),TestCase('test_03')]) |
| suite.addTest(unittest.makeSuite(TestLogin)) |
| runner = unittest.TextTestRunner() |
| runner.run(suite) |
defaultTestLoader
说明: 本质就是利用TestLoader类的相关方法找到testcase或者suite,并将查找到的测试用例组装到测试套件
| |
| 用法: |
| test_dir = './' |
| disconver = unittest.defaultTestLoader.discover(test_dir, pattern='iweb_*.py') |
| (test_dir为要指定的目录 ./为当前目录;pattern:为查找的.py文件的格式 ) |
| 运行: |
| runner=unittest.() |
| runner.run(disconver) |
- loadTestsFromTestCase(testCaseClass)
| 用法: |
| testCaseClass必须是TestCase的子类(或孙类也行) |
| 运行: |
| suite = unittest.defaultTestLoader.loadTestsFromTestCase(testCaseClass) |
| runner=unittest.TextTestRunner() |
| runner.run(suite) |
| |
- loadTestsFromModule(module, pattern=None)
| 用法: |
| name是一个string,string需要是是这种格式的“module.class.method” |
| 运行: |
| suite = unittest.defaultTestLoader.loadTestsFromModule(module, pattern=None) |
| runner=unittest.TextTestRunner() |
| runner.run(suite) |
- loadTestsFromNames(name, module=None)
| 用法: |
| names是一个list,用法与上同 |
| 运行: |
| suite = unittest.defaultTestLoader.loadTestsFromNames(module, pattern=None) |
| runner=unittest.TextTestRunner() |
| runner.run(suite) |
- loadTestsFromModule(self, module, *args, pattern=None, **kws)
| 用法: |
| module是一个module对象不是字符串 |
| 运行: |
| suite = unittest.defaultTestLoader.loadTestsFromNames(module, pattern=None) |
| runner=unittest.TextTestRunner() |
| runner.run(suite) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?