Связать модуль npm 'cheerio' в тесте K6 - PullRequest
1 голос
/ 06 мая 2019

Я пытаюсь создать некоторые тесты, используя платформу K6 от LoadImpact, но я стараюсь включить внешний модуль NPM, следуя инструкциям на их сайте документации.

На сайте документации loadImpacts есть подробный пример того, что мне нужно, модули, которые позволяют мне анализировать xml из ответа службы мыла.Но я не могу заставить это работать!Теперь я новичок в JavaScript, но я кодирую уже много лет и очень хотел бы решить эту проблему.Можно найти здесь: https://docs.k6.io/docs/modules#section-npm-modules Кто-нибудь может заставить это работать?Мне нужно запустить это на серверах, изолированных от Интернета, поэтому я полностью зависим от создания пакетов и передачи необходимых файлов.

Согласно документации, пакет создается следующим образом:

-- 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

Назад к примеру LoadImpacts о том, как ссылаться на этот пакет в javascript k6:

import cheerio from "./vendor/cheerio.js";
export default function() 
{
  const res = http.get("https://loadimpact.com/");
  const $ = cheerio.load(res.body);

Какой файлэто и где в структуре, созданной browserify, я могу найти ее?Я попытался изменить это, чтобы указать на «index.js» в папке «cheerio» или cheerio.js, найденном в «cheerio / lib».Затем я получу жалобу на первую строку в cheerio.js, в которой определена переменная «parse», которую он не может найти: var parse = require("./parse'),, если я изменю это значение на var parse = require("./parse.js'), он продолжит жаловаться на отсутствие «htmlparser2», которое я также могунайти в этой структуре, но кажется, что вся структура зависимостей не работает.

Кто-нибудь может дать мне несколько советов о том, как создать пакет browserify с зависимостями для cheerio и как / что мне нужно скопировать в мой проект k6, чтобы это работало так же, как на сайте loadImpact.

1 Ответ

0 голосов
/ 08 мая 2019

Документы k6 для этого определенно нуждаются в пояснениях, которые я позже сделаю.В папке vendor, о которой в настоящее время упоминается, нет ничего особенного, в документах просто отсутствует шаг для копирования файлов cheerio.js и xml2js.js, созданных при помощи browserify, в новую папку vendor в вашем проекте k6.

А пока я попытаюсь предложить упрощенное объяснение того, как можно проще добиться того же:

  1. Создать новую пустую папку и перейти к ней в терминале.
  2. Запустите npm install browserify cheerio там (игнорируйте предупреждения npm о пропущенном package.json или описании)
  3. Запустите ./node_modules/.bin/browserify ./node_modules/cheerio/ -s cheerio > cheerio.js в этой папке
  4. Полученный файл 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 для просмотра в браузере.Например, если вам нужны библиотеки cheerio и xml2js, упомянутые в документации k6, вы можете сделать что-то вроде этого:

  1. Создать новую пустую папку
  2. Добавьте в него что-то вроде следующего 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.

  3. Добавьте файл npm-main.js следующим образом (опять же, с учетом нужных вам библиотек):

    exports.xml2js = require('xml2js');
    exports.cheerio = require('cheerio');
    
  4. Откройте эту папкув терминале и запустите 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));
        });
    }
    
...