接口测试系列 接口自动化测试 pytest框架(一)

接口自动化测试

概念

接口自动化是通过对接口进行测试和模拟,以确保软件系统内部的各个组件能够正确的互相通信和交换数据。接口自动化测试可以显著提高测试效率和准确性。因为接口测试专注于测试系统内部的逻辑和数据传输,而不是像UI测试那样关注用户的操作和交互。同时,由于接口测试直接针对系统内部的结构和功能,可以更容易的发现和定位问题,减少测试成本和时间

接口自动化流程

需求分析

  • 分析请求:明确接口的URL、请求方法(如get、post、PUT、DELETE等)、请求头、请求参数和请求体等信息。
  • 分析响应:确定接口返回的数据格式、状态码以及可能的错误信息。

挑选自动化接口

  • 根据项目的时间、人员安排和接口的复杂度,挑选适合自动化测试的接口
  • 优先选择核心业务接口、频繁使用的接口以及容易出错的接口进行自动化测试

功能复杂度: 优先选择功能复杂、逻辑分支多的接口进行自动化测试。例如,涉及多种支付方式、多种订单状态转换的订单管理接口,手动测试难以全面覆盖所有场景,自动化测试可以更高效的进行测试
高风险功能: 选择对业务影响大、风险高的接口进行自动化测试,确保其稳定性和可靠性

。例如,涉及资金操作的支付接口,一旦出现问题可能导致严重的经济损失,因此需要进行充分的自动化测试
重复性高: 对于需要频繁执行的测试任务,如回归测试中的接口测试,自动化测试可以避免重复手动测试的繁琐和低效,提高测试效率

假设我们正在开发一个在线网课平台,该平台包含以下接口

  • 功能复杂度:
    新增课程接口: 涉及多个参数(课程名称、课程描述、课程价格等),需要与其他模块(如课程分类模块)交互
    查询课程接口: 支持多种查询条件(课程名称、课程类型、课程状态等),逻辑复杂。
    课程购买接口: 涉及支付流程、订单生成等复杂逻辑

  • 高风险功能:
    登录接口: 用户登录是系统的核心功能,任何问题都会影响用户体验
    新增课程接口: 课程信息的正确性直接影响平台的运营
    用户注册接口: 用户注册是系统的基础功能,任何问题都会影响用户获取服务

  • 重复性高的功能:
    登录接口: 用户每次使用系统都需要登录
    查询课程接口: 用户频繁查询课程信息
    用户信息查询接口: 用户注册是系统的基础功能,任何问题都会影响用户获取服务

设计自动化测试用例

  • 如果在功能测试阶段已经设计了测试用例,可以直接拿来使用
  • 根据接口需求和功能,设计正向测试用例(正常场景)和反向测试用例(异常场景),包括边界值测试、参数组合测试等

搭建自动化测试环境

  • 选择合适的编程语言(如Python、Java等)和 开发环境 (如PyCharm、IntelliJ IDEA等)来实现自动化测试
  • 以Python为例,安装必要的依赖库,如requests用于发送HTTP请求,pytest用于测试框架

设计自动化执行框架

  • 设计一个框架来执行测试用例,包括报告生成、参数化处理和用例执行逻辑

编写代码

  • 根据设计好的测试用例和框架,编写自动化测试脚本

执行用例

  • 使用测试框架(如unittest、pytest)来执行编写的测试用例

requests 库

requests 库是一个非常流行的 HTTP 客户端库,用于发送 HTTP 请求。requests.get 方法用于发送一个HTTP get 请求到指定的 URL

requests.get 方法返回一个 Response 对象,这个对象包含了服务器返回的所有信息

Response 对象提供的属性/方法介绍:

python 复制代码
# 发起 get 请求
def get(url, params=None, **kwargs)

# 发起 post 请求
def post(url, data=None, json=None, **kwargs)

# 支持不同请求方式,method: 指定请求方法,
# #⽀持``get``, ``OPTIONS``, ``HEAD``, ``post``, ``PUT``, ``PATCH``, or ``DELETE``
def request(method, url, **kwargs)
python 复制代码
import requests
# get post 的底层调用,其实就是request方法
# 因此也可以使用 request 方法 并且指定 method, 获得相同的结果

get = requests.get("http://www.baidu.com")
post = requests.post("http://www.baidu.com")

req_get = requests.request('get', 'http://www.baidu.com')
req_post = requests.request(method='post', url='http://www.baidu.com')
# python 传递参数时,可以不按顺序
# req_post = requests.reques(url='http://www.baidu.com', method='post')

print("get:",get)
print("post:",post)
print("req_get:",req_get)
print("req_post:",req_post)

添加请求信息

get()、post ()都是调用request()方法,因此这三个方法在发送请求是时,传承无太大区别,可传递的参数展示如下:

问题:上传参数选择params、json还是data?

params 用于在URL中传递查询参数,通常用于GET请求,但也可以用于其他类型的请求

json 用于在请求体(Body)中传递JSON 格式的数据,通常用于POST 或 PUT 请求

data 用于在请求体(Body)中传递表单数据,通常用于POST 或 PUT 请求
💡若参数上传格式为 json 格式,Content-Type 会自动被设置为 application/json

有了 requests 库,可以实现对接口发起 http 请求,然而自动化测试中,我们需要编写大量的测试用例,这些用例的组织、执行和管理也需要使用其他更强大的框架------pytest框架
requests库专注于HTTP请求的发送,而pytest框架则提供了测试的组织、执行和管理功能

自动化框架pytest

pytest官方文档:https://docs.pytest.org/en/stable/getting-started.html

pytest 是一个非常流行且高效的Python 测试框架,它提供了丰富的功能和灵活的用法,使得编写和运行测试用例变得简单而高效

为什么选择pytest:

  • 简单易用:pytest 的语法简洁清晰,对于编写测试用例非常友好
  • 强大的断言库:pytest 内置了丰富的断言库,可以轻松地进行测试结果的判断
  • 支持参数化测试:pytest 支持参数化测试,允许使用不同的参数多次运行同一个测试函数,这大大提高了测试效率
  • 丰富的插件生态系统:pytest 有着丰富的插件生态系统,可以通过插件扩展各种功能,比如覆盖率测试、测试报告生成(如 pytest-html 插件可以生成完美的HTML 测试报告)、失败用例重复执行(如 pytest- rerunfailures 插件 等)。此外,pytest 还支持与 selenium、requests、appinum等结合,实现Web自动化、接口自动化、App自动化测试
  • 灵活的测试控制:pytest 允许跳过指定用例,或对某些预期失败的case 标记成失败,并支持重复执行失败的case

用例运行规则

💡

  1. 文件名必须以 test_开头 或者 _test 结尾
  2. 测试类必须以Test 开头,并且不能有 _ _ init _ _ 方法
  3. 测试方法必须以 test 开头

当满足以上要求后,可通过命令行参数pytest 直接运行符合条件的用例:

由于 pytest 的测试收集机制,测试类中不可以定义 _ _ init _ _ 方法。pytest 采用自动发现机制来收集测试用例。它会自动实例化测试类并调用其所有以 test 开头的方法 作为测试用例。如果测试类中定义了 _ _ init _ _ 方法,那么当pytest 实例化该类时,_ _ init _ _ 方法会被调用,这可能会掩盖测试类的实际测试逻辑,并引入额外的副作用,影响测试结果的准确性

pytest 命令参数

pytest 提供了丰富的命令行选项来控制测试的执行。以下是一些常用的 pytest 命令行参数及其使用说明。

问题:当我们既要详细输出,又要指定文件时,命令会很长,而且每次运行都需要手动输入命令,如果解决?

将需要的相关配置参数统一放在 pytest 配置文件中。

pytest 配置文件

在当前项目下创建 pytest.ini 文件,该文件为 pytest 的配置文件,以下为常见的配置选项:

找到cases 文件下 以 case_ 开头的文件 ,A_ 类名下的,以 A_开头的测试用例,进行详细输出并打印 print 结果

相关推荐
补三补四10 小时前
pytest应用实践
pytest
Lary_c1 天前
【测试自动化】pytest + Allure 完整学习指南
运维·自动化·pytest
我的xiaodoujiao4 天前
API接口自动化测试详细图文教程学习系列1--序章
python·学习·pytest
我的xiaodoujiao4 天前
API 接口自动化测试详细图文教程学习系列2--相关Python基础知识
python·学习·测试工具·pytest
H_unique6 天前
博客接口自动化测试--搭建测试环境&库的介绍&安装allure
python·pytest·测试
真智AI6 天前
MCP+pytest自动重构回归:复刻ARIS循环
重构·pytest
零基础的修炼6 天前
自动化测试---pytest
pytest
鲜于言悠9057 天前
博客系统测试报告
python·功能测试·selenium·jmeter·测试用例·集成测试·pytest
0和1的舞者8 天前
高并发论坛系统:单元测试 + 接口自动化 + 性能测试 + CI/CD 全链路测试报告
java·测试开发·测试工具·jmeter·pytest·测试·测试报告