npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

viva-api-test

v1.0.0

Published

viva-api-test 是一个 REST API 测试工具

Downloads

26

Readme

viva-api-test

viva-api-test 是一个 REST API 测试工具

  • 声明式: 只需编写 JSON 配置文件,viva-api-test 可以友好地创建测试用例。
  • 上下文变量: viva-api-test 可以保存接口调用的上下文变量,这些变量可以在随后的接口调用时被使用。
  • 模块化: 封装每个测试用例成为模块,可以无痛地衔接每个测试用例,构造一个复杂的业务测试流程。
  • 结果校验: 方便校验接口调用结果,错误提示友好。
  • 插件配置: 可以编写插件脚本,对请求进行特殊处理。

Guide

配置

每一个 JSON 文件对应一个业务测试流程,viva-api-test 会对指定目录下所有 JSON 文件装载到测试工具中。

suit [String]

对应业务测试的名称描述

context [Object]

业务上下文预配置

steps [Array]

业务测试的步骤,每个步骤都是一个单元测试

desc [String]

步骤描述

import [String|Array|Object]

导入业务上下文变量到当前上下文,通常是通过 String 或者 Array 加载一个或者多个上下文变量。

例如:

// 假设业务上下文为
// {
//   uid: 'vivatest',
//   s: { token: 'xxxxxyyyyy' }
// }
// 按照如下配置获取到的当前上下文 { s: { token: 'xxxxxyyyyy' } }
"import": "s.token"
// 按照如下配置获取到的当前上下文 { uid: 'vivatest', s: { token: 'xxxxxyyyyy' } }
"import": ["uid", "s.token"]

如果需要对上下文变量进行重命名,需要通过 Object 来为指定上下文变量指定一个别名。

// 假设业务测试的上下文为
// {
//   uid: 'vivatest',
//   s: { token: 'xxxxxyyyyy' }
// }
// 按照如下配置获取到的当前上下文 { uid: 'vivatest', accessToken: 'xxxxxyyyyy' }
"import": {
  "uid": "uid",
  "accessToken": "s.token"
}

method [String] 可为空

请求动作,默认为 'GET'

host [String]

请求对应 host

path [String] 可配置

请求路径,可以通过上下文变量进行配置。

"import": "voteId", // 导入业务上下文变量 voteId 到当前上下文中
"path": "vote/${voteId}" // 通过模板语法和当前上下文变量,替换 path 路径

query [Object] 可配置 可为空

请求的查询字符串对象,可以通过上下文变量配置,配置方法同 path。

body [Object] 可配置 可为空

请求体,可以通过上下文变量配置,配置方法同 path。

rule [Object] 可为空

对返回的 body 进行验证 parameter

Example

equal [Object] 可配置 可为空

对返回的 body 进行等值比较。

context [Object] 可为空

将 body 返回的数据导入到业务上下文中,供后续接口使用。

例如:

// 这里保证了 body 的 data 字段中存在 id 属性
"rule": {
  "data": {
    "type": "object",
    "rule": {
      "id": "int",
      "link": "string"
    }
  }
},
// 将 data.id 保存到业务上下文对应的 voteId 中
"context": {
  "voteId": "data.id"
}

filter [Object] 可为空

弥补配置文件无法满足的情况,调用指定过滤器方法处理请求参数。需要注意的是 filter 的执行时间是在构建请求时执行,filter 执行完毕后会立刻发送请求。

例如:

"filter": {
  "md5": "body" // md5 为 filters 目录下的脚本方法,body 为需要处理的对象,目前只限定于 body path 和 query
}

Example

{
  "suit": "注册设备并创建投票", // 业务名称
  "context": {
    "uid": "vivatest" // 设置上下文变量,值为 vivatest
  },
  "steps": [{ // 业务接口调用步骤
    "import": ["uid"], // 在此步骤导入上下文变量
    "desc": "注册设备", // 步骤描述
    "method": "PUT",
    "host": "http://localhost:7001",
    "path": "/user",
    "body": { // 请求 body
      "uid": "${uid}" // 在 body 中对上下文变量进行文本替换, ${param} 形式
    },
    // 假设返回数据 { status: 200, body: { result: true, token: "xxxxyyyyzzzz" } }
    "rule": { // response body 参数验证
      "result": "bool", // 验证 result 为 bool 类型
      "token": "string"
    },
    "equal": { // response body 等值比较
      "result": true // result 的值为 true
    },
    "context": {
      "token": "token" // ${token} 为 body 返回的值,并设置为上下文变量
    },
    "filter": {
      "md5": "body" // 调用同级 filters 目录内部的 md5 脚本对 body 进行加工处理
    }
  }, {
    "import": ["token", "uid"], // 导入上下文变量 token
    "desc": "上传投票信息",
    "method": "POST",
    "host": "http://localhost:7001",
    "path": "/vote",
    "query": {
      "uid": "${uid}",
    },
    "body": {
      "token": "${token}",
      "title": "Which is the best?",
      "img": "xxxx.png"
    },
    // 假设返回数据 { status: 200, body: { result: true, data: { id: 1111, link: 'http://www.snapvote.me/15' } } }
    "rule": {
      "data": {
        "type": "object",
        "rule": {
          "id": "int",
          "link": "string"
        }
      }
    },
    "equal": {
      "result": true
    },
    "context": {
      "voteId": "data.id" // 将 body 里的 data.id 设置为上下文变量 voteId
    }
  }, {
    "import": ["token", "voteId"],
    "desc": "获取投票详情",
    "method": "GET",
    "host": "http://localhost:7001",
    "path": "vote/${voteId}", // 替换上下文变量
     // 假设返回数据 {
    //   status: 200,
    //   body: { result: true, data: { id: 1111, title: 'aaaa', img: 'xxxx.png', result: [1, 2], type: 'lr' } }
    // }
    "rule": {
      "data": {
        "type": "object",
        "rule": {
          "id": "int",
          "title": "string",
          "img": "string",
          "result": {
            "type": "array",
            "itemType": "int"
          },
          "type": [
            "lr",
            "rm"
          ]
        }
      }
    }
  }]
}