使用Pact进行GraphQL API的契约测试 - PactFlow

作者:API传播员 · 2026-01-06 · 阅读时间:3分钟
本文介绍如何使用Pact工具进行GraphQL API的契约测试,涵盖GraphQL的基本规则如HTTP POST请求和JSON查询格式,以及Pact与GraphQL结合实现高效API验证的方法,包括GraphQL契约测试实践和Pact GraphQL集成示例。

使用Pact进行GraphQL API的契约测试

REST已死,REST万岁

GraphQL被许多人誉为“新的REST”。它不仅具备类型安全、简洁的DSL(领域特定语言)和强大的生态系统,还能够专注于满足客户端的需求。通过GraphQL,消费者可以以他们想要的形式获取所需的数据,既不多也不少。

以下是一个简单的GraphQL查询示例:

import { Query } from "react-apollo";
import gql from "graphql-tag";

const ExchangeRates = () => (
  
    {({ loading, error, data }) => {
      if (loading) return 

Loading…

; if (error) return

Error :(

; return data.rates.map(({ currency, rate }) => (

{${currency}: ${rate}}

)); }} );

GraphQL与契约测试的结合

如果我们仔细观察,会发现GraphQL实际上是HTTP上的一个简单抽象。这意味着我们可以像测试契约测试来验证GraphQL API的行为。

GraphQL的基本规则

GraphQL主要遵循以下几个简单的规则:

  1. 请求通过 HTTP POST 方法发送。
  2. GraphQL查询以JSON字符串的形式发送,并包含在请求的 query 属性中。
  3. 响应体被封装在 data 属性中,并根据所调用的操作(Query或Mutation)以及可能的错误进行命名空间分隔。

以下是一个简单的“hello”操作的cURL示例:

curl -X POST 
  -H 'Content-Type: application/json' 
  -d '{"query": "{ hello }"}' 
  http://someapi/api

使用Pact进行GraphQL契约测试

Pact是一种流行的契约测试工具,它可以很好地支持GraphQL API的测试。以下是一个使用Pact定义GraphQL交互的示例代码:

const graphqlQuery = new GraphQLInteraction()
  .uponReceiving("A hello request")
  .withQuery({ hello(person: $person) })
  .withRequest({
    path: "/graphql",
    method: "POST",
  })
  .withVariables({
    person: "Sally",
  });

通过这种方式,我们可以轻松地将Pact与GraphQL结合起来,确保API契约的正确性。


Pact与GraphQL的结合堪称天作之合,为开发者提供了一种高效、可靠的方式来测试和验证GraphQL API的行为。

原文链接: https://pactflow.io/blog/contract-testing-a-graphql-api/