如何在 k6 中使用 xmlhttprequest 或 xhr2

问题描述

我想将库 xmlhttprequest 或 xhr2 与 K6 性能测试工具一起使用。

由于 k6 不支持节点模块,我收到以下错误

GoError: Module specifier "xhr2" was tried to be loaded as remote module by prepending "https://" to it,which didn't work. If you are trying to import a nodejs module,this is not supported as k6 is _not_ nodejs based. Please read https://k6.io/docs/using-k6/modules for more information. Remote resolution error: "Get "https://xhr2": dial tcp: lookup xhr2: no such host" at reflect.methodValueCall (native)

有没有办法可以在本地下载这些库并使用它们。感谢您的帮助。

解决方法

目前在 k6 中发送 HTTP 请求的唯一方法是使用内置的 k6/http 模块。出于显而易见的原因,这与 XMlHTTPRequest 完全不兼容,而且“xhr2”(为 nodejs 实现这一点)是使用 nodejs API 而不是 k6 API 来实现的。

作为一种解决方法,我建议您仅实现您正在使用的部分并使用它。我希望您不会使用库支持的所有功能,因此不应该使用那么多代码。这有可能会导致复杂性爆炸,特别是如果您尝试映射一些在 k6 中不太好或根本不支持的功能,因此我建议尝试弄清楚您使用的是否可以转换为 k6,如果有的话。例如,XMLHTTPRequest(根据我的快速阅读,因为我已经很多年没有使用它了)默认情况下会异步发送请求,但是 k6 完全不支持,因为它仍然没有 event loop .有 a "workaround" for that as well 但我还没有尝试让它工作,它就像有一个事件循环一样,但实际上它仍然是所有 JS 代码,所以你不会并行执行 2-3 个请求。

因此,您很可能无法使用相同的代码并从 k6 中获得完全相同的行为。

在我看来,如果您想继续使用这些库编写并在 nodejs/浏览器中运行相同的代码,以上内容才有意义。否则,完全转向“k6/http”模块可能会快得多,而且不会有太多麻烦。