jmeter 正则表达式

jmeter 正则表达式

前言

在 jmeter 测试中,有时需要对返回结果进行一定的处理和筛选,而正则表达式则是一个功能强大的工具。本文将介绍如何在 jmeter 中使用正则表达式对返回结果进行处理和筛选。

正则表达式语法

正则表达式是用来匹配字符串的一种工具,可以用来检索、替换某些字符串,以及分割字符串等功能。常见的正则表达式符号和语法如下:

符号 描述
. 匹配任意单个字符
* 匹配0个或多个相邻的前导字符
+ 匹配1个或多个相邻的前导字符
? 匹配0或1个相邻的前导字符
\ 转义特殊字符
^ 字符序列的开始
$ 字符序列的结尾
[] 匹配中括号内任意单个字符
[^] 匹配中括号内除此之外的任意单个字符
() 分组,可以改变优先级,也可用于后向引用
| 匹配左右任一字符

常见的元字符和字符类:

字符 描述
\d 数字
\w 字母数字和下划线
\s 空白字符
. 匹配所有字符,除了新行符
[..] 匹配中括号内的任意单个字符
[^..] 不匹配中括号内的任意单个字符
\b 单词边界
\B 非单词边界

jmeter 中的正则表达式

在 jmeter 中使用正则表达式可以有多种方式,比较常见的有以下三种:

  1. 通过 Regular Expression Extractor

Regular Expression Extractor 是 jmeter 中内置的一个后置处理器,可以用于提取正则表达式里的匹配项,并对其进行处理。它包含以下参数:

参数 描述
Apply to 应用于的选项(比如响应头、响应正文等等)
Field to check 需要验证正则表达式的字符串字段
Reference Name 正则表达式提取器的引用名称
Regular Expression 要提取的正则表达式
Template 所需提取的分组。 $1 表示第一个匹配,以此类推
Match No 匹配号,0 表示所有匹配项

示例:假设我们需要提取响应正文中的手机号,那么我们可以使用以下正则表达式:

1\d{10}

这个正则表达式可以表示以数字 1 开始,后面跟 10 个数字的字符串,即手机号。然后在 jmeter 中配置如下参数:

  1. 通过 BeanShell Sampler

BeanShell Sampler 是一个通用的 Sampler,它可以执行任意的 Java 代码。我们可以在它里面使用标准的 Java 正则表达式来匹配返回结果,并进行处理。

示例:假设我们需要对返回结果进行模板匹配,那么可以使用以下的 BeanShell Sampler:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

String response = prev.getResponseDataAsString();

Pattern pattern = Pattern.compile("<div class=\"user\">(.*?)</div>");
Matcher matcher = pattern.matcher(response);

while (matcher.find()) {
    String user = matcher.group(1);
    log.info("User found: " + user);
    // 进行其他处理
}

这个示例用到了 Java 中的 Pattern 和 Matcher,它们可以在 BeanShell 中直接使用。这里的正则表达式表示匹配类似于 <div class="user"> 开头,</div> 结尾,中间任意字符的字符串。然后使用 while 循环遍历所有匹配项,并对每个匹配项进行其他处理。

  1. 通过 JSR223 Sampler

JSR223 Sampler 是 jmeter 中另一个通用的 Sampler,它支持多种脚本语言,包括 Java、JavaScript、Groovy 等。因此我们也可以在它里面使用任意的正则表达式来进行处理。

示例:假设我们需要对返回结果进行 CSV 形式的处理,那么可以使用以下的 JSR223 Sampler:

String response = prev.getResponseDataAsString();

def pattern = /<a href="([^"]*)"[^>]*>(.*?)<\/a>/;
def matcher = pattern.matcher(response);

while (matcher.find()) {
    String url = matcher.group(1);
    String title = matcher.group(2);
    log.info("URL: " + url + ", Title: " + title);
    // 输出 CSV 形式的内容
    println(url + "," + title);
}

这个示例用到了 Groovy 中的正则表达式,它的语法与 Java 类似。这里的正则表达式表示匹配类似于 <a href="...">...</a> 的链接标签,并提取出 href 属性和链接文本。然后使用 while 循环遍历所有匹配项,并对每个匹配项进行 CSV 处理。

注意事项

使用正则表达式时,需要注意以下几点:

  1. 正则表达式符号需要与被匹配的字符串完全符合(不包含换行符)。

  2. 如果使用组匹配,则匹配到的结果包括组匹配项和整个匹配项两个部分。

  3. 如果使用贪婪匹配,则会尽量匹配更长的字符串。使用非贪婪匹配可以避免这个问题。

  4. 不同语言和不同工具中的正则表达式语法略有不同,需要注意语法差异。

结论

在 jmeter 测试中,正则表达式是一个非常强大的工具,可以用来筛选、提取和处理返回结果。我们通过介绍 jmeter 中 Regular Expression Extractor、BeanShell Sampler 和 JSR223 Sampler 的使用方法,并给出了一些示例来说明如何在 jmeter 中使用正则表达式。同时,我们也注意到了使用正则表达式时需要注意的一些事项。通过对正则表达式的学习和运用,可以使我们的测试工作更加准确和高效。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程