该请求的sessionId在回放的时候发生了变动,若要脚本正常运行,此处便要对其做关联操作。提取过程便需要添加正则表达式提取器,见下图:

  此处正则表达式需要提取sessionId的数值,故在数据产生行,将实际数值替换成(.*),将变量命名为sessionId__110_eid,多一句嘴:名字虽然可以任意起,但是好起一个有意义的名字,方便脚本的查看调试。
  其中的模板表示需要提取的分组$0$表示整个正则表达式匹配的字符串,1表示第一个圆括号包住的部分,2表示第二个圆括号包住的部分,以此类推。
  匹配数字表示如果有多条数据匹配选哪一个,0是从中随机选一个,如果写1是取第一个匹配正则表达式的数据项,2是取第二个匹配正则表达式的数据项,以此类推。
  后面凡是原来sessionId数值出现的地方,均将其替换为${sessionId__110_eid_1_g1},便达到了关联的效果。这块解释一下:HyperPacer是基于JMeter进行的定制化开发,正则表达式体系采用了和JMeter一样的模式。_1_g1的后缀表示取出第一个符合正则的第一组数字。前一个1表示如果存在多个匹配项要取第几个的选项,组的概念是通过正则表达式中的()表示的。正则表达式中第N次出现的()分组,g后面跟N。该实例中使用的是第一次匹配项中的第一分组。见下图:

  替换完成后,可以再试跑一遍脚本看看替换是否达到预期,是否还有别的类似变量没有替换的,再逐一进行替换后,关联的工作基本完成了。剩下是驱动脚本撒丫子开跑让服务器压力山大了(中二病又犯了:P)。
  全文完。
  注一:简单说,关联是把脚本录制下来的一些固定的数据替换成由服务器响应数据中动态提取的数据。举个例子:现在大多数服务器为确保和每个浏览器会话的一致性,通常会在首次发送响应数据时夹带一个标识符,后续的交互都基于这个标识符进行判断是不是同一个浏览器发来的。一般将该标识符称作Session ID。每当有新的交互过程出现,都会生成新的Session ID。脚本直接回放失败的原因是因为新的与服务器交互过程用了脚本录制中已经写死的旧Session ID,故而回放失败。
  注二:正则表达式,英文全名regular expression(玩滑板的同学不要问我goofy expression,这个真没有。咱还是讨论讨论Ollie吧),英文简写regex、regexp或RE。中文部分文献中也译作正规表示式、正规表示法、常规表示法,其实都是一个意思。正则表达式是通过字符串来描述一类具有类似结构但又不完全相同字符串集合的句法规则,用于数据提取及模式匹配等诸多方面。