Python unittest discover()方法与执行顺序

本文深入讲解unittest框架的高级应用,包括使用discover方法自动化查找并执行测试用例,以及如何控制测试用例的执行顺序,帮助读者提升自动化测试效率。
部署运行你感兴趣的模型镜像

一、discover更多测试用例

可以根据不同的功能创建不同的测试文件,甚至是不同的测试目录,测试文件中还可以将不同的小功能划分为不同的测试类,在类下编写测试用例,让整体结构更加清晰

但通过addTest()添加、删除测试用例就变得非常麻烦

TestLoader 类中提供的discover()方法可以自动识别测试用例

discover(start_dir,pattern='test*.py',top_level_dir= None)

找到指定目录下所有测试模块,并可递归查到子目录下的测试模块,只有匹配到文件名时才加载

start_dir:要测试的模块名或测试用例目录

pattern='test*.py':表示用例文件名的匹配原则。此处匹配以“test”开头的.py 类型的文件,* 表示任意多个字符

top_level_dir= None 测试模块的顶层目录,如果没有顶层目录,默认为None

实例1:

import unittest
test_dir = './'
#定义测试目录为当前目录
discover = unittest.defaultTestLoader.discover(test_dir,pattern='test*.py')

if __name__ == '__main__':
    runner = unittest.TextTestRunner()
    runner.run(discover)
discover()方法会自动根据测试目录test_dir 匹配查找测试用例文件,并将查找到的测试用例组装到测试套件中,因此,可以直接通过
run()方法执行discover,大大简化了测试用例的查找与执行

实例2:
suite = unittest.TestSuite()
all_cases = unittest.defaultTestLoader.discover(PY_PATH,'Test*.py')
#discover()方法会自动根据测试目录匹配查找测试用例文件(Test*.py),并将查找到的测试用例组装到测试套件中
[suite.addTests(case) for case in all_cases]
report_html = BeautifulReport.BeautifulReport(suite)
二、用例执行的顺序
unittest 框架默认根据ASCII码的顺序加载测试用例,数字与字母的顺序为:0~9,A~Z,a~z 
如果要让某个测试用例先执行,不能使用默认的main()方法,需要通过TestSuite类的addTest()方法按照一定的顺序来加载

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think> 我们正在使用Pythonunittest库编写测试用例根据引用,我们可以知道unittest库是Python自带的单元测试框架,用于编写和运行测试用例。 编写测试用例的基本步骤: 1. 导入unittest模块 2. 创建一个测试类,该类继承unittest.TestCase 3.测试类中定义测试方法方法名必须以“test_”开头,这样unittest才会将其识别为测试方法 4.测试方法中,使用unittest提供的断言方法(如assertEqual, assertTrue等)来验证结果 5. 最后,可以添加一个启动测试的入口(例如:unittest.main()) 另外,根据引用[4],我们还可以使用TestSuite来控制测试用例执行顺序和选择执行哪些测试用例。 下面我们通过一个简单的示例来展示如何编写测试用例。 </think> ### Python unittest库编写测试用例方法 Pythonunittest库是标准库中的单元测试框架,用于编写和运行测试用例。以下是编写测试用例的核心步骤: 1. **导入unittest模块** 首先导入unittest库: ```python import unittest ``` 2. **创建测试** 创建继承`unittest.TestCase`的测试类: ```python class TestStringMethods(unittest.TestCase): ``` 3. **编写测试方法** 每个测试方法必须以`test_`开头: ```python def test_upper(self): self.assertEqual('foo'.upper(), 'FOO') # 验证大写转换 def test_isupper(self): self.assertTrue('FOO'.isupper()) # 验证是否大写 self.assertFalse('Foo'.isupper()) ``` 4. **使用断言方法** 常用的断言方法包括: - `assertEqual(a, b)`: 验证a == b - `assertTrue(x)`: 验证x为True - `assertFalse(x)`: 验证x为False - `assertRaises(exc, func, *args)`: 验证函数抛出指定异常 5. **组织测试套件(可选)** 使用`TestSuite`控制执行顺序和选择用例(引用[^4]): ```python suite = unittest.TestSuite() suite.addTest(TestStringMethods('test_upper')) # 添加特定测试 ``` 6. **执行测试** 使用以下方式运行测试: ```python if __name__ == '__main__': unittest.main() # 执行所有测试 # 或指定测试套件:unittest.TextTestRunner().run(suite) ``` #### 完整示例 ```python import unittest class TestMathOperations(unittest.TestCase): def test_addition(self): self.assertEqual(1 + 2, 3) # 验证加法结果 def test_division(self): with self.assertRaises(ZeroDivisionError): # 验证除零异常 1 / 0 if __name__ == '__main__': unittest.main() ``` #### 关键特性 1. **自动发现测试** 使用`unittest.defaultTestLoader.discover()`自动加载目录中的测试用例(引用[^3]): ```python discover = unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py') ``` 2. **测试固件** 通过`setUp()`和`tearDown()`管理测试环境: ```python class DatabaseTest(unittest.TestCase): def setUp(self): self.conn = create_db_connection() # 每个测试执行 def tearDown(self): self.conn.close() # 每个测试执行 ``` 3. **生成测试报告** 配合HTMLTestRunner生成可视化报告(引用[^3]): ```python with open('report.html', 'wb') as f: runner = BSTestRunner(stream=f, title='Test Report') runner.run(discover) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值