JenkinsからMavenビルドを行い、Pitalium Explorerで結果を確認する

# はじめに

[Selenium(Java)でE2Eテスト環境を構築する](https://qiita.com/umasaki/items/7ac1ea1719c1a786d64f)
[HTMLの要素を調べてPageクラス(Selenide利用)を作成する](https://qiita.com/umasaki/items/9ddabef15e01a4a734e2)

ここまで環境構築からPageクラスの作成まで来たが、「CIできなきゃ意味ないよねー」「そだねー」っと言われないようにCI環境で動かせるようにします:innocent:

CIで回して結果確認までできることを確認し提案して、ある程度は自走で作ってもらえると助かるなぁと思ってます。

色々書いていますが本家の[CIサーバ（Jenkins）でPitaliumをテストする](http://www.htmlhifive.com/conts/web/view/pitalium-developer/pitalium-ci)に書いてありました・・・


# Mavenのpom.xmlを修正する

ライブラリのダウンロードくらいでしか書かれていない状態だが、テストを行えるよう修正を行います。

- ディレクトリ構成

![aWS050249.JPG](https://qiita-image-store.s3.amazonaws.com/0/187061/c1ee0361-b140-56b8-5881-72167eeb036a.jpeg)

- pom.xml

test～のような設定があるので、本来ならメインのプロジェクト内にテスト用のソースを入れて設定で色々切り分けるのが普通なのかもしれない・・・
今回はテスト用のプロジェクトなので気にせず同じフォルダを指定しました。

```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>pita</groupId>
  <artifactId>pita</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <testSourceDirectory>src</testSourceDirectory>
    <resources>
      <resource>
        <directory>resource</directory>
      </resource>
    </resources>
    <testResources>
      <testResource>
        <directory>resource</directory>
      </testResource>
    </testResources>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.3</version>
        <configuration>
          <encoding>UTF-8</encoding>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.12.4</version>
        <configuration>
          <argLine>-Dfile.encoding=UTF-8</argLine>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <dependencies>
  	<dependency>
  		<groupId>com.htmlhifive</groupId>
  		<artifactId>pitalium</artifactId>
  		<version>1.2.2</version>
  	</dependency>
  	<dependency>
  		<groupId>org.slf4j</groupId>
  		<artifactId>slf4j-log4j12</artifactId>
  		<version>1.7.25</version>
  	</dependency>
  	<dependency>
  		<groupId>com.codeborne</groupId>
  		<artifactId>selenide</artifactId>
  		<version>4.11.1</version>
  	</dependency>
  	<dependency>
  		<groupId>org.seleniumhq.selenium</groupId>
  		<artifactId>selenium-api</artifactId>
  		<version>3.11.0</version>
  	</dependency>
  	<dependency>
  		<groupId>org.seleniumhq.selenium</groupId>
  		<artifactId>selenium-remote-driver</artifactId>
  		<version>3.11.0</version>
  	</dependency>
  	<dependency>
  		<groupId>org.seleniumhq.selenium</groupId>
  		<artifactId>selenium-support</artifactId>
  		<version>3.11.0</version>
  	</dependency>
  </dependencies>
</project>
```


# Jenkinsの環境設定を行う

Windows環境で試しています。

Tomcatのwebappsフォルダにjenkins.war(Ver2.107.2)を配置しています。
Jenkinsはログインユーザーまで設定できている前提で書きます。
また、バージョン管理システムとの連携は今回行いません。

### 環境変数を設定し、日本語の文字化け対策を行う

以下をWindowsのシステム環境変数に設定し、Tomcatの再起動を行いました。

変数:JAVA_TOOL_OPTIONS
値:-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8

### JDK、Mavenの設定を行う

1. Jenkinsの管理
![aWS050250.JPG](https://qiita-image-store.s3.amazonaws.com/0/187061/78f806ff-466b-c219-bc8a-ae69d9161669.jpeg)

2. Global Tool Configration
![aWS050251.JPG](https://qiita-image-store.s3.amazonaws.com/0/187061/16bfb638-4622-9b5a-e371-3377c9ff0bc6.jpeg)

3. JDKの設定(ここではeclipseで使っているものを指定した)
![aWS050254.JPG](https://qiita-image-store.s3.amazonaws.com/0/187061/7a36848d-4440-3aad-1fbc-f52b4558cc86.jpeg)

4. Mavenの設定(ここではapache-maven-3.5.3-bin.zipを解凍して指定した)
![aWS050255.JPG](https://qiita-image-store.s3.amazonaws.com/0/187061/b865ae6c-cc23-fe38-f14f-00ea2811465f.jpeg)


# Jenkinsの新規ジョブを作成

POMは前述したファイルを指定します。
プロパティで実行方法を指定します。最初なのでSET_EXPECTEDを指定しました。
詳細は[基本的なテストの実行方法](https://www.htmlhifive.com/conts/web/view/pitalium-tutorial/test-basic-run)を参照してください。
![aWS050258.JPG](https://qiita-image-store.s3.amazonaws.com/0/187061/8ec90f89-43fb-5ec6-40b6-44564d68cbcb.jpeg)


# Jenkinsのジョブを実行

[HTMLの要素を調べてPageクラス(Selenide利用)を作成する](https://qiita.com/umasaki/items/9ddabef15e01a4a734e2)

この時に作ったクラスで実際に動かしてみる。
Selenium GridのHubはJenkinsと同一マシン、Nodeはどこでもという状態でHubとNodeが起動している状態で動かしました。

1回目のテスト：SET_EXPECTEDで、検索ワードは「test」
2回目のテスト：RUN_TESTで、検索ワードは「テスト」

このままだとスクリーンショットの結果確認はベリー面倒です。
ここでPitalium Explorerを利用することにしました:hugging:


# Pitalium Explorerの環境設定を行う

[Pitalium Explorerを使用してテスト結果を確認する](https://www.htmlhifive.com/conts/web/view/pitalium-tutorial/pitalium-explorer)を参考に設定を行います。

今回は出力場所を指定していないので、以下のように指定しました。

```json:explorerPersisterConfig.json
{
	"files": {
		"result1": {
			"resultDirectory": "C:/pleiades/workspace_Pitalium/pita/results"
		}
	},
	"defaultResultKey": "result1"
}
```


# Pitalium Explorerで確認する

1回目の実行結果
![aWS050266.JPG](https://qiita-image-store.s3.amazonaws.com/0/187061/843c58f1-f750-1a14-b62b-4577d53a6898.jpeg)

おおー画面見える見える:hugging:
![aWS050263.JPG](https://qiita-image-store.s3.amazonaws.com/0/187061/c4c26bd6-fb4b-1e11-827b-a624151e1ec9.jpeg)

2回目の実行結果(RUN_TESTで実行したので画像の比較が行われている)
![aWS050267.JPG](https://qiita-image-store.s3.amazonaws.com/0/187061/5a39c2d9-f12c-30de-f31d-33fba3870326.jpeg)

すごっ！差分がめちゃくちゃわかりやすい:laughing:
![aWS050264.JPG](https://qiita-image-store.s3.amazonaws.com/0/187061/552dc87e-06f6-a0ab-e06c-067b84f11f89.jpeg)
![aWS050265.JPG](https://qiita-image-store.s3.amazonaws.com/0/187061/843cab9c-de1c-bdd5-c289-d6036b0011af.jpeg)


# テスト実施するたびに増えていくDBのデータはどうするか

Ouch！何も考えてなかった:rolling_eyes:

- DBUnitとかDbSetupでテスト実行前に初期化する
- テスト用のDBスナップショットを取り、実行後に戻す（最悪手動で行うことになりそう）