栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

〖Python接口自动化测试实战篇⑬〗- 实战 - unittest框架之测试套件应用

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

〖Python接口自动化测试实战篇⑬〗- 实战 - unittest框架之测试套件应用

点击下方图片有惊喜,精美礼品等你来拿哦


前言:
✌ 作者简介:渴望力量的哈士奇 ✌,大家可以叫我 哈士奇 ,一位致力于 TFS 赋能的博主 ✌
CSDN博客专家认证、新星计划第三季全栈赛道 top_1 、华为云享专家、阿里云专家博主 
 如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步
 人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。
 如果感觉博主的文章还不错的话,还请关注、点赞、收藏三连支持一下博主哦


专栏系列(点击解锁)学习路线指引知识定位
Python全栈白皮书 零基础入门篇 以浅显易懂的方式轻松入门,让你彻底爱上Python的魅力。
语法进阶篇 主要围绕多线程编程、正则表达式学习、含贴近实战的项目练习 。
自动化办公篇 实现日常办公软件的自动化操作,节省时间、提高办公效率。
自动化测试实战篇 从实战的角度出发,先人一步,快速转型测试开发工程师。
数据库开发实战篇 更新中
爬虫入门与实战 更新中
数据分析篇 更新中
前端入门+flask 全栈篇 更新中
django+vue全栈篇 更新中
拓展-人工智能入门 更新中
网络安全之路 踩坑篇 记录学习及演练过程中遇到的坑,便于后来居上者
网安知识扫盲篇 三天打鱼,不深入了解原理,只会让你成为脚本小子。
vulhub靶场漏洞复现 让漏洞复现变得简单,让安全研究者更加专注于漏洞原理本身。
shell编程篇 不涉及linux基础,最终案例会偏向于安全加固方向。 [待完结]
WEB漏洞攻防篇 2021年9月3日停止更新,转战先知社区等安全社区及小密圈
渗透工具使用集锦 2021年9月3日停止更新,转战先知社区等安全社区及小密圈
点点点工程师 测试神器 - Charles 软件测试数据包抓包分析神器
测试神器 - Fiddler 一文学会 fiddle ,学不会倒立吃翔,稀得!
测试神器 - Jmeter 不仅是性能测试神器,更可用于搭建轻量级接口自动化测试框架。
RobotFrameWork Python实现的自动化测试利器,该篇章仅介绍UI自动化部分。
Java实现UI自动化 文档写于2016年,Java实现的UI自动化,仍有借鉴意义。
MonkeyRunner 该工具目前的应用场景已不多,文档已删,为了排版好看才留着。


文章目录
    •  演示案例准备工作
    •  通过 测试套件 实现测试用例的加载与组织
    •  通过 用例加载器 实现测试用例加载与组织
    •  通过 discover 实现测试用例加载

上一章节我们学习了用例组织的第一种方式,也就是在用例内部使用 Test Fixtures 用例包裹的方式来进行组织。除了这种逻辑上的应用,还有另外一种呢就是今天将要学习的 测试套件。

就是说,我们 可以通过测试套件选择不同的测试用例加入到 "测试套件" 来执行 。

 演示案例准备工作

在进行案例的演示之前,我们先准备一下,这里的准备是我为了方便接下来的演示导入不同的模块的测试Case。代码如下,(下面的代码复制一份成另一个文件,两个文件除了文件名不一样之外,内容是完全一样的)。

import unittest
import requests


class TestAccount(unittest.TestCase):

    def test_login_normal(self):    # 正常的登录
        phone = "13770000000"
        password = "123456"

        url_login = "http://trip.imooc.zhaedu.com/api/accounts/user/login/"  # 登录API
        data_login = {"username": phone, "password": password}  # 定义登录API传入信息
        res_login = requests.post(url=url_login, data=data_login)
        print("登录信息:", res_login.text)
        # cookies = requests.utils.dict_from_cookiejar(res_login.cookies)  # 获取 cookie
        # print("登录cookies:", cookies)
        self.assertIn('Husky', res_login.text)      # 当用户昵称包含在返回的登录信息里,我们就认为该登录Case通过

    def test_login_abnormal(self):    # 不正常的登录
        phone = "13770000000"
        password = "12345678"         # 密码不正确

        url_login = "http://trip.imooc.zhaedu.com/api/accounts/user/login/"  # 登录API
        data_login = {"username": phone, "password": password}  # 定义登录API传入信息
        res_login = requests.post(url=url_login, data=data_login)
        print("登录信息:", res_login.text)
        # cookies = requests.utils.dict_from_cookiejar(res_login.cookies)  # 获取 cookie
        # print("登录cookies:", cookies)
        # self.assertNotIn('Husky', res_login.text)      # 当用户昵称不包含在返回的登录信息里,我们就认为该登录失败Case通过
        self.assertIn("error_code", res_login.text)      # 当 "error_code" 包含在返回的登录信息里,我们就认为该登录失败Case通过


if __name__ == '__main__':
    unittest.main()

将其复制一份出来到另外一个 "xxx.py" 文件 ,这样方便我们进行不同化的内容。

 通过 测试套件 实现测试用例的加载与组织

代码示例如下:

# coding:utf-8


import unittest

from test_account import TestAccount
from test_account_copy import TestAccount2


suite = unittest.TestSuite()        # 定义一个套件
suite.addTest(TestAccount("test_login_normal"))  # 将 "test_account" 模块中 "TestAccount" 类 的 "test_login_normal"用例添加到 测试套件
suite.addTest(TestAccount2("test_login_abnormal2"))  # 将 "test_account_copy" 模块中 "TestAccount2" 类 的 "test_login_abnormal2"用例添加到 测试套件


unittest.TextTestRunner().run(suite)

运行结果如下:



suite.addTest() 方法还支持同时多个测试Case的传入,

例如 suite.addTests([TestAccount("test_login_normal"), TestAccount2("test_login_abnormal2")])

看看运行结果如何:


从运行结果来看,两种将测试Case添加进 “测试套件” 的方式的结果是一样的。


 通过 用例加载器 实现测试用例加载与组织

在前面 〖Python自动化测试实战篇⑩〗- 测试框架 unittest 的小实战案例 一文中我们也提到过 testLoader —> 用例加载器,也是 unittest 的 一种加载方式,可以向 TestSuite 中添加用例,接下来就试一试利用 testLoader 实现测试用例加载与组织。

代码示例如下:

# coding:utf-8


import unittest

from test_account import TestAccount
from test_account_copy import TestAccount2


# 区别于 测试套件 的加载单独测试用例的方式,"testLoader" ---> 用例加载器是加载的整个测试集
suite_test_account = unittest.TestLoader().loadTestsFromTestCase(TestAccount)
suite_test_account_copy = unittest.TestLoader().loadTestsFromTestCase(TestAccount2)


unittest.TextTestRunner().run(suite_test_account)
unittest.TextTestRunner().run(suite_test_account_copy)

运行结果如下:



 通过 discover 实现测试用例加载

相较于 unittest.TestSuite() 测试套件 与 unittest.TestLoader() 用例加载器 ,unittest.defaultTestLoader.discover() 则是一个不那么常用的用例加载方式,虽然它也是 defaultTestLoader 下的一种方法,但是大家经常叫它 test_discover() 来进行用例组织。

代码示例如下:

# coding:utf-8


import unittest


# 区别于 测试套件 的加载单独测试用例的方式,"unittest.defaultTestLoader.discover('./')" 执行的是当前文件路径下所有的测试用例
suite_test_account = unittest.defaultTestLoader.discover('./')


unittest.TextTestRunner().run(suite_test_account)

当然了,执行所有的测试用例,所消耗的时间,也是呈几何式增长的...

运行结果如下:



以上这些都算是 套件用例组织 方式,能够执行更多的测试用例。很多情况下,比如说每一个 登录场景 写成了一个文件,每一个 交易场景 写成一个文件等等,就可以使用这样的方式来组织。

用的最多的其实还是 suite = unittest.TestSuite() ,其他的相对来说使用的会少一些。

OK,下一章节我们将开始学习一下如何生成测试用例的测试报告,可以更直观的看到测试结果。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/947277.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号