如何在 Jmeter 中捕获 signalR 连接字符串

How to capture signalR connection string in Jmeter

由于信号器连接,我在 jmeter 中执行脚本时出现错误

我需要在 url 中传递 connectionToken 和 connectionData,如下所示。

"/Web/signalr/connect?transport=longPolling&clientProtocol=1.5&connectionToken=${connectionToken}&connectionData=${connectionData}"

我能够捕获 ConnectionToken 并成功传递它。但是,我遇到了 connectionData 问题,它看起来像

[{"name":"alertshub"},{"name":"loggerhub"},{"name":"notificationhub"}]

如何捕获和传递这个。 请找到屏幕截图

! enter image description here

! enter image description here

! enter image description here

! enter image description here

无法捕获以下连接字符串

连接数据:[{"name":"alertshub"},{"name":"loggerhub"},{"name":"notificationhub"}]

get 方法将上面的连接数据发送为

GET //abc.com/Web/signalr/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22alertshub%22%7D%2C%7B%22name%22%3A%22loggerhub% 22%7D%2C%7B%22name%22%3A%22notificationhub%22%7D%5D&_=1522754518635

并且正在获取响应 connectionToken。我能够提取 connectionToken 。

现在,我需要发送

GET //abc.com/Web/signalr/connect?transport=serverSentEvents&clientProtocol=1.5&tid=10&connectionToken=%27FcFUJytTeVDsNq4EM5iY59NrIlAO4EK0nU%2BP9fDasBFDTA%2B78kpLr05HaQoqstQouqyFMP2hShwh2eHdiG%2BCsRq7wNHs70BVSkjJiLIdyePfB3SmMCmeZeZyvd1xzfnc%27&connectionData=%255B%257B%2522name%2522%253A% 2522alertshub%2522%257D%252C%257B%2522name%2522%253A%2522loggerhub%2522%257D%252C%257B%2522name%2522%253A%2522notificationhub%2522%257D%255D%26_%3D=1518675]

它有有效的 connectionToken(已提取)但没有 connectionData。

响应是解析值时遇到意外字符:%。路径 '',第 0 行,位置 0。

我的问题是如何获得这些值,[{"name":"alertshub"},{"name":"loggerhub"},{"name" :"notificationhub"}].

接下来我需要 post

POST //abc.com/Web/signalr/connect?transport=longPolling&clientProtocol=1.5&connectionToken=FcFUJytTeVDsNq4EM5iY59NrIlAO4EK0nU+P9fDasBFDTA+78kpLr05HaQoqstQouqyFMP2hShwh2eHdiG+CsRq7wNHs70BVSkjJiLIdyePfB3SmMCmeZeZyvd1xzfnc&connectionData=%5B%7B%22name%22%3A%22alertshub %22%7D%2C%7B%22name%22%3A%22loggerhub%22%7D%2C%7B%22name%22%3A%22notificationhub%22%7D%5D&_=1522754518635

如您在此处所见,它具有有效的 connectionToken 但没有 connectionData。

对此的响应是:ConnectionId 的格式不正确。

BlazeMeter1

Blazemeter2

Blazemeter3

您需要使用与连接令牌相同的方法。 您的变量似乎没有获得所需的值。您是否在两个线程组之间使用相同的变量?

**-->Here request is encoded and connection data is also encoded.**
GET //abc.com/Web/signalr/negotiate?clientProtocol=1.5&connectionData=**%5B%7B%22name%22%3A%22alertshub%22%7D%2C%7B%22name%22%3A%22loggerhub%22%7D%2C%7B%22name%22%3A%22notificationhub%22%7D%5D**&_=1522754518635

并且正在获取响应 connectionToken。我能够提取 connectionToken 。

现在,我需要发送

**-->Here again encoded connection data is further encoded.**
GET //abc.com/Web/signalr/connect?transport=serverSentEvents&clientProtocol=1.5&tid=10&connectionToken=%27FcFUJytTeVDsNq4EM5iY59NrIlAO4EK0nU%2BP9fDasBFDTA%2B78kpLr05HaQoqstQouqyFMP2hShwh2eHdiG%2BCsRq7wNHs70BVSkjJiLIdyePfB3SmMCmeZeZyvd1xzfnc%27&connectionData=**%255B%257B%2522name%2522%253A%2522alertshub%2522%257D%252C%257B%2522name%2522%253A%2522loggerhub%2522%257D%252C%257B%2522name%2522%253A%2522notificationhub%2522%257D%255D%26**_%3D1522754518635

如果我没看错,那就避免编码两次。在第一张和第二张截图中,您对其进行了两次编码。 如果 "connectionData" 已修复,则尝试 "User defined variables" 或者如果它在某些响应中可用,则使用正则表达式捕获并进一步使用它。 希望您在数据提取过程中不会出错。