我是 jmeter 新手。我使用的 Jmeter 版本是 5.1.1
我想用它来测试我的 restful api 服务。
我的 api 类似于:DELETE /cpro/v2/alertfiles/{filename}
此处的文件名为 /etc/config/testfile1。
如果 curl 命令如下,服务器就可以解析文件名:
curl -v -X DELETEhttp://restapisrv:8888/cpro/v2/alertfiles/%2Fetc%2Fconfig%2Ftestfile1?configmapName=zt3-cpro-server
我创建了一个 http 请求。但是 jmeter 发送的 url 已将 %2F 解码为 '/'。因此请求看起来像 DELETE /cpro/v2/alertfiles/etc/config/testfile1,这导致服务器返回 404,因为找不到这样的条目。
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="delete alert file test1" enabled="true"> <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> <collectionProp name="Arguments.arguments"/> </elementProp> <stringProp name="HTTPSampler.domain">restapisrv</stringProp> <stringProp name="HTTPSampler.port">8888</stringProp> <stringProp name="HTTPSampler.protocol">http</stringProp> <stringProp name="HTTPSampler.contentEncoding">utf-8</stringProp> <stringProp name="HTTPSampler.path">/cpro/v2/alertfiles/%2Fetc%2Fconfig%2Ftestfile1?configmapName=zt3-cpro-server&namespace=default</stringProp> <stringProp name="HTTPSampler.method">DELETE</stringProp> <boolProp name="HTTPSampler.follow_redirects">true</boolProp> <boolProp name="HTTPSampler.auto_redirects">false</boolProp> <boolProp name="HTTPSampler.use_keepalive">true</boolProp> <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> <stringProp name="HTTPSampler.embedded_url_re"></stringProp> <stringProp name="HTTPSampler.connect_timeout"></stringProp> <stringProp name="HTTPSampler.response_timeout"></stringProp> </HTTPSamplerProxy>
我尝试在路径中使用__urlencode(/etc/config/testfile1),但结果相同。我不知道如何设置HTTPSmapler.path的值以保留%2F。对此有什么想法吗?谢谢您的帮助。
答案1
我使用插件 http raw request 来解决这个问题。这是一个变通方法。配置如下:
<kg.apc.jmeter.samplers.HTTPRawSampler guiclass="kg.apc.jmeter.samplers.HTTPRawSamplerGui" testclass="kg.apc.jmeter.samplers.HTTPRawSampler" testname="delete alert file test2 - HTTP Raw Request" enabled="true">
<stringProp name="hostname">zt1-cpro-restapisrv-restserver</stringProp>
<stringProp name="port">8888</stringProp>
<boolProp name="keepalive">false</boolProp>
<stringProp name="timeout">0</stringProp>
<stringProp name="data">DELETE /cpro/v2/alertfiles/%2Fetc%2Fconfig%2Ftestfile2?configmapName=zt3-cpro-server&namespace=default HTTP/1.1
User-Agent: curl/7.29.0
Host: zt1-cpro-restapisrv-restserver:8888
Accept: */*
Connection: close

</stringProp>
<stringProp name="fileName"></stringProp>
<boolProp name="parse">true</boolProp>
</kg.apc.jmeter.samplers.HTTPRawSampler>