在软件测试领域接口自动化测试早已不是 “锦上添花” 的技能而是保障系统稳定性、提升回归效率的核心手段。相比于 UI 自动化测试接口测试直接与系统后端交互更易定位问题、执行效率更高也更适配敏捷开发的快速迭代节奏。一、接口自动化测试核心概念与价值接口自动化测试本质是通过代码模拟对系统接口的请求与响应校验确保系统内部组件间的数据通信、逻辑交互符合预期。和 UI 测试关注用户操作不同接口测试聚焦系统内部的逻辑、数据传输和状态流转这让它具备三大核心优势效率翻倍避免重复的手动回归尤其适配频繁迭代的项目一次编写即可反复执行问题定位更精准直接对接口层进行校验能快速定位是前端还是后端逻辑的问题成本更低无需依赖复杂的 UI 环境搭建也不用频繁适配前端页面改动维护成本远低于 UI 自动化。举个例子在线教育平台的课程购买接口涉及支付流程、订单生成、库存扣减等多环节逻辑手动测试很难覆盖所有场景而接口自动化可以一次性覆盖正常购买、金额异常、库存不足等所有场景每次迭代一键执行彻底解放双手。二、接口自动化测试全流程从需求到报告很多同学刚上手时总觉得接口自动化就是 “写代码发请求”但实际上完整的流程决定了测试的有效性和可维护性。下面拆解标准流程的每一步把细节讲清楚1. 需求分析搞懂接口的 “来龙去脉”写代码前先把接口的需求拆解得明明白白避免后期返工。核心要明确两件事分析请求接口的URL、请求方法GET/POST/PUT/DELETE 等、请求头如token、Content-Type、请求参数和请求体格式。分析响应接口的返回的数据格式JSON/XML、状态码200 成功、401 未授权、500 服务器错误等、关键字段如code、msg、data以及可能的错误信息。比如登录接口必须明确是POST请求参数是表单格式还是 JSON 格式是否需要携带Content-Type: application/json的请求头。比如课程查询接口成功时返回code200和课程列表无数据时返回code404这些都要提前明确。2. 挑选自动化接口优先覆盖高价值场景不是所有接口都适合自动化盲目自动化只会增加维护成本。我们可以从三个维度筛选优先自动化这些接口筛选维度核心判断标准典型例子功能复杂度逻辑分支多、参数组合复杂手动测试难以全面覆盖新增课程接口涉及多参数、多模块交互、查询课程接口多条件筛选逻辑高风险功能对业务影响大、出错后果严重的接口支付接口、用户注册接口、课程购买接口重复性高回归测试中需要频繁执行的接口登录接口、用户信息查询接口、课程列表查询接口以在线教育平台为例新增课程、查询课程、课程购买接口同时满足 “高复杂度 高风险 高重复性”是自动化的首选而课程评价、收藏接口复杂度和风险都较低可优先手动测试后续再逐步自动化。3. 设计自动化测试用例覆盖正常与异常场景测试用例是自动化的核心骨架直接决定了测试的全面性。如果功能测试阶段已经设计了用例可以直接复用如果没有要同时设计两类用例正向用例正常场景验证接口在合法输入下的行为比如 “正确的账号密码登录”“合法参数查询课程”。反向用例异常场景验证接口对非法输入的处理能力比如 “错误密码登录”“参数为空”“参数格式错误”“超出边界值的参数”。举个例子课程查询接口的用例设计用例类型用例场景预期结果正向用例输入合法课程名称查询返回对应课程列表状态码 200反向用例输入不存在的课程名称返回空列表状态码 200 或 404反向用例课程名称参数为空返回参数错误提示状态码 400边界值用例课程名称长度超出限制返回参数错误提示状态码 4004. 搭建自动化测试环境环境搭建的核心是选择合适的工具和依赖对于 Python 技术栈来说核心依赖只有一个 ——requests库它可以帮我们轻松发送 HTTP 请求。环境搭建步骤如下安装 Python 环境建议 3.7 及以上版本安装 requests 库命令如下指定版本是为了避免不同版本的 API 差异减少踩坑验证安装是否成功在命令行输入pip list能看到 requests 的版本号即可。指定版本是为了避免不同版本的 API 差异减少踩坑 pip install requests2.31.0 (venv) D:\apiAutoTest\Test01pip list Package Version ------------------ --------- certifi 2026.5.20 charset-normalizer 3.4.7 idna 3.17 pip 21.3.1 requests 2.31.0 setuptools 60.2.0 urllib3 2.7.0 wheel 0.37.15. 后续流程框架设计、用例执行、报告生成这些部分我们会在下一篇文章结合pytest框架详细讲解今天先聚焦 Requests 库的核心用法把 “发送请求、处理响应” 的基础打牢。三、第一个接口自动化脚本用 Requests 发请求搭建好环境后我们来写一个最简单的接口自动化脚本 —— 向百度首页发送 GET 请求验证接口响应。1. 代码示例# 导入requests库 import requests # 发送GET请求 r requests.get(https://www.baidu.com) # 打印响应对象 print(r)2. 运行结果执行代码后控制台会输出Response [200] Process finished with exit code 0Response [200]表示请求成功服务器返回了 200 状态码说明我们的第一个接口自动化脚本已经跑通了四、Requests 库核心用法详解requests库是 Python 接口自动化的 “神器”它封装了所有 HTTP 请求的底层细节让我们用几行代码就能完成复杂的接口请求。下面拆解它的核心用法把细节讲透。1. Response 对象接口响应的 “百宝箱”当我们用requests.get()/requests.post()发送请求后会返回一个Response对象这个对象包含了服务器返回的所有信息常用属性 / 方法如下属性 / 方法描述示例r.status_code响应状态码print(r.status_code)→ 200r.text字符串格式的响应体自动根据响应头编码解码r.content字节格式的响应体适合处理图片、文件等二进制数据r.json()将响应体解析为 JSON 对象接口返回 JSON 数据时最常用r.headers响应头字典格式print(r.headers[Content-Type])r.cookies服务器返回的 Cookies自动处理会话保持r.url实际请求的 URL可查看重定向后的最终地址r.raise_for_status()非 200 状态码时抛出异常快速判断请求是否成功举个例子我们打印百度请求的详细响应信息import requests r requests.get(https://www.baidu.com) # 打印状态码 print(状态码, r.status_code) # 打印响应头 print(响应头, r.headers) # 打印响应体前200个字符 print(响应体, r.text[:200])2. 常见请求方法GET/POST/PUT/DELETErequests库支持所有 HTTP 请求方法最常用的是GET和POST下面分别讲解1GET 请求查询数据用它GET 请求通常用于获取 / 查询数据参数直接拼在 URL 上也可以通过params参数传递import requests # 方式1直接拼URL参数 r1 requests.get(http://httpbin.org/get?name张三age20) # 方式2通过params参数传递更推荐自动处理编码 params { name: 张三, age: 20 } r2 requests.get(http://httpbin.org/get, paramsparams) # 打印请求的URL print(请求URL, r2.url) # 打印响应JSON print(响应数据, r2.json())2POST 请求提交数据用它POST 请求通常用于提交数据根据数据格式的不同分为表单数据和 JSON 数据分别用data和json参数传递import requests # 方式1表单数据Content-Type: application/x-www-form-urlencoded data_form { username: zhangsan, password: 123456 } r1 requests.post(http://httpbin.org/post, datadata_form) print(表单请求响应, r1.json()) # 方式2JSON数据Content-Type: application/json data_json { username: zhangsan, password: 123456 } r2 requests.post(http://httpbin.org/post, jsondata_json) print(JSON请求响应, r2.json()) 关键细节当使用json参数时requests 会自动设置请求头Content-Type: application/json无需手动添加而data参数则默认设置为表单格式。3通用请求方法requests.request()如果想统一处理不同请求方法可以使用request()方法通过method参数指定请求方式import requests # GET请求 r1 requests.request(methodGET, urlhttps://www.baidu.com) # POST请求 r2 requests.request(methodPOST, urlhttp://httpbin.org/post, json{key: value}) print(GET状态码, r1.status_code) print(POST状态码, r2.status_code)3. 添加请求信息Headers、Cookies、超时等实际接口测试中很多接口需要携带请求头、Cookies 或设置超时时间下面分别讲解1添加请求头Headers很多接口需要携带token、Content-Type等请求头才能正常访问通过headers参数传递import requests url http://httpbin.org/headers headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36, token: your_access_token_here } r requests.get(url, headersheaders) print(请求头信息, r.json())2添加 Cookies部分接口需要携带 Cookies 保持会话状态通过cookies参数传递import requests url https://account.cnblogs.com/user/userinfo headers { Accept: application/json, text/javascript, */*; q0.01 } cookies { .CNBlogsCookie: your_cookie_here } r requests.get(url, headersheaders, cookiescookies) print(用户信息, r.json())3设置超时时间timeout为了避免请求一直挂起建议给所有请求设置超时时间单位为秒import requests # 设置超时时间为5秒 try: r requests.get(https://www.baidu.com, timeout5) except requests.exceptions.Timeout: print(请求超时)4传递 URL 参数paramsGET 请求的查询参数可以通过params参数传递自动处理 URL 编码避免手动拼接出错import requests url http://httpbin.org/get params { name: 张三, keyword: Python 自动化测试 } r requests.get(url, paramsparams) print(请求URL, r.url) # 输出http://httpbin.org/get?name%E5%BC%A0%E4%B8%89keywordPython%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95五、实战案例接口请求与响应校验下面我们用一个模拟的博客接口完成完整的请求与响应校验流程1. 案例 1博客详情接口GET 请求import requests # 接口URL url http://8.137.19.140:9090/blog/getBlogDetail # 查询参数 params { blogId: 9773 } # 请求头 headers { token: your_token_here, x-requested-with: XMLHttpRequest } # 发送GET请求 r requests.get(url, paramsparams, headersheaders) # 校验响应状态码 assert r.status_code 200, 请求失败状态码非200 # 解析JSON响应 response_data r.json() # 校验响应数据 assert response_data[code] 200, 接口返回错误码 assert response_data[data][id] 9773, 博客ID不匹配 print(博客详情接口测试通过)2. 案例 2用户登录接口POST 请求import requests # 接口URL url http://8.137.19.140:9090/user/login # 表单数据 data { username: zhangsan, password: 123456 } # 发送POST请求 r requests.post(url, datadata) # 校验响应状态码 assert r.status_code 200, 登录请求失败 # 解析JSON响应 response_data r.json() # 校验登录结果 assert response_data[code] 200, 登录失败用户名或密码错误 assert token in response_data[data], 响应中未返回token print(用户登录接口测试通过)六、常见问题避坑指南刚上手 Requests 库时很容易踩这些坑提前帮你排雷params、data、json参数的区别params用于 URL 查询参数GET 请求常用data用于表单数据Content-Type为application/x-www-form-urlencodedjson用于 JSON 数据Content-Type为application/json无需手动设置请求头。乱码问题响应体出现乱码时可以手动设置编码r.encoding utf-8 print(r.text)HTTPS 证书验证失败访问 HTTPS 接口时如果出现证书错误可以通过verifyFalse跳过r requests.get(https://example.com, verifyFalse)注意生产环境不建议这么做存在安全风险超时设置所有请求都建议设置timeout参数避免请求挂起r requests.get(https://www.baidu.com, timeout10)