python接口自动化(二十六)--批量执行用例 discover(详解)

简介 

  咱们在写用例的时候,单个脚本的用例好执行,那么多个脚本的时候,如何批量执行呢?这时候就须要用到 unittest 里面的 discover 方法来加载用例了。加载用例后,用 unittest 里面的 TextTestRunner 这里类的 run 方法去一次执行多个脚python

本的用例。那么前边介绍那么多都是半道开始,半道出家,这篇就带你们从头至尾,一步一步给小伙伴们详细介绍一下。bash

新建测试项目

一、pycharm 左上角 File>New Projetc>Pure Python,在 location 位置命名一个测试工程的名称:honggetest微信

二、而后点击“Create”函数

三、选中刚才新建的工程右键>New>Python Package>新建一个 case 文件夹学习

四、重复第 3 步的操做,新建一个 case 的文件夹,在里面添加一个 baidu 和一个 blog 的文件夹,里面分别有两个用例的脚本,以下图所示。test_01,test_02,test_03,test_04 是咱们写用例的脚本测试

五、test_01建立完后,打开脚本,写入用例,其余的能够复制便可ui

六、参考代码编码

1 # coding:utf-8
 2 import unittest
 3 import time
 4 
 5 class Test(unittest.TestCase):
 6     def setUp(self):
 7         print ("start!")
 8     def tearDown(self):
 9         time.sleep(1)
10         print ("end!")
11     def test01(self):
12         print ("执行测试用例 01")
13     def test02(self):
14         print ("执行测试用例 02")
15     def test03(self):
16         print ("执行测试用例 03")
17 
18 if __name__ == "__main__":
19     unittest.main()复制代码

七、在 honggetest 这个项目下面建立一个脚本 run_all_case.py,接下来用这个脚本去批量执行全部的用例。spa

discover 加载测试用例

一、discover 方法里面有三个参数:3d

  -case_dir:这个是待执行用例的目录。

  -pattern:这个是匹配脚本名称的规则,test*.py 意思是匹配 test 开头的全部脚本。

  -top_level_dir:这个是顶层目录的名称,通常默认等于 None 就好了。

二、discover 加载到的用例是一个 list 集合,须要从新写入到一个 list 对象 testcase 里,这样就能够用 unittest 里面的 TextTestRunner 这里类的 run 方法去执行。

三、运行后结果入下,就是加载到的全部测试用例了:

参考代码

1 # coding=utf-8
 2 #1.先设置编码,utf-8可支持中英文,如上,通常放在第一行
 3 
 4 #2.注释:包括记录建立时间,建立人,项目名称。
 5 ''' 6 Created on 2019-4-29 7 @author: 北京-宏哥 8 Project:学习和使用discover批量执行测试用例 9 '''
10 #3.导入unittest模块
11 import unittest
12 #4.编写测试用例和断言
13 def all_case():
14     # 待执行用例的目录
15     case_dir = "C:\\Users\\DELL\\PycharmProjects\\honggetest\\case"
16     testcase = unittest.TestSuite()
17     discover = unittest.defaultTestLoader.discover(case_dir,
18                                                    pattern="test*.py",
19                                                    top_level_dir=None)
20     #discover方法筛选出用例,循环添加到测试套件中
21     for test_suit in discover:
22         for test_case in test_suit:
23             #添加用力到testcase
24             testcase.addTests(test_case)
25     print(testcase)
26     return testcase
27 if __name__ == "__main__":
28     # 返回实例
29     runner = unittest.TextTestRunner()
30     # run 全部用例
31     runner.run(all_case())复制代码

run 测试用例

一、为了更方便的理解,能够把上面 discover 加载用例的方法封装下,写成一个函数

二、先返回 TextTestRunner()类的实例

三、调用 run 方法去执行 all_case()这个函数

参考代码

# coding=utf-8
#1.先设置编码,utf-8可支持中英文,如上,通常放在第一行

#2.注释:包括记录建立时间,建立人,项目名称。
''' Created on 2019-4-29 @author: 北京-宏哥 Project:学习和使用discover批量执行测试用例 '''
#3.导入unittest模块
import unittest
#4.编写测试用例和断言
def all_case():
    # 待执行用例的目录
    case_dir = "C:\\Users\\DELL\\PycharmProjects\\honggetest\\case"
    testcase = unittest.TestSuite()
    discover = unittest.defaultTestLoader.discover(case_dir,
                                                   pattern="test*.py",
                                                   top_level_dir=None)
    testcase.addTests(discover)  # 直接加载 discover 能够兼容python2和3
    print(testcase)
    return testcase
if __name__ == "__main__":
    # 返回实例
    runner = unittest.TextTestRunner()
    # run 全部用例
    runner.run(all_case())复制代码

小结

一、

unittest模块中的TestLoader类有一个discover方法(Python2.7以后)
discover(
s
tart_dir
,
pattern='test*.py'
,
top_level_dir=None)
递归查找指定目录(start_dir)及其子目录下的所有测试模块,将这些测试模块放入一个TestSuite 对象并返

回。只有匹配pattern的测试文件才会被加载到TestSuite中。若是一个测试文件的名称符合pattern,将检查该文件是否包含 load_tests() 函数,若是 load_tests() 函数存在,则由该函数负责加载本文件中的测试用例。若是不存在,就会执行

loadTestsFromModule(),查找该文件中派生自TestCase 的类包含的 test 开头的方法。

二、用例路径另外一种写法
1 case_dir = os.path.join(os.getcwd(), "case")
     为了方便你们在移动端也能看到我分享的博文,现已注册我的微信公众号,扫描左下方二维码便可,欢迎你们关注,有时间会及时分享相关技术博文。    为了方便你们互动讨论相关技术问题,现已组建专门的微信群,因为微信群满100,请您扫描右下方宏哥我的微信二维码拉你进群(请务必备注:已关注公众号进群),欢迎你们加入这个你们庭,咱们一块儿畅游知识的海洋。    感谢您花时间阅读此篇文章,若是您以为这篇文章你学到了东西也是为了犒劳下博主的码字不易不妨打赏一下吧,让博主能喝上一杯咖啡,在此谢过了!    若是您以为阅读本文对您有帮助,请点一下左下角“推荐”按钮,您的“推荐”将是我最大的写做动力!另外您也能够选择【关注我】,能够很方便找到我!    本文版权归做者和博客园共有,来源网址:https://www.cnblogs.com/du-hong 欢迎各位转载,可是未经做者本人赞成,转载文章以后必须在文章页面明显位置给出做者和原文链接,不然保留追究法律责任的权利! 
复制代码
相关文章
相关标签/搜索