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、参考代码

 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、运行后结果入下,就是加载到的所有测试用例了:

参考代码

 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()这个函数

参考代码

# 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_dirpattern=‘test*.py‘,top_level_dir=None)递归查找指定目录(start_dir)及其子目录下的全部测试模块,将这些测试模块放入一个TestSuite 对象并返

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

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

2、用例路径另一种写法

1 case_dir = os.path.join(os.getcwd(), "case")

原文地址:https://www.cnblogs.com/du-hong/p/10782655.html

时间: 2024-07-30 05:04:34

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

python接口自动化测试二十五:执行所有用例,并生成HTML测试报告

    import requestsimport unittest class TestQQ(unittest.TestCase):    '''测试QQ号接口'''      # 此注释将展示到测试报告的测试组类 def test_qq(self):        '''测试QQ号码,正确的appkey'''      # 此注释将展示到测试报告的用例标题        url = 'http://japi.juhe.cn/qqevaluate/qq'        par = {     

python接口自动化(十六)--参数关联接口后传(详解)

简介 大家对前边的自动化新建任务之后,接着对这个新建任务操作了解之后,希望带小伙伴进一步巩固胜利的果实,夯实基础.因此再在沙场实例演练一下博客园的相关接口.我们用自动化发随笔之后,要想接着对这篇随笔操作,不用说就需 要用参数关联了,发随笔之后会有一个随笔的 id,获取到这个 id,继续操作传这个随笔 id 就可以了(博客园的登录机制已经变了,不能用账号和密码登录了,这里用 cookie 登录) 大致流程步骤:web界面操作登录抓包查看cookie—>代码模拟cookie登录—>web界面操作新

python接口自动化测试二十六:使用pymysql模块链接数据库

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time    : 2018/5/28 18:51# @Author  : StalloneYang# @File    : mysql_test.py# @desc: # 连接数据库 import pymysql.cursors # 连接MySQL数据库connection = pymysql.connect(host='localhost', port=3306, user='yang', pass

“全栈2019”Java第九十六章:抽象局部内部类详解

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第九十六章:抽象局部内部类详解 下一章 "全栈2019"Java第九十七章:在方法中访问局部内部类成员详解 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学

python接口自动化--封装和参数化及unittest用例

一. 封装登录接口并进行参数化--禅道登录为例 login函数封装了登录接口并对登录账号和密码进行参数化 is_login_sucess函数封装了判断登录成功的方法 1 #testLogin.py 2 import requests 3 4 #登录案例 5 6 def login(s,admin,pwd): 7 s = requests.session() 8 url = "http://127.0.0.1/zentao/user-login-L3plbnRhby8=.html" 9

轻松学习JavaScript二十九:JavaScript中的this详解

这几天在看很多的JS的代码,多次出现this关键字,有时候表示不理解,就仔细看了这一方面的知识. 在JavaScript语言中,this的定义是:this是包含它的函数作为方法被调用时所属的对象.说明:这句话有点咬 嘴,但一个多余的字也没有,定义非常准确,我们可以分3部分来理解它:1包含它的函数.2作为方法被调用时.3所 属的对象.随着函数使用场合的不同,this的值会发生变化.但是有一个总的原则,那就是this指的是,调用函数的那 个对象. this是Javascript语言的一个关键字,它代

python接口自动化(十四)--session关联接口(详解)

简介 上一篇cookie绕过验证码模拟登录博客园,但这只是第一步,一般登录后,还会有其它的操作,如发帖,评论等等,这时候如何保持会话呢? session简介 1.通过help方法查看帮助文档,截图一部分,后面省略了,有兴趣的自己可以敲一下看看 2.参考代码 1 # coding:utf-8 2 import requests 3 help(requests.session()) 使用session登录 1.使用session登录只需在登录的基础上稍做修改,即可 2.参考代码 # coding:u

[Python爬虫] 之二十六:Selenium +phantomjs 利用 pyquery抓取智能电视网站图片信息

一.介绍 本例子用Selenium +phantomjs爬取智能电视网站(http://www.tvhome.com/news/)的资讯信息,输入给定关键字抓取图片信息. 给定关键字:数字:融合:电视 二.网站信息 三.数据抓取 针对上面的网站信息,来进行抓取 1.首先抓取信息列表 抓取代码:Elements = doc('div[class="main_left fl"]').find('div[class="content"]').find('ul').find

python接口自动化(十八)--重定向(Location)(详解)

简介 在实际工作中,有些接口请求完以后会重定向到别的url,而你却需要重定向前的url.URL主要是针对虚拟空间而言,因为不是自己独立管理的服务器,所以无法正常进行常规的操作.但是自己又不希望通过主域名的二级目录进行访问,而 是希望通过主域名的二级域名进行访问.所以这个时候就会用到URL重定向. 重定向过程好比有个绰号叫“浏览器”的人写信找张三借钱,张三回信说没有钱,让“浏览器”去找李四借,并将李四现在的通信地址告诉给了“浏览器 ”.于是,“浏览器”又按张三提供通信地址给李四写信借钱,李四收到信