TestNG: Selenium で複数のテスト スイートを実行する方法

TestNG を使用すると、プロジェクト内でテスト メソッド、テスト クラス、テスト ケースを並行して実行できます。 並列実行を実行すると、テストの開始と実行が同時に行われるため、「実行時間」を短縮できます。neo通常は別のスレッドで行われます。

ここでは、TestNG を使用して複数のクラス (別名異なるスイート) を実行する方法を見ていきます。

ステップ 1) テストを実行するための TestNG.xml ファイルの作成

これを行うには、以下の手順に従います。

  1. 新しいプロジェクトを作成します eclipse
  2. プロジェクトに 1 つのパッケージを作成します (com.suite2 と com.suiteXNUMX という名前を付けます)。
  3. 各パッケージにクラスを作成し (Flipkart.java および Snapdeal.java という名前を付けます)、それぞれのクラスに以下のコードをコピーします。
  4. プロジェクトに新しいファイルを作成し、testng.xml という名前を付けます (テスト プラグインがインストールされていることを確認してください) eclipse、説明書が利用可能 こちらをご覧ください。)。 Testng.xml には、すべての設定 (クラス名、テスト名、スーツ名) が含まれています。

フリップカート.java

package com.suite1;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

public class Flipkart{

	WebDriver driver = new FirefoxDriver();
	String username = ""; // Change to your username and passwrod
	String password = "";

	// This method is to navigate flipkart URL
	@BeforeClass
	public void init() {
		driver.manage().window().maximize();
		driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
		driver.navigate().to("https://www.flipkart.com");
	}

	// To log in flipkart
	@Test
	public void login() {
		driver.findElement(By.partialLinkText("Login")).click();
		driver.findElement(
				By.cssSelector(".fk-input.login-form-input.user-email"))
				.sendKeys(username);
		driver.findElement(
				By.cssSelector(".fk-input.login-form-input.user-pwd"))
				.sendKeys(password);
		driver.findElement(By.cssSelector(".submit-btn.login-btn.btn")).click();
	}

	// Search For product
	@Test
	public void searchAndSelectProduct() {
		driver.findElement(By.id("fk-top-search-box")).sendKeys("moto g3");
		driver.findElement(
				By.cssSelector("search-bar-submit.fk-font-13.fk-font-bold"))
				.click();

		// select the first item in the search results
		String css = ".gd-row.browse-grid-row:nth-of-type(1) > div:nth-child(1)>div>div:nth-child(2)>div>a";
		driver.findElement(By.cssSelector(css)).click();
	}

	@Test
	public void buyAndRemoveFromCart() {
		driver.findElement(
				By.cssSelector(".btn-express-checkout.btn-big.current"))
				.click();
		driver.findElement(By.cssSelector(".remove.fk-inline-block")).click();
		Alert a = driver.switchTo().alert();
		a.accept();
	}

	@Test
	public void logout() {
		Actions s = new Actions(driver);
		WebElement user = driver.findElement(By.partialLinkText(username));
		s.moveToElement(user).build().perform();
		driver.findElement(By.linkText("Logout")).click();
	}

	@AfterClass
	public void quit() {
		driver.close();
	}
}

スナップディール.java

package com.suite2;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

public class SnapDeal {

	WebDriver driver = new FirefoxDriver();
	String username = ""; // Change to your username and passwrod
	String password = "";
	String pinCode = "";

	// This method is to navigate snapdeal URL
	@BeforeClass
	public void init() {
		driver.manage().window().maximize();
		driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
		driver.navigate().to("https://www.snapdeal.com");
	}

	// To log in flipkart
	@Test
	public void login() {
		driver.findElement(By.xpath("//button[text()='Login']")).click();

		driver.switchTo().frame("loginIframe");

		driver.findElement(By.cssSelector("div[onClick='getLoginForm()']"))
				.click();

		driver.findElement(By.id("j_username")).sendKeys(username);
		driver.findElement(By.id("j_password_login")).sendKeys(password);
		driver.findElement(By.id("signin_submit")).click();

		driver.switchTo().defaultContent();
	}

	// Search For product
	@Test
	public void searchAndSelectProduct() {
		driver.findElement(By.cssSelector(".col-xs-20.searchformInput.keyword"))
				.sendKeys("iphone 6s");
		driver.findElement(By.cssSelector(".sd-icon.sd-icon-search")).click();

		// select the first item in the search results
		String css = ".product_grid_row:nth-of-type(1)>div:nth-child(1)";
		driver.findElement(By.cssSelector(css)).click();
	}

	@Test
	public void buyAndRemoveFromCart() {

		driver.findElement(By.xpath("//li[contains(text(),'Silver')]")).click();
		driver.findElement(By.id("pincode-check")).sendKeys(pinCode);
		driver.findElement(By.id("buy-button-id")).click();
		
		driver.findElement(By.cssSelector("i[title='Delete Item']")).click();
		Alert a = driver.switchTo().alert();	
		a.accept();
	}

	@Test
	public void logout() {
		
		driver.findElement(By.linkText("START SHOPPING NOW")).click();
		Actions s = new Actions(driver);
		WebElement user = driver.findElement(By.cssSelector(".sd-icon.sd-icon-user"));
		s.moveToElement(user).build().perform();
		driver.findElement(By.linkText("Logout")).click();
	}

	@AfterClass
	public void quit() {
		driver.close();
	}
}

TestNg.xml

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">	

<suite thread-count="1" verbose="1" name="Gmail Suite" annotations="JDK" parallel="tests">
         
  <test name="flipkart">
	 <classes>
	   <class name="com.suite1.Flipkart"/>
	 </classes>
   </test>
   
  <test name="Myntra">
     <classes>
       <class name="com.suite2.SnapDeal"/>
     </classes>
   </test>
</suite>

最終的なプロジェクト構造は以下のようになります。

テストを実行するための TestNG.xml ファイルの作成

ステップ2) TestNGでの並列実行

上記のように XML ファイルを作成したら、次のステップで並列テストを実行します。 以下はコードです。

TestNGでの並列実行

1) スレッド数: これは、数値スクリプトに基づいて並列実行に使用されます。 並列または順次に実行されます。

2) 冗長: 実行ログを記録するために使用されます。tails コンソールで。値は 1 ~ 10 である必要があります。ログデtails testng.xml 構成ファイルのverbose 属性の値を増やすと、コンソール ウィンドウの内容がより詳細かつ明確になります。

3) 名前: スイートの名前。 こちらは「G」mail スイート"

4) パラレル: スクリプトを並列実行するには、値をテスト/クラス/メソッド/スイートにすることができます。 デフォルト値は なし

testng.xml を右クリックし、「テストとして実行」を選択します。成功すると、すべての結果が表示されます。

上記のコードを実行すると、次の結果が得られますwing 出力。

出力:

TestNGでの並列実行

1) testng.xml で指定されたスイートの名前

TestNGでの並列実行

2) testng.xml で指定されたテストの名前

TestNGでの並列実行

3) testng.xml で指定されたクラスの名前

TestNGでの並列実行

4) .java ファイル内の @Test アノテーションが付けられたメソッド名

TestNGでの並列実行

いいねwise、スナップディールのテストスイートも実行されます。

まとめ

上記の例で使用方法を見てきました。 テスト 並列テストを実行します。 TestNG には、単一の構成ファイル (XML) で複数のテストを並行して実行するオプションが用意されています。