• yapi调研


    yapi调研

     2021-01-13

    目录

    1 yapi ER图
    2 数据管理
      2.1 修改接口
      2.2 同一接口处理逻辑
    3 Mock 优先级说明

      3.1 mock期望
      3.2 自定义 Mock 脚本
      3.3 全局mock
      3.4 普通mock
    4 自动化
      4.1 参数化&变量传递
      4.2 响应校验

     

     yapi部署

    0 简介

    YApi 是高效、易用、功能强大的 api 管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务。


    特性

    • 基于 Json5 和 Mockjs 定义接口返回数据的结构和文档,效率提升多倍
    • 扁平化权限设计,即保证了大型企业级项目的管理,又保证了易用性
    • 类似 postman 的接口调试
    • 自动化测试, 支持对 Response 断言
    • MockServer 除支持普通的随机 mock 外,还增加了 Mock 期望功能,根据设置的请求过滤规则,返回期望数据
    • 支持 postman, har, swagger 数据导入
    • 免费开源,内网部署,信息再也不怕泄露了

    1 yapi ER图

      

    2 数据管理

    2.1 修改接口

    备注:

    同一接口:按1.2章节处理方式

    不同接口:按新接口处理方式,原先导入的不删除

    2.2 同一接口处理逻辑

    只对接口做请求和响应报文(包括其中字段或报文对象)进行修改

    只要影响接口表 interface表 db.getCollection('interface').find({"title":"根据id更新用户的接口"})

    • 普通模式:不导入已存在的接口,即使请求,响应内容不一样

    无修改,除了"edit_uid" : 0,  这个是user id

    • 智能合并:

    "type" : "var",    变成    "type" : "static",

    请求相应报文被覆盖

    add_time没有改变

    up_time有改变

    • 完全覆盖:

    同智能合并

      

    3 Mock 优先级说明

    请求 Mock 数据时,规则匹配优先级:Mock 期望 > 自定义 Mock 脚本 > 项目全局 mock 脚本 > 普通 Mock。

    如果前面匹配到 Mock 数据,后面 Mock 则不返回。

    3.1 mock期望

    导航: 接口-》接口列表-》具体接口-》高级mock-》添加期望

     注:参数过滤不支持正则表达式

     注:mock地址 在设置->项目地址->mock地址获得

     3.2 自定义 Mock 脚本

    在前端开发阶段,对于某些接口,业务相对复杂,而 UI 端也需要根据接口返回的不同内容去做相应的处理。

    YApi 提供了写JS 脚本方式处理这一问题,可以根据用户请求的参数修改返回内容。

    全局变量
    请求

    • header 请求的 HTTP 头
    • params 请求参数,包括 Body、Query 中所有参数
    • cookie 请求带的 Cookies

    响应

    • mockJson 接口定义的响应数据 Mock 模板
    • resHeader 响应的 HTTP 头
    • httpCode 响应的 HTTP 状态码
    • delay Mock 响应延时,单位为 ms
    • Random Mock.Random 方法,可以添加自定义占位符,详细使用方法请查看 Wiki

    使用方法

    1. 首先开启此功能
    2. Mock 脚本就是用 JavaScript 对 mockJson 变量修改,请避免被全局变量(httpCode, resHeader, delay)的修改

     3.3 全局mock

    v1.3.21 新增全局 mock 设置,方便用户在项目层面上全局设置公共的mock数据,具体 mock 脚本详细使用方法详见 3.2自定义 Mock 脚本

    导航 :设置-》全局mock

    3.4 普通mock 

    1 mock.js

    原理
    基于 mockjs,跟 Mockjs 区别是 yapi 基于 json + 注释 定义 mock 数据,无法使用 mockjs 原有的函数功能。

    正则表达式需要基于 rule 书写,示例如下:

    {
      "name|regexp": "[a-z0-9_]+?",
      "type|regexp": "json|text|xml"
    }

    mock函数

    {
        "errcode": 0,
        "errmsg": "@word",
        "data": {
            "id": "@id", //@id 随机生成 id
            "name": "@name" //@name 随机生成用户名
        }
    }

    支持替换请求的 query, body 参数

    {
      "name": "${query.name}", //请求的url是/path?name=xiaoming, 返回的name字段是xiaoming
      "type": "${body.type}",   //请求的requestBody type=1,返回的type字段是1
      
    }

    注:mock.js是基于 json+注释 的方式,使用mockjs,需要在项目设置中开启json5选项(开启后可在接口 body 和返回值中写 json 字段)。

    导航:接口-》接口列表-》具体接口-》编辑 -》 返回数据设置

    {
        "errcode": 0,
        "errmsg": "@word",
        "name|regexp": "[a-z0-9_]+?",
        "type|regexp": "json|text|xml",
        "queryname": "${query.name}", //请求的url是/path?name=xiaoming, 返回的name字段是xiaoming
        "sex": "${body.sex}",   //请求的requestBody type=1,返回的type字段是1
        "data": {
            "id": "@id", //@id 随机生成 id
            "name": "@name" //@name 随机生成用户名
        }
    }

    请求mock返回如下

    {
      "errcode": 0,
      "errmsg": "wbh",
      "name": "o_",
      "type": "json",
      "queryname": "",
      "sex": 1,
      "data": {
        "id": "650000200308233351",
        "name": "Steven Clark"
      }
    }

     2 json-schema

    导航:同mock.js

     3 mock请求严格模式

    版本 v1.3.22 新增 mock 接口请求字段参数验证功能,具体使用方法如下:

    1. 打开 项目 -> 设置 开启 mock 严格模式
    2. 针对 query, form 中设置的必须字段会进行必填校验

    4 自动化

    4.1 参数化&变量传递

    目前 yapi 中的query,body,header和pathParam的输入参数已经支持点击选择功能

    注:不支持复杂的jsonpath语法,像 $.userlist[?(@.name=='hins')].userid 并不支持 

    4.2 响应校验

    编写完请求参数,可通过 js 脚本写断言

     常用js函数

    1.assert
    断言函数,详细 api 可查看 document

    常用 api

    • assert(value)
      判断 value 是否为 truth, 例如 assert(1) 通过, assert(0) 不通过,只要 value 不是 null, 0, false 等值验证通过
    • assert.equal(actual, expected)
      判断 actual 是否等于 expected,例如 assert(1, 1)通过
    • assert.notEqual(actual, expected)
      判断 actual 是否不等于 expected
    • assert.deepEqual(actual, expected)
      假设: actual = {a:1} 是一个对象,即便 expected = {a:1},如果使用 assert.equal 可能也是不相等的,因为在 js 引用的只是对象的一个指针,需要使用 assert.deepEqual 比较两个对象是否相等
    • assert.notDeepEaual(actual, expected)
      深度比较两个对象是否不相等

    2.status
    http 状态码

    3.params
    http request params, 合并了 query 和 body

    4.body
    返回 response body

    5.header
    返回 response header

    6.records
    记录的 http 请求信息,假设需要获取 key 为 555 的接口参数或者响应数据,可通过 records[555].params 或 records[555].body 获取

  • 相关阅读:
    Find all Windows Phone Application Bar Icon
    DELL PowerConnect 5548[初步]配置
    删除SD的分区
    Import/Export a database into Oracle
    索爱U100i排线更换笔记
    forrtl: severe (174): SIGSEGV, segmentation fault occurred
    下载功能和上传功能的实现
    自我小结:手动给GridView添加数据源
    删除指定目录内的文件
    GridView数据源中没有数据的时候显示表头
  • 原文地址:https://www.cnblogs.com/Ming8006/p/14267153.html
Copyright © 2020-2023  润新知