可以使用HTTPie作为替代curl和Postman的API的测试工具。
MacOS上安装HTTPie:
brew install httpie
HTTPie的设计哲学是尽可能的简洁。
# help doc
http --help
# command syntax
http [flags] [METHOD] URL [REQUEST_ITERM]
# method
# 没有发送数据时默认为GET
http GET http://localhost:8080/coffees
http http://localhost:8080/coffees
# 有发送数据时默认为POST
http POST http://localhost:8080/coffees id="123" name="Cafe Milk"
http http://localhost:8080/coffees id="123" name="Cafe Milk"
http http://localhost:8080/coffees < coffee.json
echo '{ "id": "123", "name": "Cafe Happy" }' | http http://localhost:8080/coffees
# 发送表单数据
http -f :8080/kafka/publish message="hello"
# URL
# 默认以http://,也可以指定 https://
# localhost可以缩写为':',比如localhost:8080可以缩写为:8080,而localhost:80可以缩写为:
http http://localhost:8080/coffees
http :8080/coffees
http http://localhost:8080/coffees id="123" name="Cafe Milk"
http :8080/coffees id="123" name="Cafe Milk"
# REQUEST_ITEM
# 可以用key-value pair来表示HTTP headers, parameters, json data, non-string json data, file, etc.
# 注意key和value之间除了符号,不允许有空格
# ':' HTTP headers:
Referer:http://httpie.org Cookie:foo=bar User-Agent:bacon/1.0
# '==' URL parameters to be appended to the request URI:
search==httpie
# '=' Data fields to be serialized into a JSON object (with --json, -j) or form data (with --form, -f):
name=HTTPie language=Python description='CLI HTTP client'
# 相当于JSON
{
"name": "HTTPie",
"language": "Python",
"description": "CLI HTTP client"
}
# ':=' Non-string JSON data fields (only with --json, -j):
awesome:=true amount:=42 colors:='["red", "green", "blue"]'
# 相当于JSON
{
"awesome": true,
"amount": 42,
"color": ["red", "green", "blue"]
}
# flags
# Predefined Content Types
# 数据格式
# --json, -j,默认为JSON格式,Content-Type: application/json
# --form, -f,表单格式,Content-Type: application/x-www-form-urlencoded
# --multipart,Content-Type: multipart/form-data
# Output Options
# 默认只输出response headers和resonse body
# --verbose, -v 输出详细信息
# --quiet, -q 不输出信息
# Authentication
# 用户认证
# --auth USER[:PASS], -a USER[:PASS] , 不提供密码时,HTTPie会要求输入密码
# --auth-type {basic,digest}, -A {basic,digest},默认认证方法为basic,也就是用户名密码认证方式
http -a USERNAME POST https://api.github.com/repos/httpie/httpie/issues/83/comments body='HTTPie is awesome! :heart:'
# Network
# --offline, Dry run, 不发送数据到站点
http --offline :8080/coffees id="12345" name="Cafe Holiday"
http --offline :8080/coffees id="12345" name="Cafe Holiday" > holiday.http
IntelliJ默认集成了HTTP Client插件 (基于HTTPie),可以用来作API测试。
HTTP Client插件支持编写HTTP测试脚本,也支持变量和断言,可以满足基本的API测试需要。
HTTP Client测试脚本示例:
# API Testiing
GET {{HOST}}/coffees
Content-Type: application/json
Connection: keep-alive
> {%
client.test("List Coffees successfully", function() {
client.assert(response.status === 200, "Response status is not 200");
});
%}
###
POST {{HOST}}/coffees
Content-Type: application/json
Connection: keep-alive
{
"id": "123",
"name": "Coffee Happy"
}
> {%
client.test("Add Coffee successfully", function() {
client.assert(response.status === 200, "Response status is not 200");
});
%}
###
在使用命令行时,用HTTPie比curl更简单方便。
在有界面时,用Postman更为简单高效,但是不想用另外一个工具或切换另一个窗口,可以直接使用IntelliJ里集成的HTTP Client插件。
但是IntelliJ HTTP Client的测试脚本只能在IntelliJ中运行,也不能集成到CI流水线中,而Postman可以通过Newman来集成到CI流水线中。
另外如果在单元测试代码中对API进行测试,Restassured可能是更好的选择。
参考文档: