如何测试GraphQl API?

Nel*_*son 16 testing functional-testing graphql

我需要编写一个功能测试套件(它将测试GraphQl API).测试套件将位于API的单独repo和容器中.

我想到的一种方法是在测试套件中使用BDD框架.该套件在收到HTTP请求后将运行所有BDD测试.

我正在考虑使用Cucumber.js作为BDD框架.我知道有npm test.我不确定如何执行测试.以这种方式使用单元测试框架感觉有点尴尬.这种方法有意义吗?

做这样的事情有什么工具?我愿意考虑各种语言和工具.

Pet*_*mas 7

空手道是一个相对较新的Web服务测试自动化框架,由于2种特定功能,它恰好适合测试GraphQL响应

  • 文本操作:内联GraphQL查询,从(可重复使用的)文件中读取它们以及替换占位符很容易
  • JsonPath断言:尽管GraphQL响应是JSON,但它们会根据请求(无固定模式)动态更改,并且倾向于深度嵌套。空手道的本机JsonPath断言使您可以仅关注所需的块,并且可以用捷径JSON形式表示预期的结果,这很容易理解

这是一个很好的例子:graphql.feature下面有一个代码段:

# you can also read this query from a file
Given text query =
"""
{
  pokemon(name: "Pikachu") {
    id
    number
    name
    attacks {
      special {
        name
        type
        damage
      }
    }
  }
}
"""
And request { query: '#(query)' }
When method post
Then status 200

# json-path makes it easy to focus only on the parts you are interested in
# which is especially useful for graph-ql as responses tend to be heavily nested
* match $.data.pokemon.number == '025'

# the '..' wildcard is useful for traversing deeply nested parts of the json
* def attacks = get[0] response..special
* match attacks contains { name: 'Thunderbolt', type: 'Electric', damage: 55 }
Run Code Online (Sandbox Code Playgroud)

对于非Java团队,Karate提供了仅需要JRE 的二进制可执行文件,而Visual Studio Code 足以作为IDE。由于Karate 嵌入JavaScript运行时并支持“宽大”的JSON(不需要双引号,也不需要在引号中包含JSON键),因此JavaScript程序员会特别有宾至如归的感觉。

编辑:这是一个10分钟的视频演示演示,它解释了这一点。

免责声明:此处为dev。


Byr*_*yrd 0

您可以将 npm test 与您想要的任何测试运行程序一起使用。我正在使用摩卡和柴。Jest 可能会好一点,因为我相信它可能是最先进的测试套件。您只需像创建任何端点测试一样创建测试即可。

      it('should be null when user is not logged in', async () => {
        const query = `
          query {
            user(id: "") {
              username
              email
            }
          }
        `

    const rootValue = {};
    const context = {};

    const result = await graphql(schema, query, rootValue, context);
    const { data } = result;

    expect(data.user).to.equal(null);
  });
Run Code Online (Sandbox Code Playgroud)

非常简单的测试方法。您还可以运行 before 语句,将相关用户插入到您的数据库中。保持测试套件独立的问题是您需要直接访问数据库。您的测试不应依赖于其他 API 调用,因为这会产生不必要的依赖关系。因此,如果测试失败,那么突然间就很难找出根本原因了。