В этой статье будет показано, как запустить сценарий нагрузочного тестирования K6, написанный на машинописном языке, поскольку разработчики больше сосредоточены на написании кода, включающего проверку типов, а также на использовании всего потенциала объектно-ориентированных реализаций.
Поскольку для запуска K6 требуется расширение файла .js (javascript), мы будем использовать babel и webpack для переноса и объединения наших файлов.
Настраивать -
Давайте создадим базовый файл машинописного текста, который отправит запрос на конечную точку с помощью K6. Фрагмент кода показан ниже:
import { sleep, check } from 'k6’;
import { Options } from 'k6/options’;
import http, { StructuredRequestBody } from 'k6/http’;
const binFile = open(’test.png’, 'b’);
const url = `https://httpbin.org/post`;
export let options: Options = { vus: 5, duration: '10s' }; export default (): void => { const postData: StructuredRequestBody = { file: http.file(binFile) }; const response = http.post(url, postData); check(response, { 'status is 200': r => r.status === 200, }); sleep(1); };
Теперь следующим шагом будет преобразование соответствующего кода в файл .js (javascript) с помощью babel и webpack.
Создание файла .babelrc
{ "presets": ["@babel/env", "@babel/typescript"], "plugins": ["@babel/proposal-class-properties", "@babel/proposal-object-rest-spread"] }
Создание конфигурационного файла веб-пакета
const path = require('path'); const { CleanWebpackPlugin } = require('clean-webpack-plugin'); const CopyPlugin = require('copy-webpack-plugin'); const GlobEntries = require('webpack-glob-entries'); module.exports = { mode: 'production', entry: GlobEntries('./src/*test*.ts'), // Generates multiple entry for each test output: { path: path.join(__dirname, 'dist'), libraryTarget: 'commonjs', filename: '[name].js', }, resolve: { extensions: ['.ts', '.js'], }, module: { rules: [{ test: /\.ts$/, use: 'babel-loader', exclude: /node_modules/, }, ], }, target: 'web', externals: /^(k6|https?\:\/\/)(\/.*)?/, // Generate map files for compiled scripts devtool: "source-map", stats: { colors: true, }, plugins: [ new CleanWebpackPlugin(), // Copy assets to the destination folder // see `src/post-file-test.ts` for an test example using an asset new CopyPlugin({ patterns: [{ from: path.resolve(__dirname, 'assets'), noErrorOnMissing: true }], }), ], optimization: { // Don't minimize, as it's not used in the browser minimize: false, }, };
Настройка файла package.json
"scripts": { "start": "webpack && k6 run dist/post-file-test.js" }
Результат
После того, как все вышеперечисленные шаги будут настроены, вывод будет выглядеть так, как показано ниже.