В этой статье мы рассмотрим структуру проекта Selenium, создание тестовых данных и доступ к ним через файл Excel.
Подпишитесь на наш ТЕЛЕГРАМ КАНАЛ ПО АВТОМАТИЗАЦИИ ТЕСТИРОВАНИЯ
Содержание:
Структура папок проекта Selenium
Давайте начнем с описания структуры проекта, которая позволяет разделить различные компоненты проекта:
1. src – Папка содержит различные тестовые скрипты, дженерики (generics), и утилиты. Все эти ресурсы – не что иное, как простые java-классы. В папке src мы создаем иерархию следующих папок:
a) test – Папка “test” содержит две основные вещи: наборы тестов и папки, представляющие разные части приложения, которые мы тестируем. Каждая из этих папок содержит тестовые сценарии, которые относятся к соответствующей части приложения. Набор тестов – это как логическое объединение нескольких тестовых сценариев.
б) utilities – Папка “утилиты” состоит из различных дженериков, констант. Каждая из папок в разделе “утилиты” имеет свое назначение:
- Excel Reader – Класс для чтения тестовых данных из файлов Excel.
- EnvironmentConstants – В этой папке хранятся Java-классы, в которых содержатся статические переменные с ссылками на различные пути, например, URL приложения, URL к базам данных, учетные данные для доступа к базам данных и ссылки на сторонние инструменты.
- DataSetters – Папка содержит классы, реализующие геттеры и сеттеры для тестовых данных, получаемых из файлов Excel. Для загрузки нескольких наборов тестовых данных мы создаем ArrayLists.
- UserRoles – В этой папке находятся классы, которые управляют критериями доступа на основе ролей для пользователей, если такие имеются.
- FunctionLibrary – Папка состоит из классов, содержащих методы, которые могут быть использованы несколькими классами. Очень часто мы должны выполнять практически в каждом тесте определенные операции, такие как вход в систему, установка окружения, манипуляции с данными, запись результатов. Поскольку мы выполняем эти действия многократно, то рекомендуется создавать отдельный класс для таких действий вместо того, чтобы дублировать их во всех тестовых сценариях.
2. excel files – Эти файлы считаются источником данных для выполнения тестовых сценариев. В них хранятся тестовые данные в виде пар ключ-значение. Обратите внимание, что для каждого тестового сценария мы создаем отдельный лист Excel, т.е. каждый тестовый сценарий имеет свой собственный файл с тестовыми данными. Ниже приведен пример формата тестовых данных:
Каждый из столбцов представляет собой ключ, а каждая строка – тестовые данные (то есть, значение).
3. library – Папка действует как хранилище для всех необходимых jar-файлов, библиотек, драйверов и т.д. для успешного создания тестовой среды и выполнения тестовых сценариев. На следующем рисунке показаны библиотеки, которые мы будем использовать в нашем проекте:
4. logs – Папка содержит файл .txt, в котором хранится информация о логах.
5. test material – Папка содержит фактические тестовые данные для проведения тестирования.
6. build.xml – Этот файл xml используется для автоматизации процесса сборки.
7. log4j.xml – Этот xml-файл используется Java-утилитой под названием “Log4j” для создания логов .
Создание тестовых данных
Теперь давайте разберемся, как мы получаем доступ к файлам excel и загружаем данные в тестовые сценарии.
Чтобы легче понять этот процесс, мы разделим его на шаги:
Шаг 1: Первым и самым важным шагом является создание тестовых данных, с помощью которых мы будем выполнять тестовые сценарии. Сперва мы создадим файл Excel под названием “TestScript1” и введем нужные нам данные.
Шаг 2: Следующим шагом будет загрузка библиотеки Java excel Library (jxl), чтобы иметь доступ к уже созданным методам для работы с Excel.
Шаг 3: Далее мы создаем класс ExcelReader.java для чтения данных из Excel:
package Utilities; import java.io.File; import java.io.IOException; import java.util.Hashtable; import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.BiffException; /** * This is a utility class created to read the excel test data file before performing the test steps. * This class loads the excel file and * reads its column entries. * */ public class ExcelReader { /** * The worksheet to read in Excel file */ public static Sheet wrksheet; /** * The Excel file to read */ public static Workbook wrkbook = null; /** * Store the column data */ public static Hashtable<String, Integer> dict = new Hashtable<String, Integer>(); /** * Create a Constructor * * @param ExcelSheetPath * @throws BiffException * @throws WeblivException */ public ExcelReader(String ExcelSheetPath) throws IOException, BiffException { // Initialize try { wrkbook = Workbook.getWorkbook(new File(ExcelSheetPath)); wrksheet = wrkbook.getSheet("Sheet1"); } catch (IOException e) { throw new IOException(); } } /** * Returns the Number of Rows * * @return Rows */ public static int RowCount() { return wrksheet.getRows(); } /** * Returns the Cell value by taking row and Column values as argument * * @param column * @param row * @return Cell contents */ public static String ReadCell(int column, int row) { return wrksheet.getCell(column, row).getContents(); } /** * Create Column Dictionary to hold all the Column Names */ public static void ColumnDictionary() { // Iterate through all the columns in the Excel sheet and store the // value in Hashtable for (int col = 0; col < wrksheet.getColumns(); col++) { dict.put(ReadCell(col, 0), col); } } /** * Read Column Names * * @param colName * @return value */ public static int GetCell(String colName) { try { int value; value = ((Integer) dict.get(colName)).intValue(); return value; } catch (NullPointerException e) { return (0); } } }
Шаг 4: Создаем класс CommonMethods.java и метод, который будет считывать ячейки из файла Excel, используя методы, реализованные в ExcelReader.java.
/** * Read the test data from excel file * * @param data The TestData data object */ public void readExcelData (TestData data) { ArrayList<String> browser = new ArrayList<String>(); ArrayList<String> username = new ArrayList<String>(); ArrayList<String> password = new ArrayList<String>(); ArrayList<String> element1 = new ArrayList<String>(); ArrayList<String> element2 = new ArrayList<String>(); ArrayList<String> element3 = new ArrayList<String>(); // Get the data from excel file for (int rowCnt = 1; rowCnt < ExcelReader.RowCount(); rowCnt++) { browser.add(ExcelReader.ReadCell(ExcelReader.GetCell("Browser"), rowCnt)); username.add(ExcelReader.ReadCell(ExcelReader.GetCell("User ID"), rowCnt)); password.add(ExcelReader.ReadCell(ExcelReader.GetCell("Password"), rowCnt)); element1.add(ExcelReader.ReadCell(ExcelReader.GetCell("Element1"), rowCnt)); element2.add(ExcelReader.ReadCell(ExcelReader.GetCell("Element2"), rowCnt)); element3.add(ExcelReader.ReadCell(ExcelReader.GetCell("Element3"), rowCnt)); } data.setBrowser(browser); data.setLoginUser(username); data.setPassword(password); data.setElement1(element1); data.setElement2(element2); data.setElement3(element3); }
Шаг 5: Создаем новый java-класс TestData.java. Этот класс будет выполнять функции геттеров и сеттеров для данных из Excel:
package Utilities.dataSetters; import java.util.ArrayList; public class TestData { private ArrayList<String> loginUser = null; private ArrayList<String> password = null; private ArrayList<String> browser = null; private ArrayList<String> element1 = null; private ArrayList<String> element2 = null; private ArrayList<String> element3 = null; /** * @return loginUser */ public ArrayList<String> getLoginUser() { return loginUser; } /** * @param loginUser */ public void setLoginUser(ArrayList<String> loginUser) { this.loginUser = loginUser; } /** * @return password */ public ArrayList<String> getPassword() { return password; } /** * @param password */ public void setPassword(ArrayList<String> password) { this.password = password; } /** * @return browser */ public ArrayList<String> getBrowser() { return browser; } /** * @param browser */ public void setBrowser(ArrayList<String> browser) { this.browser = browser; } /** * @return element1 */ public ArrayList<String> getElement1() { return element1; } /** * @param element1 */ public void setElement1(ArrayList<String> element1) { this.element1 = element1; } /** * @return element2 */ public ArrayList<String> getElement2() { return element2; } /** * @param element2 */ public void setElement2(ArrayList<String> element2) { this.element2 = element2; } /** * @return element3 */ public ArrayList<String> getElement3() { return element3; } /** * @param element3 */ public void setElement3(ArrayList<String> element3) { this.element3 = element3; } }
Шаг 6: Следующим шагом будет создание экземпляров классов TestData.java и CommonMethods.java для доступа к тестовым данным. Ниже приведен фрагмент кода для инициализации объекта, чтения данных из файла Excel и заполнения значений там, где это необходимо:
// Create Objects public ExcelReader excelReaderObj; CommonMethods commonMethodobj = new CommonMethods(); TestData td = new TestData(); // Load the excel file for testing excelReaderObj = new ExcelReader(Path of the excel); // Load the Excel Sheet Col in to Dictionary for use in test cases excelReaderObj.ColumnDictionary(); // Get the data from excel file commonMethodobj.readExcelData (td); // Populate the username driver.findElement(By.id("idofElement")).sendKeys(data.getLoginUser().get(0));
Заключение:
В этой статье мы рассказали о структуре проекта Selenium и о том, как получить доступ к тестовым данным из файла Excel.
Чтобы получить доступ к тестовым данным, хранящимся во внешнем источнике данных, мы использовали Java Excel API – jxl. Также мы разработали образец кода, который демонстрирует, как читать данные из Excel и вставлять их в тестовые сценарии.
Перевод статьи «Selenium Framework Creation and Accessing Test Data from Excel – Selenium Tutorial #21».