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

Gatlingで普通のScalaコードの性能をテストする

More than 1 year has passed since last update.

S3のPUT性能を測ってほしいと頼まれて、Gatlingでできないか試してみたのがことの経緯です。
GatlingはHTTP/HTTPSの負荷テストをサポートしていますが、それ以外の方法はJMS
とMQTTをサポートしていますが、普通のScalaコードから負荷を書ける方法はドキュメントを探してもみあたりません。
S3のPUTはHTTPでできますが、SDKなしでGatlingのシナリオで再現するのはとても面倒です。通常利用する際はSDKで簡単にアクセスできるので、せっかくのScalaなのですから、SDKでアクセスするコードそのままに負荷テストしたいのです。

通常、Gatlingのシナリオはこのように書きます。
スクリーンショット 2018-12-08 18.29.09.png
そこで、execに渡している型を自作できれば、その中にSDKでアクセスするコードを書いてやりたいことができるという算段です。

まずはexecの実装を見て見ましょう。
スクリーンショット 2018-12-08 18.50.09.png
ExecsトレイトのexecメソッドがActionBuilderを返しています。
次にActionBuilderを見て見ます。
スクリーンショット 2018-12-08 18.52.38.png
ActionトレイトにはbuildメソッドがありActionを返します。
スクリーンショット 2018-12-08 18.53.02.png
Actionトレイトにはexecuteメソッドがあり、名前から考えるとこれを実装すれば良さそうです。
しかし、引数のSessionはなんでも入ってるようなクラスなのでこのメソッド内で何をしているかわかりません。コメントも

Core method executed when the Action received a Session message
「アクションがセッションメッセージを受信したときに実行されるコアメソッド」

としか書いておらず参考になりそうにありません。
そこで「Gatling Custom Action」などでググって参考になるページを探して実装できたんですが、今はそのページ消えていました。
いろいろあってActionBuilderとActionの実装はこうなりました。
スクリーンショット 2018-12-08 19.02.55.png
ActionBuilderのbuildメソッドの引数で渡されているScenarioContextからstatsEngineを取り出しlogReponseメソッドで実行データを記録しています。
利用方法はこんな感じになります。
スクリーンショット 2018-12-08 19.06.53.png
適当な処理を書いてStatusを返しています。
これをgatling:testで実行すると無事負荷テストが実行され、レポートも出力されました。
スクリーンショット 2018-12-08 19.09.23.png
スクリーンショット 2018-12-08 19.09.50.png

これでAWSやGCP、RedisなどHTTPアクセスが難しい対象に対しても簡単に負荷をかけられるようになりました。
コードはここにおいてあります

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
ユーザーは見つかりませんでした