python协程实现一万并发_Python - 用协程并发执行测试用例

欢迎测试同行加入QQ交流群,群号:70160503

背景

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

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

几个想法

多线程执行测试用例

协程

可能遇到的问题:

多线程

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

协程

使用协程,可能需要修改PyUnit源码

使用协程,可能需要修改当前测试用例为协程方法,改动可能很大

实现过程

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

首先是获取python3的源码。

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

unittest源码在Lib/unittest中。

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

猜测主要过程为:

698110-20180223100038323-1423076322.png

找到TestCase真正执行入口:

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

698110-20180202182726453-54980310.png

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

698110-20180202182953671-1131006176.png

最终结果

修改后,执行流程如下:

698110-20180223100205214-1411681128.png

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

698110-20180202181205953-2040263898.png

存在的问题

测试报告的Log获取不准确,应该是IO处理速度不足导致,后续需要想办法解决。(又有事做了:P)

已解决上述问题,原因在于使用HTMLTestRunner时,输出流代码未生效,导致原先重定向至stderr的结果被写入测试报告。在添加一秒钟睡眠时间后解决。(代码一行,debug一天,哭)

698110-20180223100244894-28080541.png

Github

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值