Restest是一个针对RESTFul API的自动化测试工具。
它通过编写YAML的方式来实现测试用例,并提供易于理解的输出,可以方便的和CI进行集成。
基本用法
假设下面是我们需要测试的API。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Request: GET http://localhost:8080/customers
Response:
{
"data": [
{
"id": 1,
"name": "Tom"
},
{
"id": 2,
"name": "Nick"
}
]
}
为了测试这个API,我们可以编写下面的customers.yml
文件作为测试用例。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22api:
name: test customer api
endpoint: http://localhost
port: 8080
scenarios:
- name: retrieve customers
method: GET
path: /customers
headers:
Accept: application/json
expect:
status: 200
headers:
Content-Type: application/json
body:
data.id: [1, 2]
data[0].id: 1
data[0].name: Tom
data.find { it.name == "Nick" }.id: 2
variables:
NickId: data.find { it.name == "Nick" }.id
然后来运行它
- Git clone代码,代码地址:https://github.com/ndrlslz/restest
./gradlew build
cd build/lib
- Run
java -jar restest.jar customers.yml
运行结果如下图
详细文档
YAML的结构由两部分构成,API和Scenarios。
API
API部分描述了这个API的基本信息,比如Endpoint,Port。1
2
3
4
5
6api:
name: # required - your api's name
endpoint: # required - http://localhost
port: # required
username: # optional - basic auth's username
password: # optional - basic auth's password
Scenarios
Scenarios描述了所有的测试用例。1
2
3
4
5
6
7scenarios:
- name: test case one
...
- name: test case two
...
Scenarios语法
1 | scenarios: |
关键字name
用来识别不同的test case,请保证唯一性。path
, method
, headers
, body
用来构造HTTP请求。expect
用来验证HTTP响应, 其中, expect.body
使用RestAssured库来验证HTTP响应。variables
用于存储变量,可以在之后的Scenarios中通过${var_name}
使用。
命令行参数
java -jar restest.jar <file location or folder location> [true|false]
在运行restest.jar
时,你可以提供2个参数。
- 路径, 可以是单个yml的路径,也可以是包含多个yml的文件夹的路径。
- 详细日志(可选参数),是否开始详细日志,默认为false。
下图是开启详细日志的例子
例子
更多例子,可以参考examples