首页 文章

在Jmeter中从提取的正则表达式中更改特殊字符

提问于
浏览
4

我提取了一个API密钥,JMeter不喜欢提取的正则表达式中的特殊字符 .

Below is an example

我使用正则表达式提取器从上一页提取数据 . 提取的值是:TEST | 1TWO3-TEST

Error message

稍后使用此值时,我收到以下消息:

java.net.URISyntaxException: Illegal character in query at index 5: (URL+Regex)
    at java.net.URI$Parser.fail(Unknown Source)
    at java.net.URI$Parser.checkChars(Unknown Source)
    at java.net.URI$Parser.parseHierarchical(Unknown Source)
    at java.net.URI$Parser.parse(Unknown Source)
    at java.net.URI.<init>(Unknown Source)
    at java.net.URL.toURI(Unknown Source)
    at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sample(HTTPHC4Impl.java:286)
    at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:74)
    at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1146)
    at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1135)
    at org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:434)
    at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:261)
    at java.lang.Thread.run(Unknown Source)

Hard Coded Value

当硬编码它的值时它工作正常:TEST%7C1TWO3-TEST

有关如何通过正则表达式提取器使正则表达式看起来像我的硬编码值的任何建议吗?

4 回答

  • 1

    您需要对参数进行url编码 .

    HTTP Request中,确保在参数表中检查"Encode ?":

    enter image description here

    如果参数在路径中,则可以在表中移动它以获取GET请求 .

    如果您最终需要编码,那么在提取器之后使用JSR 223 Post Processor,检查Cache脚本并添加,如果您的regexp提取器创建varName,例如:

    import java.net.URLEncoder;
     String value = URLEncoder.encode(vars["varName"], "UTF-8");  
     vars.put("ENCODE_VALUE", value);
    

    然后你可以通过 $ 使用变量

  • 0

    您的错误不在正则表达式中,而是在您使用数据的方式之后 . 使用正则表达式提取值后,请确保对数据进行如下编码:

    String q = "TEST|1TWO3-TEST";
    String url = URLEncoder.encode(q, "UTF-8");
    

    现在您可以使用 url 进行您正在进行的任何操作 . 我假设你已经将 TEST|1TWO3-TEST 解压缩到一个变量中 .

    Test

    // Output: TEST%7C1TWO3-TEST
    
  • 2

    只需使用urlEncode() function包装来自正则表达式提取器的变量:

    ${__urlencode(${foo})}
    

    演示:

    JMeter urlencode function

    查看How to Use JMeter Functions文章系列,了解有关在JMeter测试中使用函数的更多信息 .

    通过JMeter Plugins project也可以找到很多有用的 .

  • 0

    感谢您的回复,我做了以下工作 .

    String var1 = vars.get("var1"); 
    String newVar1 = var1.replaceAll("\\|","%7C");
    vars.put("var1", newVar1);
    

    谢谢

相关问题