python的unittest框架如何按自己编好的顺序批量执行的解决方案

利用python的unittest框架批量执行case的加载方式有2种:

  1.通过unittest.main()来启动所需测试的测试模块;
  2.添加到testsuite集合中再加载所有的被测试对象,而testsuit里存放的就是所需测试的用例;

方案大概为以下4种:

1、通过unittest.main()来执行测试用例的方式:

 

 
  1. if __name__ == "__main__":

  2.     unittest.main()

 

2、通过testsuit来执行测试用例的方式:

 

 
  1. if __name__ == "__main__":

  2.     # 构造测试集

  3.     suite = unittest.TestSuite()

  4.     suite.addTest(TestCase("testCreateFolder"))

  5.     suite.addTest(TestCase("testDeleteFolder")) 

  6.     # 执行测试

  7.     runner = unittest.TextTestRunner()

  8.     runner.run(suite)

 

3、通过testLoader 逐一添加测试脚本:

 

 
  1. if __name__ == "__main__":

  2.      #此用法可以同时测试多个类

  3.      suite1 = unittest.TestLoader().loadTestsFromTestCase(TestCase1)

  4.      suite2 = unittest.TestLoader().loadTestsFromTestCase(TestCase2)

  5.      suite = unittest.TestSuite([suite1, suite2])

  6.      unittest.TextTestRunner(verbosity=2).run(suite)

 

4、通过TestLoader 类中提供的discover():

 

import unittest

case_path ="./test_case/"
suite = unittest . defaultTestLoader . discover ( case_path , pattern = "test_*.py" )
if __name__ == '__main__' :
    runner = unittest . TextTestRunner ()
    runner . run ( suite )

 

然后我们已知unittest默认加载脚本的顺序是:根据ASCII码的顺序加载,数字与字母的顺序为:0-9,A-Z,a-z。所以以A开头的测试用例方法会优先执行,以a开头会后执行。

很多情况下,我们的脚本会放在不同的路径下,如图:

【脚本分了很多层级,每一级都有case和下一级目录】

 

 

如果我们单个加载case,那么我们首先要做的,是需要在一个run文件的开头,import所有包含case的.py文件

 

 

脚本逻辑及框架设计痛点:在case比较多且目录多时,import比较费时费力。而如果使用discover()的方式,则脚本添加的顺序很可能不是我们理想的(通常情况下,我们的脚本之间有依赖关系,这就牵涉到如何写脚本逻辑的问题,此不多做讨论),一种方案如果在脚本文件中提前按case名称编写,如test_1, test_2, test_3,这无疑也是痛苦的,一旦我们需要新增和删除一个脚本时,维护case名称会费时费力。基于这些设计痛点,本人设计了一套解决方案,可以让脚本按照数据驱动的原理,顺序添加case名称加载到测试套件中,达到理想化的顺序执行问题。设计思路如下:

 

 

一,动态导入test_case目录及其所有子目录下的所有以test_开头的.py文件(测试脚本文件也需要这样维护),代码:

 

 

二,把需要执行的case文件的类以及其需要执行的case维护在excel中(也可以维护在其它类型文件中,怎么维护就怎么解析,目的是排序),附excel数据及解析方式:

说明:excel中标记为ready的才会添加到caseList中,这样不需要执行的case只需要改变isReady的值即可,返回值是一个按excel顺序排列并按格式 fileName.ClassName("caseName")保存的字符串List, 因为addTest方法就是按这个格式去匹配的

三,前面两步完成以后,只需要把caseList中的每一项[字符串]变成可以被程序识别的类,然后顺序的添加到测试套件中,即可完成测试套件的组装,这里需要用到了一个【eval】方法(不懂自行百度),附执行逻辑如下:

 

 

 

四,把步骤三返回的suite执行一个run方法即可,开头有介绍,不再另附代码

 

 

结论:如此,完美的解决了脚本的执行顺序问题,应用到自己的框架中,也会起到很好的效果。我想这也是开源自动化绕不开的难题,开发语言设计就是要先导入后识别,此方案的核心也是解决动态导入的问题

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值