Создание собственных настроек#
Работа с настройками Neptune подробно описана в этом разделе.
Данный раздел содержит документацию о том, как создать свой набор настроек.
Как описывается свойство#
package org.my.pack;
import ru.tinkoff.qa.neptune.core.api.properties.PropertyDefaultValue;
import ru.tinkoff.qa.neptune.core.api.properties.PropertyDescription;
import ru.tinkoff.qa.neptune.core.api.properties.PropertyName;
import ru.tinkoff.qa.neptune.core.api.properties.PropertySupplier;
//Название свойства. Рекомендуется давать названия как в примере,
//чтобы можно было использовать в качестве переменной среды.
//Аннотация обязательная!!!!!
@PropertyName("MY_PROPERTY")
//Значение свойства по умолчанию.
// Будет возвращаться значение, прочитанное из этой строки и преобразованное в
// значение типа T при соблюдении следующих условий:
// - значение этого свойства не указано в neptune.properties и neptune.global.properties
// - Результаты System.getenv() и System.getProperties() не содержат свойства
// - окружение тестируемого приложения не содержит имя свойства в качестве ключа
//Аннотация необязательная.
@PropertyDefaultValue("Some default value")
//Аннотация ниже формирует описание свойства / комментарий к нему.
//Аннотация не обязательная (но рекомендуется).
@PropertyDescription(section = "Some logical section", //Название раздела/группы свойств
description = {"Description string 1", //описание,
"Description string 2", //построчно
"Description string 3"})
public class MyProperty implements
PropertySupplier< //нужно реализовать этот интерфейс
T, //тип объекта, в который преобразуется строка,
// прочитанная из значения свойства
R> { // Тип объекта, который может быть
// преобразован в строку-значение.
// Может совпадать с типом выше.
// Не обязательно так делать.
// Просто для быстрого доступа к значению свойства
public static final MyProperty PROPERTY = new MyProperty();
@Override
public String readValuesToSet(R value) {
//тут можно описать алгоритм, к
// ак преобразовать переданный объект в строку-значение свойства
return PropertySupplier.super.readValuesToSet(value);
//или своя реализация
}
@Override
public T parse(String value) {
//тут нужно описать алгоритм,
// как преобразовать строку-значение свойства
return //алгоритм преобразования;
}
@Override
public T returnIfNull() {
//Тут можно описать, какое значение вернуть вместо null.
return PropertySupplier.super.returnIfNull();
//или своя реализация
}
}
Вариант использования
package org.my.pack;
import static org.my.pack.MyProperty.PROPERTY;
public class MyUseCase {
public void useCase() {
//чтение
T value = PROPERTY.get();
R newValue = //инициализация
//Так можно менять значение
//так делать не рекомендуется, просто демонстрация возможностей
PROPERTY.accept(newValue);
//Обнуление свойства
//так делать не рекомендуется, просто демонстрация возможностей
PROPERTY.accept(null);
}
}
Так же можно группировать похожие по смыслу или функциям описания свойств / переменных окружения в перечисления.
package org.my.pack;
import ru.tinkoff.qa.neptune.core.api.properties.PropertyDefaultValue;
import ru.tinkoff.qa.neptune.core.api.properties.PropertyDescription;
import ru.tinkoff.qa.neptune.core.api.properties.PropertyName;
import ru.tinkoff.qa.neptune.core.api.properties.PropertySupplier;
public enum MyPropertyEnum implements PropertySupplier<T, R> {
@PropertyName("MY_PROPERTY_1")
@PropertyDefaultValue("Some default value 1")
@PropertyDescription(section = "Some logical section",
description = {"Description string 1",
"Description string 2",
"Description string 3"}
)
PROPERTY_1,
@PropertyName("MY_PROPERTY_2")
@PropertyDefaultValue("Some default value 2")
@PropertyDescription(section = "Some logical section",
description = {"Description string 4",
"Description string 5",
"Description string 6"}
)
PROPERTY_2;
@Override //при необходимости
public String readValuesToSet(R value) {
return PropertySupplier.super.readValuesToSet(value);
}
@Override
public T parse(String value) {
return //алгоритм преобразования;
}
@Override //при необходимости
public T returnIfNull() {
return PropertySupplier.super.returnIfNull();
}
}