В этой статье будет показано, как запустить сценарий нагрузочного тестирования 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"
}

Результат

После того, как все вышеперечисленные шаги будут настроены, вывод будет выглядеть так, как показано ниже.

Репозиторий GitHub —

https://github.com/AyanBhadury/k6-ts-demo