Использование параметров из pom.xml для переключения сред для тестов селена + использование аргументов командной строки mvn

Моя цель: использовать параметры для переключения сред в моих тестах, например:

mvn test google -> Тесты отправляются на сайт Google

mvn test bing -> сайт Bing

«Мне нужно передать моим тестам, какая среда является целью, и она должна исходить из pom.xml и использовать их в качестве аргументов».

Это было бы очень полезно для интеграции teamcity/jenkins. Кроме того, мне нужно использовать URL-адрес в качестве переменных в моих тестах. Как я могу это сделать?

Профили могут быть решением в pom.xml?

<profiles>
    <profile>
        <id>google</id>
        <properties>
            <base.url>http://www.google.com</base.url>
        </properties>
    </profile>
    <profile>
        <id>bing</id>
        <properties>
            <base.url>http://www.bing.com</base.url>
        </properties>
    </profile>
</profiles>

Из раздела сборки:

<configuration>
   <systemProperties>
       <base.url>${base.url}</base.url>
   </systemProperties>
</configuration>

Но как я могу использовать свойства системы, и в целом подход хорош? Спасибо!


person brobee    schedule 08.01.2018    source источник
comment
Плохой дизайн, Maven просто создаст и даст код для автоматизации тестирования. Но так как ваш тест является общим для всей среды. это будет сложно для выполнения, и потребуется больше развязки. Вместо этого просто создайте файл шаблона, который будет обновляться в зависимости от параметров, переданных через maven в качестве целей.   -  person Sam    schedule 09.01.2018
comment
Используете ли вы какой-либо фреймворк для тестирования? jUnit? ТестНГ? Или, возможно, вы используете Spring или Cucumber?   -  person Eugene S    schedule 09.01.2018
comment
Огурец, юнит и чистая джава. Мои тесты являются общими для всех сред, отличается только URL-адрес. Вот почему я хотел бы найти хорошее решение для переключения между средами (URL). Моя текущая реализация: URL-адреса поступают из файлов конфигурации, но они жестко закодированы. mvn test clean google должно быть проще...   -  person brobee    schedule 09.01.2018


Ответы (1)


Вы можете настроить maven-surefire-plugin так, чтобы он включал только определенные тестовые классы и запуск mvn test. По по умолчанию mvn будет запускать все эти :

  • «**/Test*.java» — включает все его подкаталоги и все имена файлов Java, начинающиеся с «Test».
  • «**/*Test.java» — включает все его подкаталоги и все имена файлов Java, оканчивающиеся на «Test».
  • «**/*Tests.java» — включает все его подкаталоги и все имена файлов Java, которые заканчиваются на «Tests».
  • «**/*TestCase.java» — включает все его подкаталоги и все имена файлов Java, которые заканчиваются на «TestCase».

но вы можете указать тесты, которые хотите включить, следующим образом:

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.20.1</version>
        <configuration>
          <includes>
            <include>Sample.java</include>
          </includes>
        </configuration>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

или исключить:

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.20.1</version>
        <configuration>
          <excludes>
            <exclude>**/TestCircle.java</exclude>
            <exclude>**/TestSquare.java</exclude>
          </excludes>
        </configuration>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

Сказав это, это, вероятно, не лучший дизайн, и, как правило, вы должны использовать некоторую среду тестирования, которую вы затем можете настроить в соответствии со своими потребностями. Несколько примеров (или их комбинация): jUnit, TestNG, Cucumber, Spring.

Например, в Cucumber у вас могут быть теги, которые затем можно настроить как часть выполнения теста. Если вы используете Jenkins, у вас может быть что-то вроде этого в вашем поле сборки:

clean install -Dcucumber.options="--tags @Google

or

clean install -Dcucumber.options="--tags @Bing

В Spring у вас могут быть профили, которые вы можете запускать как задание Jenkins следующим образом:

mvn clean test -Dspring.profiles.active="google"

ИЗМЕНИТЬ

В качестве альтернативы вы можете определить пользовательское свойство в своем pom следующим образом:

<properties>
   <myProperty>command line argument</myProperty>
</properties>

А затем передайте его из командной строки следующим образом:

mvn install "-DmyProperty=google"

ИЗМЕНИТЬ2

Предоставление значения с префиксом -D в командной строке — это способ установки системного свойства. Вы можете выполнить это действие из самого кода Java следующим образом:

Properties props = System.getProperties();
props.setProperty("myPropety", "google");

или просто:

System.setProperty("myPropety", "google");
person Eugene S    schedule 09.01.2018
comment
Евгений, спасибо за ответ. К сожалению, огурец.options не является хорошим решением здесь, потому что он может управлять сценариями в файлах функций, и я использую этот подход. Здесь мне нужно передать мои тесты, какая среда является целью, и она должна исходить из pom.xml с использованием аргументов. Профили можно использовать с чистой java вместо весны? - person brobee; 09.01.2018
comment
Спасибо Евгений! Есть ли способ использовать это свойство как переменную в коде Java? Это означает, что, как вы можете видеть в моем примере, google — это идентификатор, и я хочу использовать base.url (www.google.com) в своем коде. Насколько я знаю, системная поддержка не работает, требуется дополнительная зависимость от maven. Спасибо! - person brobee; 17.01.2018
comment
@brobee Это помогает? - person Eugene S; 19.01.2018
comment
Да спасибо! - person brobee; 25.01.2018