$30 off During Our Annual Pro Sale. View Details »

勤怠管理サービスでの継続的テストの取り組み / continuous testing in attendance service

karabish
November 18, 2021

勤怠管理サービスでの継続的テストの取り組み / continuous testing in attendance service

karabish

November 18, 2021
Tweet

More Decks by karabish

Other Decks in Technology

Transcript

  1. #jjug_ccc
    勤怠管理サービスでの継続的テストの取り組み
    JJUG CCC 2021 Fall
    株式会社ラクス Yuya Yamaguchi

    View Slide

  2. #jjug_ccc
    2
    自己紹介 SIerでAWS, Azure, k8s
    株式会社ラクス で楽楽勤怠に所属
    バックエンドエンジニア + CI周りを担当

    View Slide

  3. 3
    https://fortee.jp/jjug-ccc-2021-fall/proposal/8256578c-e568-46a0-9eb5-85ee954f1d0e

    View Slide

  4. #jjug_ccc
    Agenda 1. なぜ継続的テストを進めているの

    2. CIパイプラインへのテストの組み
    込み
    3. テストの自動化
    4

    View Slide

  5. #jjug_ccc
    Agenda 1. なぜ継続的テストを進めているの

    2. CIパイプラインへのテストの組み
    込み
    3. テストの自動化
    5

    View Slide

  6. #jjug_ccc
    なぜ継続的テストを進めているのか
    6
    1. 勤怠管理サービスの特徴
    2. QA・SETエンジニアがいない
    3. リリースサイクルを短縮したい

    View Slide

  7. #jjug_ccc
    なぜ継続的テストを進めているのか
    7
    1. 勤怠管理サービスの特徴
    2. QA・SETエンジニアがいない
    3. リリースサイクルを短縮したい

    View Slide

  8. #jjug_ccc
    勤怠管理サービスの特徴
    8

    View Slide

  9. #jjug_ccc
    なぜ継続的テストを進めているのか
    9
    1. 勤怠管理サービスの特徴
    2. QA・SETエンジニアがいない
    3. リリースサイクルを短縮したい

    View Slide

  10. #jjug_ccc
    QA・SETエンジニアがいない
    10
    プロダクトマネージャ
    バックエンドエンジニア
    フロントエンドエンジニア
    デザイナー
    インフラエンジニア
    QAエンジニア
    SETエンジニア

    View Slide

  11. #jjug_ccc
    なぜ継続的テストを進めているのか
    11
    1. 勤怠管理サービスの特徴
    2. QA・SETエンジニアがいない
    3. リリースサイクルを短縮したい

    View Slide

  12. #jjug_ccc
    なぜ継続的テストを進めているのか
    12
    1. 勤怠管理サービスの特徴
    2. QA・SETエンジニアがいない
    3. リリースサイクルを短縮したい

    View Slide

  13. #jjug_ccc
    Agenda 1. なぜ継続的テストを進めているの

    2. CIパイプラインへのテストの組み
    込み
    3. テストの自動化
    13

    View Slide

  14. #jjug_ccc
    CIパイプラインの対象範囲
    14
    ● Single Page Application
    ● Vue.js
    ● Spring Boot
    ● PostgreSQL
    Vue.js
    PostgreSQL

    View Slide

  15. #jjug_ccc
    CIパイプラインへのテストの組み込みで利用したもの
    15

    View Slide

  16. Gitlab-CIとは
    16
    GitLab CI/CDパイプラインは、統合され
    た単一のワークフローの一部としてコー
    ドのビルド、テスト、デプロイ、監視を行
    います。
    Forrester CI Wave™のリーダーに選出
    されました。
    https://www.gitlab.jp/stages-devops-lifecycle/continuous-integration/

    View Slide

  17. #jjug_ccc
    Gitlab-CIの特徴
    17
    ● マルチプラットフォーム: Unix、Windows、macOS、その他Goをサポートするあらゆるプラットフォームでビルドを実行
    できます。
    ● 安定性: ビルドは GitLab とは別のマシンで実行されます。
    ● 柔軟なパイプライン: ステージごとに複数の並列ジョブを定義し、 他のビルドをトリガー することができます。
    ● バージョン管理されたパイプライン: .gitlab-ci.yml ファイル にはテストなどのすべてのステップが含まれています。 ブ
    ランチで .gitlab-ci.yml ファイルを変更することで、誰でも安全にパイプラインの変更を試すことができます。
    ● Dockerのサポート: カスタムDockerイメージを使用したり、テストの一環として サービス を起動したり、 新しいDocker
    イメージをビルド したり、Kubernetes上で実行したりすることができます。
    ● コンテナレジストリ: コンテナイメージを保存、共有、使用するための 組み込みコンテナレジストリ を利用できます。
    ● 保護変数: 環境ごとに 保護変数 を使用して、デプロイに必要な認証情報などを安全に保存し、使用することができま
    す。
    https://www.gitlab.jp/stages-devops-lifecycle/continuous-integration/

    View Slide

  18. #jjug_ccc
    Gitlab-CIの特徴
    18
    ● マルチプラットフォーム: Unix、Windows、macOS、その他Goをサポートするあらゆるプラットフォームでビルドを実行
    できます。
    ● 安定性: ビルドは GitLab とは別のマシンで実行されます。
    ● 柔軟なパイプライン: ステージごとに複数の並列ジョブ を定義し、 他のビルドをトリガー することができます。
    ● バージョン管理されたパイプライン: .gitlab-ci.yml ファイル にはテストなどのすべてのステップが含まれています。 ブ
    ランチで .gitlab-ci.yml ファイルを変更することで、誰でも安全にパイプラインの変更を試すことができます。
    ● Dockerのサポート: カスタムDockerイメージを使用したり、テストの一環として サービス を起動したり、 新しいDocker
    イメージをビルド したり、Kubernetes上で実行したりすることができます。
    ● コンテナレジストリ: コンテナイメージを保存、共有、使用するための 組み込みコンテナレジストリ を利用できます。
    ● 保護変数: 環境ごとに 保護変数 を使用して、デプロイに必要な認証情報などを安全に保存し、使用することができま
    す。
    https://www.gitlab.jp/stages-devops-lifecycle/continuous-integration/

    View Slide

  19. #jjug_ccc
    Gitlab-CIの特徴
    19
    ● マルチプラットフォーム: Unix、Windows、macOS、その他Goをサポートするあらゆるプラットフォームでビルドを実行
    できます。
    ● 安定性: ビルドは GitLab とは別のマシンで実行されます。
    ● 柔軟なパイプライン: ステージごとに複数の並列ジョブを定義し、 他のビルドをトリガー することができます。
    ● バージョン管理されたパイプライン: .gitlab-ci.yml ファイル にはテストなどのすべてのステップが含まれています。 ブ
    ランチで .gitlab-ci.yml ファイルを変更することで、誰でも安全にパイプラインの変更を試すことができます。
    ● Dockerのサポート: カスタムDockerイメージを使用したり、テストの一環として サービス を起動したり、 新しいDocker
    イメージをビルド したり、Kubernetes上で実行したりすることができます。
    ● コンテナレジストリ: コンテナイメージを保存、共有、使用するための 組み込みコンテナレジストリ を利用できます。
    ● 保護変数: 環境ごとに 保護変数 を使用して、デプロイに必要な認証情報などを安全に保存し、使用することができま
    す。
    https://www.gitlab.jp/stages-devops-lifecycle/continuous-integration/

    View Slide

  20. #jjug_ccc
    .gitlab-ci.yml
    $ cat .gitlab-ci.yml
    stages:
    - build
    - test
    build-code-job:
    stage: build
    script:
    - echo "Check the ruby version, then build some Ruby project files:"
    - ruby -v
    - rake
    test-code-job1:
    stage: test
    script:
    - echo "If the files are built successfully, test some files with one command:"
    - rake test1
    test-code-job2:
    stage: test
    script:
    - echo "If the files are built successfully, test other files with a different command:"
    - rake test2
    20
    https://docs.gitlab.com/ee/ci/yaml/gitlab_ci_yaml.html

    View Slide

  21. #jjug_ccc
    Gitlab-CIの特徴
    21
    ● マルチプラットフォーム: Unix、Windows、macOS、その他Goをサポートするあらゆるプラットフォームでビルドを実行
    できます。
    ● 安定性: ビルドは GitLab とは別のマシンで実行されます。
    ● 柔軟なパイプライン: ステージごとに複数の並列ジョブを定義し、 他のビルドをトリガー することができます。
    ● バージョン管理されたパイプライン: .gitlab-ci.yml ファイル にはテストなどのすべてのステップが含まれています。 ブ
    ランチで .gitlab-ci.yml ファイルを変更することで、誰でも安全にパイプラインの変更を試すことができます。
    ● Dockerのサポート: カスタムDockerイメージを使用したり、テストの一環として サービス を起動したり、 新しいDocker
    イメージをビルド したり、Kubernetes上で実行したりすることができます。
    ● コンテナレジストリ: コンテナイメージを保存、共有、使用するための 組み込みコンテナレジストリ を利用できます。
    ● 保護変数: 環境ごとに 保護変数 を使用して、デプロイに必要な認証情報などを安全に保存し、使用することができま
    す。
    https://www.gitlab.jp/stages-devops-lifecycle/continuous-integration/

    View Slide

  22. #jjug_ccc
    Gitlab-CIのDockerサポート
    22
    https://docs.gitlab.com/runner/executors/

    View Slide

  23. #jjug_ccc
    Gitlab-CIのDockerサポート
    23
    https://docs.gitlab.com/runner/executors/

    View Slide

  24. #jjug_ccc
    CIパイプラインへのテストの組み込み
    24

    View Slide

  25. #jjug_ccc
    CIパイプラインへのテストの組み込み
    25
    アプリケーションとインフラのコードを分離

    View Slide

  26. #jjug_ccc
    CIパイプラインへのテストの組み込み
    26
    アプリケーションとインフラのコードを分離
    アプリケーション

    View Slide

  27. #jjug_ccc
    CIパイプラインへのテストの組み込み
    27
    アプリケーションとインフラのコードを分離
    インフラ

    View Slide

  28. #jjug_ccc
    CI CIパイプラインへのテストの組み込み
    28
    アプリケーションとインフラのコードを分離
    インフラ
    アプリケーション

    View Slide

  29. #jjug_ccc
    CIパイプラインへのテストの組み込み
    29
    4つのステージ構成

    View Slide

  30. #jjug_ccc
    stageとは
    30
    https://docs.gitlab.co.jp/ee/ci/pipelines/
    jobのグループ化と実行順序を制御する

    View Slide

  31. #jjug_ccc
    stageとは
    31
    https://www.gitlab.jp/stages-devops-lifecycle/continuous-integration/

    View Slide

  32. #jjug_ccc
    CIパイプラインへのテストの組み込み
    32
    4つのステージ構成
    code

    View Slide

  33. #jjug_ccc
    CIパイプラインへのテストの組み込み
    33
    4つのステージ構成
    code test

    View Slide

  34. #jjug_ccc
    CIパイプラインへのテストの組み込み
    34
    4つのステージ構成
    code test build

    View Slide

  35. #jjug_ccc
    CIパイプラインへのテストの組み込み
    35
    4つのステージ構成
    code test deploy
    build

    View Slide

  36. #jjug_ccc
    CIパイプラインへのテストの組み込み
    36
    code test deploy
    build

    View Slide

  37. #jjug_ccc
    stageとは
    37
    $ cat .gitlab-ci.yml
    stages:
    # code
    - build
    - test
    - deploy

    View Slide

  38. #jjug_ccc
    CIパイプラインへのテストの組み込み
    38
    code test deploy
    build

    View Slide

  39. #jjug_ccc
    CIパイプラインへのテストの組み込み
    39
    code

    View Slide

  40. #jjug_ccc
    CIパイプラインへのテストの組み込み
    40
    code test deploy
    build
    git push

    View Slide

  41. #jjug_ccc
    stageとは
    41
    $ cat .gitlab-ci.yml
    stages:
    # code
    - build
    - test
    - deploy

    View Slide

  42. #jjug_ccc
    CIパイプラインへのテストの組み込み
    42
    code test
    git push

    View Slide

  43. #jjug_ccc
    CIパイプラインへのテストの組み込み
    43
    code test deploy
    build
    analysis
    git push

    View Slide

  44. #jjug_ccc
    analysis job
    ● 静的コード解析を実行するジョブ
    ● コーディング規約などをチェック
    ● PMD, Spotbugs, CheckStyle
    44

    View Slide

  45. #jjug_ccc
    静的解析
    $ cat .gitlab-ci.yml
    stages:
    - test
    analysis:
    stage: test
    image: openjdk
    script:
    - /bin/sh gradlew clean checkstyleMain checkstyleTest spotbugsMain pmdMain pmdTest
    45

    View Slide

  46. #jjug_ccc
    CIパイプラインへのテストの組み込み
    46
    code test deploy
    build
    unit test
    git push

    View Slide

  47. #jjug_ccc
    unit test job
    ● 単体テストを実行するジョブ
    ● JUnit
    47

    View Slide

  48. #jjug_ccc
    unit test job
    $ cat .gitlab-ci.yml
    stages:
    - test
    services:
    - name: postgres
    unit-test:
    stage: test
    image: openjdk
    script:
    - /bin/sh gradlew clean test
    48

    View Slide

  49. #jjug_ccc
    servicesとは
    $ cat .gitlab-ci.yml
    stages:
    - test
    services:
    - name: postgres
    unit-test:
    stage: test
    image: openjdk
    script:
    - /bin/sh gradlew clean test
    49

    View Slide

  50. #jjug_ccc
    servicesとは
    ● jobを実行するdockerイメージとは別のdockerイメージを実行するための仕組み
    ● データベースコンテナを動作させておきたいユースケースに対応
    50

    View Slide

  51. #jjug_ccc
    unit test job
    $ cat .gitlab-ci.yml
    stages:
    - test
    services:
    - name: postgres
    unit-test:
    stage: test
    image: openjdk
    script:
    - /bin/sh gradlew clean test
    51

    View Slide

  52. #jjug_ccc
    CIパイプラインへのテストの組み込み
    52
    code test deploy
    build
    unit test
    git push

    View Slide

  53. #jjug_ccc
    CIパイプラインへのテストの組み込み
    53
    code test deploy
    build
    arch test
    git push

    View Slide

  54. #jjug_ccc
    arch test job
    ● アーキテクチャテストを実行するジョブ
    ● レイヤー間の依存関係をチェック
    ● ドメインモデル間の依存関係をチェック
    ● ArchUnit
    54

    View Slide

  55. #jjug_ccc
    CIパイプラインへのテストの組み込み
    55
    code test deploy
    build
    merge request
    arch test
    unit test
    analysis
    git push

    View Slide

  56. #jjug_ccc
    CIパイプラインへのテストの組み込み
    56
    code test deploy
    build
    analysis
    git push
    arch test
    unit test
    analysis
    merge request

    View Slide

  57. #jjug_ccc
    CIパイプラインへのテストの組み込み
    57
    code test deploy
    build
    unit test
    git push
    arch test
    unit test
    analysis
    merge request

    View Slide

  58. #jjug_ccc
    CIパイプラインへのテストの組み込み
    58
    code test deploy
    build
    arch test
    git push
    arch test
    unit test
    analysis
    merge request

    View Slide

  59. #jjug_ccc
    CIパイプラインへのテストの組み込み
    59
    code test deploy
    build
    arch test
    unit test
    analysis
    git push
    arch test
    unit test
    analysis
    merge request

    View Slide

  60. #jjug_ccc
    CIパイプラインへのテストの組み込み
    60
    code test build
    git push
    arch test
    unit test
    analysis
    merge request
    arch test
    unit test
    analysis

    View Slide

  61. #jjug_ccc
    CIパイプラインへのテストの組み込み
    61
    code test deploy
    build
    build
    git push
    arch test
    unit test
    analysis
    merge request
    arch test
    unit test
    analysis

    View Slide

  62. #jjug_ccc
    build job
    ● アプリケーションのビルドを実行するジョブ
    62

    View Slide

  63. #jjug_ccc
    build job
    $ cat .gitlab-ci.yml
    stages:
    - build
    build:
    stage: build
    image: openjdk
    script:
    - /bin/sh gradlew clean bootJar
    after_script:
    - aws s3 cp build/libs/app.jar s3://bucket/app.jar
    63

    View Slide

  64. #jjug_ccc
    build job
    $ cat .gitlab-ci.yml
    stages:
    - build
    build:
    stage: build
    image: openjdk
    script:
    - /bin/sh gradlew clean bootJar
    after_script:
    - aws s3 cp build/libs/app.jar s3://bucket/app.jar
    64

    View Slide

  65. #jjug_ccc
    CIパイプラインへのテストの組み込み
    65
    code test deploy
    build
    build
    git push
    arch test
    unit test
    analysis
    merge request
    arch test
    unit test
    analysis

    View Slide

  66. #jjug_ccc
    CIパイプラインへのテストの組み込み
    66
    code test deploy
    build
    git push
    arch test
    unit test
    analysis
    merge request
    arch test
    unit test
    analysis build

    View Slide

  67. #jjug_ccc
    CIパイプラインへのテストの組み込み
    67
    code test deploy
    build
    trigger
    git push
    arch test
    unit test
    analysis
    merge request
    arch test
    unit test
    analysis build

    View Slide

  68. #jjug_ccc
    trigger job
    $ cat .gitlab-ci.yml
    stages:
    - deploy
    trigger:
    stage: deploy
    variables:
    APP_VERSION: 1.0
    trigger:
    project: infra-repository
    68

    View Slide

  69. #jjug_ccc
    CIパイプラインへのテストの組み込み
    69
    code test deploy
    build
    trigger
    インフラ
    git push
    arch test
    unit test
    analysis
    merge request
    arch test
    unit test
    analysis build

    View Slide

  70. #jjug_ccc
    CIパイプラインへのテストの組み込み
    70
    code test deploy
    build
    trigger
    インフラ
    deploy
    git push
    arch test
    unit test
    analysis
    merge request
    arch test
    unit test
    analysis build

    View Slide

  71. #jjug_ccc
    deploy job
    $ cat .gitlab-ci.yml
    stages:
    - deploy
    deploy:
    stage: deploy
    image: ansible
    script:
    - /usr/local/bin/ansible-playbook -i staging/hosts -e “app_version=${APP_VERSION’}” deploy.yml
    rules:
    - if ‘$APP_VERSION’
    71

    View Slide

  72. #jjug_ccc
    deploy job
    $ cat .gitlab-ci.yml
    stages:
    - deploy
    deploy:
    stage: deploy
    image: ansible
    script:
    - /usr/local/bin/ansible-playbook -i staging/hosts -e “app_version=${APP_VERSION’}” deploy.yml
    rules:
    - if ‘$APP_VERSION’
    72

    View Slide

  73. #jjug_ccc
    CIパイプラインへのテストの組み込み
    73
    code test deploy
    build
    trigger
    インフラ
    deploy
    git push merge request trigger
    analysis unit test arch test analysis unit test arch test build
    アプリケーション

    View Slide

  74. #jjug_ccc
    Agenda 1. なぜ継続的テストを進めているの

    2. CIパイプラインへのテストの組み
    込み
    3. テストの自動化
    74

    View Slide

  75. #jjug_ccc
    自動化しているテスト
    ● ユニットテスト
    ● パフォーマンステスト
    ● E2Eテスト
    75
    https://note.com/globis_engineers/n/n455d7322fa33

    View Slide

  76. #jjug_ccc
    自動化しているテスト
    76
    ● ユニットテスト
    ● パフォーマンステスト
    ● E2Eテスト
    https://note.com/globis_engineers/n/n455d7322fa33

    View Slide

  77. #jjug_ccc
    パフォーマンステストを自動化される前は
    77
    1. 負荷がかかるサーバを構築する
    2. 負荷をかけるサーバを構築する
    3. パフォーマンステストを実行する
    4. テストをもとにSpreadsheetのグラフに落としこむ
    5. すべてのパフォーマンステストのシナリオに対して上記の作業を繰り返す

    View Slide

  78. #jjug_ccc
    パフォーマンステストが自動化される前の問題
    1. 1つのJMeterシナリオをテストするのに時間がかかる
    2. 手作業なので作業ミスが発生する
    3. テスト結果を確認するためのグラフを作るのに大変
    78

    View Slide

  79. #jjug_ccc
    パフォーマンステストの自動化で利用したもの
    79

    View Slide

  80. #jjug_ccc
    パフォーマンステストを自動化される前は
    80
    1. 負荷がかかるサーバを構築する
    2. 負荷をかけるサーバを構築する
    3. パフォーマンステストを実行する
    4. テストをもとにSpreadsheetのグラフに落としこむ
    5. すべてのパフォーマンステストのシナリオに対して上記の作業を繰り返す

    View Slide

  81. #jjug_ccc
    パフォーマンステストの自動化
    81
    テストを実行する
    ansible
    influxdb
    PostgreSQL
    Grafana
    負荷がかかるサーバ

    View Slide

  82. #jjug_ccc
    パフォーマンステストの自動化
    82
    負荷がかかるサーバを構築する
    ansible
    influxdb
    PostgreSQL
    Grafana
    負荷がかかるサーバ

    View Slide

  83. #jjug_ccc
    パフォーマンステストを自動化される前は
    83
    1. 負荷がかかるサーバを構築する
    2. 負荷をかけるサーバを構築する
    3. パフォーマンステストを実行する
    4. テストをもとにSpreadsheetのグラフに落としこむ
    5. すべてのパフォーマンステストのシナリオに対して上記の作業を繰り返す

    View Slide

  84. #jjug_ccc
    パフォーマンステストを自動化される前は
    84
    1. 負荷がかかるサーバを構築する
    2. 負荷をかけるサーバを構築する
    3. パフォーマンステストを実行する
    4. テストをもとにSpreadsheetのグラフに落としこむ
    5. すべてのパフォーマンステストのシナリオに対して上記の作業を繰り返す

    View Slide

  85. #jjug_ccc
    パフォーマンステストの自動化
    85
    JMeter環境を構築する
    ansible
    influxdb
    PostgreSQL
    Grafana
    負荷がかかるサーバ

    View Slide

  86. #jjug_ccc
    パフォーマンステストを自動化される前は
    86
    1. 負荷がかかるサーバを構築する
    2. 負荷をかけるサーバを構築する
    3. パフォーマンステストを実行する
    4. テストをもとにSpreadsheetのグラフに落としこむ
    5. すべてのパフォーマンステストのシナリオに対して上記の作業を繰り返す

    View Slide

  87. #jjug_ccc
    パフォーマンステストを自動化される前は
    87
    1. 負荷がかかるサーバを構築する
    2. 負荷をかけるサーバを構築する
    3. パフォーマンステストを実行する
    4. テストをもとにSpreadsheetのグラフに落としこむ
    5. すべてのパフォーマンステストのシナリオに対して上記の作業を繰り返す

    View Slide

  88. #jjug_ccc
    パフォーマンステストの自動化
    88
    JMeterシナリオを実行する
    ansible
    influxdb
    Grafana
    負荷がかかるサーバ
    PostgreSQL

    View Slide

  89. #jjug_ccc
    JMeter CLI
    $ jmeter -n -t scenario.jmx -l /usr/local/report/jtl.csv -e -o /usr/local/report
    89

    View Slide

  90. #jjug_ccc
    パフォーマンステストを自動化される前は
    90
    1. 負荷がかかるサーバを構築する
    2. 負荷をかけるサーバを構築する
    3. パフォーマンステストを実行する
    4. テストをもとにSpreadsheetのグラフに落としこむ
    5. すべてのパフォーマンステストのシナリオに対して上記の作業を繰り返す

    View Slide

  91. #jjug_ccc
    パフォーマンステストの自動化
    91
    JTLファイルをインポートする
    ansible
    influxdb
    PostgreSQL
    Grafana
    負荷がかかるサーバ

    View Slide

  92. #jjug_ccc
    JTLファイル
    $ cat jtl.csv
    timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,fa
    ilureMessage,bytes,sentBytes,grpThreads,allThreads,URL,Latency,IdleTime,Connect
    1234567890123,1,GET /index.html,200,OK,rakus.co.jp:1099-Thread Group
    1-1,text,true,,1689,1,1,1,https://rakus.co.jp/,1,0,1
    92

    View Slide

  93. #jjug_ccc
    パフォーマンステストの自動化
    93
    JTLファイルをインポートする
    ansible
    influxdb
    PostgreSQL
    Grafana
    負荷がかかるサーバ

    View Slide

  94. #jjug_ccc
    InfluxdbにJMeterの結果をインポートする方法
    ● JMeterのbackend listenerを利用する
    ○ JMeterで負荷テスト中にリアルタイムで連携する方法
    ○ 3種類の方法がある
    ■ (公式)InfluxDBBackendListenerClient
    ■ (非公式)JMeter InfluxDB v2.0 listener plugin
    ● JMeterのJTLファイルを利用する
    94

    View Slide

  95. #jjug_ccc
    パフォーマンステストの自動化
    95
    統計情報をインポートする
    ansible
    influxdb
    PostgreSQL
    Grafana
    負荷がかかるサーバ

    View Slide

  96. #jjug_ccc
    統計情報
    $ cat statistics.json | jq .
    {
    "GET /index.html" : {
    "transaction" : "GET /index.html",
    "sampleCount" : 1,
    "errorCount" : 0,
    "errorPct" : 0.0,
    "meanResTime" : 9.933357142857153,
    "medianResTime" : 3.0,
    "minResTime" : 0.0,
    "maxResTime" : 1557.0,
    "pct1ResTime" : 21.0,
    "pct2ResTime" : 34.0,
    "pct3ResTime" : 105.0,
    "throughput" : 23.258672993025723,
    "receivedKBytesPerSec" : 14.445816429262068,
    "sentKBytesPerSec" : 6.859491449115007
    }
    }
    96

    View Slide

  97. #jjug_ccc
    パフォーマンステストの自動化
    97
    統計情報をインポートする
    ansible
    influxdb
    PostgreSQL
    Grafana
    負荷がかかるサーバ

    View Slide

  98. #jjug_ccc
    パフォーマンステストの自動化
    98
    統計情報をインポートする
    ansible
    influxdb
    PostgreSQL
    Grafana
    負荷がかかるサーバ
    JTLファイルをインポートする

    View Slide

  99. #jjug_ccc
    パフォーマンステストの自動化
    99
    ansible
    influxdb
    PostgreSQL
    Grafana
    負荷がかかるサーバ

    View Slide

  100. 100
    https://grafana.com/grafana/dashboards/1152

    View Slide

  101. #jjug_ccc
    パフォーマンステストを自動化される前は
    101
    1. 負荷がかかるサーバを構築する
    2. 負荷をかけるサーバを構築する
    3. パフォーマンステストを実行する
    4. テストをもとにSpreadsheetのグラフに落としこむ
    5. すべてのパフォーマンステストのシナリオに対して上記の作業を繰り返す

    View Slide

  102. #jjug_ccc
    パフォーマンステストを自動化される前は
    102
    1. 負荷がかかるサーバを構築する
    2. 負荷をかけるサーバを構築する
    3. パフォーマンステストを実行する
    4. テストをもとにSpreadsheetのグラフに落としこむ
    5. すべてのパフォーマンステストのシナリオに対して上記の作業を繰り返す

    View Slide

  103. #jjug_ccc
    パフォーマンステストの自動化
    103
    ansible
    influxdb
    PostgreSQL
    Grafana
    負荷がかかるサーバ

    View Slide

  104. #jjug_ccc
    パフォーマンステストを自動化される前の問題
    1. 1つのJMeterシナリオをテストするのに時間がかかる
    2. 手作業が多いので作業ミスが発生する
    3. テスト結果を確認するためのグラフを作るのに大変
    104

    View Slide

  105. #jjug_ccc
    パフォーマンステストを自動化される前の問題
    1. 1つのJMeterシナリオをテストするのに時間がかかる
    → 自動化されたので夜間に実施できる
    1. 手作業が多いので作業ミスが発生する
    2. テスト結果を確認するためのグラフを作るのに大変
    105

    View Slide

  106. #jjug_ccc
    パフォーマンステストを自動化される前の問題
    1. 1つのJMeterシナリオをテストするのに時間がかかる
    → 自動化されたので夜間に実施できる
    1. 手作業が多いので作業ミスが発生する
    → Ansibleを実行するのみで発生しにくくなった
    1. テスト結果を確認するためのグラフを作るのに大変
    106

    View Slide

  107. #jjug_ccc
    パフォーマンステストを自動化される前の問題
    1. 1つのJMeterシナリオをテストするのに時間がかかる
    → 自動化されたので夜間に実施できる
    1. 手作業が多いので作業ミスが発生する
    → Ansibleを実行するのみで発生しにくくなった
    1. テスト結果を確認するためのグラフを作るのに大変
    → Grafanaが自動的に作成してくれる
    107

    View Slide

  108. #jjug_ccc
    まとめ ● Gitlab CI上にテストの組み込み
    ● パフォーマンステストの自動化

    継続的にテストをすることができる環境
    を構築することができました。
    108

    View Slide

  109. 109
    ご清聴ありがとうございました。

    View Slide