在 K6 测试中捆绑 npm 模块 'cheerio'
Bundle npm module 'cheerio' in K6 test
我正在尝试使用 LoadImpact 的 K6 框架创建一些测试,但我很难按照其文档站点上的说明包含外部 NPM 模块。
在 loadImpacts 文档站点上,它们包含一个详细示例,说明我所追求的,使我能够从 soap 服务响应中解析 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' 文件夹.
我的 "root" 目录中的 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 中引用此包的 LoadImpacts 示例 javascript:
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 中第一行的投诉,其中定义了一个 "parse" 变量,它找不到:
var parse = require("./parse'),
如果我把这个改成
var parse = require("./parse.js')
它继续抱怨缺少 'htmlparser2' 我也可以在这个结构中找到它,但似乎整个依赖结构都不起作用。
任何人都可以给我一些关于如何创建具有 cheerio 和 how/what 依赖项的 browserify 包的指导吗?我需要复制到我的 k6 项目以使它像在 loadImpact 站点上一样工作。
这方面的 k6 文档肯定需要一些说明,我稍后会做。当前提到的 vendor
文件夹没有什么特别的,文档只是缺少将 browserify 生成的 cheerio.js
和 xml2js.js
文件复制到新的 vendor
k6 项目中的文件夹。
现在,我将尝试提供一个简化的解释,说明如何以更简单的方式实现相同的目的:
- 创建一个新的空文件夹并在终端中转到它
- 运行
npm install browserify cheerio
那里(忽略关于缺少 package.json
或描述的 npm 警告)
- 运行
./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"
}
当然,如果你需要不同于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));
});
}
我正在尝试使用 LoadImpact 的 K6 框架创建一些测试,但我很难按照其文档站点上的说明包含外部 NPM 模块。
在 loadImpacts 文档站点上,它们包含一个详细示例,说明我所追求的,使我能够从 soap 服务响应中解析 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' 文件夹. 我的 "root" 目录中的 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 中引用此包的 LoadImpacts 示例 javascript:
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 中第一行的投诉,其中定义了一个 "parse" 变量,它找不到:
var parse = require("./parse'),
如果我把这个改成
var parse = require("./parse.js')
它继续抱怨缺少 'htmlparser2' 我也可以在这个结构中找到它,但似乎整个依赖结构都不起作用。
任何人都可以给我一些关于如何创建具有 cheerio 和 how/what 依赖项的 browserify 包的指导吗?我需要复制到我的 k6 项目以使它像在 loadImpact 站点上一样工作。
这方面的 k6 文档肯定需要一些说明,我稍后会做。当前提到的 vendor
文件夹没有什么特别的,文档只是缺少将 browserify 生成的 cheerio.js
和 xml2js.js
文件复制到新的 vendor
k6 项目中的文件夹。
现在,我将尝试提供一个简化的解释,说明如何以更简单的方式实现相同的目的:
- 创建一个新的空文件夹并在终端中转到它
- 运行
npm install browserify cheerio
那里(忽略关于缺少package.json
或描述的 npm 警告) - 运行
./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" }
当然,如果你需要不同于
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)); }); }