繁体   English   中英

在 docker 上使用 k6 测试本地站点

[英]Using k6 on docker to test a localhosted site

我的计算机上有一个应用程序在 localhost:1235 中运行,我正在尝试对其进行负载测试。

我为 docker 安装了 k6 容器来测试它,但是当然从 docker 的性质来看,我的容器有一个不同的 localhost。 我试图了解做什么。

我运行以下命令: docker run -it --rm --net=host -vc:/users/k6:/k6 loadimpact/k6 run /k6/script

我在某处读到 --net=host 在 Windows 上不起作用,是吗? 我如何找到主机IP?

我试过按本教程运行: http : //blog.michaelhamrah.com/2014/06/accessing-the-docker-host-server-within-a-container/

我找到的 IP 172.17.0.1 在我的测试中不起作用。

我也尝试添加-p 1235:1235但它失败了,我猜 docker 试图绑定这个端口并转发到它。

提前致谢,柴姆

在您的 k6 脚本中,使用 url host.docker.internal访问主机上运行的内容。

例如访问在主机上运行的服务http://localhost:8080

// script.js
import http from "k6/http";
import { sleep } from "k6";

export default function () {
  http.get("http://host.docker.internal:8080");
  sleep(1);
}

然后在 Windows 或 Mac 上,这可以运行:

$ docker run -i loadimpact/k6 run - <script.js

对于 linux,你需要一个额外的标志

$ docker run --add-host=host.docker.internal:host-gateway -i loadimpact/k6 run - <script.js

参考资料:

docker 实例中的 k6 应该能够连接到主机上的“公共”IP - 在以太网或 Wifi 接口上配置的 IP。 您可以执行ipconfig /all以查看所有接口及其 IP。

在我的 Mac 上,我可以这样做: $ python httpserv.py & [1] 7824 serving at port 8000 $ ifconfig en1 en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500 ether b8:09:8a:bb:f7:ed inet6 fe80::148f:5671:5297:fc24%en1 prefixlen 64 secured scopeid 0x5 inet 192.168.0.107 netmask 0xffffff00 broadcast 192.168.0.255 nd6 options=201<PERFORMNUD,DAD> media: autoselect status: active $ echo 'import http from "k6/http"; export default function() { let res = http.get("http://192.168.0.107:8000"); console.log(res.status); };' |docker run -i loadimpact/k6 run - $ python httpserv.py & [1] 7824 serving at port 8000 $ ifconfig en1 en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500 ether b8:09:8a:bb:f7:ed inet6 fe80::148f:5671:5297:fc24%en1 prefixlen 64 secured scopeid 0x5 inet 192.168.0.107 netmask 0xffffff00 broadcast 192.168.0.255 nd6 options=201<PERFORMNUD,DAD> media: autoselect status: active $ echo 'import http from "k6/http"; export default function() { let res = http.get("http://192.168.0.107:8000"); console.log(res.status); };' |docker run -i loadimpact/k6 run -

即,我在主机的端口 8000 上启动一个简单的 HTTP 服务器,然后执行 k6 docker 映像并告诉它访问基于主机上物理的、向外的 en1 接口的 IP 地址的 URL。 在您的情况下,在 Windows 上,您可以使用ipconfig来找出您的面向外部的 IP。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM