2026赛前辅导-接口自动化测试

全国测试开发大赛

https://mp.weixin.qq.com/s/hi5Ke1W6fihVQscYc6bSMw

测试开发赛道:https://mp.weixin.qq.com/s/wyCY-pFyvHvi27vvnJ7YXQ

比赛报名地址:https://ccf.org.cn/cat2026

目前比赛报名时间截止到 5月27日

测试开发赛道官方选手通知QQ群:1102401108

考试范围

业务测试、算法、web 自动化测试和接口自动化测试相关的技能。

赛前技能准备

  • 掌握一门编程语言:python/java
  • 掌握对应语言的单元测试框架:pytest/JUnit
  • 软件测试的基础理论
  • web 自动化测试:selenium
  • 接口自动化测试:python 推荐使用 requests,java 推荐使用 restassured

目录

  • 学习路径
  • 环境搭建
  • requests 基本用法
  • 宠物商店接口自动化测试实战

学习路径

环境搭建

  • Python 安装配置:
    • 推荐 Python 版本:3.8 以上
    • 官方下载地址
    • 操作步骤:
      • 下载系统对应的安装程序。
      • 运行安装包。
      • 检查是否安装成功。
  • PyCharm 安装:
  • Pytest 安装:
    • pip install pytest
    • PyCharm 直接安装
  • Requests 安装
    • pip install requests
    • PyCharm 直接安装

HTTP 协议

计算机与网络设备要相互通信,双方就必须基于相同的方法。比如,如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通信、怎样结束通信等规则都需要事先确定。不同的硬件、操作系统之间的通信,所有的这一切都需要一种规则。而我们就把这种规则称为协议(protocol)。

HTTP 协议:超文本传输协议(HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。是用于分布式、协作式和超媒体信息系统的应用层协议。

  • HTTP 的默认端口:80
  • HTTPS 的默认端口:443
请求

  1. 请求行:请求方法、请求资源的 URL、HTTP 版本信息。
  2. 首部行:请求行的下一行一般为首部行的开始,包括主机域名、连接信息、用户代理等等信息。
  3. 实体主体:一般不使用。
响应

  1. HTTP版本/响应码

HTTP状态码(英语:HTTP Status Code)是用以表示网页服务器超文本传输协议响应状态的 3 位数字代码。所有状态码的第一个数字代表了响应的五种状态之一。

  • 1xx(临时响应)

  • 2xx (成功) :表示服务器成功处理了请求的状态代码,说明网页可以正常访问。

    • 200(成功) 找到了该资源,并且一切正常,服务器已成功处理了请求。
  • 3xx (重定向):表示要完成请求,需要进一步操作。需要重定向到其它地方。它让客户端再发起一个请求以完成整个处理

    • 301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
    • 302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
  • 4xx(请求错误) :表示请求可能出错,责任在客户端,如客户端的请求一个不存在的资源,客户端未被授权,禁止访问等,妨碍了服务器的处理。

    • 403 (禁止) 服务器拒绝请求。客户端未能获得授权。这通常是在401之后输入了不正确的用户名或密码。
    • 404 (未找到) 服务器找不到请求的网页。在指定的位置不存在所申请的资源。
  • 5xx(服务器错误):处理发生错误,责任在服务端,如服务端抛出异常,路由出错,HTTP版本不支持等

    • 500 (服务器内部错误) 服务器遇到错误,无法完成请求。 看到这个错误,你就应该查查服务端的日志了,肯定抛出了一堆异常
    • 503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。

接口请求方法

  • 标准方法
    • r = requests.request(method, url, **kwargs)
  • 简化方法
    • requests.get(url)
    • requests.post(url)
    • requests.put(url)
    • requests.delete(url)

演练环境

构造 GET 请求

  1. 打开 pycharm
  2. 创建 tests 包
  3. 新建 py 文件:test_rquests.py
  4. 写脚本
  • 快速导包:Alt + Enter
  • 格式化:win(Ctrl + Alt + L)mac(Command + Alt + L)
def test_get():
    '''
    发出一个 get 请求
    :return:
    '''
    get_url = "https://httpbin.ceshiren.com/get"
    r = requests.get(get_url)
    print(f"接口响应为 {r}")

构造 POST 请求

def test_post():
    '''
    发出一个 post 请求
    :return: 
    '''
    post_url = "https://httpbin.ceshiren.com/post"
    r = requests.post(post_url)
    print(f"post 请求的接口响应为 {r}")

构造 PUT 请求

def test_put():
    '''
    发出一个 put 请求
    :return:
    '''
    put_url = "https://httpbin.ceshiren.com/put"
    r = requests.put(put_url)
    print(f"post 请求的接口响应为 {r}")

构造 DELETE 请求

def test_delete():
    '''
    发出一个 delete 请求
    :return:
    '''
    delete_url = "https://httpbin.ceshiren.com/delete"
    r = requests.delete(delete_url)
    print(f"post 请求的接口响应为 {r}")

接口响应数据

属性 含义
r 响应 Response 对象(可以使用任意的变量名)
r.status_code HTTP 响应状态码
r.headers 返回一个字典,包含响应头的所有信息。
r.text 返回响应的内容,是一个字符串。
r.url 编码之后的请求的 url
r.content 返回响应的内容,是一个字节流。
r.raw 响应的原始内容
r.json() 如果响应的内容是 JSON 格式,可以使用该方法将其解析成 Python 对象。

接口请求数据

  • payload = {‘key1’: ‘value1’, ‘key2’: ‘value2’}
  • r = requests.get(url, params=payload)

定制请求头

  • headers = {‘user-agent’: ‘my-app/0.0.1’}
  • r = requests.get(url, headers=headers)

传递表单

  • payload = {‘key1’: ‘value1’, ‘key2’: ‘value2’}
  • r = requests.post(url, data=payload)

传递 json 数据

  • payload = {‘some’: ‘data’}
  • r = requests.post(url, json=payload)

上传文件

  • files = {‘file’: open(‘report.xls’, ‘rb’)}
  • r = requests.post(url, files=files)

接口测试断言

get_url = "https://httpbin.ceshiren.com/get"

def test_status_code():
    r = requests.get(get_url)
    # 获取响应状态码
    print(r.status_code)
    assert r.status_code == 200

复杂断言处理

  • JSON 格式的响应体指的是 HTTP 响应中的消息体(message body),它是以 JSON 格式编码的数据。
{
  "name": "John",
  "age": 30,
  "city": "New York"
}
import requests

get_url = "https://httpbin.ceshiren.com/get"

def test_res_json():
    r = requests.get(get_url)
    assert r.status_code == 200
    assert r.json()["url"] == get_url

宠物医院接口自动化实战

  • PetClinic 宠物医院:
    • 一个在线的小型的商城。
    • 主要提供了增删查改等操作接口。
    • 结合 Swagger 实现了接口的管理。

宠物医院需求分析

  • 被测产品:宠物医院系统。
  • 宠物医院宠物主人搜索接口:

接口测试用例设计

  • 宠物主人查询单接口用例

接口测试用例设计思路

编写接口自动化测试脚本思路

执行命令生成报告

pytest -v --alluredir=./results --clean-alluredir
allure serve ./results
allure generate --clean alluredir results -o results/html

总结

  • 知识点梳理
  • 环境搭建
  • 知识点回顾
  • 实战练习

interface_auto_test.zip (42.6 KB)