API Testing 一个基于 YAML 文件的开源接口测试工具,同时支持运行在本地、服务端。
在选择工具时,可以从很多方面进行考量、对比,以下几点是该工具的特色或者优点:
那么,这个工具长什么样子呢,下面是命令行 atest
的参数说明:
API testing tool
Usage:
atest [command]
Available Commands:
completion Generate the autocompletion script for the specified shell
help Help about any command
json Print the JSON schema of the test suites struct
run Run the test suite
sample Generate a sample test case YAML file
server Run as a server mode
service Install atest as a Linux service
Flags:
-h, --help help for atest
Use "atest [command] --help" for more information about a command.
执行一个测试用例集文件:atest run -p sample/testsuite-gitlab.yaml
,其中的参数 -p
支持模糊匹配多个文件。
如果希望对测试用例集执行性能测试的话,可以增加响应的参数:
atest run -p sample/testsuite-gitlab.yaml --duration 1m --thread 3 --report m
其中的参数 --report
可以指定性能测试输出报告,目前支持 Markdown 以及控制台输出。效果如下所示:
API | Average | Max | Min | Count | Error |
---|---|---|---|---|---|
GET https://gitlab.com/api/v4/projects | 1.152777167s | 2.108680194s | 814.928496ms | 99 | 0 |
GET https://gitlab.com/api/v4/projects/45088772 | 840.761064ms | 1.487285371s | 492.583066ms | 10 | 0 |
consume: 1m2.153686448s
除了本地执行外,atest
还提供了基于 gRPC
协议服务端,通过下面的命令即可启动:
atest server
对于 Linux 操作系统,用户还可以通过下面的命令安装后台服务:
atest service (install | start | stop | restart)
当然,如果你对容器、Kubernetes 比较熟悉的话,本项目也提供了对应的支持。
这种模式,对于想要集成的用户而言,可以通过调用 gRPC
来执行测试。也可以安装 VS Code 插件,在编码与接口测试之间无缝切换,您可以搜索 api-testing
找到该插件。
插件会识别所有第一行是 #!api-testing
的 YAML 文件,并提供快速的执行操作,请参考如下截图:
如图所示,会有四个快捷执行操作:
run suite
会执行整个文件run suite with env
会加载 env.yaml
文件并执行整个文件run
执行单个测试用例(包括所依赖的用例)debug
执行单个测试用例,并输出接口返回值当你安装了 VS Code 插件后,会自动下载并安装 atest
及其服务。当然,你也可以配置不同的远端服务地址。
atest
定义的 YAML 格式,基本遵循 HTTP 的语义,熟悉 HTTP 协议的同学即可快速上手。下面是一个范例,更多例子请参考这里:
#!api-testing
name: Kubernetes
api: https://192.168.123.121:6443
items:
- name: pods
request:
api: /api/v1/namespaces/kube-system/pods
header:
Authorization: Bearer token
expect:
verify:
- pod("kube-system", "kube-ovn-cni-55bz9").Exist()
- k8s("deployments", "kube-system", "coredns").Exist()
- k8s("deployments", "kube-system", "coredns").ExpectField(2, "spec", "replicas")
- k8s({"kind":"virtualmachines","group":"kubevirt.io"}, "vm-test", "vm-win10-dkkhl").Exist()
用户可以自定义请求的 Header、Payload 等,可以对响应体做全面的断言判断。
如果您已经耐心阅读到这里的话,可以再顺便了解下这个项目后续的一些想法。
通过更多的实际场景来打磨、优化 atest
对接口测试的便利性、可扩展性,以不丢失易用性为前提增强功能。例如: