Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Прогон smoke тестов на разных окружениях

gradle
maven
selenium
webdriver
testng
java
Теги: #<Tag:0x00007f7b63d2ef98> #<Tag:0x00007f7b63d2ee58> #<Tag:0x00007f7b63d2ecf0> #<Tag:0x00007f7b63d2ebb0> #<Tag:0x00007f7b63d2ea70> #<Tag:0x00007f7b63d2e930>

(Vaskocuturilo) #1

Всем привет. Есть некий набор smoke тестов, и есть 2 или более окружений на которых необходимо прогонять данные тесты. Проблема в том, что на одном окружении нужно прогонять все тесты из данного набора smoke тестов, а на другом только часть, остальные игнорировать. Как бы такое реализовать. Может быть у кого то был опыт? Заранее благодарен за ответы


(Fiodar Motin) #2

TestNG suites.

Сделайте 2 разных конфига testng и запускайте необходимый конфиг на соотвествующем окружении.


#3

НУ или если не TestNG, можно проставить мета теги и управлять тегами на уровне CI


(Vaskocuturilo) #5

А можно подробнее ? Если вас конечно не затруднит


#6

Не знаю какой у вас подход, опишу на своём примере.
У JBehave и TestNg точно есть какие-то теги или группы по которым можно группировать кейсы.
Можно припустим сделать 2 параметризированые джобы в том же дженкинсе ну или даже одну продублировать или как будет угодно сердцу, может сделать целый пайплайн из джоб.
Но припустим у нас 2 отдельные джобы. Первая джоба будет выпонятся с первым набором конфигов ( StageEnvSmoke.properties) которая при выборе определенных пропертей будет сама подставлять нужную группу для запуска ( но если нет опыта легче самому группу выбирать). И точно такой же второй джоб только с другими проперти файлом и другими тегами. Ну или просто захардкодить что первая джоба отвечает только за stageEnv проперти и Smoke группу, а вторая за другую пропертю и другую группу…

Итого : 2 джобы
у каждой джобы есть дропдаун для выбора проперти файла ( проперти нашего енва)
и поле где прописаны какие группы будут запускаться ( припустим в 1 джобе stageSmoke в другой группе testSmoke)

Как это все реализовать? Это в документацию по дженкинсу


#7

если я не ошибаюсь, это должно помочь: http://testng.org/doc/documentation-main.html#test-groups


(Павел) #8

А що використовується для білда проекта 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)


(Vaskocuturilo) #9

Всем спасибо за ответы.
А не было ни у кого опыта работы с библиотекой owner? http://owner.aeonbits.org хотелось бы послушать мнение, заранее благодарен за ответы


(Рома Иваницкий) #10

Отличная библиотека - рекомендую


(Vaskocuturilo) #11

Спасибо за ответ, у вас был опыт подключения данной библиотеки к Selenium, Selenide?


(Рома Иваницкий) #12

Не использую Selenide, но ее легко подключить практически в любой проект.


(Vaskocuturilo) #13

К сожалению, как раз Selenide не так просто скрестить с Owner. Были обсуждения в slack, и вроде бы даже есть pull от пользователя. Но пока ничего не слышно, из коробки там не все так просто. Не было опыта к примеру owner с rest assured, в данный момент для меня актуально.


(Vatslau) #14

Может в кто в курсе в Junit5 есть альтернатива конфигам?
чтобы в гредле прописывать тасками путь в файлам с параметрами перед запуском?

UPD нагуглил вооркераунд, но вопрос открытый

task generateSources(type: Copy) {
    from 'src/replaceme/java'
    into "$buildDir/generated-src"
    filter(ReplaceTokens, tokens: [
        'xxx': 'aaa', 
        'yyy': 'bbb'
    ])
}