【发布时间】:2019-05-31 20:57:31
【问题描述】:
当我在 Docker 环境中使用 Jenkins 开始使用 jmeter-maven-plugin 进行 JMeter 测试时,HttpRequests 将始终失败并显示 403。 接收 SpringBootApplication 是在 Docker 环境中运行还是仅在我的 PC(主机)上运行都没有关系。 Docker 环境是“Docker for Windows”。
在 Windows 上的 Maven 中运行 jmeter-maven-script(无 Docker),然后一切运行顺利。在 JMeter GUI 中运行也可以正常工作。
更新:
- 当我将 URL 更改为无效 URL 时,403 http 状态仍然存在。更改到无效服务器的路径会一直提供 403 http 状态。
- 当我在http://example.com 上启动 JMeter 运行(1 个线程,2 次)时,它可以工作。
- 在端口 80 上的同一 Docker 网络上启动 SpringBootApplication 也无法正常工作。使用 http://localhost 和 http://dockercontainername 均失败,并显示“非 HTTP 响应代码:java.net.ConnectException,非 HTTP 响应消息:连接被拒绝(连接被拒绝)”
我在 Windows 上准备 JMeter 脚本文件。我将文件复制到我的 Spring Maven 项目中。
我不想在我所有的环境中都安装 JMeter 的东西,所以使用 jmeter-maven-plugin 是一个很好的解决方案。
你能帮我解决这个非常烦人的问题吗?
我的 Maven 插件描述是:
<plugin>
<groupId>com.lazerycode.jmeter</groupId>
<artifactId>jmeter-maven-plugin</artifactId>
<version>2.7.0</version>
<executions>
<execution>
<id>jmeter-tests</id>
<goals>
<goal>jmeter</goal>
</goals>
<phase>verify</phase>
</execution>
</executions>
<configuration>
<skipTests>${skipPerformanceTests}</skipTests>
<testFilesDirectory>${project.basedir}/src/main/resources/jmeter</testFilesDirectory>
<resultsDirectory>${project.basedir}/target/jmeter/testFiles</resultsDirectory>
<resultsFileFormat>csv</resultsFileFormat>
</configuration>
</plugin>
我的 JMeter 脚本:
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP Request" enabled="true">
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
<collectionProp name="Arguments.arguments">
<elementProp name="" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value"></stringProp>
<stringProp name="Argument.metadata">=</stringProp>
<boolProp name="HTTPArgument.use_equals">true</boolProp>
</elementProp>
</collectionProp>
</elementProp>
<stringProp name="HTTPSampler.domain"></stringProp>
<stringProp name="HTTPSampler.port"></stringProp>
<stringProp name="HTTPSampler.protocol"></stringProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.path">http://127.0.0.1:8080/indexRoleA.html</stringProp>
<stringProp name="HTTPSampler.method">GET</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>
我的 JMeter HttpRequets 就像转到 /indexRole.html 一样简单。
【问题讨论】:
-
403 听起来可以访问网络服务器,但在您尝试访问的路径上没有网络应用程序。您确定从 JMeter 实例中看到的 URL 是正确的吗? 8080 可能是 Jenkins 实例,而不是您认为的网络服务器。
-
德克萨斯州。该网站处于活动状态,我可以通过浏览器或其他测试访问它。我的 Jenkins 位于端口 8888。我可以配置一些东西以便我可以看到哪些请求被触发了吗?
-
浏览器是否在 docker 中运行?如果没有,您看到的与 JMeter 不同。
标签: maven docker jmeter jenkins-plugins jmeter-maven-plugin