文本

JMeter 中 GraphQL 的深入研究

JMeter 中 GraphQL 的深入研究 随着 JMeter 5.4最新版本的发布,您可以使用 GraphQL HTTP Sampler 进行 GraphQL 性能测试。本博客深入研究 JMeter 5.4中的 GraphQL。你可以查看我之前发布的关于 JMeter 顶级特性的文章。 What is GraphQL? 什么是 GraphQL? 下面是从 graphql. org 复制的文本 GraphQL 是用于 api 的查询语言,也是用于使用现有数据完成这些查询的运行时。提供了 API 中数据的完整且易于理解的描述,让客户能够精确地询问他们需要什么,仅此而已,让 API 随着时间的推移更容易发展,并支持强大的开发工具。 是 Facebook 在2012年开发的。2015年公开宣布了这一消息。几年前,这个项目转移到了由 Linux 基金会托管的 GraphQL 基金会。

您可能熟悉 ReST api,它是一种架构模式,经常超过获取或低于获取数据。GraphQL 获取正确的数量。ReST 和 GraphQL 有很多不同之处,快速互联网搜索可以帮助你理解它们之间的区别。 使用 ReST,您可能最终会使用多个请求来获取所需的数据。例如,如果您正在开发冰淇淋在线商店,以获取新到的、不含乳制品的和各种口味的冰淇淋,那么您需要开发多个 HTTP 请求。

如果您希望获取所有不含乳制品的新到达文件和所有风味的文件,那么您需要发送多个 HTTP GET 请求,这不是最佳方式。 输入 GraphQL。 通过只发送一个查询,您将能够获取正确数量的数据,而无需前后反复。 下面是一个虚构的 GraphQL 查询,可以获取新来者的免费乳制品,所有 falvor 的名字和 id。

query {
  newarrivals {
    dairyfree {
      allflavors {
        name
        id
      }
    }
  }
}

以下是你将得到的回应:

{
	"data": {
		"allflavors": {
			"name": "lemonbar",
			"id": "p101"
		}
	}
}	

在 JMeter 5.4之前

如您所知,在 JMeter 5.4中,我们获得了一个新的 GraphQL HTTP Sampler 来测试 GraphQL 查询的性能。但是如果没有这个 GraphQL HTTP 采样器,您可以使用 HTTP 采样器发送 GraphQL 请求。

让我们看看《星球大战》 GraphQL 演示项目。

要使用 HTTP 请求检索字符信息,下面是您应该使用的设置。

HTTP Method: POST

POST payload:
{
	"query": "{\n  hero {\n    name\n  }\n}\n"
}

GraphQL 中有三种操作类型: 查询、变异和订阅。 JMeter 5.4 深入研究 JMeter 5.4中的 GraphQL 在 JMeter 5.4中使用 GraphQL 的等效查询是: 方法: GET 查询: Query = Query + { + hero + { + name + apparsin + } + }

这两种情况下的结果都是:

{
    "data": {
        "hero": {
            "name": "R2-D2"
        }
    }
}

在 GraphQL HTTP Request 中,您可以选择输入典型的参数,如 Protocol、 Server Name 或 IP、 Port 等。它继承了 HTTP 请求采样器的属性。您还将获得与 GraphQL 相关的字段,如 operationname、 Query 和 Variables。

在 GraphQL HTTP Request 中,有两个 HTTP 方法: GET 和 POST。

此外,您不能在 GraphQL 中获得 Parameters 和 Body Data,而是可以利用 Query 和 Variables。文件上传选项也在这里无关。 在“高级”选项卡中,您看不到来自 HTML 文件的嵌入式资源。 在 GraphQL HTTP 请求中,查询是强制的,变量和操作名称是可选的。 GraphQL 查询示例

现在让我们看一些 JMeter 5.4中使用星球大战 GraphQL 的例子。您可以按照下面提到的说明来设置项目。 要启动服务器,您可以遵循以下命令。

git clone https://github.com/apollographql/starwars-server
cd starwars-server
npm install	

如果一切顺利,你就可以启动游乐场 http://localhost:8080/graphql 服务器了 你会得到《星球大战》的文档和模式。编写查询时,理解模式非常重要。 烟雾测试,让我们检索一个字符。复制粘贴下面的查询,然后在浏览器中按 CTRL + ENTER 键。

{
  hero {
    name
  }
}

在右边,您将得到如下所示的输出。

{
  "data": {
    "hero": {
      "name": "R2-D2"
    }
  }
}	

在 JMeter 中,我们通过右键单击 Thread Group > Add > Sampler > GraphQL HTTP Request 来添加 GraphQL HTTP 请求,如下所示。

如下所示,在 GraphQL HTTP Request 中填写详细信息。

添加一个“查看结果树”监听器,然后点击“运行”。您将得到如下所示的输出。 恭喜! 您已经完成了 JMeter 中的 GraphQL 测试计划设计。 让我们看一个小小的复杂查询,它检索一个 ID 为2000的 driod 信息。

query {
  droid(id: 2000){
    id
    name
    friends{
      name
    }
    appearsIn
    primaryFunction
  }
}

现在,让我们使用 GraphQL 中的变量。通过使用变量,您可以跨多个客户机重用它。 例如,如果要为 Search 查询声明一些动态字符串,可以使用下面的查询。

query search($keyword: String) {
  search(text: $keyword) {
    __typename
  }
}

在变量中,粘贴下面的代码。

{
  "keyword": "an"
}

输出

现在,让我们看一个名称操作的例子。如果有多个查询,可以指示 JMeter 告诉您要发送哪个查询。 在下面的查询中,我们试图获取一个字符和搜索输出,在这里我们分别将它们标记为 heroSearch 和 textSearch。

query textSearch {
  search(text: "an") {
    __typename
  }
}
query heroSearch {
  hero {
    name
  }
}

如果您按原样发送此查询而没有指定 operationname,JMeter 将抛出以下错误。 当有多个查询时,必须指定操作名称。

输出

到目前为止,我们已经看到了查询的例子。现在,让我们看看关于突变。

如果要更新或更改对象,应该发送“变异”请求。在这个星球大战的例子中,我们将改变评论。 查询

mutation CreateReviewForEpisode($ep: Episode!, $review: ReviewInput!) {
  createReview(episode: $ep, review: $review) {
    stars
    commentary
  }
}
  "ep": "JEDI",
  "review": {
    "stars": 5,
    "commentary": "This is a great movie!"
  }
}

重要提示: JMeter 还不支持订阅操作。 在我的 GitHub repo 中还有更多的例子,请检查并奖励一个 STAR。

Pros 优点 GraphQL HTTP Request is a part of JMeter Core. No need to install it from JMeter Plugins Manager GraphQL HTTP Request 是 JMeter Core 的一部分,不需要从 JMeter 插件管理器安装它 Supports Query and Mutations 支持查询和突变 Con 反对 Doesn’t support Subscriptions yet 还不支持订阅 Final Words 临终遗言 GraphQL in JMeter enables you to test the performance of GraphQL APIs without worrying about formatting the JSON and sniffing the HTTP traffic. But if you are comfortable in using HTTP Sampler, you can use. GraphQL provides a comfort and easy way to maintain the test plan. JMeter 中的 GraphQL 使您能够测试 GraphQL api 的性能,而不用担心格式化 JSON 和嗅探 HTTP 流量。但是如果你喜欢使用 HTTP 采样器,你可以使用。GraphQL 为维护测试计划提供了一种舒适和简单的方法。

author

石头 磊哥 seven 随便叫

company

thoughtworks(离职了。。。。)

大家好,本人不才,目前依旧混迹于thoughtworks,做着一名看起来像全栈的QA,兴趣爱好前端,目前是thoughtworks 西安QA社区的leader,如果有兴趣分享话题,或者想加入tw,可以找我

roles

QA(营生) dev(front-end dev 兴趣爱好)

联系方式

如果想转载或者高薪挖我 请直接联系我 哈哈

wechat:

qileiwangnan

email:

qileilove@gmail.com