挨拶
地方IT企業で働いて6年目になります。
基幹システムのコード体系が変わることをきっかけに関連する様々なシステムの修正をすることになりましたので少しでもテストの工数を減らすべくselenideというブラウザのテスティングフレームワークを導入する環境構築についてまとめました。
selenideだけではなく、新規にプロジェクトにアサインされた人でも環境構築できるような文章にしていきたいと思います。
これを見てうまく行かなかったということがあればぜひコメント頂きたいです。よろしくお願いします。
既存のプロジェクトのtestフォルダにselenideのテストコードを置くかどうかで迷いましたが、今回は新規のプロジェクトとして作成しています。
超レガシーwebプロジェクトでも別でプロジェクト作成しておけばそれぞれを疎にしておけるので別にしておく方が便利だと思います。
selenideとは
seleniumというUIテストフレームワークのラッパーしてより使いやすくしたテストフレームワークです。
単なるテスト実行だけではなくて、スクリーンショットの取得なども自動で行うことができます。
seleniumではajax通信の際にレスポンスがあるまでをsleepで調整したりだとかが面倒だったようですが、selenideでは通信が終わったら次のテストを実行など便利になっているみたいです。
Javaの入手
一番新しいものをダウンロード&インストールします。
システム環境変数(ユーザー環境変数でもOK)にJAVA_HOMEを設定します。
Gradleの入手
chocolatelyをインストールしている場合は下記コマンドでインストールできます。
choco install gradle
chocolatelyについて
windows用のパッケージ管理ツールです。
Community
手動でインストールする場合
Gradle Build Tool
gradleをダウンロード、好きな場所に展開した後、gradleのbinフォルダを環境変数に登録します。
cmdで下記コマンドを実行してバージョンが出れば設定完了です。
gradle -v
------------------------------------------------------------
Gradle 7.5.1
------------------------------------------------------------
Build time: 2022-08-05 21:17:56 UTC
Revision: *****
Kotlin: 1.6.21
Groovy: 3.0.10
Ant: Apache Ant(TM) version 1.10.11 compiled on July 10 2021
JVM: 17.0.4 (Oracle Corporation 17.0.4+11-LTS-179)
OS: Windows 10 10.0 amd64
VSCode
Visual Studio Code - コード エディター | Microsoft Azure
eclipseと比べて軽くて良いと思います。
eclipseが好きな人はedclipseでも問題ないです。
ビルドツールさえしっかり設定してあればIDEは何でもいいので、こだわりがある方は好きなIDEを使ってください。
VSCode拡張
- 日本語化
- Debugger for Java
- Extension Pack for Java
- Language Support for Java
- Test Runner for Java
↑は入れないと動かない拡張です。
↓は入れておくとコードがきれいになって便利なやつです。
- Prettier
- ESLint
プロジェクトの作成
gradleでプロジェクト作成
Quick Start
コマンドプロンプトで下記コマンドを実行します。
#practice-java-gradleは任意のフォルダ名でOK
mkdir practice-java-gradle
cd practice-java-gradle
gradle init --type java-application
#設定を聞かれるので、Groovy、no、JUnit4、default、defaultで進めると作成される
Starting a Gradle Daemon, 1 incompatible Daemon could not be reused, use --status for details
Select build script DSL:
1: Groovy
2: Kotlin
Enter selection (default: Groovy) [1..2] 1
Generate build using new APIs and behavior (some features may change in the next minor release)? (default: no) [yes, no] no
Select test framework:
1: JUnit 4
2: TestNG
3: Spock
4: JUnit Jupiter
Enter selection (default: JUnit Jupiter) [1..4] 1
Project name (default: practice-java-gradle):
Source package (default: practice.java.gradle):
> Task :init
Get more help with your project: https://docs.gradle.org/7.5.1/samples/sample_building_java_applications.html
BUILD SUCCESSFUL in 28s
2 actionable tasks: 2 executed
#作成したjavaプロジェクトをVSCodeで開く
code .
build.gradleに依存関係追加
./app/build.gradleにselenideの依存を追加します。
/*
* This file was generated by the Gradle 'init' task.
*
* This generated file contains a sample Java application project to get you started.
* For more details take a look at the 'Building Java & JVM projects' chapter in the Gradle
* User Manual available at https://docs.gradle.org/7.5.1/userguide/building_java_projects.html
*/
plugins {
// Apply the application plugin to add support for building a CLI application in Java.
id 'application'
}
repositories {
// Use Maven Central for resolving dependencies.
mavenCentral()
}
dependencies {
// Use JUnit test framework.
testImplementation 'junit:junit:4.13.2'
// This dependency is used by the application.
implementation 'com.google.guava:guava:31.0.1-jre'
//この行を追加する
testImplementation 'com.codeborne:selenide:6.7.2'
}
application {
// Define the main class for the application.
mainClass = 'practice.java.gradle.App'
}
テストコード作成
./app/src/test/java/プロジェクト名/AppTest.javaに以下ようなテストコードを記述します。
テストを実行します。
package practice.java.gradle;
import org.junit.Test;
import static com.codeborne.selenide.Selenide.*;
public class AppTest {
@Test
public void userCanLoginByUsername() {
open("テスト対象のURL");
$("input[name='user-name']").val("test_user");
$("input[name='password']").val("test_passeord").submit();
sleep(1000);
}
}
テスト実行
テスト実行前に開発環境でテストしたいシステムを起動してアクセスできる状態にしておきます。
システムが実行できたらVSCodeの左側にあるフラスコみたいなマークをクリックしてテスト一覧を開く>実行ボタンで実行します。
終わりに
今回はローカルPCに環境構築しました。理由としては最新のjavaが使えること、ビルドツールを整備することがあげられます。
既存のプロジェクトのtestパッケージに上記のテストコードを作成してもいいですが、既存プロジェクトのビルドツールが正しく整備されていなかったり、対応していないビルドツールだったりするので新しいプロジェクトとして作成したほうが都合が良いと思います。
Jenkinsとの連携
Jenkinsとの連携により、ソースコードコミット→検証環境リリース→UIテスト実行→結果通知みたいなこともできます。