JUnit4では、@testを付けた個所がランダムに実行されるということは周知の事実かと思います。それでも、ログインが必要なサイトなど順番通りに実行したいケースが出てくるものです。
ということで、今回は、JUnit4で順番通りにテストを実行する方法を書いていきます。
ソースの構成
一つ一つのclassには、@testは一つだけの構成にします。
そして、複数のclassを連結して実行するclassを一つ作成します。
具体的には以下のような構成で、4つのclassを作成しています。
・実行用class
・データ用class
・1つ目のテストclass
・2つ目のテストclass
実行用class
順番通りに実行するためのclassです。
package site.lifehacker.sample;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
@SuiteClasses({
InitialTest.class,
SampleTest.class,
SampleTest2.class
})
public class OrderTests {
}
データ用class
各testで共通して使う変数をまとめておきます。
ブラウザを立ち上げた後、同じウインドウを操作することになると思うので、driverを共通化することは必須です。
package site.lifehacker.sample;
import org.openqa.selenium.WebDriver;
public class Data {
protected static WebDriver driver;
}
初期化用class
Dataクラスを継承して、driverを共通で使用します。
このクラスでは、ブラウザの起動だけを担当しています。
package site.lifehacker.sample;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class InitialTest extends Data{
@BeforeClass
public static void setUp(){
}
@Test
public void testInitialisation(){
System.setProperty("webdriver.chrome.driver", "./exe/chromedriver.exe");
//テスト先のサイトに接続(ブラウザが起動します)
driver = new ChromeDriver();
driver.get("https://life-hacker.site/");
@AfterClass
public static void tearDown() {
}
}
1つ目のテストclass
こちらもDataクラスを継承しています。
@testを複数作ると、ランダムに実行されるので一つしか作りません。
package site.lifehacker.sample;
//Inportは省略しています。
public class SampleTest extends Data{
@BeforeClass
public static void setUp(){
}
@Test
public void test1(){
//1つ目のテスト内容
}
@AfterClass
public static void tearDown() {
}
}
2つ目のテストclass
こちらもDataクラスを継承しています。
このようにして テストを量産していきます。
package site.lifehacker.sample;
//Inportは省略しています。
public class SampleTest2 extends Data{
@BeforeClass
public static void setUp(){
}
@Test
public void test2(){
//2つ目のテスト内容
}
@AfterClass
public static void tearDown() {
}
}
最後にブラウザを閉じる場合は、それ専用のクラスを作成して、最後に実行されるように並べれば良いです。
JUnit4では@testがランダムな順番で実行されると知ったとき、「まさか」と思いましたが、本当でした。
テスト実行の順序でお困りの場合にはぜひお試しください。
Originally posted 2020-02-17 01:11:40.