文章目录
- 认识url
- http协议
- 接口规范
- Postman实现接口测试
-
- 设计接口测试用例
- 使用软件发送请求并查看响应结果
- [Postman 自动关联](#Postman 自动关联)
- Postman如何提交multipart/form-data请求数据
- Postman如何提交查询参数
- [Postman 如何批量执行用例](#Postman 如何批量执行用例)
- 单接口测试
- [Postman 断言](#Postman 断言)
- Postman参数化
- 接口测试自动化
认识url
- 互联网上标准资源的地址,一般称为统一资源定位符
- 组成:协议://hostname:[port]/path/[?查询参数1&查询参数2]
- 示例:
https://www.baidu.com/s?ie=utf-8\&f=8\&rsv_bp=1\&tn=84053098_3_dg\&wd=mysql desc\&oq=mysql%2520%25E5%25AD%2597%25E7%25AC%25A6%25E4%25B8%25B2%25E9%2595%25BF%25E5%25BA%25A6\&rsv_pq=a1182568005b8a7b\&rsv_t=c237j3Sa1r6hmKdWk1jv8fDNgTouU%2FaXxVtMvt9hnoX3bPes%2Flk6Xl7H06sI4yAoqIrCAQ\&rqlang=cn\&rsv_enter=1\&rsv_dl=tb\&rsv_sug3=7\&rsv_sug1=7\&rsv_sug7=100\&rsv_sug2=0\&rsv_btype=t\&inputT=2953\&rsv_sug4=3776- 协议:数据传输的格式,如http、https
- 服务器地址:域名或ip,示例中是www.baidu.com
- 端口:一个应用程序对外访问的唯一标识,通常是80(http)、443(https) 协议默认的端口可以默认不写
- 资源路径:端口号后,?之前的部分
- 参数:客户端向服务器传递的数据,参数与路径之间用?隔开,多个参数之间用&隔开
http协议
-
http:超文本传输协议,基于请求与响应的应用层协议
-
作用:规定了客户端与服务器之间的信息传递规范,是二者共同遵守的协议
-
组成:
- HTTP请求:定义请求数据格式
- 请求行、请求头、请求体
- 常用的请求方法:
- GET:从服务器获取资源
- POST:从服务器新建一个资源
- PUT:从服务器更新资源
- DELETE:从服务器删除资源
- 请求头:第二行到空白行之间
- 作用:通知服务器客户端请求信息
- 特点:键值对,每行一对
- Content-Type:定义请求体的数据类型
- text/html:htm格式
- image/jepg:jpg图片格式
- application/json:json数据格式
- application/x-www-form-urlencoded:表单默认的提交数据格式
- 请求体:空白行之后的内容
- 作用:传输数据实体
- 请求体常在post、put方法中使用
- 常配合的请求头:Content-Type和Content-Length
- HTTP响应:定义响应数据格式
- 状态行、响应头、响应体
- 状态行:响应数据的第一行
- 作用:描述服务器的处理结果
- 状态行由协议版本号、状态码、状态消息组成
- 状态码:
- 1xx:指示信息
- 2xx:成功
- 3xx:重定向
- 4xx:客户端错误
- 5xx:服务端错误
- 响应头:
- 位置:第二行到空白行之间
- 作用:描述客户端要使用的一些附加信息
- 特点:由键值对组成,每行一对
- 响应体:
- 位置:空行之后
- 作用:服务器返回的数据实体
- 特点:由图片、json、xml、html等多种类型
- HTTP请求:定义请求数据格式
-
常见的状态码:
接口规范
为什么要有接口规范?
为了让前后端开发人员更好的配合,提高工作效率。
- 传统接口风格
示例:对用户进行操作的相关接口
- RESTful:一种网络应用程序的设计风格和开发方式,提供一组设计原则和约束条件
示例:
特点:
1. 请求api的url用来定位资源
2. 通过标准的http方法,对资源进行增删改查等操作
3. 利用http状态码,返回状态信息
- 两种接口风格有什么区别?
Postman实现接口测试
设计接口测试用例
1. 提取测试点:
使用功能测试的方法,通过业务流程图,梳理测试点,提取业务路径到xmind中。
2. 解析接口文档:
问:为什么要解析接口文档?
答:熟悉接口信息,为设计接口测试用例做准备
问:接口文档一般由谁编写?作用是?
答:一般由后端开发编写,用来描述接口信息的文档
问:如何进行接口文档解析?
答:
1)分析接口之间的依赖关系
2)分析接口请求(如 url,请求方法,请求头,请求参数类型,请求参数等)
3) 分析接口响应(如 响应状态码,响应数据等)
3. 编写测试用例
根据接口文档和提取的业务路径,编写测试用例:
ID | 模块 | 优先级 | 用例名称 | 接口名称 | 前置条件 | 请求URL | 请求方法 | 请求头 | 请求参数类型 | 请求参数 | 预期结果 |
---|---|---|---|---|---|---|---|---|---|---|---|
... |
使用软件发送请求并查看响应结果
步骤:
- 设置请求方式
- 设置接口url
- 设置请求头
- 设置请求数据
- 点击send 发送
- 查看响应状态码
- 查看响应数据
Postman 自动关联
步骤:
- 在前一个用例的test 中获取响应结果,并设置需要的值为环境变量
- pm.response.json() 获取响应结果json
- pm.enviroment.set() 设置环境变量
- 在需要的用例中使用 {{变量名}} 来获取变量值
Postman如何提交multipart/form-data请求数据
步骤:
- 设置请求方式
- 设置接口url
- 设置请求头
- 设置请求数据:body->form-data->file->选择上传文件
- 点击send发送
- 查看响应状态码
- 查看响应数据
Postman如何提交查询参数
- 方法1:直接在接口url后面跟?查询参数
- 方法2:设置parameter区域
Postman 如何批量执行用例
- 点击测试集中的run按钮,批量执行用例
- 在弹出的Collection Runner窗口,点击运行
- 查看测试结果
单接口测试
- 分析接口文档,提取测试点 xmind 脑图
- 根据测试点,编写测试用例 excel
ID | 模块 | 优先级 | 用例名称 | 接口名称 | 前置条件 | 请求URL | 请求方法 | 请求头 | 请求参数类型 | 请求参数 | 预期结果 |
---|---|---|---|---|---|---|---|---|---|---|---|
... |
- 使用postman,实现并执行测试用例
Postman 断言
-
断言的作用:让工具代替人工,自动判断实际结果跟预期结果是否一致
-
Postman 如何进行断言?
常用的断言方式有:
1、断言响应状态码
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});2、断言响应text是否包含特定文本
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});
#3、断言响应json 的某个值,是否与预期结果相等
pm.test("Your test name", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.value).to.eql(100);
});
Postman参数化
- 参数化的作用:提高测试脚本的复用性
- Postman如何实现参数化?
- 准备数据文件 json文件,每项数据以json形式组织成一个列表,保存在json文件中;
- 引用数据文件:
- 请求中使用:{{变量名}}来引用变量
- 在代码中使用:data.变量名 来引用变量
- 执行用例
接口测试自动化
自动化测试框架目录结构:
- api:封装接口信息
- data:存放测试数据
- script:编写测试脚本
- common:存放通用工具类
- report:存放测试报告
- config.py:定义项目基本配置信息
- pytest.ini:pytest 配置文件
request入门
# 导包
import request
# 发送request请求,并返回响应
# request.请求方法 发送相应的请求,并返回响应结果
# 参数 json 提交json数据;参数headers 提交 headers 数据
response = request.get(url="", json=, headers=)
# 打印响应
print(response.status_code)
print(response.text)
print(response.json())
自动化实现
1、封装接口
python
# 在api文件夹中创建对应接口文件
# 在该文件中对该接口进行封装
# 导包
import request
# 创建接口类
class LoginAPI:
# 初始化
def __init__(self):
# 定义当前接口url
self.image_api = "" # 获取验证码url接口
self.login_api = "http:..." # 登录url接口
# 封装接口,并获取响应结果
def image(self):
return request.get(self.image_api)
def login(self, login_data):
return self.post(self.login_api, json=login_data}
2、编写测试用例
python
# 在script文件夹中创建py文件
# 导包
from api.login import LoginAPI
# 创建测试类
class TestLoginAPI():
# setup
def setup():
# 实例化接口对象
login_api = LoginAPI()
# teardown
def teardown():
pass
# 编写测试用例
def test_login_success():
pass
3、 数据驱动实现
python
# 导包
import pytest
# 定义数据,每条数据以元祖的形式组织,并通过列表组合起来
test_data = [(1, 2...), ()]
# 在用例前使用pytest的装饰器
@pytest.mark.parameterize("参数1,参数2...", test_data)
def test_login(self, 参数1,参数2...):
pass
4、json文件实现数据驱动
#将每条数据以json的形式组织,然后通过列表组织起来,放在data文件夹下,保存为xxx.json
编写方法,将json文件读取,并将json列表组织的形式转化为元祖列表组织的形式
结合步骤3,使用pytest的装饰器 @pytest.mark.parameterize 以实现json文件数据驱动
5、config文件使用
congfig文件中保存基本的url 和 项目的路径等基本信息