2.1.0 • Published 4 years ago
api-yaml v2.1.0
文档驱动接口测试用例
作者 联系QQ: 513678090
前言
yaml+function
以文档描述测试,用工具执行文档。
以扩展自定义函数(包括异步函数)方式解决文档无法处理复杂逻辑的问题
支持自定义插件开发
支持快速添加自定义函数,通常项目无需去开发插件,增加开发成本
使用
# 安装 npm install api-yaml -g # cd到自定义文件夹 然后创建test项目 api-yaml --init # 运行 注意目前配置文件不支持其他路径形式 api-yaml config.yaml
API-TEST 核心配置
process: 1 #启动进程数量 每个进程数据独立不共享
mode: TEST
modules:
- test # 引用的接口文档 从上至下顺序执行 如 ./v1/test1.yaml => v1/test1
clients:
- service: http #使用得扩展驱动
name: http1 #别名 可以指定接口调用某client 第一个client为默认
options: # http 模块基本设置
baseURL: http://127.0.0.1:8080
timeout: 1000
headers: {}
autoCookie: true #自动保存cookie 并发送cookie
results: # 对请求结果的处理扩展库
- service: TEST # 控制台展示
options:
file: false # 文件输出到根目录 test.$PID.log 会输出请求返回结果数据
log_err_res: false # 当接口错误时 是否打印返回信息 默认不打印
defines: # 定义宏 可以在接口配置中继承
header: # <-- 定义宏
req:
headers:
token: $project.token # 使用project对象的数据 可以在 init 扩展中赋值 也可以在下面 project 中赋值
name: $$project.user.name # $表示获取进程全局对象 $$表示获取当前流程的对象
extends: default # 扩展文件夹 可以修改成路径 ./extends
project: #可以给project对象设置默认值
token: asdfwioen
user:
name: 123
API-PIT 核心配置(继承API-TEST配置)
process: 1 #启动进程数量 每个进程数据独立不共享 但结果会进行综合统计
mode: PIT # 开启压测模式
PIT:
threads: # 线程列表 每个线程同步执行
- request: test1 #需要进行并发请求的名称
overtime: -1 #终止请求时间 -1表示不终止
count: 100 #请求的总次数 -1表示无限 (count 或 overtime)
interval: 10 #每次间隔 毫秒
concurrency: 10 #m每次并发数
threads: [] #进程数组 无限套娃
clients:
- service: http-request #使用得扩展驱动
name: http1 #别名 可以指定接口调用某client 第一个client为默认
options: # http 模块基本设置
baseUrl: http://127.0.0.1:8080
timeout: 1000
headers: {}
results: # 对请求结果的处理扩展库
- service: PIT # 控制台展示
options:
file: false # 文件输出到根目录 PIT.$PID.log 会输出请求返回结果数据
接口配置
- req 的配置是根据扩展库所需参数
- res 的配置是固定格式 value 可以根据扩展库不同
- describe: 请求1 # 请求描述
name: req1 # 请求名 这里被赋予了名字才能被变量获取
client: http1 #使用的client 名称 缺省值为第一个client
includes:
- header # 引用核心配置中的宏定义 将会继承其属性
req:
url: /test/index
method: get
headers:
token: ^test1.body.token # ^表示获取 API {test1} 的response 如果该api还未请求则会先进行请求
token: $$apis.test1.response.body.token # 该方式不会预执行请求 如果该api还未请求 则会报错
code: @eval 1234123 # 调用函数
params: #get请求使用
name: hh
# data: #post请求使用
# name: hh
res: # status headers body
status: 200
body:
code: 0000
?name: jlt # 参数前带 ? 表示非必存在
age: @mumber 1 hah # @表示调用 mumber 函数 后面则是跟的参数
扩展文件
- init 进行一些初始化 设置常量等等
- convert 定义req 参数转换函数
- valid 定义res 参数验证函数
Client扩展
http
使用的是 axios 库请求 参考axios请求配置 适合接口测试
http-request
使用的是 request 库请求 参考request请求配置 适合压力测试
常用请求参数转换函数
@eval 1+2 # 调用js代码返回结果
@getCookies # 获取cookie的值 s1=123;s2=345;
常用结果验证函数
@boolean
@number
@int
@float
@string
@object
@array
@regexp /^(\+(\d){2})?1\d{10}$/ # 正则验证
常用全局变量
# 用于自定义常量设置
$project
常用流程变量
# 所有请求的数据 可以直接访问到有名字的接口返回结果
# $$apis.name.response 响应数据 {status,headers,body,time}
$$apis