| 点击下方图片有惊喜,精美礼品等你来拿哦 |
|---|
前言:
✌ 作者简介:渴望力量的哈士奇 ✌,大家可以叫我 哈士奇 ,一位致力于 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,下一章节我们将开始学习一下如何生成测试用例的测试报告,可以更直观的看到测试结果。



