在Web开发的时候必不可少涉及到REST API或者页面的测试。通常做法是打开Chrome输入URL然后看结果,当然我们会安装一个json viewer或者xml viewer的plugin,方便我们阅读请求的内容。 要不你可以安装Chrome的REST Console或Postman插件,然后进行测试。当然还有很多独立工具,这里就不做介绍啦,如Mac下的Paw(https://paw.cloud/)。
在IntelliJ IDEA中你也可以进行这样的测试。只要打开Tools菜单下的“Rest Restful Web Services”,就会调用出一个REST Client的tool window,然后你就使用UI进行REST API测试。界面如下:
今天我们介绍一种新的测试方法,也就是IntelliJ IDEA 2017.3版本的Editor REST Client。基于编辑器的REST Client?这个是什么鬼? 也就是你在编辑器中编写代码来完成HTTP API请求,而不是传统的UI方式。这样做的好处有什么?
接下来我们就开始介绍这个Editor REST Client。
首先我们要在IDEA下创建一个http文件,这个非常简单,如xxx.http,这里说明一下目录,如果你想这个http文件将来被其他工具或者作为元信息读取,那么你最好放在 src/main/resources或者src/test/resources目录下,这样方便从java的classpath目录下快速读取。
http的文件格式非常简单,首先是三个井字符(###)进行http请求分割,这样一个文件就可以包含多个http请求,分隔符后面可以添加说明进行注释。 对每一个请求,你可以添加添加对应的注释,//和单个#都是合法的注释符号,你可以添加多行注释,样例如下:
### get local ip
GET http://httpbin.org/ip
Content-Type: application/json
//regex \w{8}-\w{4}-\w{4}-\w{4}-\w{12}
GET http://httpbin.org/uuid
POST https://httpbin.org/post
Content-Type: application/json
{
“name”: “sample”,
“time”: “Wed, 21 Oct 2015 18:27:50 GMT”
}
当然详细的http文件的格式请参考:
https://marketplace.visualstudio.com/items?itemName=humao.rest-client 非常详尽。
当你编写完一个HTTP请求(GET, POST, HEAD等),在编辑器的左侧栏就会出现一个“运行”的图标,然后你点击这个运行图标,就可以发出http请求啦。IDEA会打开一个run的tool window,会将结果呈现给你,当然这个结果中包含完整的response信息,当然返回的内容根据Content-Type头也会进行高亮显示,方便你的阅读。如果你要反复测试,建议不要关闭这个tool window,下次运行的时候,直接点击这个tool window的运行图标进行再次测试即可。
目前http文件中并没有assertion的支持,个人这里只是想法,// 是合法的注释符号,我们可以在这个里面做一些文章,如 //regex xxxx 就表示正则表达式判断 通常我们涉及的判断有text contain, xml path,html path,regex, json path这些,当然还包括http response的判断。
添加这些assertion主要是方便后续做集成测试,你需要做的可能是解析http请求,然后请求发送,最后是根据assertion规则进行判断。
当然在IntelliJ IDEA中,我们可以将http请求编写做的更快,就是live template,这里列举出常见的几种案例:
你在编写的时候,只需要输入live template名称就可以快速帮你补充对应的代码,非常简单。
在请求的过程中,可能会涉及URL编码,如空格要变为%20等,这个在IDEA中也难不倒,安装“String Manipulation”这个插件,就可以做各种字符串的转码等,你不用担心。如做安全测试的时候,你可以轻易将javascript代码转换为http编码,当然你要修改的话,也非常容易转回来(decode)。
在编写的http请求的过程中,http header都是可以自动提示的,这个非常方便。大多数同学记不住众多的 http header,但是你编写几个http请求后,相信你绝对是了解HTTP协议的小达人。
另外IDEA会根据http请求中的Content-Type头,自动对内容主体进行代码提示,如我们要发送一段json或者xml到服务端,如果你设置了Content-Type,那么在编写主体的时候,IDEA就会自动给你进行代码提示。这里我们针对Web开发,列举出常见的request body的content type。
目前功能还有一些欠缺,如不支持全局变量,访问图片URL不能直接渲染图片等,这个相信后续会调整。
这个http请求文件标准格式制定后,可能对测试同学帮助也非常多,如做压力测试的时候,我们只需要创建一个loadtest.http的文件,然后测试同学只需要根据这个文件进行压力测试就可以啦。 基于这个出发点,我们可以将要测试的http REST API分为以下几个http文件。
对比其他的图形化的REST Client,基于编辑器的REST Client确实方便非常多,而且有更多的可能性。最后还是感谢一下 VS Code的REST Client插件的作者Huachao Mao,github上显示是一个无锡的中国小伙子,非常棒的想法。