一緒にテストを学ぶ|パフォーマンステストツール K6: スクリプトの書き方、実行方法、出力方法を教えます

はじめに: K6 は、開発者やテスターが Web サイトやアプリケーションの負荷容量を迅速かつ効果的にテストできるように設計された最新のオープン ソース ソフトウェア負荷テスト ツールです。

K6 の特徴は、強力なリアルタイムパフォーマンスデータモニタリング機能を備えており、使用と設定が簡単であることです。負荷テストに K6 を使用すると、開発者とテスターは、ターゲット Web サイトに同時にアクセスする数千人のユーザーを簡単にシミュレートして、Web サイトの負荷容量、パフォーマンス、安定性をテストできます。これは、最も人気があり、強力なオープンソース負荷テスト ツールの 1 つと考えられています。

テスト スクリプトを作成する前に、K6 テスト ライフ サイクルの 4 つの段階を理解しましょう。

テスト スクリプトは、4 つのフェーズを同じ順序で実行します。

  • 準備フェーズ: モジュールの参照、ファイルのロード、テスト ライフサイクル関数の定義など、コンテキスト内のコードを初期化します。

  • セットアップ フェーズ: セットアップ関数を実行します。これは通常、テスト環境をセットアップしてデータを生成するために使用されます。

  • 実行フェーズ: 仮想ユーザーの操作 コードのこの部分はデフォルト関数またはシーン関数に配置され、オプションの定義に従って仮想ユーザーの操作をシミュレートします。

  • 終了フェーズ: ティアダウン機能を実行します。これは通常、仮想ユーザーの終了後のクリーニング操作に使用されます。接続を閉じ、リソースを解放し、データをクリーンアップします。

写真

  • init は VU ごとに 1 回実行されます (vu は仮想ユーザーを意味します)

  • セットアップはテストの開始前に 1 回だけ実行されます

  • vu コードは、テスト オプションに従って、反復ごとに 1 回実行されます。

  • ティアダウンはテスト終了後に 1 回だけ実行されます。セットアップとティアダウンはオプションの機能です。

K6 テスト スクリプトの構造

K6 テスト スクリプトは、JavaScript モジュール構造に従います。各テスト スクリプトには、テスト シナリオ、ユーザーの動作、パフォーマンス メトリックなどを定義する 1 つ以上の関数が必要です。

以下は、典型的な K6 テスト スクリプト構造の例です。

// 导入所需的模块import http from 'k6/http';import { sleep, check } from 'k6';// 配置测试参数export let options = {
    vus: 10,            // 虚拟用户数
    duration: '30s',    // 持续时间};// 定义测试场景export default function () {
    // 用户行为逻辑
    let response = http.get('https://testerhome.com/');

    // 断言检查
    check(response, {
        '请求响应码是否为200': (r) => r.status === 200,
    });

    // 模拟用户等待时间
    sleep(1);}

K6 テスト スクリプトはいくつかのセクションに分かれています。

  • 参照モジュール: import ステートメントを使用して、K6 が提供するモジュールを参照します。たとえば、http は HTTP リクエストの送信に使用され、sleep はユーザーの待機をシミュレートするために使用されます。

  • テスト パラメーターの構成: オプション変数を使用して、仮想ユーザー (vus) の数などのテスト構成パラメーターを定義します。

  • テスト シナリオの定義: デフォルトのエクスポート機能を使用して、テスト シナリオ関数を定義します。ここでは、リクエストの送信、応答の処理、待機のシミュレーションなど、ユーザーをシミュレートする動作ロジックを記述します。

  • アサーション チェック: check 関数を使用してアサーション チェックを定義し、リクエストに対する応答が特定の条件を満たしていることを確認します。この例では、応答のステータス コードが 200 であるかどうかを確認します。

  • ユーザー待機時間をシミュレートする: スリープ機能を使用して仮想ユーザー間の待機時間をシミュレートし、仮想ユーザーの同時実行性を制御します。

リクエストとレスポンスの処理

最初に 2 つの仮想インターフェイス サービスを作成しましょう。これは、後で呼び出してテストするのに便利です。ここでは、Flask を使用して get インターフェイスと post インターフェイスを構築します。

from flask import Flask,requestfrom gevent import pywsgiimport jsonapp=Flask(__name__)app.config['JSON_AS_ASCII'] = [email protected]("/getdemo",methods=["GET"])def getdemo():

    name = request.args.get('name')
    # 就认返回内答    return_dic= {'return_code':'200','message': name + '  hello k6'}
    return json.dumps(return_dic, ensure_ascii=False)@app.route('/postdemo', methods=['POST'])def postdemo():

    name = request.form['name']
    passwrod = request.form['password']
    return_dic = {'return_code': '200', 'name': name,'passwrod':passwrod}
    return json.dumps(return_dic, ensure_ascii=False)if __name__ == '__main__':
    server = pywsgi.WSGIServer(('0.0.0.0',5000),app)
    server.serve_forever()

取得リクエストを開始する

import http from 'k6/http';export default function () {//发送 GET 请求
    let response = http.get('http://localhost:5000/getdemo?name=TesterHome');
    console.log('响应正文:', response.body);
    console.log('响应码:', response.status);
    console.log('获取返回json中的message:', response.json( 'message' ));
    console.log('请求响应时间:', response.timings);}
  • まず、http リクエストを送信するために K6/http モジュールが参照されます。

  • http.get() メソッドを使用して、getdemo インターフェイスへのリクエストを開始します。

  • 最後に、レスポンスボディ、レスポンスコード、ボディ内のメッセージ、リクエストの応答時間を出力します。

実行結果を一緒に見てみましょう。

写真

投稿リクエストを開始する

import http from 'k6/http';export default function () {// 发送 POST 请求
    let data = { 
    name: 'TesterHome' ,
    password:'TesterHomePasswrod'
    };

    let response = http.post('http://localhost:5000/postdemo', data);
    console.log('响应正文:', response.body);
    console.log('获取返回json结果中的name节点:', response.json().name);
    console.log('请求响应时间:', response.timings);}

写真

  • http リクエストの送信については、K6/http モジュールを参照してください。

  • リクエストパラメータのオブジェクトデータを定義します

  • http.post() メソッドをリクエストパラメータとともに使用して、前に定義した postdemo インターフェイスへのリクエストを開始します。

  • 最後に、応答本文、リクエスト応答時間、返された JSON 結果を出力して、名前ノードの値を読み取ります。

結果:

写真

写真

戻り値は、定義した仮想インターフェイスの戻り値と一致しており、渡したパラメータとして名前とパスワードも割り当てられます。

仮想ユーザーの数と期間を設定する

構成オプションを設定して、仮想ユーザーの数と期間を指定します。

import http from 'k6/http';// 配置选项export let options = {
    vus: 2,         // 虚拟用户数量
    duration: '3s', // 持续时间};export default function () {// 发送 GET 请求
    let response = http.get('http://localhost:5000/getdemo?name=TesterHome');

    console.log('响应正文:', response.body);
    console.log('响应码:', response.status);
    console.log('获取返回json中的message:', response.json( 'message' ));
    console.log('请求响应时间:', response.timings);}

オプション オブジェクトの構成オプションを使用して、テストの動作、パフォーマンス パラメーター、その他の設定を定義できます。

  • Vus: 仮想ユーザーの数を示します。

  • 継続時間: 継続時間を示します。

写真

この例では、2 人の仮想ユーザーがプロビジョニングされ、テスト スクリプトが 3 秒間継続して実行されます。

仮想ユーザーと期間は、パフォーマンス テストのニーズに合わせて必要に応じて調整できます

テストを実行してレポートを生成する

写真

  • data_received: 受信したデータの総量

  • data_sent: 送信されたデータの総量

  • http_req_blocked: リクエストの待機時間、つまりリクエストがブロックされた時間

  • http_req_connecting: 接続時間を要求します

  • http_req_duration: リクエストの合計時間。 http_req_sending + http_req_waiting + http_req_receiving に等しい

  • http_req_failed: 失敗したリクエストの数

  • http_req_receiving: レスポンス受信時間

  • http_req_sending: リクエスト送信時刻

  • http_req_waiting: サーバーの応答時間を待機しています

  • http_reqs: テスト実行中に送信されたリクエストの数

  • iteration_duration: 各テスト反復の期間

  • iterations: 実行されたテスト反復の合計数。各テスト スクリプト ループは反復として実行されます。

詳細なデータを JSON 形式で出力します

コマンドによって

k6 run --out json=test_results.json **.js

詳細なデータを json 形式で生成します。

写真

各行には、メトリックに関する情報が含まれるか、メトリックのデータ ポイント (サンプル) が記録されます。

行は 3 つの項目で構成されます。

  • type - 値は Metric または Point です。ここで、Metric はメトリックを宣言することを意味し、Point はメトリックの実際のデータ ポイント (サンプル) です。

  • データ - データのコレクション。

  • metric - メトリックの名前。

将来的には、ラベル関数を組み合わせて、json データのカスタマイズされたレポートを開発することもできます。

読みやすい HTML レポートを生成する

サードパーティのライブラリ k6-reporter を使用すると、HTML テスト レポートの生成を支援できます。その使用方法を見てみましょう。

import http from 'k6/http';//引入 k6-reporter三方库import { htmlReport } from "https://raw.githubusercontent.com/benc-uk/k6-reporter/main/dist/bundle.js";export default function () {

    // 发送 GET 请求
        let response = http.get('http://localhost:5000/getdemo?name=TesterHome');

        console.log('响应正文:', response.body);
        console.log('响应码:', response.status);
        console.log('获取返回json中的message:', response.json( 'message' ));
        console.log('请求响应时间:', response.timings);}//使用handleSummary 将聚合数据传入htmlReposr,转换生成result.htmlexport function handleSummary(data) {
  return {
    "result.html": htmlReport(data),
  };}

写真

スクリプトを実行して、result.html ページを生成します。

写真

handlesummary を使用して、データを JSON、HTML、XML などのテキスト形式ファイルに変換することもできます。

ラベル機能と組み合わせると、データに関するカスタマイズされたレポートをより適切に開発できます。

最後に:以下の完全なソフトウェア テスト ビデオ チュートリアルが整理されてアップロードされており、必要な友人は自分で入手できます[100% 無料を保証]

ソフトウェアテストの面接ドキュメント

私たちは高給の仕事を見つけるために勉強しなければなりません。次の面接の質問は、アリ、テンセント、バイトなどの一流インターネット企業からの最新の面接資料であり、一部のバイトの上司が権威ある回答をしています。このセットを完了してください。面接資料は次のとおりです。誰もが満足のいく仕事を見つけることができると信じています。

おすすめ

転載: blog.csdn.net/weixin_50829653/article/details/132667817