彩票走势图

从Zero 到 Hero:面向开发人员的 GraphQL 测试指南

翻译|行业资讯|编辑:胡涛|2023-10-27 10:55:09.640|阅读 5 次

概述:了解 Parasoft SOAtest 如何简化 GraphQL 测试的创建、管理和编排。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

如果您采用测试自动化,则可以实现简化的 GraphQL 测试。继续阅读,了解 Parasoft SOAtest 如何简化 GraphQL 测试的创建、管理和编排。测试 GraphQL 端点与任何其他端点测试一样必要,自动化测试可以提供帮助。让我们探索如何通过测试自动化来测试 GraphQL 端点!

Parasoft 产品免费试用

什么是 GraphQL?

GraphQL 是一种 API 查询语言,由 Facebook 从 2012 年开始开发,旨在解决一个特定问题:随着智能手机和移动网络浏览器的兴起,使用 RESTful API 调用速度缓慢且效率低下,尤其是在移动网络上。对多个端点的多个 API 调用需要时间,通常返回的信息要么多于必要的信息,要么返回的信息不足。返回的大量数据加上多次 API 调用,导致用户体验不佳。

当 2015 年应用于 Facebook 的 iOS 应用程序时,科技界看到了新技术的优势,导致许多领先公司迅速采用。2015 年,GraphQL 开源,并于 2019 年创建了 GraphQL 基金会,以进一步开发规范和参考实现。尽管最初设计时考虑的是移动计算,但实施已扩展到桌面和服务器计算。GraphQL 的采用范围已扩大到包括 GitHub、Pinterest、Intuit、Coursera 和 Shopify 等公司和组织。

GraphQL 与传统 REST API

与传统的 REST API 接口相比,GraphQL 可以提供许多优势。虽然每种技术实现都需要权衡,但 GraphQL 在检索信息方面提供了更大的灵活性。一个编写良好的 GraphQL 查询可以返回需要使用 HTTP 请求进行多个 RESTful API 调用的信息。研究人员和开发人员发现,与使用 RESTful API 获取相同数据相比,GraphQL 调用返回的数据集小 90% 以上。

使用 RESTful API 检索数据时,您通常必须进行多个 API 调用才能获取您要查找的所有信息。例如,如果您要登录银行,您首先需要获取您的客户编号。一旦您获得了客户编号,您就可以获得您的帐号。从那里,您可以获得您的帐户余额:

该图显示了使用 RESTful API 检索帐户余额数据时的代码。

REST API 没有任何问题,但多个 API 调用通常很慢、数据量大且效率低下。在上面的示例中,为了获取银行帐户余额,您必须构建一系列链接在一起的三个 API 调用,每个调用都是一个正确的请求,并且是由架构定义的完整响应。GraphQL 请求更精简、更具体,仅处理客户 ID、账户 ID 和余额这三个值:

客户数据的精益 GraphQL 代码图像:客户 ID、帐户 ID 和余额。

上面的示例可能看起来微不足道,但它展示了如何使用 GraphQL 查询仅通过一次 API 调用即可完成传统上通过三个 API 调用完成的请求。最好的部分是它不需要重新实现现有功能。

 REST 和 GraphQL 之间还有许多其他优点和缺点,但需要注意的是,GraphQL 和 REST API 并不相互排斥,并且采用其中一种并不排除另一种。事实上,两人的合作非常和谐。

什么时候应该使用 GraphQL?

 在决定是使用 REST API 还是 GraphQL 时,请考虑数据的复杂性以及查询和变更所需的灵活性。如果您的数据相对简单,并且您的 API 需要定义明确、基于资源的接口,那么 REST API 可能是最佳选择。

另一方面,如果您有复杂的数据,需要灵活的查询和变更,并且您希望最大限度地减少过度获取和不足获取,那么 GraphQL 可能更适合。

它确实需要仔细设计来创建具有架构和类型组织的 GraphQL API 和查询。REST API 可能更容易设计和查询,因为您可以分离各个数据请求,但它们也可能需要更长的时间来运行。一般来说,REST API 更适合非常复杂的查询,而 GraphQL 查询可以提供更多优化和更快的操作。

此外,如果实时数据和多个 API 版本对您的应用程序很重要,那么 GraphQL 可以提供这些优势,而 REST API 可能需要更多的努力来实现。最终,REST API 和 GraphQL 之间的选择取决于您项目的具体要求以及您愿意做出的权衡。

当您想要为想要利用您的 API 的消费者创建一个简单而高效的界面时,请使用 GraphQL。您可能还想利用 GraphQL 来减少前端和后端之间交换的总流量,就像 Facebook 对移动流量所做的那样。如果您想在单个查询中检索所有相关数据,GraphQL 可以很好地做到这一点。

为什么应该为 GraphQL 编写测试

与其他功能测试一样,测试 GraphQL API 以确保软件的业务逻辑正确执行非常重要。您需要验证查询、模式和任何突变是否按预期运行和响应。编写和运行测试可以帮助开发人员和 QA 在投入生产之前尽早发现错误。它还确保您对 API 和应用程序有足够的测试覆盖率

如何测试 GraphQL API 实现

GraphQL 是存在于前端系统和后端 API 之间的抽象层,因此进行测试至关重要。GraphQL 查询允许您访问后端中的多个资源,并将这些数据聚合到一个有意义的响应中。

GraphQL 的屏幕截图显示了描述数据的代码示例,询问您想要什么,获得可预测的结果。

后端 API 通常是细粒度的,因为我们希望为我们的应用程序创建新的、可重用的构建块。然而,这并不能直接转化为我们的用户故事或我们希望能够从前端完成的操作。GraphQL 是一种通过使用具有描述系统行为的模式的接口来简化与后端数据交互的方法,以便您可以从 API 获取有效的数据。

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

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

此外,GraphQL 可以设置为在组装查询响应时调用多个后端服务。这减少了消费者浏览 API 文档以了解和阅读调用中可用信息所需的总时间。

测试类型

查询测试:是对一个或多个数据库表中的数据的请求。查询可以是对数据结果的请求、对数据的操作,或两者兼而有之。

突变测试:是一种测试形式,它修改应用程序代码的特定组件,以查看测试工具是否可以检测到更改。突变测试通常用于进行单元测试,以查看软件工具是否可以检测到未经正确测试的代码或具有其他测试方法无法捕获的隐藏缺陷。

负载测试:是一种性能测试,可将您的应用程序或网站置于类似于真实条件的压力下。如果没有负载测试,您的软件在真正重要的时候可能会失败。负载测试工具检查应用程序在正常和高负载期间的性能。

安全测试:是一种发现软件应用程序中的漏洞、风险和威胁并防止黑客攻击的测试形式。安全测试可识别系统可能存在的弱点,这些弱点可能会使您的应用程序、信息、用户或公司面临风险。

架构测试,也称为映射测试,是一种软件测试形式,用于验证前端应用程序的对象与相应的数据库对象。架构测试用于查找数据库中未映射的对象,例如表、视图或列。

在大型项目中,最初会有很多警告。快速有效地管理它们至关重要。对于采用静态分析的团队来说,重要的是要了解修复或分析所有警告是不必要的。相反,请确保选择一个工具,使您能够导航、评估、确定优先级并分配报告的错误以进行修复。逐步移动“底线”来处理下一个最高优先级和类别是处理大量积压警告的最佳方法。

GraphQL 端点的自动化测试

GraphQL 是一项强大的技术,允许您的 API 使用者以更有效的方式访问他们的信息。为了确保体验按照您预期的方式运行,您需要验证您的 GraphQL API。这就是测试自动化的用武之地。

有许多自动化工具可用于测试 GraphQL API。在本例中,我使用 Parasoft SOAtest,这是一种广泛使用的API 测试解决方案,它简化了跨多种技术验证关键 API 的艰巨挑战。它支持多种消息格式和协议,包括 GraphQL。

GraphQL 端点接受字符串形式的查询,并返回带有查询结果的 JSON 响应。这非常适合 SOAtest,因为 REST 客户端可以发出查询来发送查询,并且可以通过现有的 JSON 验证工具来完成验证。

考虑以下简单的 GraphQL 查询示例。

GraphQL 查询的简单代码示例的图片。

预期回报类似于:

显示 GraphQL 查询的预期返回的代码图像。

可以通过 GraphQL 客户端以文字或表单模式在 Parasoft SOAtest 中创建相同的查询。

显示 GraphQL 客户端的 Parasoft SOAtest 屏幕截图。

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

显示 GraphQL 查询的 Parasoft SOAtest 屏幕截图。

返回值是预期的。我们需要一种自动化的方法来验证这些结果。SOAtest JSON 断言器在这里会派上用场。

验证 GraphQL 响应

SOAtest 使用通过其 JSON 断言器工具配置的断言来验证 JSON 响应。下面是一个示例,检查返回的名字是否为字符串“Luis”,我们知道该字符串不是有效值。

Parasoft SOAtest 的屏幕截图显示了 JSON 断言器。

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

Parasoft SOAtest 的屏幕截图显示了 GraphQL 客户端测试套件中失败的测试。

正如您所看到的,使用现有功能在 SOAtest 中测试 GraphQL 非常简单。

Parasoft SOAtest 的屏幕截图显示了比较预期内容和实际内容的 GraphQL 测试结果。

认证怎么样?这是由 SOAtest 处理的,现有的客户端身份验证工具也可以与 GraphQL 端点配合使用。

Parasoft SOAtest 的屏幕截图显示了 GraphQL 客户端身份验证工具。

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

SOAtest 为 REST、SOAP 和其他 API 测试带来的好处对于 GraphQL 来说仍然相同。Parasoft SOAtest 旨在适应现有的测试基础设施,通过帮助测试人员更智能地使用无脚本测试来加速测试,从而实现敏捷开发,从而促进开发、测试、性能和安全团队之间的协作。

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

了解更多有关Parasoft产品咨询,欢迎咨询


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP