11. Управляем параметрами в коде и в Jenkins - qa-guru/knowledge-base GitHub Wiki
Зачастую тесты разрабатываются на локальной машине QA-инженера, но запускаются на удаленном сервере. Бывает, что и тесты запускает вовсе не тестировщик, а разработчик. Поэтому всем участникам команды необходимо дать возможность быстро взаимодействовать с кодовой базой тестов без необходимости погружаться в код, изучать его и вносить в него изменения. В этом поможет понятие системных свойств (System Properties) в Java.
С помощью метода setProperty() можно задавать значения для элементов внутреннего хранилища Java. Значения хранятся по принципу «ключ-значение» и задаются в таком же порядке.
System.setProperty("browser", "safari");
// ключу с именем browser присвоили значение safari
Метод getProperty() позволяет получать значения ключей. В качестве параметра необходимо передать имя ключа.
// Задаем значение
System.setProperty("browser", "safari");
// Записываем значение ключа browser в строковую переменную
String browser = System.getProperty("browser");
// Печатаем в консоль значение переменной
System.out.println(browser); // В консоль выйдет: safari
Помимо этого, можно задать значение по умолчанию. Если никто не задал значение для ключа, то система возьмет дефолтный параметр.
String browser = System.getProperty("browser", "chrome");
Таким образом можно задавать не только браузер, но и другие необходимые параметры тестов.
String browser = System.getProperty("browser", "chrome");
String version = System.getProperty("version", "101");
String windowSize = System.getProperty("windowSize", "1920x1080");
Сперва необходимо добавить в Gradle-файл следующую строчку. Без нее параметры из командной строки не будут передаваться в скрипт сборки.
tasks.withType(Test) {
systemProperties(System.getProperties())
// Скорее всего у вас тут будет что-то еще
...
...
...
}
Запускается сборка в терминале с помощью следующей команды:
gradle clean <testTag>
На месте должен быть тег теста, который задается с помощью аннотации @Tag
:
@Test
@Tag("test1")
void test1() {
...
...
...
}
Параметры в терминале передаются следующим образом (уже используем установленный тег из примера выше):
gradle clean test1 -Dbrowser=opera -Dversion=99 -DwindowSize=400x500
Если выполнить команду, то тест запустится с указанными параметрами.
gradle clean test1
Если не указывать параметры, то тест запустится с дефолтными значениями, которые мы установили выше. Наши дефолтные значения:
- browser: chrome
- version: 101
- windowSize: 1920x1080
Необходимо перейти в настройки сборки Jenkins и найти пункт «Параметризованная сборка». В этом пункте следует выбрать «Добавить параметр».
Далее выбираем «Choice parameter» задаем имя (BROWSER), в вариантах указываем названия (chrome, firefox, opera).
Спускаемся к пункту Tasks и указываем «-Dbrowser=${BROWSER}». Не забываем сохранить изменения.
Теперь, если перейти во вкладку «Собрать с параметрами», которая ранее была просто «Собрать сейчас», то мы увидим возможность выбрать браузер для сборки. Важно помнить, что можно задавать несколько параметров, следуя по шагам алгоритма выше.
Owner позволяет убирать из кода приватные данные и прятать их. В качестве таких данных могут быть пароли, логины, имена пользователей, адреса хостов, ключи и другие параметры.
В Gradle-файл добавляем следующее:
dependencies {
testImplementation(
"org.aeonbits.owner:owner:1.0.12",
)
}
Сначала надо создать и заполнить файл из которого мы будем брать данные. Файл создается по следующему пути:
src -> test -> resources -> config -> credentials.properties
Расширение файла обязательно должно быть .properties
.
Далее в файле указываем все необходимые данные следующим образом:
login=admin
password=admin
Чтобы все это заработало необходимо создать класс CredentialsConfig
в папке config и заполнить его таким образом:
@Config.Sources("classpath:config/credentials.properties")
public interface CredentialsConfig extends Config {
String login();
String password();
}
А в классе теста следует создать экземпляр класса CredentialsConfig
и тогда мы сможем обращаться к данным из Owner-файла.
public class OwnerTests {
CredentialsConfig config = ConfigFactory.create(CredentialsConfig.class);
@Test
@Tag("owner")
void loginTest() {
String login = config.login();
String password = config.password();
}
}
Owner-файл также можно добавить в сборку Jenkins.