尝试使用 JMeter 的 docker 容器(非 GUI 模式)运行 JMeter 测试会抛出错误 "Could not open xxxx.jmx file"

Trying to run a JMeter test using a docker container for JMeter (non GUI mode) throws error "Could not open xxxx.jmx file"

我正在尝试使用 Docker 容器分发加载测试。

在本地 JMeter 中,我的测试 运行 在 GUI 或非 GUI 模式下正确,但是当我尝试 运行 在非 GUI 模式下使用 docker 图像时对于 JMeter:

docker run egaillardon/jmeter -n -t ~/Developer/testing/login_test.jmx -l ~/Desktop/resultado.jtl

我收到错误:

Could not open ~/Developer/testing/login_test.jmx

我为 JMeter (egaillardon/jmeter, justb4/jmeter, vmarrazzo/jmeter) 尝试了不同的 docker 图像,但我在其中任何一个中都遇到了相同的错误。任何人都知道我必须在我的 jmx 文件中更改什么才能使其可读?

我已经尝试过这个 solution in Stack Exchange 但 none 对我有用。

~/Developer/testing/login_test.jmx 将从容器文件系统的角度加载,很可能这个路径在您的容器文件系统中不存在。

为了克服这个问题,您可以使用 docker volume:

从您的主机文件系统将此文件挂载到您的容器文件系统中
docker run -v ~/Developer/testing/:/workspace egaillardon/jmeter -n -t /workspace/login_test.jmx -l /workspace/resultado.jtl

解释

  • -v ~/Developer/testing/:/workspace:将主机中的 ~/Developer/testing/ 目录挂载到容器文件系统
  • 中的路径 /workspace/
  • -n -t /workspace/login_test.jmx -l /workspace/resultado.jtl:选项在运行时传递给容器进程(jmeter),因此在容器的上下文中。我们需要调整路径,使其与我们在配置卷时选择的位置匹配。

您也可以将主机目录挂载到容器中的默认工作目录(/jmeter)。

示例:

docker run --detach --rm --volume `pwd`:/jmeter egaillardon/jmeter-plugins --nongui --testfile test.jmx --logfile result.jtl


通过这样做,jmeter 运行 日志文件 (jmeter.log) 也将在主机目录中创建。

另外,为了解决文件权限问题,还可以将宿主机上的用户id和用户组id分配给容器内的jmeter用户。

示例:

docker run --env JMETER_GROUP_ID=`/usr/bin/id -g` --env JMETER_USER_ID=`/usr/bin/id -u` --rm egaillardon/jmeter --server -Jserver.rmi.ssl.disable=true