关于python3 unittest 调用unittest.main() 执行多个测试函数并没有顺次执行的探讨。

简介: 在学习Python的单元测试的时候,扩展了一下,本来是想用setup和tearDown做一个简单的编号记录。然而,发现了问题。

在学习Python的单元测试的时候,扩展了一下,本来是想用setup和tearDown做一个简单的编号记录。然而,发现了问题。


代码如下:


class TestStudent(unittest.TestCase):
    num = 0
    def setUp(self):
        print('setUp... %d' % self.num)
    def tearDown(self):
        print('tearDown...%d ' % self.num)
    def test_80_to_100(self):
        self.num = self.num + 1
        s1 = Student('Bart', 80)
        s2 = Student('Lisa', 100)
        self.assertEqual(s1.get_grade(), 'A')
        self.assertEqual(s2.get_grade(), 'A')
    def test_60_to_80(self):
        self.num = self.num + 1
        self.num = self.num + 1
        s1 = Student('Bart', 60)
        s2 = Student('Lisa', 79)
        self.assertEqual(s1.get_grade(), 'B')
        self.assertEqual(s2.get_grade(), 'B')
    def test_0_to_60(self):
        self.num = self.num + 1
        self.num = self.num + 1
        self.num = self.num + 1
        s1 = Student('Bart', 0)
        s2 = Student('Lisa', 59)
        self.assertEqual(s1.get_grade(), 'C')
        self.assertEqual(s2.get_grade(), 'C')
    def test_invalid(self):
        self.num = self.num + 1
        self.num = self.num + 1
        self.num = self.num + 1
        self.num = self.num + 1
        s1 = Student('Bart', -1)
        s2 = Student('Lisa', 101)
        with self.assertRaises(ValueError):
            s1.get_grade()
        with self.assertRaises(ValueError):
            s2.get_grade()
if __name__ == '__main__':
    unittest.main()


预期的执行结果是:1234,顺次执行。


实际的结果是:3214,倒了但又没有完全倒。


首先猜测是python这东西封装以后实际是并发多线程处理。那么这样的话,预期模型应当是随机的排列组合。


然而多次跑过测试,结果无变化,说明是有一个规则规定了这样的运行顺序。


此时需要跳到三方库 unittest.main函数的实现查看。


然而太多的看不懂。


所以查询python3官方文档说明。辅助代码阅读。


终于,我找到了一个说明如下:





那么按照这个说法,我如果改变测试函数的名字,应当就可以按照预期的效果执行了。


实际测试,


通过。


至此,问题明确解决。


以上,作为记录。

目录
相关文章
|
3天前
|
存储 Python
在Python中,匿名函数(lambda表达式)是一种简洁的创建小型、一次性使用的函数的方式。
【6月更文挑战第24天】Python的匿名函数,即lambda表达式,用于创建一次性的小型函数,常作为高阶函数如`map()`, `filter()`, `reduce()`的参数。lambda表达式以`lambda`开头,后跟参数列表,冒号分隔参数和单行表达式体。例如,`lambda x, y: x + y`定义了一个求和函数。在调用时,它们与普通函数相同。例如,`map(lambda x: x ** 2, [1, 2, 3, 4, 5])`会返回一个列表,其中包含原列表元素的平方。
13 4
|
3天前
|
Python
在Python中,高阶函数是指那些可以接受一个或多个函数作为参数,并返回一个新的函数的函数。
【6月更文挑战第24天】Python的高阶函数简化代码,增强可读性。示例:`map()`检查用户名合法性,如`["Alice", "Bob123", "Charlie!", "David7890"]`;`reduce()`与`lambda`结合计算阶乘,如1到10的阶乘为3628800;`filter()`找出1到100中能被3整除的数,如[3, 6, 9, ..., 99]。
12 3
|
3天前
|
分布式计算 大数据 调度
MaxCompute产品使用问题之为什么用python写的udf函数跑起来比本地还要慢
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
3天前
|
SQL 分布式计算 大数据
MaxCompute产品使用问题之建了一个python 的 UDF脚本,生成函数引用总是说类不存在,是什么导致的
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
1天前
|
Python
python函数
python函数
5 0
|
1天前
|
Python
python之print函数
python之print函数
7 0
|
2天前
|
Python
使用Python计算有效值函数(RMS值)
使用Python计算有效值函数(RMS值)
8 0
|
7天前
|
JSON Java Maven
使用`MockMvc`来测试带有单个和多个请求参数的`GET`和`POST`接口
使用`MockMvc`来测试带有单个和多个请求参数的`GET`和`POST`接口
21 3
|
1月前
|
NoSQL 安全 测试技术
接口测试用例设计的关键步骤与技巧解析
该文介绍了接口测试的设计和实施,包括测试流程、质量目标和用例设计方法。接口测试在需求分析后进行,关注功能、性能、安全等六项质量目标。流程包括网络监听(如TcpDump, WireShark)和代理工具(Charles, BurpSuite, mitmproxy, Fiddler, AnyProxy)。设计用例时,需考虑基本功能流程、输入域测试(如边界值、特殊字符、参数类型、组合参数、幂等性)、线程安全(并发和分布式测试)以及故障注入。接口测试用例要素包括模块、标题、优先级、前置条件、请求方法等。文章强调了保证接口的幂等性和系统健壮性的测试重要性。
57 5
|
8天前
|
监控 前端开发 测试技术
postman接口测试工具详解
postman接口测试工具详解
35 7