npm - 在 K6 测试中捆绑 npm 模块“cheerio”
问题描述
我正在尝试使用 LoadImpact 中的 K6 框架创建一些测试,但我正在努力按照其文档站点上的说明包含外部 NPM 模块。
在 loadImpacts 文档站点上,它们包含一个关于我所追求的详细示例,这些模块使我能够从肥皂服务响应中解析 xml。但是,我无法让这个工作!现在,我是一个完全的 javascript 新手,但我已经编码多年并且真的很想解决这个问题。可以在这里找到:https ://docs.k6.io/docs/modules#section-npm-modules 任何人都可以让它工作吗?我需要在与 Internet 隔离的服务器上运行它,所以我完全依赖于创建包和传输所需的文件。
根据文档,一个包是这样创建的
-- bundle `cheerio` npm module
git clone git@github.com:cheeriojs/cheerio.git
npm install browserify index.js -s cheerio > cheerio.js
我的第一个问题:在运行此命令时,我所在的文件夹中会创建一个“cheerio.js”文件以及一个“cheerio”文件夹和一个“node_modules”文件夹。我的“根”目录中的cheerio.js 仅包含以下内容:
+ cheerio@0.22.0
+ index.js@0.0.3
+ browserify@16.2.3
updated 3 packages and audited 2829 packages in 2.221s
found 0 vulnerabilities
返回到关于如何在 k6 javascript 中引用此包的 LoadImpacts 示例:
import cheerio from "./vendor/cheerio.js";
export default function()
{
const res = http.get("https://loadimpact.com/");
const $ = cheerio.load(res.body);
这是什么文件,在 browserify 生成的结构中我可以在哪里找到它?我试图将其更改为指向“cheerio”文件夹中的“index.js”或“cheerio/lib”中的cheerio.js。然后,我将收到关于 Cheerio.js 中第一行的投诉,该行定义了一个无法找到的“解析”变量:
var parse = require("./parse'),
如果我将其更改为
var parse = require("./parse.js')
它继续抱怨缺少“htmlparser2”,我也可以在这个结构中找到它,但是似乎整个依赖结构都不起作用。
谁能给我一些指导,告诉我如何为cheerio 创建一个带有依赖项的browserify 包,以及我需要如何/什么复制到我的k6 项目以使其像在loadImpact 站点上一样工作。
解决方案
对此的 k6 文档肯定需要一些澄清,我稍后会做。当前提到的vendor
文件夹并没有什么特别之处,文档只是缺少将browserify 生成的文件复制到 k6 项目中的新cheerio.js
文件夹的步骤。xml2js.js
vendor
现在,我将尝试提供一个关于如何以更简单的方式实现相同目标的简化说明:
- 创建一个新的空文件夹并在终端中转到它
- 在那里运行(忽略关于缺失或描述
npm install browserify cheerio
的 npm 警告)package.json
./node_modules/.bin/browserify ./node_modules/cheerio/ -s cheerio > cheerio.js
在该文件夹中运行- 文件夹根目录中的结果
cheerio.js
文件应该是您从 k6 脚本导入的文件:
import http from "k6/http";
import cheerio from "./cheerio.js";
export default function () {
const res = http.get("https://loadimpact.com/");
const $ = cheerio.load(res.body);
console.log($('head title').text())
}
对于单个 npm 库应该就是这样。
如果您需要使用多个 npm 包,最好花一些时间将它们捆绑在一个浏览器化.js
文件中。例如,如果您需要k6 文档中提到cheerio
的库和库,则可以执行以下操作:xml2js
- 创建一个新的空文件夹
在其中添加类似以下
package.json
文件的内容:{ "name": "k6-npm-libs-demo", "version": "0.0.1", "description": "just a simple demo of how to use multiple npm libs in k6", "main": "npm-main.js", "dependencies": {}, "devDependencies": { "browserify": "*", "cheerio": "*", "xml2js": "*" }, "scripts": { "install": "./node_modules/.bin/browserify npm-main.js -s npmlibs > vendored-libs.js" }, "author": "", "license": "ISC" }
当然,如果您需要与 and 不同的库,则
cheerio
需要xml2js
调整devDependencies
选项。添加这样的
npm-main.js
文件(再次调整您想要的库):exports.xml2js = require('xml2js'); exports.cheerio = require('cheerio');
在终端中打开该文件夹并运行
npm install
. 这应该会导致在vendored-libs.js
文件夹的根目录中创建一个文件,您可以像这样在 k6 中使用该文件:import http from "k6/http"; import { cheerio, xml2js } from "./vendored-libs.js"; export default function () { const res = http.get("https://loadimpact.com/"); const $ = cheerio.load(res.body); console.log($('head title').text()) var xmlString = '<?xml version="1.0" ?>' + '<items xmlns="http://foo.com">' + ' <item>Foo</item>' + ' <item color="green">Bar</item>' + '</items>' xml2js.parseString(xmlString, function (err, result) { console.log(JSON.stringify(result)); }); }
推荐阅读
- javascript - 反应 onClick 不会在递归构建的嵌套跨度上触发
- xml - Dataweave 2.0 - XML 控件/特殊字符转义
- django - 通过模型序列化过滤嵌套的 DRF
- python - 使用 psutil 的 RAM 信息没有意义
- git - docker compose build context 从 azure devops 中的 git 存储库
- python - 由于超时错误,AWS 不允许我 ssh 进入实例并且无法连接到我的网站
- apache-spark - 是否有等效于 Scala 的 Seq.fill() 的高效 PySpark/Python?
- javascript - 我的文件系统 readStream 回调不起作用
- r - 在 R 中运行 amt:fit_issf() 模型时,来自分类预测器的“NA”结果问题
- javascript - 按下按钮后如何更改结果的字体颜色?