Pytest 教程:进阶用法 - 常用断言和数据驱动!

1123 篇文章 44 订阅
818 篇文章 2 订阅

进阶用法

常用断言

使用 Pytest 在接口自动化测试用例编写过程中,我们需要使用各种断言来验证测试的预期结果。

Pytest 提供了更多的断言和灵活的断言库,以满足各种测试需求。

以下是一些常用的 Pytest 接口自动化测试断言:

  • 相等性断言:检查两个值是否相等。

    assert actual_value == expected_value
  • 不相等性断言:检查两个值是否不相等。

    assert actual_value != expected_value
  • 包含断言:检查一个值是否包含在另一个值中,通常用于检查字符串是否包含子字符串。

    assert substring in full_string
  • 成员资格断言:检查一个值是否在集合、列表或其他可迭代对象中。

    assert item in iterable
  • 真值断言:检查一个表达式或变量是否为真。

    assert expression

    assert variable
  • 假值断言:检查一个表达式或变量是否为假。

    assert not expression

    assert not variable
  • 大于、小于、大于等于、小于等于断言:检查一个值是否大于、小于、大于等于或小于等于另一个值。

    assert value > other_valueassert value < other_valueassert value >= other_valueassert value <= other_value
  • 类型断言:检查一个值的类型是否符合预期。

    assert isinstance(value, expected_type)

    例如,检查一个值是否是字符串:

    assert isinstance(my_string, str)
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:691998057【暗号:csdn999】

 

  • 异常断言:检查在代码块中是否引发了特定类型的异常。

    with pytest.raises(ExpectedException):    # 代码块,期望引发 ExpectedException 异常​​​​​​​
  • 近似相等断言:检查两个浮点数是否在某个误差范围内相等。

    assert math.isclose(actual_value, expected_value, rel_tol=1e-9)
  • 列表相等断言:检查两个列表是否相等。

    assert actual_list == expected_list
  • 字典相等断言:检查两个字典是否相等。

    assert actual_dict == expected_dict
  • 正则表达式匹配断言:检查一个字符串是否匹配给定的正则表达式。

    import re
    assert re.match(pattern, string)​​​​​​​
  • 空值断言:检查一个值是否为 None

    assert value is None
  • 非空值断言:检查一个值是否不为 None

    assert value is not None
  • 布尔值断言:检查一个值是否为 True 或 False

    assert boolean_expression
  • 空容器断言:检查一个列表、集合或字典是否为空。

    assert not container  # 检查容器是否为空
  • 包含子集断言:检查一个集合是否包含另一个集合作为子集。

    assert subset <= full_set
  • 字符串开头或结尾断言:检查一个字符串是否以指定的前缀或后缀开头或结尾。

    assert string.startswith(prefix)assert string.endswith(suffix)​​​​​​​
  • 数量断言:检查一个列表、集合或其他可迭代对象的元素数量。

    assert len(iterable) == expected_length
  • 范围断言:检查一个值是否在指定的范围内。

    assert lower_bound <= value <= upper_bound
  • 文件存在断言:检查文件是否存在。

    import os
    assert os.path.exists(file_path)

以上是一些 Pytest 常用的断言,但根据具体的测试需求,您可能会使用其他断言或结合多个断言来更全面地验证测试结果。详细的断言文档可以在 Pytest 官方网站找到:Pytest - Built-in fixtures, marks, and nodes

数据驱动

在 API 自动化测试的过程中。使用数据驱动是一种常规测试方法,其中测试用例的输入数据和预期输出数据都被存储在数据文件中,测试框架根据这些数据文件执行多次测试,以验证 API 的各个方面。

测试数据可以很容易地修改,而不需要修改测试用例代码。

数据驱动测试可以帮助你有效地覆盖多种情况,确保 API 在各种输入数据下都能正常运行。

可参考 demo:https://github.com/Automation-Test-Starter/Pytest-API-Test-Demo

新建测试配置文件

配置文件会以 json 格式存储为例,其他格式如 YAML、CSV 等类似,均可参考​​​​​​​

// 新建测试配置文件夹mkdir config// 新建测试配置文件cd configtouch config.json
编写测试配置文件

配置文件存储测试环境的配置信息,如测试环境的 URL、数据库连接信息等。

demo 中的测试配置文件内容如下:

  • 配置 host 信息

  • 配置 getAPI 接口信息

  • 配置 postAPI 接口信息

{  "host": "https://jsonplaceholder.typicode.com",  "getAPI": "/posts/1",  "postAPI":"/posts"}
新建测试数据文件

请求数据文件和响应数据文件分别存储测试用例的请求数据和预期响应数据。​​​​​​​

// 新建测试数据文件夹mkdir data// 进入测试数据文件夹cd data// 新建请求数据文件touch request_data.json// 新建响应数据文件touch response_data.json
编写测试数据文件
  • 编写请求数据文件

请求数据文件中配置了 getAPI 接口的请求数据和 postAPI 接口的请求数据​​​​​​​

{  "getAPI": "",  "postAPI":{    "title": "foo",    "body": "bar",    "userId": 1  }}
  • 编写响应数据文件

请求数据文件中配置了 getAPI 接口的响应数据和 postAPI 接口的响应数据​​​​​​​

{    "getAPI": {      "userId": 1,      "id": 1,      "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",      "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"    },    "postAPI":{      "title": "foo",      "body": "bar",      "userId": 1,      "id": 101    }}
更新测试用例来支持数据驱动

为做区分,这里新建测试用例文件,文件名为 test_demo_data_driving.py​​​​​​​

import requestsimport json
# 从配置文件夹获取测试配置with open("config/config.json", "r") as json_file:    config = json.load(json_file)
# 从测试数据文件夹获取接口请求数据with open('data/request_data.json', 'r') as json_file:    request_data = json.load(json_file)
# 从测试数据文件夹获取接口响应数据with open('data/response_data.json', 'r') as json_file:    response_data = json.load(json_file)

class TestPytestDemo:
    def test_get_demo(self):        host = config.get("host")        get_api = config.get("getAPI")        get_api_response_data = response_data.get("getAPI")        # 发起请求        response = requests.get(host+get_api)        # 断言        assert response.status_code == 200        assert response.json() == get_api_response_data
    def test_post_demo(self):        host = config.get("host")        post_api = config.get("postAPI")        post_api_request_data = request_data.get("postAPI")        post_api_response_data = response_data.get("postAPI")        # 发起请求        response = requests.post(host + post_api, post_api_request_data)        # 断言        assert response.status_code == 201        assert response.json() == post_api_response_data
运行该测试用例确认数据驱动是否生效

若用 demo 项目运行数据驱动支持测试用例:test_demo_data_driving.py,建议先屏蔽掉其他测试用例,否则可能会报错

下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

最后: 可以在公众号:程序员小濠 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值