Всем привет. Есть некий набор smoke тестов, и есть 2 или более окружений на которых необходимо прогонять данные тесты. Проблема в том, что на одном окружении нужно прогонять все тесты из данного набора smoke тестов, а на другом только часть, остальные игнорировать. Как бы такое реализовать. Может быть у кого то был опыт? Заранее благодарен за ответы
TestNG suites.
Сделайте 2 разных конфига testng и запускайте необходимый конфиг на соотвествующем окружении.
НУ или если не TestNG, можно проставить мета теги и управлять тегами на уровне CI
А можно подробнее ? Если вас конечно не затруднит
Не знаю какой у вас подход, опишу на своём примере.
У JBehave и TestNg точно есть какие-то теги или группы по которым можно группировать кейсы.
Можно припустим сделать 2 параметризированые джобы в том же дженкинсе ну или даже одну продублировать или как будет угодно сердцу, может сделать целый пайплайн из джоб.
Но припустим у нас 2 отдельные джобы. Первая джоба будет выпонятся с первым набором конфигов ( StageEnvSmoke.properties) которая при выборе определенных пропертей будет сама подставлять нужную группу для запуска ( но если нет опыта легче самому группу выбирать). И точно такой же второй джоб только с другими проперти файлом и другими тегами. Ну или просто захардкодить что первая джоба отвечает только за stageEnv проперти и Smoke группу, а вторая за другую пропертю и другую группу…
Итого : 2 джобы
у каждой джобы есть дропдаун для выбора проперти файла ( проперти нашего енва)
и поле где прописаны какие группы будут запускаться ( припустим в 1 джобе stageSmoke в другой группе testSmoke)
Как это все реализовать? Это в документацию по дженкинсу
А що використовується для білда проекта Maven, Gradle?
Використовуємо Maven і робимо наступне:
- є набір профілів, які відповідають за конфігурацію, приклад Chrome, IE, Firefox;
- є декілька планів і вони налаштовані так, що кожен трігерить свій профіль, приклад
mvn clean test -P chrome,smoke
- в pom.xml файлі є кусок кода що відповідає за ігнор тої чи іншої групи привязаної до ім"я браузера
<profile>
<id>chrome</id>
<properties>
<browser>chrome</browser>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${surefire.plugin.version}</version>
<configuration>
<excludedGroups>${excludeGroups},${browser}.specific,${browser}.bug</excludedGroups>
<systemPropertyVariables>
<browser>${browser}</browser>
</systemPropertyVariables>
</configuration>
</plugin>
</plugins>
</build>
</profile>
- і в тестах на рівні класу є анотація Test з набором груп що не підтримуються
@Test(groups = {SAFARI_SPECIFIC, IE_SPECIFIC})
public class SomeTestClass extends TestBase {
// Test body
}
- код дефолтових груп виглядає приблизно так (там є частини які вичитуються з
public class BrowserGroup {
public static final String CHROME_SPECIFIC = "chrome.specific";
public static final String FIREFOX_SPECIFIC = "firefox.specific";
public static final String SAFARI_SPECIFIC = "safari.specific";
public static final String IE_SPECIFIC = "ie.specific";
}
В вашому випадку це можна використати для менеджмента тестів, тобто мати групи і навішувати на відповідні тести чи ігнорити їх для певного профілю.
Єдине що, коли тестів багато і потрібно робити глобальний рефакторинг - a bit pain)
Всем спасибо за ответы.
А не было ни у кого опыта работы с библиотекой owner? http://owner.aeonbits.org хотелось бы послушать мнение, заранее благодарен за ответы
Отличная библиотека - рекомендую
Спасибо за ответ, у вас был опыт подключения данной библиотеки к Selenium, Selenide?
Не использую Selenide, но ее легко подключить практически в любой проект.
К сожалению, как раз Selenide не так просто скрестить с Owner. Были обсуждения в slack, и вроде бы даже есть pull от пользователя. Но пока ничего не слышно, из коробки там не все так просто. Не было опыта к примеру owner с rest assured, в данный момент для меня актуально.
Может в кто в курсе в Junit5 есть альтернатива конфигам?
чтобы в гредле прописывать тасками путь в файлам с параметрами перед запуском?
UPD нагуглил вооркераунд, но вопрос открытый
task generateSources(type: Copy) {
from 'src/replaceme/java'
into "$buildDir/generated-src"
filter(ReplaceTokens, tokens: [
'xxx': 'aaa',
'yyy': 'bbb'
])
}