首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
41 篇文章
1
python接口自动化(二)--什么是接口测试、为什么要做接口测试(详解)
2
python接口自动化(三)--如何设计接口测试用例(详解)
3
python接口自动化(四)--接口测试工具介绍(详解)
4
python接口自动化(六)--发送get请求接口(详解)
5
python接口自动化(五)--接口测试用例和接口测试报告模板(详解)
6
python接口自动化(七)--状态码详解对照表(详解)
7
python接口自动化(八)--发送post请求的接口(详解)
8
python接口自动化(十)--post请求四种传送正文方式(详解)
9
python接口自动化(九)--python中字典和json的区别(详解)
10
python接口自动化(十一)--发送post【data】(详解)
11
python接口自动化(十二)--https请求(SSL)(详解)
12
python接口自动化(十三)--cookie绕过验证码登录(详解)
13
python接口自动化(十四)--session关联接口(详解)
14
python接口自动化(十五)--参数关联接口(详解)
15
python接口自动化(十六)--参数关联接口后传(详解)
16
python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
17
python接口自动化(十八)--重定向(Location)(详解)
18
python接口自动化(十九)--Json 数据处理---实战(详解)
19
python接口自动化(二十)--token登录(详解)
20
python接口自动化(二十一)--unittest简介(详解)
21
python接口自动化(二十二)--unittest执行顺序隐藏的坑(详解)
22
python接口自动化(二十三)--unittest断言——上(详解)
23
python接口自动化(二十四)--unittest断言——中(详解)
24
python接口自动化(二十五)--unittest断言——下(详解)
25
python接口自动化(二十六)--批量执行用例 discover(详解)
26
python接口自动化(二十七)--html 测试报告——上(详解)
27
python接口自动化(二十八)--html测试 报告——下(详解)
28
python接口自动化(二十九)--html测试报告通过邮件发出去——上(详解)
29
python接口自动化(三十)--html测试报告通过邮件发出去——中(详解)
30
python接口自动化(三十一)--html测试报告通过邮件发出去——下(详解)
31
python接口自动化(四十)- logger 日志 - 下(超详解)
32
python接口自动化(四十一)- 发xml格式参数的post请求(超详解)
33
python接口自动化(四十二)- 项目结构设计之大结局(超详解)
34
python接口自动化(三十二)--Python发送邮件(常见四种邮件内容)番外篇——上(详解)
35
python接口自动化(三十三)-python自动发邮件总结及实例说明番外篇——下(详解)
36
python接口自动化(三十四)-封装与调用--函数和参数化(详解)
37
python接口自动化(三十五)-封装与调用--流程类接口关联(详解)
38
python接口自动化(三十六)-封装与调用--流程类接口关联续集(详解)
39
python接口自动化(三十七)-封装与调用--读取excel 数据(详解)
40
python接口自动化(三十八)-python操作mysql数据库(详解)
41
python接口自动化(三十九)- logger 日志 - 上(超详解)

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

简介 

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

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

新建测试项目

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

2、然后点击“Create”

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

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

5、test_01创建完后,打开脚本,写入用例,其他的可以复制即可

6、参考代码

代码语言:javascript
复制
 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()

7、在 honggetest 这个项目下面创建一个脚本 run_all_case.py,接下来用这个脚本去批量执行所有的用例。

discover 加载测试用例

1、discover 方法里面有三个参数:

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

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

  -top_level_dir:这个是顶层目录的名称,一般默认等于 None 就行了。

2、discover 加载到的用例是一个 list 集合,需要重新写入到一个 list 对象 testcase 里,这样就可以用 unittest 里面的 TextTestRunner 这里类的 run 方法去执行。

3、运行后结果入下,就是加载到的所有测试用例了:

参考代码

代码语言:javascript
复制
 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 测试用例

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

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

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

参考代码

代码语言:javascript
复制
# 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())

小结

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

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

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

2、用例路径另一种写法

代码语言:javascript
复制
1 case_dir = os.path.join(os.getcwd(), "case")
下一篇
举报
领券