2017-11-02 12 views
1

Webアプリケーションに複数回データを挿入する必要があります。私はデータ駆動型フレームワークと一緒にtestNGでセレンを使用しています。複数のtestNGテストでcsvデータを1つずつ読み込んで渡す方法

私は入力値を読み込むためにCSVファイルを使用しています。

下記のサンプルコードをご覧ください。ここで

public class TestData 
{ 
private static String firstName; 

public static String lastName; 

@BeforeClass 
public void beforeClass() throws IOException 
{ 

    reader = new CSVReader(new FileReader(fileName)); 

    while((record = reader.readNext()) != null) 
    { 
     firstName = record[0]; 
     lastName = record[1]; 
    } 

    } 

@Test 
public void test1() 
{ 
    driver.findElement(By.id(id)).sendKeys(firstName); 

    driver.findElement(By.id(id)).click(); 

    and so on.... 

} 

@Test 
public void test2() 
{ 
    driver.findElement(By.id(id)).sendKeys(lastName); 

    driver.findElement(By.id(id)).click(); 

    and so on.... 
} 

} 

は、私は3つのレコードを挿入する必要がありますが、私は上記のコードを使用する場合、唯一の第三のレコードが挿入されます。

この問題を解決するのを手伝ってください。あなたがここに必要なもの

サンプル入力ファイル

+1

'beforeClass'は、ファイル内のすべての行を読み込んだ後に返します(ループはこれを行います)。したがって、常に最後のデータ行しか持たないでしょう。 CSVデータを配列に保存し、各テストでインデックスにアクセスすることができます。 –

答えて

0

DataProviderによって供給Factoryです。 Factoryは、テストクラスインスタンスを生成します(テストクラスは、基本的に、1つ以上の@Testメソッドが格納された通常のクラスです)。データプロバイダは、基本的に、ファクトリメソッドにテストクラスをインスタンス化するために必要なデータを供給します。

今では、@Testメソッドは、ロジックを実行するために、インスタンス内のデータメンバーと基本的に動作します。

これは実例を示す簡単なサンプルです。

import org.assertj.core.api.Assertions; 
import org.testng.annotations.DataProvider; 
import org.testng.annotations.Factory; 
import org.testng.annotations.Test; 

public class TestClassSample { 
    private String firstName; 
    private String lastName; 

    @Factory(dataProvider = "dp") 
    public TestClassSample(String firstName, String lastName) { 
     this.firstName = firstName; 
     this.lastName = lastName; 
    } 

    @DataProvider(name = "dp") 
    public static Object[][] getData() { 
     //feel free to replace this with the logic that reads up a csv file (using CSVReader) 
     // and then translates it to a 2D array. 
     return new Object[][]{ 
       {"Mohan", "Kumar"}, 
       {"Kane", "Williams"}, 
       {"Mark", "Henry"} 
     }; 
    } 

    @Test 
    public void test1() { 
     Assertions.assertThat(this.firstName).isNotEmpty(); 
    } 

    @Test 
    public void test2() { 
     Assertions.assertThat(this.lastName).isNotEmpty(); 
    } 
} 
0

あなたから与えられたデータに従って、whileループはCSVファイルの3番目のレコードで終了します。各反復で、変数 "firstName"と "lastName"が上書きされます。

ループが壊れると、変数には最後に書き込まれた値が格納されます。したがって、すべての値を格納するためのより良いデータ構造を使用してください。私は地図をお勧めします。

あなたはマップから各エントリの実行を繰り返す@Testアノテーションのinvocationcount属性を使用して、単一の方法ですべてのテストケースクラブを進めることができます。マップ内の次のキーセットにインクリメントするために、@BeforeTestでもう1つのメソッドを追加します。

関連する問題