• 全网最牛自动化测试框架系列之pytest(5)-断言


    【文章末尾给大家留下了大量的福利】

     

    前言

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

    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 任一类型。

    使用示例

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

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

    用例断言如下:

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

    断言通过:

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

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

    运行结果如下:

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

    断言结果添加异常信息

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

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

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

    运行结果如下:

     

    总结

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

      重点:学习资料学习当然离不开资料,这里当然也给你们准备了600G的学习资料

    【需要的可以扫描文章末尾的qq群二维码自助拿走】

    【记得(备注“csdn000”)】

    【或私信000】

    群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。

    项目实战:

    大型电商平台:

    全套软件测试自动化测试教学视频

    300G教程资料下载【视频教程+PPT+项目源码】

    全套软件测试自动化测试大厂面经

    python自动化测试++全套模板+性能测试

    听说关注我并三连的铁汁都已经升职加薪暴富了哦!!!!

  • 相关阅读:
    浅显易懂理解傅里叶变换
    Redis 集群 & Redis 事务 & Redis 流水线 & Redis 发布订阅 & Redis Lua脚本操作
    Prometheus Operator 实战 监控 etcd 集群
    go-cqhttp 机器人使用教程
    redis的实际使用
    什么是模型监控?(Valohai)
    外包干了6天,技术明显退步。。。
    Docker和anaconda的区别?
    Dapr 与 NestJs ,实战编写一个 Pub & Sub 装饰器
    合并果子(C++)[堆]
  • 原文地址:https://blog.csdn.net/m0_60054525/article/details/126573192