#java #selenium #testng #data-driven-tests
#Ява #селен #тестирование #тесты, основанные на данных
Вопрос:
Я использую Java selenium в TestNG и Apache POI для чтения в Excel. Метод dataProvider предназначен только для уровня тестов, поэтому тест входа в систему повторяется 2 раза, а затем он переходит к следующему уровню. что я могу сделать, чтобы повторить весь набор для всех регистрационных данных из Excel.
Кроме того, я использую объектную модель страницы, поэтому есть ли какой-либо параметр, который я должен передать в объектном коде страницы?
DataProvider: public class DataProviders { @DataProvider(name = "loginData") public Object[][] getLogindata() throws IOException { Object[][] excelData = ExcelRead.getLoginData(); return excelData; } } TestCase: public class LoginScript extends TestBaseUpdate { Login loginPage_obj = new Login(); @Test(priority = 1 , dataProvider = "loginData",dataProviderClass = DataProviders.class ) public void TestCase_5_login(String[] Data) throws Exception { String testcasename = new Object() {}.getClass().getEnclosingMethod().getName(); try { new Login().VerifyValidUserLogin(Data[0],Data[1]); } catch (Exception e) { } } Excel read: public static Object[][] getLoginData() throws IOException { String fileLocation = ".\TestData\TestDataNav.xlsx"; XSSFWorkbook wbook = new XSSFWorkbook(fileLocation); XSSFSheet sheet = wbook.getSheetAt(0); int lastRowNum = sheet.getLastRowNum(); System.out.println(lastRowNum); int lastCellNum = sheet.getRow(0).getLastCellNum(); System.out.println(lastCellNum); Object[][] data = new String[lastRowNum][lastCellNum]; for (int i = 1; i lt;=lastRowNum; i ) { XSSFRow row = sheet.getRow(i); for (int j = 0; j lt; lastCellNum ; j ) { XSSFCell cell = row.getCell(j); DataFormatter dft = new DataFormatter(); String value = dft.formatCellValue(cell); //String value = cell.getStringCellValue(); System.out.println(value); data[i-1][j] = value; } } wbook.close(); return data; }
Комментарии:
1. вы хотите протестировать вход с несколькими данными или вы хотите выполнить сценарии с несколькими входами, пожалуйста, предоставьте некоторый код
2. У меня есть несколько наборов имени пользователя и пароля, поэтому я провел все тесты в течение этого времени
Ответ №1:
Создайте метод, в котором вы считываете весь тест из Execl и назначаете его списку. Аналогичным образом прочитайте все тестовые данные для каждого теста и назначьте их в другой список. Теперь создайте метод, в котором вы используете поставщика данных с типом возвращаемого значения в качестве объекта[][]. В этом методе создайте цикл for для итерации по списку тестовых наборов. и внутри этого цикла for создайте еще один цикл for, чтобы выполнить итерацию по списку тестовых данных для каждого тестового набора и добавить все тестовые данные для каждого тестового набора в данные объекта [] [].
теперь передайте эти данные объекта[][] в метод, в котором вы используете @Test для начала выполнения каждого тестового набора.
Комментарии:
1. Можете ли вы предоставить пример кода для всего процесса. Так что это могло бы быть более понятным для меня.
2. это была бы целая структура, которую было бы трудно охватить здесь. Но , видя выше свой код, вы запускаете тест при входе в систему. Но я просто часть всего твоего теста, а не всего теста. во-первых, вы используете BDD, или платформу, управляемую данными, или платформу, управляемую ключевыми словами. Скажите, что вы хотите войти на домашнюю страницу goto, перейдите на страницу abc и выйдите из системы. в таком случае напишите метод для входа в систему, перейдите на домашнюю страницу другим способом, перейдите на страницу abc другим способом и выйдите из системы и другим способом. теперь создайте лист excel /xml на случай, если вы захотите использовать данные или ключевые слова.
3. и назначьте каждому тестовому набору идентификатор и назначьте ему данные в Excel. создайте метод для с именем,совпадающим с вашим идентификатором тестового набора, и вызовите все эти методы входа, перехода и т. Д. В соответствии с вашим шагом. вам нужно повторить то же самое для всех остальных тестов. теперь выполните итерацию в ur excel и, когда идентификатор tc совпадет, вызовите соответствующий метод tc case. вам нужно передать идентификатор tc и его данные поставщику данных.
4. если вы используете BDD , то это довольно просто, получите сценарии через поставщика данных. в каждом сценарии для каждого оператора вам нужно написать определение шага