【PyUnit】一、如何让测试用例按序执行
- 2019 年 10 月 4 日
- 笔记
PyUnit(unittest) 是 Python 自带的单元测试框架,用于编写和运行可重复的测试。PyUnit 是 xUnit 体系的一个成员,xUnit 是众多测试框架的总称,PyUnit 主要用于进行白盒测试和回归测试。
PyUnit 具有如下好处:
- 可以使测试代码与产品代码分离。
- 针对某一个类的测试代码只需要进行较少的改动,便可以应用于另一个类的测试。
- PyUnit 开放源代码,可以进行二次开发,方便对 PyUnit 的扩展。
PyUnit具有如下特征:
- 使用断言方法判断期望值和实际值的差异,返回 bool 值。
- 测试驱动设备可使用共同的初始化变量或实例。
- 测试包结构便于组织和集成运行。
对于unittest框架的使用,建议参考详细的官方文档,本文主要分享在使用unittest过程中,测试用例执行顺序问题及扩展问题。
本期以三种unittest自带的方法为例,下期详述扩展示例。
unittest中的执行顺序
测试用例编写之后运行,发现执行顺序并不是按照我们编写的顺序/位置来执行,许多前后有关联的测试用例在这种情况下就没有办法保证其执行的顺序性,因此使得有前后关联的测试用例执行失败。例:下图打开微信/支付宝和关闭微信/支付宝是相关联的case,因为没有按照顺序执行,导致两个关闭的case失败。

在unittest中,loader.py的loadTestsFromTestCase方法里边,调用了getTestCaseNames方法来获取测试用例的名称,使用functools.cmp_to_key的方法对测试用例进行排序,如下图:

该方法默认是根据ASCII码的顺序加载测试用例,数字与字母的顺序为:0-9,A-Z,a-z。
基于unittest的机制,如何控制用例执行顺序呢?
查阅相关资料主要有如下几种方法。
通过TestSuite添加
通过TestSuite类的addTest方法,按顺序加载测试用例,如下图:

手动修改函数名称
在命名时,对函数名称进行编号,test后紧跟数字编号,根据ASCII码排序保证顺序执行,示例如下图:

通过TestLoader添加
通过TestSuite类的addTest方法,按顺序加载测试用例,如下图:

该方法可以同时测试多个类,并且同TestSuite方法相类似,该方法的执行需要对层级进行编号,以按照特定顺序执行。
从如上三种方法可以看出,人工排序不可避免,代码繁琐、不好维护,那如何在不修改每条case,不手动添加代码的情况下,让测试用例按照编写的顺序依次执行呢?关注公众号,下期将分享通过excel和其他扩展方法,实现测试用例顺序执行方法。