unittest中不同test之间的变量调用

这篇博客探讨了在unittest测试框架下如何在不同的测试用例之间调用和共享变量,提供了具体的示例和作者的实践应用经验,确保测试的顺利进行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考如下:test2中调用 test1中的变量

import unittest
class Doc(unittest.TestCase):
    def test1(self):
        globals()["token"]=12
        
    def test2(self):
        global token
        print(token)
        
if __name__ == '__main__':
    unittest.main()

个人应用:

    def test_602ScreenMessage(self):
        """获取最初消息的数值"""
       
        num01 = self.driver.find_element_by_xpath('//*[@class="el-badge__content is-fixed"]').text
        # num02 = self.driver.find_element_by_xpath('//*[@class="el-badge__content is-fixed"]').text
        globals()["a01"] = num01    #准备test调用
        print('获取最初消息值:'+num01)
       
    def test_603UnpassMessage(self):
        """获取最初消息的数值"""
        num02 = self.driver.find_element_by_xpath('//*[@class="el-badge__content is-fixed"]').text
        print('获取最新的消息值:' + num02)
        global a01
        if int(num02)-int(a01) ==1:
            print("消息值增加1,消息数量增加校验通过")
        else:
          
<think>我们被要求介绍Python unittest库中常用的函数及其作用。根据引用内容,我们可以总结出unittest库中常用的断言函数、测试用例的组织方式以及测试运行的方法。 首先,unittestPython自带的单元测试框架,常用于编写和运行测试用例。其核心概念包括: - TestCase:测试用例,每个测试用例都是继承unittest.TestCase的类,其中的测试方法以test开头。 - TestSuite:测试套件,用于组织多个测试用例。 - TestRunner:测试运行器,用于执行测试并输出结果。 常用函数及方法: 1. 断言方法(用于检查测试结果是否符合预期): - `assertEqual(first, second, msg=None)`:断言first和second相等,否则测试失败,输出msg(引用[5])。 - `assertNotEqual(first, second, msg=None)`:断言first和second不相等(引用[5])。 - `assertTrue(expr, msg=None)`:断言表达式expr为True(引用[5])。 - `assertFalse(expr, msg=None)`:断言表达式expr为False(引用[5])。 - `assertIn(member, container, msg=None)`:断言member在container中(引用[5])。 - `assertNotIn(member, container, msg=None)`:断言member不在container中(引用[5])。 - `assertIs(first, second, msg=None)`:断言first和second是同一个对象(引用[5])。 - `assertIsNot(first, second, msg=None)`:断言first和second不是同一个对象(引用[5])。 - `assertIsNone(expr, msg=None)`:断言expr为None(引用[5])。 - `assertIsNotNone(expr, msg=None)`:断言expr不为None(引用[5])。 - `assertIsInstance(obj, cls, msg=None)`:断言obj是cls的实例(引用[5])。 - `assertNotIsInstance(obj, cls, msg=None)`:断言obj不是cls的实例(引用[5])。 2. 测试用例生命周期方法: - `setUp()`:在每个测试方法执行前调用,用于准备测试环境(如引用[4]中的例子)。 - `tearDown()`:在每个测试方法执行后调用,用于清理测试环境(如引用[4]中的例子)。 3. 组织测试用例: - 可以通过继承`unittest.TestCase`来创建测试用例类,并在其中定义测试方法(如引用[1][3][4])。 - 使用`unittest.main()`来运行当前模块中的所有测试(如引用[1][3][4])。 4. 测试套件(Test Suite): - 可以使用`unittest.defaultTestLoader.discover()`来发现并加载测试用例(如引用[2])。 - 也可以手动创建`TestSuite`对象,然后添加测试用例。 5. 测试运行器(Test Runner): - 可以使用`unittest.TextTestRunner()`来运行测试并输出文本结果。 - 也可以使用第三方运行器,如`HTMLTestRunner`生成HTML报告(如引用[2])。 下面是一个简单的例子,展示如何编写测试用例: ```python import unittest # 假设有一个函数需要测试 def add(a, b): return a + b # 创建测试类 class TestAdd(unittest.TestCase): def setUp(self): # 这里可以做一些初始化工作,比如连接数据库等 pass def tearDown(self): # 清理工作 pass def test_add_integer(self): self.assertEqual(add(1, 2), 3) # 测试整数相加 def test_add_float(self): # 由于浮点数精度问题,可以使用assertAlmostEqual self.assertAlmostEqual(add(0.1, 0.2), 0.3, places=7) def test_add_string(self): self.assertEqual(add('hello', ' world'), 'hello world') if __name__ == '__main__': unittest.main() ``` 运行上述代码,unittest.main()会执行所有以test开头的方法。 另外,引用[2]中展示了如何使用HTMLTestRunner生成HTML测试报告,这是一个第三方模块,需要单独安装。 总结:unittest库提供了丰富的断言方法、测试组织结构和运行机制,是Python中进行单元测试的重要工具。 §§相关问题§§ 1. unittest中如何跳过某些测试用例? 2. 如何用unittest测试会抛出异常的函数? 3. unittest和pytest有什么区别? 4. 如何用unittest生成测试覆盖率报告?</think>### Python unittest库常用函数及作用介绍 unittestPython标准库中的单元测试框架,提供了一套完整的测试解决方案。以下是核心函数及其作用: #### 一、核心测试类方法 1. **`setUp()`** 在每个测试方法执行前自动调用,用于初始化测试环境(如创建对象、连接数据库等)。 ```python def setUp(self): self.calculator = Calculator() # 初始化被测对象 ``` 2. **`tearDown()`** 在每个测试方法执行后自动调用,用于清理资源(如关闭文件、断开连接等)。 ```python def tearDown(self): self.calculator = None # 清理资源 ``` 3. **`setUpClass()`** & **`tearDownClass()`** 使用`@classmethod`修饰,在整个测试类执行前后各调用一次,用于全局初始化和清理。 ```python @classmethod def setUpClass(cls): cls.shared_db = Database.connect() # 全局初始化 ``` #### 二、常用断言方法 4. **`assertEqual(a, b)`** 验证`a == b`,常用于结果值比对[^5]。 ```python self.assertEqual(add(2, 3), 5) # 验证加法结果 ``` 5. **`assertTrue(x)` / `assertFalse(x)`** 验证表达式结果为`True`或`False`[^5]。 ```python self.assertTrue(user.is_authenticated()) ``` 6. **`assertRaises(异常类型)`** 验证代码是否抛出指定异常,通常用作上下文管理器。 ```python with self.assertRaises(ValueError): # 验证异常 int("invalid") ``` 7. **`assertIn(a, b)` / `assertNotIn(a, b)`** 验证`a`是否在容器`b`中(或不在)[^5]。 ```python self.assertIn("admin", user.roles) ``` 8. **`assertIsNone(x)` / `assertIsNotNone(x)`** 验证变量是否为`None`[^5]。 ```python self.assertIsNone(cache.get("expired_key")) ``` #### 三、测试控制与组织 9. **`@unittest.skip(reason)`** 无条件跳过测试用例。 ```python @unittest.skip("功能暂未实现") def test_unimplemented(self): ... ``` 10. **`unittest.main()`** 执行当前模块的所有测试用例[^1][^3]。 ```python if __name__ == '__main__': unittest.main() # 启动测试 ``` 11. **测试套件组装** 通过`TestSuite`组织多个测试用例: ```python suite = unittest.TestSuite() suite.addTest(TestMath('test_add')) suite.addTest(TestDB('test_connection')) ``` #### 四、高级功能 12. **`mock`模块集成** 使用`unittest.mock`模拟外部依赖: ```python from unittest.mock import patch with patch('module.ThirdPartyAPI') as mock_api: mock_api.return_value = "mocked_data" result = test_function() ``` 13. **参数化测试** 通过`subTest`实现参数化测试: ```python def test_multiple_inputs(self): inputs = [(1,2,3), (0,0,0), (-1,1,0)] for a, b, expected in inputs: with self.subTest(f"{a}+{b}={expected}"): self.assertEqual(add(a,b), expected) ``` #### 五、测试运行器 14. **生成HTML报告** 使用第三方库生成可视化报告(需安装`HTMLTestRunner`)[^2]: ```python with open('report.html', 'wb') as f: runner = HTMLTestRunner(f, title='测试报告') runner.run(suite) ``` > 完整示例:基础测试用例结构 > ```python > import unittest > > class TestStringMethods(unittest.TestCase): > def test_upper(self): > self.assertEqual("hello".upper(), "HELLO") # 验证大写转换 > > def test_split(self): > s = "hello world" > self.assertEqual(s.split(), ["hello", "world"]) > with self.assertRaises(TypeError): # 验证异常 > s.split(2) > > if __name__ == '__main__': > unittest.main() > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值