我提取了一个API密钥,JMeter不喜欢提取的正则表达式中的特殊字符。
以下是一个示例
我使用正则表达式提取器从上一页提取数据。 提取的值是:TEST | 1TWO3-TEST
错误消息
稍后使用此值时,我会收到以下消息:
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)
硬编码值
当硬编码它的值时它工作正常:TEST%7C1TWO3-TEST
有关如何通过正则表达式提取器使正则表达式看起来像我的硬编码值的任何建议吗?
答案 0 :(得分:2)
您需要对参数进行url编码。
在HTTP Request中,请确保选中“编码?”在参数表中:
如果参数在路径中,您可以在表中移动它以获取GET请求。
如果您最终需要编码,请在提取器后使用JSR 223后处理器,检查缓存脚本并添加,如果您的正则表达式提取器创建varName,例如:
import java.net.URLEncoder;
String value = URLEncoder.encode(vars["varName"], "UTF-8");
vars.put("ENCODE_VALUE", value);
然后,您可以通过 $ {ENCODE_VALUE}
使用变量答案 1 :(得分:1)
您的错误不在正则表达式中,而是在您使用数据的方式之后。使用正则表达式提取值后,请确保对数据进行编码,如下所示:
String q = "TEST|1TWO3-TEST";
String url = URLEncoder.encode(q, "UTF-8");
现在您可以使用url
进行任何操作。我假设您已将TEST|1TWO3-TEST
提取到变量中。
// Output: TEST%7C1TWO3-TEST
答案 2 :(得分:0)
使用urlEncode() function包装来自正则表达式提取器的变量,如:
${__urlencode(${foo})}
演示:
查看How to Use JMeter Functions文章系列,了解有关在JMeter测试中使用函数的更多信息。
通过JMeter Plugins project提供的有用信息很少。
答案 3 :(得分:0)
感谢您的回复,我做了以下工作。
String var1 = vars.get("var1");
String newVar1 = var1.replaceAll("\\|","%7C");
vars.put("var1", newVar1);
由于