Gatling環境構築


経緯

  • 対して詳しくもないけど負荷試験することになった
  • 知ってる負荷試験ツールはJMaterかGatlingくらい
  • xml書きたくないからScalaでかけるGatling採用(Scalaも大してかけないけど)
  • Localと攻撃サーバで構築変わるのめんどいのでDocker

構成

├── docker-compose.yaml
├── gatling
│   └── Dockerfile
├── nginx
│   └── default.conf
└── scenario
   ├── resources    シナリオで使うやつ置き場(user-passwordのCSVとか)
   └── simulations シナリオのClass用ディレクトリ

Gatling用環境

./gatling/Dockerfile
FROM openjdk:11
ENV LANG C.UTF-8

RUN apt-get update -y \
    && apt-get upgrade -y \
    && apt-get install -y wget bsdtar

RUN mkdir /workdir && cd /workdir
WORKDIR /workdir

RUN wget -qO- https://repo1.maven.org/maven2/io/gatling/highcharts/gatling-charts-highcharts-bundle/3.3.1/gatling-charts-highcharts-bundle-3.3.1-bundle.zip \
    | bsdtar -xvf-
ENV GATLING_HOME=/workdir/gatling-charts-highcharts-bundle-3.3.1
RUN ln -s /workdir/gatling-charts-highcharts-bundle-3.3.1/bin/gatling.sh /usr/local/bin/gatling && chmod a+x /usr/local/bin/gatling

docker-compose

  • gatling~/user-fileがシナリオ置き場なのでHostにvolumeMount
  • 結果のHTMLをnginxにMountする
  • とりあえず入力待ちにしとく
  • そのうち立ち上げたら勝手にシナリオ走るように
./docker-compose.yaml
version: "3"
services:
  gatling:
    build: ./gatling
    stdin_open: true
    tty: true
    volumes:
      - ./scenario/:/workdir/gatling-charts-highcharts-bundle-3.3.1/user-files
      - data:/workdir/gatling-charts-highcharts-bundle-3.3.1/results
    command: /bin/sh

  nginx:
    image: nginx:latest
    links:
      - gatling
    ports:
      - 80:80
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
      - data:/var/html

volumes:
  data:
    external: true

結果確認用のNginx設定

  • マウント先をドキュメントルートに
  • 結果わかりやすくするため、autoindex
./nginx/default.conf
server {
    listen       80;
    server_name  localhost;
    autoindex on;
    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /var/html;
        index  index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /var/html;
    }
}

実行(暫定)

  • gatling.shを動かせば対話形式で実行するシナリオを選べる

$ docker-compose up -d
$ docker-compose exec gatling gatling [-s TestClassName]
GATLING_HOME is set to /workdir/gatling-charts-highcharts-bundle-3.3.1
TestCodelikeAccess is the only simulation, executing it.
Select run description (optional)

Simulation TestCodelikeAccess started...
.
.
.
Reports generated in 0s.
Please open the following file: /workdir/gatling-charts-highcharts-bundle-3.3.1/results/testcodelikeaccess-20191212105057322/index.html

結果確認