Pandaria从0.3.0开始支持GraphQL API的自动化测试。目前只支持Query和Mutation。
配置URL
使用Pandaria对RESTFul API进行测试时,我们会在.feature文件的顶端配置当前feature工作目录和基本的API的Endpoint。如:
Background:
* dir: features/rest-api-test
* base uri: http://localhost:10081/your-rest-api
这样在测试中可以使用相对路径来发送请求:
* uri: /users/me
* send: GET
* status: 200
* verify: '$.username'='jakim'
* verify: '$.age'=18
不同与REST, GraphQL对于Query和Mutation通常只有一个唯一的Endpoint, 使用base uri关键字可以配置这个Endpoint。如:
Background:
* dir: features/graphql-test
* base uri: http://localhost:10081/graphql
GraphQL Query
配置好基本目录后,就可以编写GraphQL的测试了,使用graphql关键字来输入查询语句。
Scenario: basic query without specify operation name
* graphql:
"""
query bookById($id: String){
book(id: $id) {
title
isbn
author {
name
}
}
}
"""
* variables:
"""
{
"id": "1"
}
"""
* send
* verify: '$.data.book.title'='CSS Designer Guide'
* verify: '$.data.book.isbn'='ISBN01123'
* verify: '$.data.book.author.name'='someone'
- 上述代码首先配置了一段
GraphQL的查询语句,根据id查询book的title,isbn,author,以及author的name字段。 - 这段查询语句需要一个参数,使用
variables关键字,配置GraphQL的参数。 send关键字发送查询到GraphQL服务器端。verify关键字对查询结果进行验证。variables不是必须的,如果查询语句中不需要输入参数,可省略。
GraphQL Mutation
Mutation与Query的操作一模一样,只需要将Query语句换成Mutation语句即可,不赘述。
将GraphQL语句放在文件中
使用Pandaria进行REST测试时,为了提高可读性,我们会将请求体放在文件中如:
* uri: http://localhost:10080/users
* request body: requests/user.json
* send: POST
* status: 200
* verify: '$.id'='auto-generated'
* verify: '$.username'='jakim'
* verify: '$.age'=18
同样的,我们也可以将GraphQL的语句(和/或)GraphQL变量放在文件中,来提高测试用例的可读性,如:
* graphql: query_book_by_id.graphql
* variables: css_designer_guide.id.json
* send
* verify: '$.data.book.title'='CSS Designer Guide'
* verify: '$.data.book.isbn'='ISBN01123'
* verify: '$.data.book.author.name'='someone'
GraphQL语句中包含多个操作
同一个GraphQL文件支持包含多个GraphQL操作,可以通过operation关键字来指定需要执行的操作,如:
Scenario: query with operation name
* graphql: query_book_by_id.graphql
* variables: css_designer_guide.id.json
* operation: bookById
* send
* verify: '$.data.book.title'='CSS Designer Guide'
* verify: '$.data.book.isbn'='ISBN01123'
* verify: '$.data.book.author.name'='someone'
更多用法参考Pandaria官方文档