本文目录
- 一、unittest 测试用例的运行机制
- 在讲使用多线程去执行uniitest的测试用例之前,我们首先来分析一下,unittest中用例可以通过哪几种方式来执行。这个时候就得去看看unittest的源码了
- 二、多线程执行用例的实现思路
- 三、思路1:具体实现
- 四、思路2:代码封装
技术文章
前言使用python做过自动化测试的小伙伴,想必都知道unittest和pytest这两个单元测试框架,其中unittest是python的官方库,功能相对于pytest来要逊色不少,但是uniitest使用上手简单,也受到的很多的小伙伴喜...
使用python做过自动化测试的小伙伴,想必都知道unittest和pytest这两个单元测试框架,其中unittest是python的官方库,功能相对于pytest来要逊色不少,但是uniitest使用上手简单,也受到的很多的小伙伴喜爱。
一直以来都有小伙伴在问我,pytest可以通过相关的插件来实现多线程执行测试用例,为什么unittest没有呢?unittest如何去实现多线程运行呢?那么今天就专门来给大家聊聊如何使用多线程去执行unittest!
在讲使用多线程去执行uniitest的测试用例之前,我们首先来分析一下,unittest中用例可以通过哪几种方式来执行。这个时候就得去看看unittest的源码了
虽然 unittest 的底层代码是基于 C 语言实现的,源码中看不到详细的代码,但是我们可以发现 TestCase、TestSuite、TestRnner 三个类中都有 run 方法,而且 run 方法的作用的都是执行测试用例。
-
TestRunner 可以执行单条测试用例以及测试套件中所有的用例
-
Testcase 中的 run 方法是执行当前这条测试用例
其实不管是 TestRunner 还是 TestSuite 的 run 方法执行用例,最终还是调用了用例本身的 run 方法去执行的。用例执行的方法我们搞清楚了,那么接下来我们就可以采取相关的策略使用多线程来执行了。
思路一:创建多个测试套件,每个套件使用一个线程去执行报告
优缺点:
优点:同一个测试用例类中用例执行的先后顺序能够得到保障
缺点:用例需要自己手动添加到套件,然后分配给各个线程,会出现用例数量分配不均,线程资源浪费,
思路二:所有的用例收集到测试套件,使用多线程去执行套件的测试用例,
优缺点:
优点:多线程共享用例资源,能够充分利用多线程的资源
1、初步尝试
运行上面的 run_case.py 就会发现两个线程可以同时执行测试用例,但是存在一个问题,用例执行完之后,每个线程得到的结果是独立的,无法整合到一起!于是进行了以下优化。
2、再次尝试:测试结果整合
前面我们在执行测试套件的时候,是通过 TestRunner 去执行的,TestRunner 的 run 方法的参数只能传入测试用例或者测试套件,而 unittest 中 TestSuite,和 TestCase 的 run 方法在调用的时候,可以接收一个叫做 TestResult 的对象。
而用例执行的结果就是保存在这个 TestResult 对象中。我们如果要整个测试结果可以自己先创建一个 TestResult 对象,然后执行套件的时候传进入,最后两个套件执行得到的测试结果都会保存在这一个 TestResult 对象中。代码如下
运行上述代码,我们成功的使用多线程运行了测试用例,并且将测试用例执行的结果整合到了一起。
3、封装一个基于线程池来执行的函数
下面的代码封装用到了线程池的相关知识点,大家可以自行扩展
思路一实现了之后,思路二再来实现就会非常简单了,封装的代码如下:
关于多线程执行 unittest 就给大家分享到这里!
看到这里可能有些小伙伴会问,多线程执行如何生成测试报告呢?目前 unittest 生成测试报告使用的几个开源的库,比如 BeautifulReport,HTMLTestRunner 都不支持多线程。
不过要想实现的话也不难,对这些模块运行用例的方法进行重写就可以实现。关注公众号。小编后续还会出一篇多线程执行 unittest 测试用例生成测试报告的方法。
有感兴趣的小伙伴,别再犹豫哦~,可以私信我们,获取精美学习视频大礼包,加入QQ群: 972956275 ,微信群:13327216815,备注“官网”,可以了解更多软件测试学习资讯哦!