Параметризация тестов или DDT подход
Собственно и так понятно,что при тестировании только одними или захардкоженными данными многого мы не добьемся, а значит нужно содержать наборы тестовых данных и использовать их в тестах и лучше всего их держать отдельно от самих тестов.
Здесь я приведу 2 примера хранения и использования данных с внешних источников,это будут 2 формата файлов-Excel и XML.
XML
Пример с сериализацией и немного инфы по ней(вдруг кто не в курсе)
Сериализация - процесс перевода какой-либо структуры данных в последовательность битов. Обратной к операции сериализации является операция десериализации — восстановление начального состояния структуры данных из битовой последовательности.
Пусть у нас есть простой класс который хранит логин и пароль пользователя:
public class User{ String login = "name"; String password = "pass"; }
Используя библиотеку Xstream(не обязательно ее,но мне она показалась самой легковесной)
User infoUser= new User(); System.out.println(new XStream().toXml(infoUser));Получим:
сохранив эту информацию в xml файл мы можем восстановить объект оттуда.name pass
User infoUser2= (User) new XStream().fromXml(new FileInputStream("file.xml"));
Таким образом мы можем однажды описать структуру с данными и хранить ее во внешнем файле, при необходимости менять эти данные и при десериализации они будут подтягиваться в ваш код, необходимость менять сам код отпадает.
Excel
Будем использовать библиотеку Java Excel APIСамому лень стало создавать подходящий Excel файл,поэтому я его нашел)
Функция этой библиотеки принимает 3 параметра:
1. xlFilePath - Путь к xls файлу
2. sheetName- Имя вашего sheet(На примере DataPool)3. tableName- И имя таблички из которой будет проводиться выборка.
private static String[][] getTableArray(String xlsFilePath, String sheetName, String tableName) throws BiffException, IOException { String[][] tabArray = null; Workbook workbook = Workbook.getWorkbook(new File(xlsFilePath)); Sheet sheet = workbook.getSheet(sheetName); int startRow, startCol, endRow, endCol, ci, cj; Cell tableStart = sheet.findCell(tableName); startRow = tableStart.getRow(); startCol = tableStart.getColumn(); Cell tableEnd = sheet.findCell(tableName, startCol + 1, startRow + 1, 100, 64000, false); endRow = tableEnd.getRow(); endCol = tableEnd.getColumn(); tabArray = new String[endRow - startRow - 1][endCol - startCol - 1]; ci = 0; for (int i = startRow + 1; i < endRow; i++, ci++) { cj = 0; for (int j = startCol + 1; j < endCol; j++, cj++) { tabArray[ci][cj] = sheet.getCell(j, i).getContents(); } } return (tabArray); }А использовать уж как удобно.Просто как пример:
@DataProvider(name = "DP1") public Object[][] createData1() throws Exception{ Object[][] retObjArr=getTableArray("data.xls", "DataPool", "imdbTestData1"); return(retObjArr); } @Test (dataProvider = "DP1") public void testDataProviderExample(String ID, String Name, String City) throws Exception { //Что-нибудь делаем с ними тут }
Вот и все,всем спасибо.