什么是GraphQL?如何对GraphQL进行测试?

原创|使用教程|编辑:郑恭琳|2020-06-05 10:48:39.160|阅读 17 次

概述:GraphQL端点需要与任何端点一样多的测试,并且自动化测试在这里也很有帮助。在下面了解有关如何使用测试自动化来测试GraphQL的更多信息!

# 您正在找协同办公软件吗?点击这里站长给您推荐 #

相关链接:

GraphQL端点需要与任何端点一样多的测试,并且自动化测试在这里也很有帮助。在下面了解有关如何使用测试自动化来测试GraphQL的更多信息!

GraphQL是一种API的查询语言,始于Facebook,但自2016年开始开源。GraphQL提供的查询和响应的简化源自移动应用程序的使用,但它在简化复杂API的使用同时减少返回的数据量通用性方面具有普遍用途。


什么是GraphQL?


最初创建GraphQL时,它是为解决特定问题而构建的。2011年,由于大多数用户都通过浏览器与应用程序进行交互,因此我们开始看到从Web到移动设备的大量迁移。特别是在Facebook的情况下,这需要从应用程序中多个不同位置调用多个API。根据方案要实现的目标,这些API传递的信息太多或太少。因此,为解决这一挑战,Facebook寻求创建一种简化信息传递并减少完成其方案所需的总流量的方法。

这催生了GraphQL。该技术最初由Facebook的iOS移动团队使用,然后扩展到其他移动界面。很快,所有移动交互中的绝大多数都利用了他们的GraphQL API。在2015年,Facebook宣布实施该技术,全世界看到了使用该技术的优势,并迅速采用了该技术。


GraphQL如何工作?


GraphQL是存在于前端系统和后端API之间的抽象层。该抽象层允许您构造查询,以访问后端中的多个资源,并将该数据汇总到一个有意义的响应中。

后端API通常是细粒度的,因为我们想为我们的应用程序创建可重用的构建块。但是,这并不能直接转化为我们的用户故事,也不能转化为我们希望能够从前端完成的操作。GraphQL是一种使用界面描述其系统行为的接口来简化与后端数据交互的方法,因此您可以从API中获得有效的数据。

每个GraphQL模式的映射都对应于函数。然后,这些功能将根据您的业务逻辑,针对您的REST API、数据库以及收集请求的数据所需的任何其他资源,对后端进行后续调用。

然后,这些函数会将必要的数据组合成一个响应,该响应将保持与请求相同的形状,从而很容易理解哪些数据与请求中的哪些元素相关联。

Ask for what you need,

get exactly that - graphql.org

另外,可以设置GraphQL在组合查询响应时调用多个后端服务。这减少了消费者花在浏览API文档上以了解可从呼叫中获得哪些信息的总时间。


GraphQL与传统REST API


与传统的REST API接口相比,GraphQL具有许多优点。与大多数技术实施一样,没有灵丹妙药或一种技术堆栈比另一种更好。但是GraphQL获得关注的原因之一是因为它在检索信息方面的灵活性。

使用传统的REST API时,通常您要进行的检索信息并不是您对系统的唯一调用。例如,如果要检索我的帐户余额,我要做的第一件事是检索我的客户编号,然后使用该客户编号检索我的帐户编号。有了帐号后,就可以查询该帐号的余额了:

  1. Login = CustomerId
  2. CustomerId = account ID
  3. AccountID = Balance

REST API没有错。这就是它们的工作原理,它们使我们能够创建离散的动作,并可以以许多不同的方式加以利用。但是在这种特殊情况下,为了检索我想要的信息,我必须使用链接在一起的三个API序列进行调用。此外,如果我们考虑在每个API调用的交互过程中交换的数据量,我们必须发送适当的请求并接收该模式定义的整个响应。在我们的案例中,我实际上只需要处理客户ID、帐户ID和余额的三个值。

因此,让我们看看在GraphQL世界中该交易如何进行:

query {
Customer(name:”Chris Colosimo”) {
    accountId{
        Balance
  }
 }
}

如果您是GraphQL的资深用户,请持怀疑态度接受该请求。我用它来说明传统上可以用三个API调用完成的事情可以用一个使用GraphQL来完成。最好的部分是,它不需要重新实现现有功能。

REST和GraphQL之间还有许多其他优点和缺点,但是需要特别注意的是GraphQL和REST API并不互斥,并且采用其中一种并不排除另一种。实际上,两者是很和谐地合作的。

因此,问题不是使用GraphQL还是REST API,而是何时应该将GraphQL引入前端资源?从理论上讲,答案实际上非常简单:当您要为想要利用API的使用者创建简单有效的接口时,应该使用GraphQL。此外,当您想减少前端与后端之间交换的总流量时,您可能要考虑利用GraphQL,就像Facebook在移动流量方面所做的那样。


GraphQL端点的自动化测试


GraphQL是一项非常强大的技术,可以使您的API使用者以更有效的方式访问其信息,但是为了确保体验以您期望的方式运行,您需要验证GraphQL API。这是自动化测试的地方。

有很多测试自动化工具可以帮助您测试GraphQL API。我将为您提供使用Parasoft SOAtest的示例,Parasoft SOAtest是一种广泛使用的API测试解决方案,它简化了跨多种技术验证关键API的艰巨挑战。它支持各种消息格式和协议,并且已经有一段时间支持GraphQL。

GraphQL端点接受查询(作为字符串)并返回带有查询结果的JSON响应。这非常适合SOAtest,因为REST客户端可以进行查询以发送查询,而现有的JSON验证工具可以完成验证。

考虑下面的简单示例GraphQL查询:

query {
   users{
      firstname
      lastname
      }
   }

预期的回报将类似于:

{
   “data” : {
      “users” : [
         {
            “firstname” : “John”,
            “lastname” : “Doe”
         },
         {
            “firstname” : “Alicia”,
            “lastname” : “Smith”
         }
      ]
   }
}

可以在Parasoft SOAtest中将同一查询作为REST客户端创建:

SOAtest中,GraphQL查询作为名为“query”的字符串发送。响应以JSON返回,SOAtest可以轻松地在其流量查看器中解释和表示:

预期返回的值。显然,我们需要一种自动的方法来验证这些结果,并且SOAtest JSON断言器在这里很方便。


验证GraphQL响应


SOAtest使用通过其JSON声明器工具配置的声明来验证JSON响应。这是一个示例检查,以查看返回的名字是否为字符串“Luis”(我们知道这不是有效值)。

再次运行测试,测试失败:

如您所见,使用现有功能在SOAtest中直接测试GraphQL端点。

认证呢?这已经由SOAtest处理,并且现有的客户端身份验证工具也可以与GraphQL端点一起使用:


为什么使用Parasoft SOAtest进行GraphQL测试?


对于GraphQL,SOAtest带给REST、SOAP和其他API测试的好处仍然相同。专为适应现有测试基础架构而设计,Parasoft SOAtest通过帮助测试人员更智能地工作来加速测试,从而实现敏捷开发,而无脚本测试则可促进跨开发、测试、性能和安全团队的协作。

Parasoft SOAtest使测试易于创建、易于管理和协调以及易于运行和分析。除了GraphQL之外,SOAtest对120多种消息格式/协议的支持以及AI和机器学习的辅助下的测试生成使API测试变得更加容易。



标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,尊重他人劳动成果

登录 慧都网发表评论


暂无评论...

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
相关厂商
相关产品
Parasoft SOAtest

业内最全面的API、云服务和SOA测试平台,提供优秀的负载与性能测试、API安全测试等功能

Parasoft SOAtest with Load Test

通过使用现有的功能测试来解锁早期的负载和性能测试

在线
客服
咨询
电话
400-700-1020
在线
QQ
购物车 反馈 返回
顶部
在线客服系统
live chat