Help us understand the problem. What is going on with this article?

JMeterによるMoodleの負荷試験(テストプランの作り方)

More than 1 year has passed since last update.

Moodleサーバの負荷試験

JMeterを使用すると、サーバに対して負荷試験が出来る。Moodleにはテストプランを作る機能があるのでこれを使ってテストを行う。

注意

本番稼働中のMoodleサーバや、他人のMoodleサーバには絶対に実行しないでください

ダウンロードと起動

http://jmeter.apache.org/download_jmeter.cgi

zipファイルを解凍後、中に入っているbin/jmeter.bat をダブルクリックで実行する。

2018-02-13_1110.png (64.7 kB)

Moodle上での準備

Moodle上で、JMeterのテストプランを作成出来るが、前提条件がいくつかあり、全てクリアしないといけない。

テスト用コースとモジュールの作成

テスト用のコースを作成し、次のモジュールをコース上に追加する。

  • ページ
  • フォーラム(返信がついたディスカッションが存在する状態であること)

!!ハマりポイント!!

フォーラムを作成する際、コースに既に「アナウンスメント」フォーラムモジュールがある場合は、これを削除するか、これをそのまま使うこと。テストプランを作る際、コース上の「最初のフォーラム」しか見てくれないため。(追加でフォーラムを作っても無視される)

\moodle\admin\tool\generator\classes\testplan_backend.php
        // Getting the first forum module instance and it's first discussion and reply as well.
        if (!$forums = $courseinfo->get_instances_of('forum')) {
            print_error('error_noforuminstances', 'tool_generator');
        }
        // ここがダメ!!
        $forum = reset($forums);

        // Getting the first discussion (and reply).
        if (!$discussions = forum_get_discussions($forum, 'd.timemodified ASC', false, -1, 1)) {
            print_error('error_noforumdiscussions', 'tool_generator');
        }

テスト用ユーザー作成

パスワードをmoodleにリセットした十分な数の登録済みユーザ (ユーザー数は、テストプランで要求される数だけ作成する)

登録件数が非常に多いため、CSVのcourse1カラムで負荷試験用のコース(shortname)を指定することでCSV登録時に一緒にコース登録も行う。

config.phpへの追記

config.phpに次を追記する。ここで設定するパスワードは、事前にCSVでアップロードするテスト用アカウントのパスワードを指定する。

config.php
$CFG->tool_generator_users_password = "moodle";

諸々用意をすると、テストプランをダウンロードすることが出来る。

2018-02-13_1554.png (127.3 kB)

ここで、テストプランユーザーファイルをダウンロードする。

ファイル 意味
テストプラン JMeterに読み込ませるプランファイル。どのように画面遷移を繰り返していくか等が定義されている。
ユーザーファイル JMeterに読み込ませるユーザー一覧のファイル。テストで使用するユーザー名とパスワードが保存されている。

JMeterのセットアップ

JMeterを起動し、File -> Open でテストプランをロードする。
次に、以下の設定を変更する。

Test Plan

左ペインの Test Plan の設定を次の通りにする。既に設定済みになっているが、forumまわりの値は怪しいというか間違っているので自分で修正する。

設定項目 設定値 IDの見分け方
courseid 負荷試験用コースID(テストプラン作成時に指定したコース) https://example.com/course/view.php?id=2
pageactivityid 負荷試験用コースに作成した「ページ」のID https://example.com/mod/page/view.php?id=3
forumactivityid 負荷試験用コースに作成した「フォーラム」のID https://example.com/mod/forum/view.php?id=2
forumdiscussionid 「フォーラム」内のディスカッションID https://example.com/mod/forum/discuss.php?d=2
forumreplyid 「フォーラム」内のディスカッションに紐付く返信のID https://example.com/mod/forum/post.php?reply=5#mformforum

※IDはURLから判定する。

2018-02-14_1056.png (101.2 kB)

Warm-up site・Moodle Test

Default site request

左ペインの Test Plan -> Warm-up site および Moodle Test -> Default site requestBasicタブにある Web Server の設定を次の通りにする。

設定項目 設定値
Protocol https
Port Number 443

CSV users data

左ペインの Test Plan -> Warm-up site および Moodle Test -> CSV user dataの設定を次の通りにする。

設定項目 設定値
Filename ユーザーファイル(CSV)を指定する

Create php array results(無効)

左ペインの Test Plan -> Moodle Test -> Create php array results無効にする。
Create php array resultsを右クリックし、Disableをクリックする。

2018-02-14_1059.png (26.3 kB)

Listnerの追加

Listnerを追加することで、結果を表・グラフ表示出来るようにする。

左ペインのTest Planを右クリックし、Add -> Listener から、次のリスナーを追加する。

追加するリスナー
Graph Results
View Results in Table
Response Time Graph

2018-02-14_1242.png (69.2 kB)

JMeterの実行

Moodleにユーザーを追加し、コースの準備が整ったらテストを実行する。
テスト実行時には、htopなどでサーバの状態を確認出来るようにしておく。

上部メニューの実行ボタンをクリックして実行する。

2018-02-14_1105.png (24.6 kB)

実行結果

追加したListnerに結果が表示される。また、実行中にhtopで常に負荷状況をモニタリングすると状況を把握できる。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした