2017-05-03 135 views
0

我与处理申请的提交和处理的应用程序的工作,我试图进行负载测试,其中不同的用户针对不同的申请和执行取决于不同的操作申请状态。该信息存在于从服务器发送的令人难以置信的长JSON响应中,该响应还包含所有文件的所有信息。但是,我感兴趣的领域彼此之间的距离足以让它们相互关联,这一点特别方便。JMeter的正则表达式包含下划线,工作异常

我要这样做的方式如下:我需要提取每个文件的ID号码才能定位它,并且我需要能够随机定位与特定状态关联的文件ID。响应的,我关心的结构如下:

{ 
    "responseObject":{ 
     "baseFilingRequests":{ 
      "^Value":[ 
      {"fields":"[values]"}, 
      {"fields":"[values]"}, 
      { 
       "fields":"values", 
       "referencedListings":"[value]", 
       "id":"[value]", 
       "referenceId":"[value]", 
       "status":"[value]", 
       "filingName":"[value]", 
       "fields":"values", 
      }, 
      {"fields":"[values]"}, 
      {"fields":"[values]"} 
      ] 
     } 
    } 
} 

所以我想我可能只是坚持在正则表达式这个表达式和修改状态字段为每个线程组,这样每个将针对具有不同的地位申请(STATUS_APPROVED,STATUS_REJECTED,等等),然后只需提取它找到的每个申请的ID,使用这样的表达式:

\"referencedListings\":null,\"id\":\"(.+?)\",\"referenceId\":\"\d\d\d\d\d\d\d\”,\"status\":\"STATUS[_]RECEIVED\", 

然而,试图提取申请的ID时,下划线是给我找麻烦与我指定的状态。有时,它捕捉不同的状态(捕获对应于具有STATUS_CANCELLED状态的提交者ID,而不是我指定的STATUS_LOCKED),有时它捕获的ID,但它不会停止提取存在;它会尽可能多地提取响应,然后将这个庞大的字符串插入变量中,然后尝试在稍后的请求中将它用作归档ID,从而生成空指针异常。这种行为是不稳定的,看起来是随机的,我对如何解决这个问题感到不知所措。

我试图逃避使用反斜杠字符,和几乎所有其他的语法,我已经能够想到的,但这种行为仍然存在。毫无疑问,这是下划线,因为无论何时我仅使用下划线之前的所有内容来表达表达式,RegEx的表现一致且可预测。但我不能只是忽略它,因为它是我需要来检测这样我就可以据此筛选申报,更何况像STATUS_PENDING_UNLOCK状态包含两个下划线,我需要能够检测两个状态语法的一部分。

在这个问题上的任何有识之士将不胜感激。

+0

你能执行相关请使用JSON提取器?语法是'$ .. id',它将检索'id'的所有实例。你可以在随后的请求中使用它。 myvar_1,myvar_2等'JSON PostProcessor使您能够使用JSON-PATH语法从JSON响应中提取数据。此后处理器与正则表达式提取器非常相似。它必须作为HTTP采样器或其他任何具有响应的采样器的孩子放置。它可以让你在一个非常简单的方法文本内容提取,看到JSON路径语法.'欲了解更多详细信息,请http://jmeter.apache.org/usermanual/component_reference.html#JSON_Extractor –

+0

这听起来是非常有用的。但是,如果在包含所有文件的响应中存在称为id的其他字段,这些字段与我旨在提取的提交ID不具体对应,是否会自行工作?更重要的是,我需要设置什么样的条件,以便只提取同时存在的状态字段和我正在查找的特定状态值的id字段? – Don

+0

'id'将根据您在'JSON Extractor'中提到的语法来检索。例如。 '$ .. id'将只检索JSON结构中的所有'id'。如果'id'位于JSON结构的某处,它将不会提取。请发布完整的JSON,我将能够为您提供确切的语法。谢谢! –

回答

相关问题