Testngでデータブックを使う方法


以前の投稿では、testngスクリプトのテストパラメータを使用することを学びました.あなたの記憶をジョギングするために、testngのパラメタリゼーションは我々がコードを通してデータを通過して、ハードコーディングを妨げるのを助けます.しかし、testngパラメータでは、実行サイクルあたり1回だけ値を渡すことができます.これを克服するために、1つの実行で単一のテストに複数のパラメータを渡すことができます.DataProviderを使用すると、簡単に1つの実行サイクルでテストに複数の値を渡すことができます.
もっと早く理解しようDataProvider in TestNG セレンテスト自動化のためのテストスクリプトで効率的にそれらを使用する方法.

Testngのデータプロファイラは何ですか?


testngパラメータと同様に、dataprovidersはtestngでスクリプトをテストするためにデータを渡す手段です.testngでdataproviderを使用すると、同じテストケースに複数の値を簡単に注入できます.これは、testngに組み込まれており、一般的にデータ駆動フレームワークで使用されます.
testngのDataProviderの構文は以下の通りです.
@DataProvider(name = ”name of the data provider”)
public Object[][] dataProviderfunc(){
Return new Object[][]{
values
}
}
さて、この構文の異なるコンポーネントを理解しようとしましょう.
  • DataProvider注釈は、あなたの便宜に従って選択できる名前と呼ばれる単一の属性を持っています.
  • DataProviderはテスト関数で使用される別のメソッドです.これはTestNGパラメーターのようなテスト関数では使用できません.
  • DataProviderメソッドは、オブジェクトの2 Dリストを返します.
  • DataProviderの名前を定義しない場合は、DataProviderメソッド名が既定の名前と見なされます.したがって、DataProviderの名前はDataProviderメソッドを呼び出します.
  • TestngにおけるDataProviderの使用


    DataProvidersの基本を理解しているので、TestngでDataProviderを使用する方法を知ることができます.複雑なtestngパラメータを渡す必要があるとき、DataProvidersは最も役に立ちます.TestNGスクリプトでDataProviderを使用する基本的な例を次に示します.
    package dataProviders;
    import org.openqa.selenium.By;
    import org.openqa.selenium.Keys;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.testng.Reporter;
    import org.testng.annotations.AfterMethod;
    import org.testng.annotations.BeforeMethod;
    import org.testng.annotations.DataProvider;
    import org.testng.annotations.Test;
    
    public class SimpleTest {
    
        WebDriver driver;
    
        @DataProvider(name = "test-data")
        public Object[][] dataProvFunc(){
                return new Object[][]{
                    {"Lambda Test"},{"Automation"}
                };
        }
    
        @BeforeMethod
          public void setUp() {
    
                  System.out.println("Start test");
                  System.setProperty("webdriver.chrome.driver", "E:\\chromedriver.exe");
                  driver = new ChromeDriver();
                  String url = "https://www.google.com";
                  driver.get(url);
                  driver.manage().window().maximize();
    
          }
        //Passing the dataProvider to the test method through @Test annotation
        @Test(dataProvider ="test-data")
        public void search(String keyWord){
                WebElement txtBox = driver.findElement(By.xpath("//input[@class='gLFyf gsfi']"));
                  txtBox.sendKeys(keyWord);
                  Reporter.log("Keyword entered is : " +keyWord);
                  txtBox.sendKeys(Keys.ENTER);
                  Reporter.log("Search results are displayed.");
        }
    
        @AfterMethod
        public void burnDown(){
                driver.quit();
        }
    
    }
    
    上記のコードでは、DataProviderメソッドを使用したテストメソッドに2つの検索キーワード、Viz“ラムダテスト”と“オートメーション”を渡します.コードを実行し、出力をチェックできます.次のようになります-


    テストを一度だけ実行している間に、2つの値が検索メソッドに渡されることに気がつきましたか?
    それはDataproviderの美しさです!コードをクリーンアップし、このDataProviderを別のクラスから継承しようとします.一つの場所ですべてを保つことが乱雑になるかもしれないので、これは重要です.相続は我々の救助に来るでしょう、次のセクションの方法を見ましょう.

    TestngにおけるDataProviderの継承


    上記の通り、TestngのDataproviderは複雑なプロジェクトまたはオブジェクトのためにコードを書く際に重要な役割を演じます.テストケースを書く間、コードは非常に乱雑になる傾向があります.つのクラスのテストケースを宣言し、別のクラスのDataProviderのようなテストパラメータを定義するのは、常に好まれます.言い換えると、私たちは別のファイルからdataproviderを継承しています、そして、それはtestngのdataproviderを継承することがすべてであることです.次に示すように、DataProviderメソッドとテストメソッドの別のクラスを作成します.
    DataProviderクラス
    package dataProviders;
    import org.testng.annotations.DataProvider; 
    public class DPClass {
        @DataProvider(name = "test-data")
        public static Object[][] dataProvFunc(){
                return new Object[][]{
                    {"Lambda Test"},{"Automation"}
                };
        }
    }
    
    我々は、DataProviderメソッドを静的なものとしてマークし、新しいクラスを作成することができました.
    テストクラス
    package dataProviders;
    import org.openqa.selenium.By;
    import org.openqa.selenium.Keys;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.testng.Reporter;
    import org.testng.annotations.AfterMethod;
    import org.testng.annotations.BeforeMethod;
    import org.testng.annotations.Test;
    
    public class TestClass {
    WebDriver driver;
    
        @BeforeMethod
          public void setUp() {
                  System.out.println("Start test");
                  System.setProperty("webdriver.chrome.driver", "E:\\chromedriver.exe");
                  driver = new ChromeDriver();
                  String url = "https://www.google.com";
                  driver.get(url);
                  driver.manage().window().maximize();
              }
    
        @Test(dataProvider ="test-data", dataProviderClass=DPClass.class)
        public void search(String keyWord){
                WebElement txtBox = driver.findElement(By.xpath("//input[@class='gLFyf gsfi']"));
                  txtBox.sendKeys(keyWord);
                  Reporter.log("Keyword entered is : " +keyWord);
                  txtBox.sendKeys(Keys.ENTER);
                  Reporter.log("Search results are displayed.");
        }
    
        @AfterMethod
        public void burnDown(){
                driver.quit();
        }
    }
    
    見ることができるように、継承を処理するために、私たちがしたのは、データをテストメソッドに追加することでした(上で強調表示されました).上記のテストを実行すると、最初の実行で見た結果と同様の結果が表示されます.

    次に、testng内のDataProviderを使用して、単一のtestngパラメータに複数の値を渡します.

    Testngデータパスにおける複数パラメータ値の通過


    複数の値を渡すことは多くのパラメータを渡すこととかなり似ています.唯一の違いは、1つの囲碁で入力のストリングが送られるように、我々がいろいろな値を一つのパラメタに渡すということです.すぐにコードの助けを借りてそれを理解しましょう.
    package dataProviders;
    import org.openqa.selenium.By;
    import org.openqa.selenium.Keys;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.testng.Reporter;
    import org.testng.annotations.AfterMethod;
    import org.testng.annotations.BeforeMethod;
    import org.testng.annotations.DataProvider;
    import org.testng.annotations.Test;
    public class SimpleTest {
        WebDriver driver;
        @DataProvider(name = "test-data")
        public Object[][] dataProvFunc(){
                return new Object[][]{
                    {"Selenium","Delhi"},{"QTP","Bangalore"},{"LoadRunner","Chennai"}
                };
        }
        @BeforeMethod
          public void setUp() {
                  System.out.println("Start test");
                  System.setProperty("webdriver.chrome.driver", "E:\\chromedriver.exe");
                  driver = new ChromeDriver();
                  String url = "https://www.google.com";
                  driver.get(url);
                  driver.manage().window().maximize();
    
          }
        @Test(dataProvider ="test-data")
        public void search(String keyWord1, String keyWord2){
                WebElement txtBox = driver.findElement(By.xpath("//input[@class='gLFyf gsfi']"));
                  txtBox.sendKeys(keyWord1," ",keyWord2);
                  Reporter.log("Keyword entered is : " +keyWord1+ " " +keyWord2);
                  txtBox.sendKeys(Keys.ENTER);
                  Reporter.log("Search results are displayed.");
        }
        @AfterMethod
        public void burnDown(){
                driver.quit();
        }
    }
    
    テストスクリプトを実行し、テストパラメータの値が1 Goで渡されると、その出力は次のようになります.

    あなたは知らないかもしれませんが、これはdataprovidersのデータを読む唯一の方法ではありません.外部ファイルを使用してデータを読み取り、DataProvidersを介してテストスクリプトに渡すことができます.そのような外部ファイルの1つはExcelファイルです.次に、Excelファイルを使用してデータを取得し、DataProviderメソッドにパスします.それ以上の時間を無駄にせずに、我々はどのように行うことができますを介して歩いてみましょう.

    Excelを用いたテストのデータフロー


    Excelでデータを読み込むにはExcelを使うのが最も便利です.そうすることによって、膨大な量のデータを扱うとき、我々の仕事は非常に簡単になります.そのためには、ExcelとしてExcelを使用するという目標を達成するために、いくつかの簡単な手順に従う必要があります.

    テストデータシートの作成


    単にプロジェクトディレクトリの下に新しいパッケージを作成し、同じプロジェクトの下に外部ファイルを保存します.私は、私のデータExcelファイル“testdata . xlsx”を保存していますしたがって、以下のようになります.

    次に、Excelファイルを読み取り、Excelの行&列値から2 Dオブジェクトを作成し、同じ値を返します.そのコードは以下のようになります-
    @DataProvider(name ="excel-data")
        public Object[][] excelDP() throws IOException{
                //We are creating an object from the excel sheet data by calling a method that reads data from the excel stored locally in our system
                Object[][] arrObj = getExcelData("Location of the excel file in your local system","Name of the excel sheet where your data is placed");
                return arrObj;
        }
        //This method handles the excel - opens it and reads the data from the respective cells using a for-loop & returns it in the form of a string array
        public String[][] getExcelData(String fileName, String sheetName){
    
                String[][] data = null;     
            try
            {
            FileInputStream fis = new FileInputStream(fileName);
            XSSFWorkbook wb = new XSSFWorkbook(fis);
            XSSFSheet sh = wb.getSheet(sheetName);
            XSSFRow row = sh.getRow(0);
            int noOfRows = sh.getPhysicalNumberOfRows();
            int noOfCols = row.getLastCellNum();
            Cell cell;
            data = new String[noOfRows-1][noOfCols];
            for(int i =1; i<noOfRows;i++){
                 for(int j=0;j<noOfCols;j++){
                       row = sh.getRow(i);
                       cell= row.getCell(j);
                       data[i-1][j] = cell.getStringCellValue();
                   }
            }
            }
            catch (Exception e) {
                   System.out.println("The exception is: " +e.getMessage());
                            }
                return data;
        }
    
    そうすることで、テスト用のデータプロバイダをテストメソッドに渡すことができます.
    package testNG;
    import java.io.FileInputStream;
    import java.io.IOException;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    import org.openqa.selenium.By;
    import org.openqa.selenium.Keys;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.testng.Reporter;
    import org.testng.annotations.AfterMethod;
    import org.testng.annotations.BeforeMethod;
    import org.testng.annotations.DataProvider;
    import org.testng.annotations.Test;
    public class ExcelDataProvider {
    
        WebDriver driver;
        @BeforeMethod
          public void setUp() {
                  System.out.println("Start test");
                  System.setProperty("webdriver.chrome.driver", "E:\\chromedriver.exe");
                  driver = new ChromeDriver();
                  String url = "https://www.google.com";
                  driver.get(url);
                  driver.manage().window().maximize();
    
          }
    
        @DataProvider(name ="excel-data")
        public Object[][] excelDP() throws IOException{
                //We are creating an object from the excel sheet data by calling a method that reads data from the excel stored locally in our system
                Object[][] arrObj = getExcelData("Location of the excel file in your local system","Name
    of the excel sheet where your data is placed");
                return arrObj;
        }
        //This method handles the excel - opens it and reads the data from the respective cells using a for-loop & returns it in the form of a string array
        public String[][] getExcelData(String fileName, String sheetName){
    
                String[][] data = null;     
            try
            {
            FileInputStream fis = new FileInputStream(fileName);
            XSSFWorkbook wb = new XSSFWorkbook(fis);
            XSSFSheet sh = wb.getSheet(sheetName);
            XSSFRow row = sh.getRow(0);
            int noOfRows = sh.getPhysicalNumberOfRows();
            int noOfCols = row.getLastCellNum();
            Cell cell;
            data = new String[noOfRows-1][noOfCols];
    
            for(int i =1; i<noOfRows;i++){
                 for(int j=0;j<noOfCols;j++){
                       row = sh.getRow(i);
                       cell= row.getCell(j);
                       data[i-1][j] = cell.getStringCellValue();
                   }
            }
            }
            catch (Exception e) {
                   System.out.println("The exception is: " +e.getMessage());
                }
                return data;
        }
        @Test(dataProvider ="excel-data")
        public void search(String keyWord1, String keyWord2){
                WebElement txtBox = driver.findElement(By.xpath("//input[@class='gLFyf gsfi']"));
                  txtBox.sendKeys(keyWord1," ",keyWord2);
                  Reporter.log("Keyword entered is : " +keyWord1+ " " +keyWord2);
                  txtBox.sendKeys(Keys.ENTER);
                  Reporter.log("Search results are displayed.");
        }
        @AfterMethod
        public void burnDown(){
                driver.quit();
        }   
    }
    
    このコードを実行すると、次のような結果が表示されます.

    結論


    このチュートリアルでは、Dataprovidersのようなテストパラメータやユーティリティがテストスクリプトの実行を容易にするのを見ました.テストするためにN個のデータの組み合わせを持っているかもしれないとき、TestngのDataproviderは、スクリプト内の任意のテスト値のハードコーディングの面倒なしで使用することができます.Excelファイルのような外部データファイルを同じコードに統合するときに、このtestngパラメータは特に役に立ちます.Testngのデータブックは、セレンテストオートメーションスクリプトの重要な役割を果たしている.上記のコードをすべて実行し、出力をチェックすることをお勧めします.他のtestngパラメータとは異なり、testngのDataProviderが2 D配列を返す点に注意しなければなりません.既存のセレンテストオートメーションスクリプトを最適化したり、新しいスクリプトを作成するために、これらのテストパラメータを活用できます.LambDataestはあなたのすべてを実行するのに役立ちますSelenium test automation 2000 +ブラウザとオペレーティングシステムの組み合わせのためのオンラインセレングリッド上のスクリプト.
    前方に移動し、データのさまざまなセットを持ついくつかのログイン機能を試してみると、すべての独自の単一のDataProviderメソッドに渡され、実行がどのように効率的になります.ハッピーテスト!