Со временем вы можете столкнуться с необходимостью использования данных, полученных в одном тесте, в другом тесте или же с необходимостью получения данных в начале прогона и использования их в конце. Для хранения таких данных можно использовать различные подходы в зависимости от специфики вашего проекта и требований к тестам.
Если вам не понятна структура проекта, то советую сначала ознакомиться с предыдущими статьями, например:
Как можно передать переменную в другой тест
Давайте представим в рамках теста, что с веба мы берём какое то наименование.
Для данного локатора создадим нужную переменную
В итоге в тесте получим данное наименование
//Результат - Developer Tools
А если нам понадобится этот параметр в другом тесте? Давайте сделаем его общим. Заодно напишем второй тест, в котором попробуем вывести этот параметр в консоль.
Также установим последовательность запуска тестов "@Order"
- Запустим сначала 2 теста в одном прогоне. Во втором тесте результат будет - null
- Запустим по отдельности 2 теста . Во втором тесте результат будет - null
- Установим static для переменной. Запустим 2 теста в одном прогоне. Во втором тесте результат будет - Developer Tools
Мы достигли нужного результата, но этот способ не слишком удобен. Если тесты находятся в разных классах или запускаются в разных прогонах, то этот вариант не подойдёт.
Кроме того, если у вас будет много тестов с таким функционалом, придётся создавать множество статических параметров. Поэтому такой подход нам не подходит!
Файл с переменными
Было бы гораздо удобнее записывать нужные переменные и при необходимости использовать, не завися от прогона или тестовых классов.
И такой способ есть - это Properties. У нас есть специальный блок, где мы можем хранить какие либо переменные в специальном файле.
Создадим файл с нужной аннотацией my.properties. Название можете дать любое, я назвал my.
Для Записи из данного файла нам нужно использовать следующую структуру
FileInputStream in = new FileInputStream("src/test/resources/my.properties");
Properties props = new Properties();
props.load(in);
in.close();
FileOutputStream out = new FileOutputStream("src/test/resources/my.properties");
props.setProperty("Название переменной", "Переменная");
props.store(out, null);
out.close();
Импортируем нужные библиотеки. Выставляем исключение
import java.util.Properties;
"src/test/resources/my.properties" - это путь до нашего файла, он может быть у вас другой.
Теперь мы можем использовать методы от этой библиотеки на запись и чтение
props.setProperty("Название переменной", "Переменная"); - Замена
props.getProperty("Название переменной"); - чтение
Давайте используем эти знания в наших тестах.
Но это выглядит слишком громоздко, нам приходится каждый раз заново создавать Properties. Давайте автоматизируем этот процесс!
Для начала вынесем Properties в абстрактный класс, чтобы она была доступна во всех тестах.
Теперь для чтения достаточно прописать следующее
Для записи создадим отдельный метод
В тесте запись в Properties будет выглядеть следующим образом
Таким образом мы научились использовать переменные и записывать их в отдельный файл, откуда можем использовать в любое время!
Для чтения переменной примерно такой же синтаксис, напишем сразу метод:
В тесте это будет выглядеть следующим образом
Со всеми данными методами вы можете ознакомиться и загрузить себе на GitHub
Если у вас есть вопросы или вы просто хотите стать частью команды тестировщиков, то переходи в ТГ канал, где можем пообщаться с единомышленниками и найти много интересных и полезных знаний!Также если вам нужна индивидуальная консультация, менторство и помощь в создании проекта пишите в ТГ канал!