前言

断言是完整的测试用例中不可或缺的因素,用例只有加入断言,将实际结果与预期结果进行比对,才能判断它的通过与否。

unittest 框架提供了其特有的断言方式,如:assertEqual、assertTrue、assertIn等,pytest 同样有自己的断言方式,即使用assert进行断言。

assert

pytest 中使用python源生态assert字段进行断言。

常用断言方式

pytest常用的断言方式如下:

  • 判断是否相等,assert Actual(实际结果) == Expected(期望结果)
  • 判断是否不相等,assert Actual != Expected,其他如 >、<、>=、<= 都可直接使用。
  • 判断xx是否为真,assert xx
  • 判断xx是否不为真,assert not xx
  • 判断b是否包含a,assert a in b
  • 判断b不包含a,assert a not in b

assert 断言的对象可以是字符串、int、float、list、dict、tuple 任一类型。

使用示例

自定义了一个查询所有用户信息接口,返回参数格式如下:

{
"code": 1000,
"data": [
{"id": 1, "username": "刘德华", "sex": 0, "telephone": "12306", "address": "香港九龙区"},
{"id": 2, "username": "梅艳芳", "sex": 1, "telephone": "95511", "address": "上海黄浦区"},
{"id": 3, "username": "陈百强", "sex": 0, "telephone": "10086", "address": "北京海淀区"},
]
}

用例断言如下:

def test_get_all_users():
'''查询所有用户信息'''
url = "http://127.0.0.1:5000/users"
res = requests.get(url=url).text
res = json.loads(res)
# 断言是否相等
assert res['code'] == 1000
# 断言返回结果中data是否为True(这里其实就是判断是否为空)
assert res['data'] Andy = {"id": 1, "username": "刘德华", "sex": 0, "telephone": "12306", "address": "香港九龙区"}
# 断言返回结果中data是否包含刘德华的信息
assert Andy in res['data']

断言通过:

我们修改一下脚本让断言不通过,如下:

def test_get_all_users():
'''查询所有用户信息'''
url = "http://127.0.0.1:5000/users"
res = requests.get(url=url).text
res = json.loads(res)
# 断言是否相等
assert res['code'] == 1001
# 断言返回结果中data是否为True(这里其实就是判断是否为空)
assert not res['data'] Andy = {"id": 1, "username": "刘德华", "sex": 0, "telephone": "12306", "address": "香港九龙区"}
# 断言返回结果中data是否包含刘德华的信息
assert Andy not in res['data']

运行结果如下:

可以看到,code 的 Actual 为1000,而 Excepted 为1001,所以断言直接报错,不继续执行后面的代码。

断言结果添加异常信息

我们可以在断言异常的时候,输出一些提示信息,这样断言报错后,可以方便我们查看原因。

自定义的用户信息接口可以查询某个用户的信息,对它编写测试脚本如下:

def test_get_user():
'''查询所有用户信息'''
url = "http://127.0.0.1:5000/users/1"
res = requests.get(url=url).text
res = json.loads(res)
assert res['code'] == 1000
assert res['data']['username'] == "张学友", "判断返回是否为张学友,实际返回:{}".format(res['data']['username'])

运行结果如下:

总结

pytest 还能对执行过程中产生的 Exception 及 Warnning 进行断言,但这些情况在我们的测试中很少会用到,所以不做过多阐述。

pytest(5)-断言的更多相关文章

  1. 5. pytest的断言

    一.pytest 支持Python自带的标准断言 def f(): return 3 def test_function(): assert f() == 4 pytest 的断言报告,也很丰富,和详 ...

  2. Python单元测试框架之pytest 4 -- 断言

    From: https://www.cnblogs.com/fnng/p/4774676.html Python单元测试框架之pytest -- 断言 2015-08-31 23:57 by 虫师, ...

  3. iOS自动化探索(五)自动化测试框架pytest - Assert断言的使用

    使用assert语句进行断言 pytest允许使用标准的python assert语法,用来校验expectation and value是否一致 代码演示: def func(): def test ...

  4. pytest的断言、跳过、运行的按需要处理

    def test_one(): assert 1==1 assert 1!=2 assert {'name':'linda','age':19}=={'name':'linda','age':190} ...

  5. pytest自动化7:assert断言

    前言:assert断言就是将实际结果和期望结果做对比,符合预期结果就测试pass,不符合预期就测试failed. 实例1:简单断言 实例1优化版--增加异常信息文字描述 异常断言 excinfo 是一 ...

  6. pytest七:assert断言

    断言是写自动化测试基本最重要的一步,一个用例没有断言,就失去了自动化测试的意义了.什么是断言呢?简单来讲就是实际结果和期望结果去对比,符合预期那就测试 pass,不符合预期那就测试 failed py ...

  7. pytest文档11-assert断言

    前言 断言是写自动化测试基本最重要的一步,一个用例没有断言,就失去了自动化测试的意义了.什么是断言呢? 简单来讲就是实际结果和期望结果去对比,符合预期那就测试pass,不符合预期那就测试 failed ...

  8. pytest之assert断言

    assert pytest允许您使用标准Python断言来验证Python测试中的期望和值.例如,你可以写下 # content of test_assert1.py def f(): return ...

  9. Pytest系列(2) - assert断言详细使用

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 与unittest不同,py ...

随机推荐

  1. 理解Cookie和Session机制,及其安全问题

    大家常说"Cookie保存在客户端而Session保存在服务端",很多人看了有疑惑,明明Session就在Cookie中啊,为什么这么说?二者到底有啥区别? 一.Cookie 首先 ...

  2. RHCSA 第六天

    一.  创建下列用户.组和组成员资格: 1.创建名为 sysmgrs 的组 2.创建用户 natasha 同时指定sysmgrs作为natasha的附加组 3.创建用户 harry 同时指定 sysm ...

  3. 微服务架构 | 3.4 HashiCorp Consul 注册中心

    目录 前言 1. Consul 基础知识 1.1 Consul 是什么 1.2 Consul 的特点 2. 安装并运行 Consul 服务器 2.1 下载 Consul 2.2 运行 Consul 服 ...

  4. 小记录:flask的DEBUG开关

    请求站点的如下位置: http://www.ahfu.com/ahfuzhang/?debugger=yes&cmd=resource&f=style.css 居然正常范围了CSS文件 ...

  5. Using Swap

    # create swap file dd if=/dev/zero of=/.swap bs=1048576 count=4096 # format swap mkswap /.swap # sta ...

  6. vue-cli创建的项目打包成app引入字体图标的问题

    将项目在手机端调试时,发现引入的阿里图标显示不出来,需要在引入的iconfont.css文件夹里给url加上https

  7. gin中间request body绑定到不同的结构体中

    1. 一般通过调用 c.Request.Body 方法绑定数据,但不能多次调用这个方法. package main import ( "fmt" "github.com/ ...

  8. Python3 生成激活码

    1.文档: string模块:https://docs.python.org/3/library/string.html random模块:https://docs.python.org/3/libr ...

  9. Asp-Net-Core开发笔记:接口返回json对象出现套娃递归问题

    前言 看了下推送记录,一个月前,OK,我又变成月更了o(╯□╰)o,这绝对不行![○・`Д´・ ○] 所以今天来更新了 其实不是我懒得更新或者是太忙,其实是最近在写一篇很长的博客,一直没写完( Ĭ ^ ...

  10. redis集群运维

    Redis 的数据类型? Redis 支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及 zsetsorted set(有序集合) redis优势 速度快, ...