GraphQL测试实践
Posted ThoughtWorks洞见
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GraphQL测试实践相关的知识,希望对你有一定的参考价值。
什么是GraphQL ?
Schema:Schema由服务端来定义,用于定义API接口,并依靠Schema来生成文档以及对客户端请求进行校验。Schema只是一个概念,它是由各种数据类型及其字段组成,而每个类型的每个字段都有相应的函数来返回数据,且Schema里的字段可以聚合其他Schema,我们可以将Schema理解为多个Query组成的一张表。
前端自己定义返回的数据及结构,降低前后端沟通成本
无需编写接口文档(GraphQL会根据schema自动生成API文档)
Schema拼接,可以组合和连接多个GraphQL API,合并为一个,减少请求次数
-
GraphQL是强类型的,通过它,可以在执行之前验证 GraphQL 类型系统中的查询, 它帮助我们构建更强大的 API。
如何简单快速的手动测试GraphQL?
https://www.squarefoot.com.hk/en/
{"operationName":"FeaturedProperty",
"variables":{
},
"query":"query FeaturedProperty { featuredListing(channel: \"sale\", pageSize: 4) { items { id title subtitle description propertyType prices { min max monthlyPayment currency symbol label type __typename } address { lat lng formattedAddress __typename } propertyType cover { url urlTemplate __typename } organisations { id name color logo { url urlTemplate __typename } type __typename } listers { id type name __typename } tier channels attributes { sizeUnit pricePSF minimumPricePerSizeUnit maximumPricePerSizeUnit builtUp landArea bedroom bathroom __typename } multilanguagePlace { enGB { level1 level2 level3 __typename } idID { level1 level2 level3 __typename } zhHK { level1 level2 level3 __typename } zhCN { level1 level2 level3 __typename } __typename } __typename } __typename }}"
}
#!/usr/bin/env bash
set -ex
docker run --rm -v $(pwd):/etc/postman \
-w /etc/postman \
-t postman/newman_ubuntu1404 \
run "./postman/test.postman_collection.json" \
--environment="./postman/test.postman_environment.json" \
--timeout-request 20000
利用测试脚本实现GraphQL自动化api测试
npm init -y
npm i --save-dev mocha chai ava
import test from 'ava';
import { expect,should } from "chai"
import supertest from 'supertest';
const server = supertest.agent("http://localhost:3000/GraphQL");
test('test grahphql api',async (t)=>{
const res = await server
.post("/")
.send(
{"operationName":null,"variables":{},"query":"{\n student(id: \"1\") {\n id\n name\n age\n sex\n }\n}\n"}
)
.set('Content-Type', "application/json")
.expect(200)
.end();
res.body.user.should.have.property('name')
});
npm --save-dev install apollo-boost GraphQL
import test from 'ava';
import { gql } from "apollo-boost";
import ApolloClient from "apollo-boost/lib/index";
import fetch from 'node-fetch';
const client = new ApolloClient({
uri: "http://localhost:8080/GraphQL",
fetch: fetch
});
const GET_STUDENT = gql`
query($id: String!) {
student(id:$id){
id
name
age
sex
}
}
`;
test('first scenario',async (t) => {
const res =await client
.query({
query: GET_STUDENT,
variables: {
id: '1',
},
});
console.log("+++++++",res.data);
t.is(res.data.student.id, '1')
});
qilei/study/ava-api-testing
▶ npx ava -v
+++++++ { student:
{ id: '1', name: 'Tom', age: 25, sex: true, __typename: 'Student' } }
✔ grahpql api testing (115ms)
1 test passed
- 相关阅读 -
点击【阅读原文】可至洞见网站查看原文&绿色字体部分的相关链接。
本文版权属ThoughtWorks公司所有,如需转载请在后台留言联系。
以上是关于GraphQL测试实践的主要内容,如果未能解决你的问题,请参考以下文章
将 GraphQL 片段与 Apollo Hooks 一起使用时出错