接口自动化测试
接口测试基础
1 认识接口测试
1、接口测试
- 接口:系统之间数据交互的通道。
- 硬件接口
- 软件接口
- 接口测试:基于不同的输入参数,校验接口响应数据与预期数据是否一致。
- 接口测试需要学
1.接口测试用例设计
2.工具实现接口测试
3.代码实现接口测试
![image]()
2、接口测试流程
1.接口文档分析
2.设计测试用例
3.脚本开发
4.执行脚本
5.缺陷跟踪
6.测试报告
2 HTTP协议
1、URL
- URL:是互联网上标准资源的地址,一般称为统一资源定位符。
- 组成:协议:// hostname[:port] / path / [? 查询参数1 & 查询参数2]
![image]()
2、HTTP协议
- HTTP:超文本传输协议,基于请求与响应的应用层协议。
- 作用:规定了客户端与服务器之间信息传递规范,是二者共同遵守的协议。
- 组成:
- HTTP请求:定义请求数据格式
- 请求行、请求头、请球体
- HTTP响应:定义响应数据格式
- 状态行、响应头、响应体
- HTTP请求:定义请求数据格式
- HTTP请求-请求行
- 位置:请求数据第一行
- 作用:说明请求方法、访问的资源、协议版本
![image]()
- 常用请求方法:
- GET:从服务器获取资源
- POST:在服务器新建一个资源
- PUT:在服务器更新资源
- DELETE:从服务器删除资源
- HTTP请求-请球头
- 位置:请求数据第二行到空白行之间
- 作用:通知服务器客户端请求信息
- 特点:请求头部由键值对组成,每行一对
![image]()
- Content-Type:请求体数据类型
- text/html:HTML格式
- image/jpeg:jpg图片格式
- application/json:JSON数据格式
- application/x-www-form-urlencoded: 表单默认的提交数据格式
- multipart/form-data:在表单中进行文件上传时使用
- HTTP请求-请求体
- 位置:空白行之后的内容
- 作用:传输数据实体
- 注意:请求体常在POST、PUT方法中使用
- 常配合的请求头:Content-Type和Content-Length
![image]()
- 请求报文中可以没有请求体数据
- HTTP响应-状态行
- 位置:响应数据第一行
- 作用:描述服务器处理结果
- 内容:状态行由协议版本号、状态码、状态消息组成
![image]()
- 状态码:三位数字组成,第一个数字定义响应类别
- 1XX:指示信息
- 2XX:成功
- 3XX:重定向
- 4XX:客服端错误
- 5XX:服务端错误
- HTTP响应-常见响应状态码
![image]()
- HTTP响应-响应头
- 位置:第二行开始到空白行之间
- 作用:描述客户端要使用的一些附加信息
- 特点:响应头由键值对组成,每行一对
![image]()
- HTTP响应-响应体
- 位置:响应数据空白行之后
- 作用:服务器返回的数据实体
- 特点:由图片、json、xml、html等多种类型
![image]()
3 接口规范
- 作用:让前端开发与后端接口开发人员更好的配合,提高工作效率
- 常见接口规范:
- 传统接口风格
- RESTful接口风格
![image]()
- 传统接口风格
- 示例:对用户进行操作的相关接口,包括增删改查
![image]()
- 示例:对用户进行操作的相关接口,包括增删改查
- RESTful
- RESTful:一种网络应用程序的设计风格和开发方式,提供了一组设计原则和约束条件。
- 示例:
![image]()
- 特点:
- 请求API的URL用来定位资源
- 通过标准HTTP方法对资源进行增删改查操作
- 利用HTTP状态码返回状态信息
- 传统风格和RESTful区别:
![image]()
Postman实现接口测试
1 合同新增业务
- 先测试业务流程,确保核心功能正常
![image]()
1、找业务路径

2、解析接口文档
- ① 分析接口之间的依赖关系
② 分析接口请求(如:URL、请求方法、请求头、请求参数类型、请求参数等)
③ 分析接口响应(如:响应状态码、响应数据等)
![image]()
3、编写接口测试用例

2 登录接口调试
1、Postman介绍
- 介绍:Postman一款接口调试工具
- 特点:支持Mac、Windows和Linux
- 下载: https://www.getpostman.com/
![image]()
2、登录接口调试-获取验证码
- 需求:使用Postman访问验证码接口,并查看响应结果。
- 地址:http://kdtx-test.itheima.net/api/captchaImage
- 实现步骤:
- 设置请求方式
- 输入接口地址
- 点击发送请求
- 查看响应结果
![image]()
3、登录接口调试-登录
- 需求:使用Postman访问登录接口,并查看响应结果。
- 说明:
- 地址:http://kdtx-test.itheima.net/api/login
- 方法:Post
- 请求数据:
- 请求头:Content-Type: application/json
- 请求体:
- 实现步骤:
- 设置请求方式
- 输入接口地址
- 点击发送请求
- 查看响应结果
![image]()
- 如何使用Postman发送请求并查看响应结果?
① 设置请求方法
② 设置URL
③ 设置请求头
④ 设置请求数据
⑤ 点击Send发送请求
⑥ 查看响应状态码
⑦ 查看响应体数据
3 登录接口自动关联
- 问题:每次登录之前都需要手动复制验证码数据
- 思路:
![image]()
- 注意:编写代码之前需要手动提前创建并选择对应的环境
- 环境创建与选择
![image]()
![image]()
使用自动关联技术,实现登录成功
- 需求:
1、验证码接口:/api/captchaImage
2、登录接口:/api/login
3、登录接口请求体uuid字段 → 验证码接口返回uuid字段 - 分析:
①验证码接口响应体中提取uuid
②设置环境变量保存uuidvar jsonData=pm.response.json();
③登录接口引用uuidpm.environment.set("var_name",value);请求参数中引用:{{var_name}}
4 添加课程接口调试

5 上传合同接口调试


- Postman如何提交multipart/form-data请求数据 ?
① 设置请求方法
② 设置URL
③ 设置请求头
④ 设置请求数据
【body → form-data → file选择上传文件】
⑤ 点击Send发送请求
⑥ 查看响应状态码
⑦查看响应体数据
6 新增合同接口调试
1、添加合同接口调试

2、查询合同列表接口调试

- Postman如何提交查询参数
①设置在URL中
②设置Params区域
7 批量执行

Postman批量执行
- 作用:通过运行测试集的方式批量运行测试用例
- 步骤:
① 点击测试集中的“Run”按钮,批量运行测试用例
② 弹出Collection Runner窗口,点击运行按钮
③ 查看测试结果
![image]()
![image]()
![image]()
8 登录接口测试
接口用例设计思路


1、提取测试点

2、设计测试用例

3、使用Postman进行接口测试
- 步骤:
① 点击测试集中的“Add folder”添加文件夹管理测试用例
② 点击文件夹上的“Add Request”添加请求实现测试用例
![image]()
![image]()
9 Postman断言
1、Postman断言介绍
- 作用:让Postman工具代替人工自动判定预期结果和实际结果是否一致。
- 用法:
![image]()
2、Postman断言
响应状态码断言
- 模板名称:Status code: Code is 200
- 模板内容:
![image]()
包含指定字符串断言
- 模板名称:Response body: Contains string
- 模板内容:
![image]()
JSON数据断言
- 模板名称:Response body: JSON value check
- 模板内容:
![image]()
①断言响应状态码为200
pm.test("断言响应状态码为200",function(){
pm.response.to.have.status(200);
});
②断言响应数据中包含'成功'
pm.test("断言响应数据中包含'成功'",function(){
pm.except(pm.response.text()).to.include('成功')
});
③断言JSON数据中msg值为'操作成功'
pm.text("断言JSON数据中msg值为'操作成功'",function(){
var jsonData=pm.response.json();
pm.except(jsonData.msg).to.eql('操作成功')
});
10 参数化
Postman参数化介绍
- 场景:测试脚本中仅测试数据不一样,使用参数化提高脚本复用。
- 步骤:
① 测试数据保存在数据文件单独维护
② 引用数据文件实现脚本循环调用
![image]()
Postman参数化实现
- 准备数据文件
![image]()
- 引用数据文件数据
1.请求参数中获取
{{}}引用相关对象的key eg:{{username}}
2.代码中获取
Postman内置data对象引用key eg:data.status - 选择数据文件:运行测试集时选择数据文件
![image]()

- 参数化的作用是什么?
提高测试脚本复用性 - Postman如何实现参数化?
① 准备数据文件
② 引用数据文件
• 请求参数中获取:{{变量名}}
• 代码中获取:data.变量名
③ 批量执行测试用例
11 课程添加


1、提取测试点

2、设计测试用例

3、使用Postman进行接口测试
- 步骤:
① 点击测试集中的“Add folder”添加文件夹管理测试用例
② 点击文件夹上的“Add Request”添加请求实现测试用例
![image]()
![image]()
12 查询课程列表


1、提取测试点

2、设计测试用例

13 课程修改


1、提取测试点

2、设计测试用例

14 课程删除


1、提取测试点

2、设计测试用例

代码实现接口自动化测试
1 接口自动化基础
1、接口自动化测试
- 接口自动化:使用工具或代码代替人对接口进行测试的技术。
- 测试目的:防止开发修改代码时引入新的问题。
- 测试时机:
- 开发进行系统测试转测前,可以先进行接口自动化脚本的编写。
- 开发进行系统测试转测后,优先进行系统测试用例的执行,再进行接口自动化脚本的编写
![image]()
2、接口自动化测试流程

- 选取自动化测试用例
- 优先级高(先实现业务流程用例、后实现单接口用例)
- 功能稳定
![image]()
![image]()
- 搭建自动化测试环境
![image]()
- 什么时候开展接口自动化测试?
开发提测前,优先开展接口自动化测试;
开发提测后,优先开展系统测试、后开展接口自动化测试。 - 如何开展接口自动化测试?
① 选取自动化测试用例
② 搭建自动化测试环境
③ 搭建自动化测试框架
④ 代码实现自动化
⑤ 输出测试报告
⑥ 实现持续集成
2 接口自动化测试框架
1、接口自动化框架

2、接口自动化框架设计思路

3、搭建基础框架-定义项目目录结构

3 Requests库
1、Requests介绍
- Requests库:python中的“浏览器”,基于urllib的HTTP库
- 安装:
pip3 install requests - 验证:
pip3 show requests - 操作步骤:
① 导包
② 发送接口请求
③ 查看响应数据
2、Requests发送请求

3、Response查看响应




4 接口对象封装

- 接口对象封装
![image]()

1、接口对象层
#请求
import requests
#创建接口类
class LoginAPI:
#初始化
def __init__(self):
self.url_verify="http://kdtx-test.itheima.net/api/captchaImage"
self.url_login="http://kdtx-test.itheima.net/api/login"
#获取验证码接口
def get_verify_code(self):
return requests.get(url=self.url_verify)
#登录接口
def login(self,test_data):
return requests.post(url=self.url_login,json=test_data)
2、测试脚本层
#导包
from api.login import Login.API
#创建测试类
class TestBusinessContract:
#前置处理
def setup(self):
#实例化接口对象
self.login_api=LoginAPI()
#登录成功
def test01_login_success(self):
#获取验证码
res_v=self.login_api.get_verify_code()
print(res_v.status_code)
print(res_v.json())
#登录
login_data={"username":"admin","password":"admin123","code":"2","uuid":res_v.json().get("uuid")}
res_l=self.login_api.login(test_data=login_data)
print(res_l.status_code)
print(res_l.json())
- 接口对象封装的核心思想?
代码分层思想
① 接口对象层(重点关注接口封装调用)
② 测试脚本层(重点关注测试数据准备、断言及业务处理等)
5 合同新增业务

1、接口对象层
#请求
import requests
#创建接口类
class CourseAPI:
#初始化
def __init__(self):
self.url_add_course="http://kdtx-test.itheima.net/api/clues/course"
#课程添加
def add_course(self,test_data,token):
return requests.post(url=self.url_add_course,json=test_data,headers={"Authorization":token})
2、测试脚本层
关键代码:
#导包
from api.course import CourseAPS
#创建测试类
class TestContractBusiness:
#初始化
token=None
#前置处理
def setup(self):
#实例化接口对象
self.course_api=CourseAPI()
#1.登录成功
def test01_login_success(self):
...
#提取登录成功之后的token数据并保存在类的属性中
TestConntractBusiness.token=res_l.json().get("token")
print(TestConntractBusiness.token)
#课程新增成功
def test02_add_course(self):
add_data={"name":"测试开发提升课01","subject":"6","price":899,"applicablePerson":"2","info":"测试开发01"}
response=self.course_api.add_course(test_data=add_data,token=TestConntractBusiness.token)
print(response.json())


1、接口对象层
import requests
class ContractAPI:
def __init__(self):
self.url_upload="http://kdtx-test.itheima.net/api/common/upload"
def upload_contract(self,test_data,token):
return requests.post(url=self.url_upload,files={"file":test_data},headers={"Authorization":token})
2、测试脚本层
关键代码:
from api.contract import ContractAPI
class TestContractBusiness:
token=None
def setup(self):
self.contract_api=ContractAPI()
def test01_login_success(self):
...
TestContractBusiness.token=res_l.json().get("token")
def test03_upload_contract(self):
f=open("../data/test.pdf","rb")
response=self.contract_api.upload_contract(test_data=f,token=TestContractBusiness.token)
print(response.json())

6 登录接口测试
- 需求:
- 完成测试脚本的业务实现
- 针对响应结果进行断言
![image]()
- Python常见断言方式有:
- 相等断言(assert test_data=='xxx')
- 包含断言(assert 'xxx' in test_data)
7 数据驱动

- 如何实数据驱动
![image]()


8 课程管理




9 项目配置文件



10 Allurre报告

1、生成测试结果文件
安装:pip install allure-pytest
使用步骤:
1.将pytest配置文件中的命令行参数加上如下代码
--alluredir report
2.编写好测试脚本后,在命令行中运行pytest
[pytest]
addopts=-s --alluredir report
testpaths=./scripts
python_files=test*.py
python_classes=Test*
python_functions=test*
3.程序运行结束后,会在项目的report目录中生成一些json文件
2、使用allure生成在线报告














































浙公网安备 33010602011771号