Python - 用协程并发执行测试用例

背景

最近在工作中,遇到需要执行大量测试用例的情况。大概2500个测试用例,每个用例有数条HTTP请求以及一些特殊处理,使用unittest线性执行下来的结果是我花了2个半小时才执行完成!

为了解决这个问题,提高工作效率,实现测试用例并发执行是我所需要的。

几个想法

  1. 多线程执行测试用例

  2. 协程

可能遇到的问题:

多线程

值得说明的是,多线程执行测试用例是有前辈实现过的。具体实现过程没有看过,依稀记得他的实现过程会生成多份测试报告,然后用BeautifulSoup去解析、合并测试报告。

协程

  1. 使用协程,可能需要修改PyUnit源码
  2. 使用协程,可能需要修改当前测试用例为协程方法,改动可能很大

实现过程

由于正在学习Python协程,我还是决定先用协程试试能否实现。当然,最终结果证明改动不大,仅修改了源码的一小小部分,测试用例部分则只修改了单元测试模块名

首先是获取python3的源码。

git clone -b 3.5 https://github.com/python/cpython.git

unittest源码在Lib/unittest中。

给已有的测试用例打断点,调试几波,理清unittest模块对测试用例的调用执行顺序。

猜测主要过程为:

原实现流程

找到TestCase真正执行入口:

unittest/case.py 中的 TestCase 类中的 run 方法的 testMethod()。(Line 605)

测试用例执行入口

上层调用在TestSuite类中,修改上层入口,把对TestCase的顺序执行改为调用协程并发执行:

提取循环部分代码,改写为协程

最终结果

修改后,执行流程如下:

现在实现流程

经过上述修改,原来2600多个测试用例需要的执行时间,从两个半小时压缩到8分半钟(如图),提高效率不赘述。

测试报告

存在的问题

不支持 HTMLTestRunner, 执行测试用例请用 TestTestRunner

Github

https://github.com/ityoung/python3-fastunit

参考

https://stackoverflow.com/questions/30172821/python-asyncio-task-got-bad-yield

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、单元测试框架 不论对于开发还是测试,都离不开单元测试框架,对于开发而言使用单元测试框架,可以编写测试代码来验证...
    keitwo阅读 767评论 0赞 2
  • 洞见SELENIUM自动化测试 写在最前面:目前自动化测试并不属于新鲜的事物,或者说自动化测试的各种方法论已经层出...
    厲铆兄阅读 6,885评论 3赞 47
  • Startup 单元测试的核心价值在于两点: 更加精确地定义某段代码的作用,从而使代码的耦合性更低 避免程序员写出...
    wuwenxiang阅读 10,270评论 1赞 27
  • 用Python搭建自动化测试框架,我们需要组织用例以及测试执行,这里博主推荐Python的标准库——unittes...
    灰蓝蓝蓝蓝蓝蓝阅读 9,891评论 3赞 56
  • 你在回城的高速上给我发视频,说今天的车祸特别多。看到碎掉的车头还有倒在一边的车轮胎,我满脑袋的生死无常。 是啊,也...
    柠檬蜜夫人阅读 223评论 4赞 1

友情链接更多精彩内容