2015-10-12 6 views
0
@DataProvider (name=getData) 
       public static Object[][] getData(){ 
        Excelreader excel = new Excelreader("C:\\WorkspaceExcel\\Datasource.xlsx"); private static 
     String sheetName="SmokeTest"; // Test Data stored in a a table with 
     columns and rows. Ex. UserNmae and password are the columns and data 
     for them in rows private static String tableName="CreatePolicy"; 

     // Some logic to read the data table store the data in a 2 
     dimentional array. 

     // Some logic by which I store the columns as Keys and data for them 
     as values in a HASHTABLE Return the hashtable 
    } 




     @Test (dataProvider="getData") 
     public void testData(Hashtable<String, String> data){ 
     /* Logic to read an .xlsx file which has Snenario name, TestCase Name and its corespnding runflag. If the runflag is true i need to read the scenario name and testcase name from the .xlsx file. */ 

/* I need some logic to pass the ScenarioName (equivalent to Sheetname in DP) and TestCase Name (equivalent to datatable name in DP) which i am getting by reading the excelfile to DataProvider, so i can get the data which i need to execute the test case */ 

/*I am doing the above as part of Hybridframework, where i have Scenario, TC, Test step details in one excel sheet and data for each testcase in one more sheet */ 
     } 

Мой вопрос: Я хочу некоторую логику, поэтому, когда @Test выполняется, я должен динамически передавать данные Путь файла, SheetName, TableName, поэтому один и тот же поставщик данных может использоваться, и это даст мне другой набор данных для работы.Как позвонить DataProvider из моего метода испытаний с параметрами

Примечание: поставщик данных вернется в виде хеш-таблицы для данных, указанных в excel, в табличном формате с именем таблицы. Поэтому, если путь к каталогу, имя листа и имя таблицы передаются в dataprovider, тогда мой DP прочитает эту таблицу и вернет всю таблицу данных в виде хеш-таблицы.

ответ

0

Я предлагаю вам представить параметры через XML, как объяснить Parameters from testng.xml

+0

Мне интересно, как мы можем достичь этого с помощью параметризации XML. Здесь, на листе excel, каждая таблица данных имеет несколько столбцов. Как и в случае с dataprovider, мы должны использовать соответствующее число (здесь его несколько) параметров в методе @Test, чтобы избежать использования хэш-таблицы. Таким образом, исходя из того, сколько параметров передается провайдеру данных, моему методу тестирования не нужно добавлять эти параметры. Мой DP вернет данные, относящиеся к числу столбцов и строк в таблице данных. Но моя единственная проблема заключается в том, как я могу динамически передавать имя листа и имя_базы данных, для которых DP возвращает данные. – user3660045

0

Если вы просто хотите, чтобы иметь возможность повторно использовать сложную логику выборки данных испытаний, то почему бы не просто перенести его на вспомогательную функцию и передать ваши параметры в отдельный поставщиков данных?

public class ReusableDataprovider { 
    @Test(dataProvider = "data_from_table1") 
    public void test1(Hashtable<String, String> data) { 
     Assert.assertEquals(data.get("Username"), "user_table1", "Wrong username"); 
     Assert.assertEquals(data.get("Password"), "pass_table1", "Wrong password"); 
    } 

    @Test(dataProvider = "data_from_table2") 
    public void test2(Hashtable<String, String> data) { 
     Assert.assertEquals(data.get("Username"), "user_table2", "Wrong username"); 
     Assert.assertEquals(data.get("Password"), "pass_table2", "Wrong password"); 
    } 

    @DataProvider 
    protected Object[][] data_from_table1() { 
     return fetchData("file1", "sheet1", "table1"); 
    } 

    @DataProvider 
    protected Object[][] data_from_table2() { 
     return fetchData("file2", "sheet2", "table2"); 
    } 

    protected Object[][] fetchData(String filePath, String sheetName, String tableName) { 

     final Hashtable<String, String> data = new Hashtable<String, String>(); 
     // Do all the complex excel logic here 
     data.put("Username", "user_" + tableName); 
     data.put("Password", "pass_" + tableName); 

     return new Object[][] {{data}}; 
    } 

} 
+0

My Test metheod считывает файл .xlsx с именем TCname, Runflag & it для числа тестовых файлов с флагом yes. для каждого TC ему нужны данные, которые есть в файле .xlsx, и мой DP вернет данные, если я могу динамически передавать имя листа и таблицы. Поскольку мой # TC будет varry, так что я не буду знать, какой DP мне может понадобиться. поэтому мне нужно решение, которое будет использовать тот же DP и предоставить другой набор данных, которые мне нужны для другого тестового случая. – user3660045

+0

Привет, у вас есть много дел? Вы говорите «динамический», но каковы будут их подписи (принятые параметры)? Я не совсем понимаю. Возможно, вы могли бы привести некоторые данные примера. – botchniaque

+0

У меня есть имена тестовых файлов, Scenarionames и его runflag в файле .xlsx, а число равно количеству записей i, сделанных в файле .xlsx, перед выполнением. Поскольку я использую hashtable в качестве параметра в @ Test mathod, и мой DP также возвращает хеш-таблицу, поэтому я не буду беспокоиться о количестве параметров, которые мне нужно передать в моем методе @test, который использует DP. Пожалуйста, обратитесь к методу @ Test в моем вопросе, где я написал, какую операцию я буду делать в этом методе тестирования. – user3660045

0

Вы можете сделать, используя следующий путь:

Подход 1: 1. Создание переменных класса для Path, SheetName, TableName. 2. Инициализация этих переменных с помощью конструктора 3. Прямой вызов этих переменных в функцию поставщика данных.

Подход 2: 1. Путь установки, SheetName, TableName в системном свойстве env с использованием класса System или вы можете использовать инструмент maven, gradle build. 2. Получите эти значения свойств в своем классе поставщика данных, используя метод System getProperty.

+0

Подход 1 звучит хорошо для меня, однако я не понимаю, как я могу это реализовать, было бы здорово, если бы вы могли привести один пример. На самом деле я читаю один файл .xlsx, чтобы получить путь, имя листа и имя табуляции данных (имя TC) и для каждого метода @test, который я хочу вызвать DP с этими параметрами для получения данных. Поэтому, если это возможно, дайте один пример. – user3660045

Смежные вопросы