一站式接口文档及测试工具yapi介绍

2024-04-17 07:18

本文主要是介绍一站式接口文档及测试工具yapi介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我们部门正在使用yapi做接口文档的管理,较之之前纯手工写接口注释的方式确实方便了不少。

功能介绍

稍微看了一下,发现yapi除了做接口文档的可视化管理之外,还有不少的功能。

按照官方说法,YApi 是一个可本地部署的、打通前后端及QA的、可视化的接口管理平台。

YApi 是高效、易用、功能强大的 api 管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务。可以帮助开发者轻松创建、发布、维护 API,YApi 还为用户提供了优秀的交互体验,开发人员只需利用平台提供的接口数据写入工具以及简单的点击操作就可以实现接口的管理。

  • 基于 Json5 和 Mockjs 定义接口返回数据的结构和文档,效率提升多倍

  • 扁平化权限设计,即保证了大型企业级项目的管理,又保证了易用性

  • 类似 postman 的接口调试

  • 自动化测试, 支持对 Response 断言

  • MockServer 除支持普通的随机 mock 外,还增加了 Mock 期望功能,根据设置的请求过滤规则,返回期望数据

  • 支持 postman, har, swagger 数据导入

  • 免费开源,内网部署,信息再也不怕泄露了

亮点是支持类似于postman的接口调试方式,这对测试同学会比较友好;另外还支持自动化测试,支持response的断言。

自动化测试

那么yapi如何做自动化测试的呢?

yapi定义了包含测试集、Pre-Script 、Test-Script 三方面。

  • 测试集: 在平时的开发过程中,经常遇到的一个问题是每次调试接口都需要重新填写参数,YApi测试集能够保存之前填写的参数,方便下次的调试。每个的请求参数还可以通过前面已请求的接口数据读取,或填写mock随机字符串,通过设置断言脚本验证返回数据的正确性。

  • Pre-Script:Pre-Script 包括请求参数处理脚本和响应数据处理脚本两部分。通过自定义 js 脚本方式改变请求的参数和返回的 response 数据。他的使用场景如下:(1)接口请求参数需要加密及返回 response 解密;(2)接口请求参数需要添加计算 token

  • Test-Script (测试脚本): 通过自定义脚本断言接口参数或返回 response 数据,在接口用例页面点击 Test 编辑。

具体示例:

assert.equal(body.errcode, 0)
assert.equal(body.data.group_name, 'testGroup')
assert.equal(status, 200)

总的来看跟postman支持的测试能力差不多。

插件

yapi支持如下的一些插件

  • yapi sso 登录插件

  • yapi cas 登录插件 By wsfe

  • yapi gitlab集成插件

  • oauth2.0登录

  • rap平台数据导入

  • dingding 钉钉机器人推送插件

  • export-docx-data 数据导出docx文档

  • interface-oauth-token 定时自动获取鉴权token的插件

  • import-swagger-customize 导入指定swagger接口

其中oauth和swagger插件是相当实用的。

安装和部署

yapi的后端是用nodejs实现的,所以安装方式无非就是先装nodejs,再npm install,最后加个pm2做服务管理。

使用我们提供的 yapi-cli 工具,部署 YApi 平台是非常容易的。执行 yapi server 启动可视化部署程序,输入相应的配置和点击开始部署,就能完成整个网站的部署。部署完成之后,可按照提示信息,执行 node/{网站路径/server/app.js} 启动服务器。在浏览器打开指定url, 点击登录输入您刚才设置的管理员邮箱,默认密码为 ymfe.org 登录系统(默认密码可在个人中心修改)。

npm install -g yapi-cli --registry https://registry.npm.taobao.org
yapi server

利用pm2方便服务管理维护。

npm install pm2 -g  //安装pm2
cd  {项目目录}
pm2 start "vendors/server/app.js" --name yapi //pm2管理yapi服务
pm2 info yapi //查看服务信息
pm2 stop yapi //停止服务
pm2 restart yapi //重启服务

代码实现

随便看了一眼yapi的代码,对于这种前后端分离的项目,我建议大家可以先看后端的具体实体实现,也就是model层。

第一个实体是interface,看名字盲猜代表的是接口的意思。

getSchema() {return {title: { type: String, required: true },uid: { type: Number, required: true },path: { type: String, required: true },method: { type: String, required: true },project_id: { type: Number, required: true },catid: { type: Number, required: true },edit_uid: { type: Number, default: 0 },status: { type: String, enum: ['undone', 'done'], default: 'undone' },desc: String,markdown: String,add_time: Number,up_time: Number,type: { type: String, enum: ['static', 'var'], default: 'static' },query_path: {path: String,params: [{name: String,value: String}]},req_query: [{name: String,value: String,example: String,desc: String,required: {type: String,enum: ['1', '0'],default: '1'}}],req_headers: [{name: String,value: String,example: String,desc: String,required: {type: String,enum: ['1', '0'],default: '1'}}],req_params: [{name: String,desc: String,example: String}],req_body_type: {type: String,enum: ['form', 'json', 'text', 'file', 'raw']},req_body_is_json_schema: { type: Boolean, default: false },req_body_form: [{name: String,type: { type: String, enum: ['text', 'file'] },example: String,value: String,desc: String,required: {type: String,enum: ['1', '0'],default: '1'}}],req_body_other: String,res_body_type: {type: String,enum: ['json', 'text', 'xml', 'raw', 'json-schema']},res_body: String,res_body_is_json_schema: { type: Boolean, default: false },custom_field_value: String,field2: String,field3: String,api_opened: { type: Boolean, default: false },index: { type: Number, default: 0 },tag: Array};}

看了一下schema,果然不出所料,基本上一个接口的方方面面都定义到了。

再看interfaceCase.js,继续盲猜这个类用来表示接口测试用例。

getSchema() {return {casename: { type: String, required: true },uid: { type: Number, required: true },col_id: { type: Number, required: true },index: { type: Number, default: 0 },project_id: { type: Number, required: true },interface_id: { type: Number, required: true },add_time: Number,up_time: Number,case_env: { type: String },req_params: [{name: String,value: String}],req_headers: [{name: String,value: String}],req_query: [{name: String,value: String,enable: { type: Boolean, default: true }}],req_body_form: [{name: String,value: String,enable: { type: Boolean, default: true }}],req_body_other: String,test_res_body: String,test_status: { type: String, enum: ['ok', 'invalid', 'error', ''] },test_res_header: Schema.Types.Mixed,mock_verify: { type: Boolean, default: false },enable_script: { type: Boolean, default: false },test_script: String};}

梅开二度,这里有个字段是test_script,没仔细追代码了,不过估计测试的断言都以代码的形式存在里面。

根据思路,大家可以把model文件全部读一遍,这样就应该可以大致了解yapi的持久化层实现了。

功能实现层大家可以去读controller里的代码,ui层可以读client里的代码。

思考

总而言之,yapi基本上就是我们很多测试开发同学所开发的接口测试平台,支持接口文档查看,简单的接口自动化和mock等。

有志于从事测试开发的同学可以精读一下代码,相信会有不少收获。

需要搭建内部接口测试平台的同学可以直接私有化部署,用docker compose的话安装体验更佳。

(本文来自测试圈TC,作者乙醇)

- End -

扫一扫下面的二维码
免费领取10G的Python学习资料哦~
“扫一扫,领取Python学习资料”

这篇关于一站式接口文档及测试工具yapi介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/911133

相关文章

C#实现一键批量合并PDF文档

《C#实现一键批量合并PDF文档》这篇文章主要为大家详细介绍了如何使用C#实现一键批量合并PDF文档功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言效果展示功能实现1、添加文件2、文件分组(书签)3、定义页码范围4、自定义显示5、定义页面尺寸6、PDF批量合并7、其他方法

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

Python自动化处理PDF文档的操作完整指南

《Python自动化处理PDF文档的操作完整指南》在办公自动化中,PDF文档处理是一项常见需求,本文将介绍如何使用Python实现PDF文档的自动化处理,感兴趣的小伙伴可以跟随小编一起学习一下... 目录使用pymupdf读写PDF文件基本概念安装pymupdf提取文本内容提取图像添加水印使用pdfplum

Java中HashMap的用法详细介绍

《Java中HashMap的用法详细介绍》JavaHashMap是一种高效的数据结构,用于存储键值对,它是基于哈希表实现的,提供快速的插入、删除和查找操作,:本文主要介绍Java中HashMap... 目录一.HashMap1.基本概念2.底层数据结构:3.HashCode和equals方法为什么重写Has

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

C#高效实现Word文档内容查找与替换的6种方法

《C#高效实现Word文档内容查找与替换的6种方法》在日常文档处理工作中,尤其是面对大型Word文档时,手动查找、替换文本往往既耗时又容易出错,本文整理了C#查找与替换Word内容的6种方法,大家可以... 目录环境准备方法一:查找文本并替换为新文本方法二:使用正则表达式查找并替换文本方法三:将文本替换为图

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

Python批量替换多个Word文档的多个关键字的方法

《Python批量替换多个Word文档的多个关键字的方法》有时,我们手头上有多个Excel或者Word文件,但是领导突然要求对某几个术语进行批量的修改,你是不是有要崩溃的感觉,所以本文给大家介绍了Py... 目录工具准备先梳理一下思路神奇代码来啦!代码详解激动人心的测试结语嘿,各位小伙伴们,大家好!有没有想