APITesting是一个基于YAML文件的开源接口测试工具,同时支持运行在本地、服务端。
在选择工具时,可以从很多方面进行考量、对比,以下几点是该工具的特色或者优点:
开源与否,atest采用MIT开源协议,是最流行的宽松开源协议之一。有些工具也许有非常丰富的功能、漂亮的界面,但相比于开源项目,免费的工具不定什么时候就有可能变为收费的;而且,你的使用感受几乎很难直接反馈到产品中,只能被动接受。质量、可靠性,作为一款用于测试场景的工具,atest本身的单元测试覆盖率达89%,单测代码与业务逻辑代码量平分秋色;另外,每次代码改动都需要通过代码扫描、单元测试等流水线。身材小巧,整个工具大小为18M,支持Windows、Linux、macOS平台。只有简单的可执行二进制文件,不像部分工具会给你的操作系统安装莫名其妙的系统启动项目、系统服务等。基于YAML文件,提交到Git仓库后,天生支持团队协作,无需注册额外账号。同时提供简单、高级两种模式的返回值断言,还包括JSONSchema以及针对Kubernetes资源的校验判断。支持性能测试。直接在VSCode中直接触发执行单个或整个测试文件。如何使用?那么,这个工具长什么样子呢,下面是命令行atest的参数说明:
APItestingtoolUsage:atest[command]AvailableCommands:completionGeneratetheautocompletionscriptforthespecifiedshellhelpHelpaboutanycommandjsonPrinttheJSONschemaofthetestsuitesstructrunRunthetestsuitesampleGenerateasampletestcaseYAMLfileserverRunasaservermodeserviceInstallatestasaLinuxserviceFlags:-h,--helphelpforatestUse"atest[command]--help"formoreinformationaboutacommand.本地模式执行一个测试用例集文件:atestrun-psample/testsuite-gitlab.yaml,其中的参数-p支持模糊匹配多个文件。
如果希望对测试用例集执行性能测试的话,可以增加响应的参数:
atestrun-psample/testsuite-gitlab.yaml--duration1m--thread3--reportm
其中的参数--report可以指定性能测试输出报告,目前支持Markdown以及控制台输出。效果如下所示:
|API|Average|Max|Min|Count|Error||---|---|---|---|---|---||GEThttps://gitlab.com/api/v4/projects|1.152777167s|2.108680194s|814.928496ms|99|0||GEThttps://gitlab.com/api/v4/projects/45088772|840.761064ms|1.487285371s|492.583066ms|10|0|consume:1m2.153686448s服务端模式除了本地执行外,atest还提供了基于gRPC协议服务端,通过下面的命令即可启动:
atestserver对于Linux操作系统,用户还可以通过下面的命令安装后台服务:
atestservice(install|start|stop|restart)当然,如果你对容器、Kubernetes比较熟悉的话,本项目也提供了对应的支持。
这种模式,对于想要集成的用户而言,可以通过调用gRPC来执行测试。也可以安装VSCode插件,在编码与接口测试之间无缝切换,您可以搜索api-testing找到该插件。
插件会识别所有第一行是#!api-testing的YAML文件,并提供快速的执行操作,请参考如下截图:
如图所示,会有四个快捷执行操作:
runsuite会执行整个文件runsuitewithenv会加载env.yaml文件并执行整个文件run执行单个测试用例(包括所依赖的用例)debug执行单个测试用例,并输出接口返回值当你安装了VSCode插件后,会自动下载并安装atest及其服务。当然,你也可以配置不同的远端服务地址。
文件格式atest定义的YAML格式,基本遵循HTTP的语义,熟悉HTTP协议的同学即可快速上手。下面是一个范例,更多例子请参考这里:
#!api-testingname:Kubernetesapi:https://192.168.123.121:6443items:-name:podsrequest:api:/api/v1/namespaces/kube-system/podsheader:Authorization:Bearertokenexpect: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对接口测试的便利性、可扩展性,以不丢失易用性为前提增强功能。例如:
优化错误提示、反馈提供与CICD集成的最佳实践增加gRPC等协议的支持增加测试记录信息的持久化VSCode插件支持测试用例编写的提示、格式校验提供插件机制,增加对数据库等数据源的格式校验最后期待您的反馈https://github.com/LinuxSuRen/api-testing/issues
评论