Page tree
Skip to end of metadata
Go to start of metadata

概要

CIツールのJenkinsと負荷試験等で使用されるGatlingを使って、
性能試験レポートとグラフチャートを生成するシステムを構築します。


検証環境:

  • OS

    CentOS 6.6にて検証を行いました。
    本検証環境はミニマムインストールを行ったOSを使用しています。


全体図

構築手順

この手順では、Apache、PHP、Jenkins、Maven、Gatlingは全て同一のサーバにてインストールすることを想定した手順となっています。
インストールするサーバが違う場合は、手順の一部を変更する必要があります。

 

  1. Webサーバ構築

    yum install httpd php

    ApacheとPHPは適宜環境に合わせて構築してください。

    1. 実験用PHPファイルの設置

      index.php
      <?php
          echo 'Hello ' . htmlspecialchars($_GET["name"]) . '!';
      ?>

      ドキュメントルートに上記のindex.phpファイルを設置してください。

    2. Apacheの起動

      /etc/init.d/httpd start



  2. Jenkinsのインストール

     Click here to expand...

    このページの内容:

    検証環境:

    • OS

      CentOS 5.6にて検証を行いました。
      本検証環境はミニマムインストールを行ったOSを使用しています。


     依存関係

    • java

      yum install java

     インストールに必要なツール

    • 特になし

    Jenkinsのインストール手順

    • Jenkinsリポジトリ

      # リポジトリ情報を記載する
      wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
       
      # GPG Keyのインストール
      rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key

       

       

    • Jenkinsのインストール手順手順を記載しております。

      # インストール
      yum install jenkins
       
      # Jenkins起動
      /etc/init.d/jenkins start

       

       

     環境変数の設定

     特になし



  3. Gatlingのインストール

     Click here to expand...

    このページの内容:


    検証環境:

    • OS

      CentOS 6.6にて検証を行いました。
      本検証環境はミニマムインストールを行ったOSを使用しています。


    依存関係

    下記のミドルウェアを事前にインストールする必要があります。

    • java

      yum install java

       

       

    インストールに必要なツール

    • wget(CentOS6.xのミニマムインストールではインストールされないため)

      yum install wget



    • unzip

      yum install unzip

    Gatling version 2.1.7のインストール手順

    • Gatling version 2.1.7のインストール手順を記載しております。

      # 作業ディレクトリの作成
      mkdir -p /usr/local/src/gatling
       
      # 作業ディレクトリに移動
      cd /usr/local/src/gatling
       
      # gatling version 2.1.7ダウンロード
      wget https://repo1.maven.org/maven2/io/gatling/highcharts/gatling-charts-highcharts-bundle/2.1.7/gatling-charts-highcharts-bundle-2.1.7-bundle.zip
       
      # ダウンロードしたデータを解凍
      unzip gatling-charts-highcharts-bundle-2.1.7-bundle.zip
       
      # 解凍先へ移動
      cd gatling-charts-highcharts-bundle-2.1.7
       
      # /binの下にgatlingコマンドのシンボリックリンクを設置する
      ln -s /usr/local/src/gatling/gatling-charts-highcharts-bundle-2.1.7/bin/gatling.sh /bin/gatling.sh
      
      # gatlingを作動させるために必要な環境変数を定義する。
      ## gatlingのインストール先に合わせて適宜環境変数を設定してください。
      export GATLING_HOME=/usr/local/src/gatling/gatling-charts-highcharts-bundle-2.1.7/ 

       



    • 動作確認
      1. phpプログラムをドキュメントルートに設置(Apache+PHPなどの環境を準備)

        index.php
        <?php
            echo 'Hello ' . htmlspecialchars($_GET["name"]) . '!';
        ?>



      2. 実行確認用サンプルGatlingシナリオを設置(sample.scala)

        sample.scala
        package computerdatabase
        
        import io.gatling.core.Predef._
        import io.gatling.http.Predef._
        import scala.concurrent.duration._
        
        class SampleSimulation extends Simulation {
        
          val httpConf = http
            .baseURL("http://localhost/")
            .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
            .doNotTrackHeader("1")
            .acceptLanguageHeader("en-US,en;q=0.5")
            .acceptEncodingHeader("gzip, deflate")
            .userAgentHeader("Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0")
        
          val scn = scenario("sample")
            .exec(http("request_1")
            .get("/index.php?name=test"))
            .pause(5)
        
          setUp(
            scn.inject(atOnceUsers(1))
          ).protocols(httpConf)
        }
        

        /usr/local/src/gatling/gatling-charts-highcharts-bundle-2.1.7/user-files/simulations/sample.scala
        に設置しました。

        基本的には、GATLING_HOMEの/user-files/simulations配下にscenarioファイルを設置します。

         



      3. Gatlingの実行

        gatling.sh

        実行例
        [root@localhost gatling-charts-highcharts-bundle-2.1.7]# gatling.sh
        GATLING_HOME is set to /usr/local/src/gatling/gatling-charts-highcharts-bundle-2.1.7/
        Choose a simulation number:
        [0] computerdatabase.BasicSimulation
        [1] computerdatabase.SampleSimulation
        [2] computerdatabase.advanced.AdvancedSimulationStep01
        [3] computerdatabase.advanced.AdvancedSimulationStep02
        [4] computerdatabase.advanced.AdvancedSimulationStep03
        [5] computerdatabase.advanced.AdvancedSimulationStep04
        [6] computerdatabase.advanced.AdvancedSimulationStep05
        1
        Select simulation id (default is 'samplesimulation'). Accepted characters are a-z, A-Z, 0-9, - and _

        Select run description (optional)

        Simulation computerdatabase.SampleSimulation started...
        ================================================================================
        2015-10-02 03:12:51 0s elapsed
        ---- sample --------------------------------------------------------------------
        [ ] 0%
        waiting: 1 / active: 0 / done:0
        ---- Requests ------------------------------------------------------------------
        > Global (OK=0 KO=0 )
        ================================================================================
        ================================================================================
        2015-10-02 03:12:56 5s elapsed
        ---- sample --------------------------------------------------------------------
        [--------------------------------------------------------------------------] 0%
        waiting: 0 / active: 1 / done:0
        ---- Requests ------------------------------------------------------------------
        > Global (OK=1 KO=0 )
        > request_1 (OK=1 KO=0 )
        ================================================================================
        ================================================================================
        2015-10-02 03:12:56 5s elapsed
        ---- sample --------------------------------------------------------------------
        [##########################################################################]100%
        waiting: 0 / active: 0 / done:1
        ---- Requests ------------------------------------------------------------------
        > Global (OK=1 KO=0 )
        > request_1 (OK=1 KO=0 )
        ================================================================================
        Simulation finished
        Parsing log file(s)...
        Parsing log file(s) done
        Generating reports...
        ================================================================================
        ---- Global Information --------------------------------------------------------
        > request count 1 (OK=1 KO=0 )
        > min response time 5 (OK=5 KO=- )
        > max response time 5 (OK=5 KO=- )
        > mean response time 5 (OK=5 KO=- )
        > std deviation 0 (OK=0 KO=- )
        > response time 50th percentile 5 (OK=5 KO=- )
        > response time 75th percentile 5 (OK=5 KO=- )
        > mean requests/sec 0.196 (OK=0.196 KO=- )
        ---- Response Time Distribution ------------------------------------------------
        > t < 800 ms 1 (100%)
        > 800 ms < t < 1200 ms 0 ( 0%)
        > t > 1200 ms 0 ( 0%)
        > failed 0 ( 0%)
        ================================================================================
        Reports generated in 0s.
        Please open the following file: results/samplesimulation-1443723171724/index.html

        上記の実行例では、

        「Choose a simulation number:」にて1を入力し、ENTERを入力しております。

        「Select simulation id (default is 'samplesimulation'). Accepted characters are a-z, A-Z, 0-9, - and _」では、
        ENTERを入力しております。

        「Select run description (optional)」では、ENTERを入力しております。

      4. Webページで結果を確認する方法

        1. 結果ファイルをWebサーバから見えるように結果ファイルが入っているディレクトリのシンボリックリンクをドキュメントルート配下に設置する

          # ドキュメントルートにシンボリックリンクを設定
          ## Apacheを使っている場合は、ドキュメントルートのOptionsにFollowSymLinksを追加しないと見えません。
          ln -s /usr/local/src/gatling/gatling-charts-highcharts-bundle-2.1.7/results/ /var/www/html/



        2. Webページにアクセスします。

          http://[IP等のWebサーバホストを記述]/results/samplesimulation-xxxxxxxxxxx/
          # Apacheを使っている場合は、ドキュメントルートのOptionsにIndexesを追加すると、
          # 「http://[IP等のWebサーバホストを記述]/results/」のアクセスすると試験結果が一覧化して表示されます。
          # (公開サーバの場合は、「Indexes」をONにするのはオススメしません。)
          # 試験後に生成された結果ファイルはコマンド実行中に表示される「Please open the following file: 」の後ろに記載されております。

           

        3. 試験結果一覧

          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
          <html xmlns="http://www.w3.org/1999/xhtml">
           <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
            <title>試験結果リスト</title>
           </head>
           <body>
          
          <?php
          if ($dir = opendir("/var/www/html/results/")) {
              while (($file = readdir($dir)) !== false) {
                  if ($file != "." && $file != ".." && $file != "result-list.php" && $file != ".keep") {
                      echo "<a href=\"$file/index.html\">$file</a><br/>\n";
                  }
              }
              closedir($dir);
          }
          ?>
          
           </body>
          </html>

          Apacheの「Indexes」オプションを有効にしても同じこと出来ますが、
          PHPで試験結果リストを出力するHTMLファイルを作成してみました。
          試験結果がまとまっているディレクトリに設置すると一覧化されます。
          「/var/www/html/results」に試験結果がまとまっている想定で書かれているため、
          本手順以外でインストールした場合は適宜修正が必要です。

     環境変数の設定

    # Gatlingを作動させるために必要な環境変数を定義する。
    ## Gatlingのインストール先に合わせて適宜環境変数を設定してください。
    export GATLING_HOME=/usr/local/src/gatling/gatling-charts-highcharts-bundle-2.1.7/



  4. MavenなどのJenkinsとGatilngの実行に必要なソフトウェアをインストール

    # Apache Mavenのリポジトリ取得
    ## 参考:https://gist.github.com/sebsto/19b99f1fa1f32cae5d00
    wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
    sed -i s/\$releasever/6/g /etc/yum.repos.d/epel-apache-maven.repo
    
    # Mavenのインストール
    yum install apache-maven

     



  5. Jenkisでのパフォーマンスプラグインの導入(Jenkins管理画面の操作「ブラウザ」)
    1. JenkinsのWeb管理画面にログインします。



    2. Jenkinsの管理へ移動します。


      1. 「Jenkinsの管理」というリンクをクリックします。


    3. プラグインの管理へ移動

       

      1. プラグインの管理をクリックします。


    4. 高度な設定からプラグインをアップロード

      1. 図の①「利用可能」をクリックします。
      2. 図の②のフィルターに「Gatling」と入力し、使用するプラグインを抽出します。

      3. 図の③の「Gatling Jenkins Plugin」のインストール項目にチェックを入れます。

        1. Gatlingプラグインはバージョン1.1.1で検証しております。

      4. 図の④の「再起動せずにインストール」をクリックします。

    5. インストール確認画面


      1. インストール完了後、ジョブがなければJenkinsを再起動するをチェックし、インストール完了を待ちます。

    6. 再起動画面


      1. 再起動中になると上記の画面になります。準備が完了するとブラウザがリロードされますが、リロードされない場合は手動でリロードしてください。

  6. Jenkisにてジョブの作成
    1. TOPページ


      1. TOPページから「新規ジョブ作成」をクリックします。

    2. ジョブの初期設定


      1. 図の①にジョブ名を入力します。ここでは、仮として「gatling」という名前にしております。
      2. 図の②の「フリースタイル・プロジェクトのビルド」を選択します。
      3. 設定が完了したら、図の③の「OK」ボタンをクリックします。

    3. ビルドの設定


      1. プロジェクト設定画面にて、ビルドの手順を追加します。
        ビルドは「Maven呼び出し」を選択します。

    4. Mavenの高度な設定


      1. 高度な設定をクリックします。

    5. Mavenの高度な設定を追加


      1. 図の①のゴールに「gatling:execute」と記述します。
      2. 図 の②のプロパティに「baseUrl=http://localhost thread=20 time=10」と記述します。




    6. ビルド後の処理の追加


      1. プロジェクト設定画面にて、「ビルド後の処理の追加」を選択し、
        「Take a Gatling load simulation」を選択します。

    7. Publish Performance test result reportの設定(レポートの追加)


      1. 「Enable simulation tracking」のチェックボックスがチェックされているのを確認します。

    8. プロジェクトの設定を保存


      1. 図の保存ボタンを押すことで、プロジェクト設定が保存されます。

  7. 「pom.xml」と「sample.scala」の設置(サーバのコンソールから操作します)
    1. 手順

      # ジョブ「gatling」のデータディレクトリに移動
      ## 作成したジョブ名に合わせて適宜変更してください
      cd /var/lib/jenkins/jobs/gatling
      
      # ワークスペースを作成
      mkdir workspace
      
      # ジョブ「gatling」のワークスペースへ移動
      cd /var/lib/jenkins/jobs/gatling/workspace
      
      # Mavenのプロジェクトファイル(pom.xml)を作成します。
      vi pom.xml
      
      # シナリオファイル格納ディレクトリの作成
      mkdir -p src/test/scala/
      
      # Gatlingシナリオファイル(sample.scala)を作成します。
      vi src/test/scala/sample.scala
      
      # Jenkinsがワークスペースを制御できるように「/var/lib/jenkins/jobs/gatling/workspace」の権限を変更
      chown -R jenkins:jenkins /var/lib/jenkins/jobs/gatling/workspace



    2. pom.xml

      pom.xml
      <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      
              <modelVersion>4.0.0</modelVersion>
      
              <groupId>io.gatling</groupId>
              <artifactId>gatling-maven-plugin-demo</artifactId>
              <version>2.1.7</version>
      
              <properties>
                      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
                      <gatling.version>${project.version}</gatling.version>
              <gatling-plugin.version>2.1.7</gatling-plugin.version>
              <scala-maven-plugin.version>3.2.2</scala-maven-plugin.version>
              </properties>
      
              <dependencies>
                      <dependency>
                              <groupId>io.gatling.highcharts</groupId>
                              <artifactId>gatling-charts-highcharts</artifactId>
                              <version>${gatling.version}</version>
                              <scope>test</scope>
                      </dependency>
              </dependencies>
      
              <build>
                      <plugins>
                              <plugin>
                                      <groupId>net.alchim31.maven</groupId>
                                      <artifactId>scala-maven-plugin</artifactId>
                                      <version>${scala-maven-plugin.version}</version>
                              </plugin>
                              <plugin>
                                      <groupId>io.gatling</groupId>
                                      <artifactId>gatling-maven-plugin</artifactId>
                                      <version>${gatling-plugin.version}</version>
                                      <executions>
                                              <execution>
                                                      <goals>
                                                              <goal>execute</goal>
                                                      </goals>
                                              </execution>
                                      </executions>
                              </plugin>
                      </plugins>
              </build>
      </project>

       

       

    3. sample.scala

      sample.scala
      package computerdatabase
      
      import io.gatling.core.Predef._
      import io.gatling.http.Predef._
      import scala.concurrent.duration._
      
      class SampleSimulation extends Simulation {
        val baseUrl = System.getProperty("baseUrl")
        val thread = Integer.getInteger("thread",1)
        val time = Integer.getInteger("time",1)
      
        val httpConf = http
          .baseURL(baseUrl)
          .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
          .doNotTrackHeader("1")
          .acceptLanguageHeader("en-US,en;q=0.5")
          .acceptEncodingHeader("gzip, deflate")
          .userAgentHeader("Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0")
      
        val scn = scenario("sample")
          .exec(http("request_1")
          .get("/index.php?name=test"))
          .pause(5)
      
        setUp(
          scn.inject(rampUsers(thread) over (time seconds))
        ).protocols(httpConf)
      }
  8. Javaの確認(サーバのコンソールから操作します)

    1. Javaのバージョン確認(JDK 7(1.7)以上)

      java -version

      # 入っていない場合
      yum install java-1.8.0-openjdk
      [root@localhost workspace]# java -version
      openjdk version "1.8.0_51"
      OpenJDK Runtime Environment (build 1.8.0_51-b16)
      OpenJDK 64-Bit Server VM (build 25.51-b03, mixed mode)

      Gatling Maven PluginはOracle Java 7を想定しております。
      Oracle Java 6、または、OpenJDK 6では、プラグインが動作しないため、Oracle Java 7、または、OpenJDK 7以上をご利用ください
      https://www.digitalocean.com/community/tutorials/how-to-install-java-on-centos-and-fedora

    2. javacのバージョン確認(JDK 7(1.7)以上)

      javac -version

      # 入っていない場合
      yum install java-1.8.0-openjdk-devel
      [root@localhost workspace]# java -version
      openjdk version "1.8.0_51"
      OpenJDK Runtime Environment (build 1.8.0_51-b16)
      OpenJDK 64-Bit Server VM (build 25.51-b03, mixed mode)

      Gatling Maven PluginはOracle Java 7を想定しております。
      Oracle Java 6、または、OpenJDK 6では、プラグインが動作しないため、Oracle Java 7、または、OpenJDK 7以上をご利用ください
      https://www.digitalocean.com/community/tutorials/how-to-install-java-on-centos-and-fedora

    Apache Mavenをリポジトリからインストールした場合、Java 6がインストールされます。複数のJavaのバージョンが投入されてしまう可能性が有りますので、
    「alternatives」コマンドを用いて、使用するバージョンを適宜調整してください。

  9. ビルドの実行(Jenkins管理画面の操作「ブラウザ」)
    1. プロジェクトの選択


      1. プロジェクトを選択します。
        今回は、「gatling」プロジェクトのリンクをクリックします。

    2. ビルドの実行


      1. 図の「ビルド実行」をクリックします。

    3. 完了したビルドの実行結果確認


      1. 図の「#1」をクリックし、ビルド結果を確認します。
        1. この時、青い画像であれば成功です。赤い画像であった場合は、何かビルド上で問題が発生している可能性があります。

    4. Gatlingの確認


      1. Performance Reportを確認するために、ビルド結果画面の「Performance Report」をクリックします。

    5. report


      1. 「samplesimulation」をクリックします。

    6. Report


      1. 「Report」は上記の様な表示になります。

    7. プロジェクトトップ


    8. Performance Trend

 

 

  • No labels
Write a comment…