一站式接口文档及测试工具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

相关文章

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

Java后端接口中提取请求头中的Cookie和Token的方法

《Java后端接口中提取请求头中的Cookie和Token的方法》在现代Web开发中,HTTP请求头(Header)是客户端与服务器之间传递信息的重要方式之一,本文将详细介绍如何在Java后端(以Sp... 目录引言1. 背景1.1 什么是 HTTP 请求头?1.2 为什么需要提取请求头?2. 使用 Spr

Python实现NLP的完整流程介绍

《Python实现NLP的完整流程介绍》这篇文章主要为大家详细介绍了Python实现NLP的完整流程,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 编程安装和导入必要的库2. 文本数据准备3. 文本预处理3.1 小写化3.2 分词(Tokenizatio

SpringBoot3集成swagger文档的使用方法

《SpringBoot3集成swagger文档的使用方法》本文介绍了Swagger的诞生背景、主要功能以及如何在SpringBoot3中集成Swagger文档,Swagger可以帮助自动生成API文档... 目录一、前言1. API 文档自动生成2. 交互式 API 测试3. API 设计和开发协作二、使用

基于C#实现将图片转换为PDF文档

《基于C#实现将图片转换为PDF文档》将图片(JPG、PNG)转换为PDF文件可以帮助我们更好地保存和分享图片,所以本文将介绍如何使用C#将JPG/PNG图片转换为PDF文档,需要的可以参考下... 目录介绍C# 将单张图片转换为PDF文档C# 将多张图片转换到一个PDF文档介绍将图片(JPG、PNG)转

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来