| 点击下方图片有惊喜,精美礼品等你来拿哦 |
|---|
前言:
✌ 作者简介:渴望力量的哈士奇 ✌,大家可以叫我 哈士奇 ,一位致力于 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 该工具目前的应用场景已不多,文档已删,为了排版好看才留着。
文章目录
- 用例断言模板
- 断言判断是否相等
- assert 常用方法 - 判断相等
- assert 常用方法 - 判断不相等
- assert 常用方法 - 对 list 进行相等的判断
- assert 常用方法 - 对 dict 进行相等的判断
- assert 常用方法 - 判断 对象 是否相等
- 断言判断是否为空
- 断言判断真假
- 断言判断是否包含
- 断言判断大小
- 断言判断类型
- 针对旅游网登录API进行断言判断
- 拓展 - unittest 框架的断言总结
在上一章节我们结合 “unittest” 框架针对登录接口把测试脚本转化为 “unittest” 底层实现的接口测试框架,并实现了接口测试用例的编写。当然了,如此做显然是不够的,我们好像并不能很好的组织测试用例,同时也没有真正的去校验测试用例的返回结果是不是符合预期的结果,这并不是我们想要的,所以在接下来的几个小章节中会就几个问题一下学习。
首先就是断言的问题 :断言呢其实是一个比较专业用语,大家都是搞技术的,这里不需要我再进行过多的复述了吧。它的本质意思其实就是校验,从代码上进行校验,判断程序是否正确。
用例断言模板接下来就学习一下断言究竟是如何实现的,这里简单介绍一下常用的几种断言方式。
下面的内容是通过 “python unit test” 创建的脚本文件与自动生成的模板,那就来看一看都有哪些常用的 assert 方法吧。
模板内容如下:
import unittest
class MyTestCase(unittest.TestCase):
def test_something(self):
self.assertEqual(True, False) # add assertion here
if __name__ == '__main__':
unittest.main()
断言判断是否相等
assert 常用方法 - 判断相等
其实 “unittest” 本身提供了很多丰富的断言方法,比较常见的一中断言方式就是 判断相等 。上文中的模板内容就是判断相等的一种断言方式,检验的就是 True 是否等于 False 。如果等于,返回的是 Tests passed ,不等于则返回 Tests failed 。除了 True 与 False 之外,还可以使用其他数值替代,见下方代码示例。
校验相等代码示例如下:
import unittest
class MyTestCase(unittest.TestCase):
# 判断相等
def test_equals(self):
self.assertEqual(1, 2/1)
if __name__ == '__main__':
unittest.main()
PS:这里的校验是 1 是否等于 2 ,不相等,返回 “Tests failed” 。
运行结果如下:
assert 常用方法 - 判断不相等
校验不相等代码示例如下:
import unittest
class MyTestCase(unittest.TestCase):
# 判断不相等
def test_equals(self):
self.assertNotEqual(1, 2/1)
if __name__ == '__main__':
unittest.main()
运行结果如下:
assert 常用方法 - 对 list 进行相等的判断
利用 assertListEqual() 方法是可以对两个 list 进行比较的,代码示例如下:
import unittest
class MyTestCase(unittest.TestCase):
# 判断相等
def test_equals(self):
self.assertListEqual([1, 2], [1, 2])
# 对应的不相等则使用 self.assertListNotEqual()
if __name__ == '__main__':
unittest.main()
运行结果如下:
这里有个拓展点,当判断 self.assertListEqual([1, 2], [2, 1]) 的时候,返回的结果是 “Tests failed”,这是因为 list 是一个有序的数据结构。如果换成 dict 字典这样的数据结构,哪怕是顺序不一样,返回的依然是 Test passed 。
ok,下面就来看看字典之间的相等判断。
assert 常用方法 - 对 dict 进行相等的判断利用 assertDictEqual() 方法是可以对两个 dict 进行比较的,代码示例如下:
import unittest
class MyTestCase(unittest.TestCase):
# 判断相等
def test_equals(self):
self.assertDictEqual({"a": "1", "b": "2"}, {"b": "2", "a": "1"})
# 对应的不相等则使用 self.assertDictNotEqual()
if __name__ == '__main__':
unittest.main()
运行结果如下:
以上呢,是比较常见的 判断相等的几种断言 ,还有一种判断相等的断言那就是 判断对象是否相等 ,继续往下看。
assert 常用方法 - 判断 对象 是否相等判断 对象 是否相等代码示例如下:
import unittest
class MyTestCase(unittest.TestCase):
# 判断相等
def test_equals(self):
self.assertIs(1, 2/2)
if __name__ == '__main__':
unittest.main()
运行结果如下:
断言判断是否为空
unittest 框架还有一个常用的断言功能,那就是判断是否为空。
使用 assertIsNone() 判断对象是否为空
判断对象是否为空代码示例如下:
import unittest
class MyTestCase(unittest.TestCase):
# 判断是否为空
def test_empty(self):
self.assertIsNone({})
# self.assertIsNone("")
if __name__ == '__main__':
unittest.main()
运行结果如下:
从运行结果来看,无论我们传入的是空的字典还是空的字符串,都会报 Tests failed ,所以只有我们传入一个空的对象才可以。比如 a = None
断言判断真假
使用 assertTrue() 判断对象是否为真。
判断真假断言的代码示例如下:
import unittest
class MyTestCase(unittest.TestCase):
# 判断真假
def test_isTrue(self):
self.assertTrue(1 != 2)
# self.assertFalse(1 == 2) # 判断为假,用法上与判断为真一致。
if __name__ == '__main__':
unittest.main()
运行结果如下:
断言判断是否包含
使用 assertIn() 判断第一个参数是否包含在第二个参数内。
判断是否包含代码示例如下:
import unittest
class MyTestCase(unittest.TestCase):
# 判断是否包含
def test_isIn(self):
self.assertIn('o', 'hello') # 判断 '0' 是否包含在 'hello' 内
# self.assertNotIn('love', 'hello') # 判断 'love' 是否不包含在 'hello' 内
if __name__ == '__main__':
unittest.main()
运行结果如下:
断言判断大小
使用 assertGreater() 断言判断大小
判断大小代码示例如下:
import unittest
class MyTestCase(unittest.TestCase):
# 判断大小
def test_greater(self):
self.assertGreater(2, 1) # 判断 2 是否大于 1
# self.assertGreaterEqual(1, 1) # 判断 1 是否大于等于 1
if __name__ == '__main__':
unittest.main()
运行结果如下:
断言判断类型
使用 assertIsInstance() 断言判断类型
断言判断类型代码示例如下:
import unittest
class MyTestCase(unittest.TestCase):
# 判断类型
def test_type(self):
self.assertIsInstance([1, 2], dict) # 判断 列表[1, 2] 的类型是否是 字典
if __name__ == '__main__':
unittest.main()
运行结果如下:
针对旅游网登录API进行断言判断
利用前文我们写的旅游网登录的API接口测试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()
运行结果如下:
拓展 - unittest 框架的断言总结
unittest中断言主要有三种类型:
- 基本的布尔断言,即:要么正确,要么错误的验证。
- 比较断言,和布尔断言相似,主要是通过比较两个变量的值得出布尔值。
- 复杂断言,断言两个列表、元组
主要方法如下:
| 断言方法 | 描述 |
|---|---|
| assertEqual(first, second, msg=None | 验证两个参数是否相等,不等则fail |
| assertNotEqual(first, second, msg=None) | 验证两个参数是否不相等,相等则fail |
| assertTrue(expr, msg=None) | 验证表达式是否为真,不为真则fail |
| assertFalse(expr, msg=None) | 验证表达式是否为假,不为假则fail |
| assertIs(expr1, expr2, msg=None) | 验证两个表达式是否为同一个对象 |
| assertIsNot(expr1, expr2, msg=None) | 验证两个表达式是否不为同一个对象 |
| assertIsNone(obj, msg=None) | 验证是否为None |
| assertIsNotNone(obj, msg=None) | 验证是否不为None |
| assertIn(member, container, msg=None) | 验证是否包含 |
| assertNotIn(member, container, msg=None) | 验证是否不包含 |
| assertIsInstance(obj, cls, msg=None) | 验证是否为指定类型 |
| assertIsNotInstance(obj, cls, msg=None) | 验证是否不为指定类型 |
| assertGreater(a, b, msg=None) | 大小判断,大于则pass,否则fail |
| assertGreaterEqual(a, b, msg=None) | 大于等于则pass |
| assertLess(a, b, msg=None) | 小于则pass |
| assertLessEqual(a, b, msg=None) | 小于等于则pass |
| assertAlmostEqual(first, second, places=None,msg=None, delta=None) | 约等于断言,验证first是否约等于second。 palces: 指定精确到小数点后多少位,默认为7 |
| assertNotAlmostEqual(first, second, places, msg, delta) | 验证first不约等于second |
| assertListEqual(list1, list2, msg=None) | 验证两个列表是否相等 |
| assertTupleEqual(tuple1, tuple2, msg=None) | 验证两个元组是否相等 |
| assertDictEqual(d1, d2, msg=None) | 验证两个字典是否相等 |
| assertRegex(text, expected_regex, msg=None) | 正则匹配验证,匹配则pass |
| assertNotRegex(text, unexpected_regex, msg=None) | 正则匹配验证,匹配则fail |
以上就是我们在接口测试用例,针对测试结果进行断言的常用方法,下一章节我们将具体的学习一下针对接口测试用例如何更好的维护,或者说针对用例的一些组织。



