Как правильно создать проект с тестами в Intellij idea с использованием maven, java, selenium, testng

intellij
maven
selenium
testng
java
webdriver
Теги: #<Tag:0x00007fedb7651e20> #<Tag:0x00007fedb7651ce0> #<Tag:0x00007fedb7651ba0> #<Tag:0x00007fedb7651a60> #<Tag:0x00007fedb7651920> #<Tag:0x00007fedb76517e0>

(Юлия Химий) #1

Как правильно создать проект с тестами? В результате хочется получить исполняемый файл по итогам выполнения которого сформируется отчёт в котором будит видно какие тесты выполнились какие упали и т.д. также файл в котором будут задаваться приоритеты выполнения тестов, добавляться/убираться тесты.
Создан java project в Intellij idea с использованием maven, selenium и testng.
Проект имеет структуру:

Мой POM

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>1</groupId>
    <artifactId>11</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <build>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.0.2</version>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.11</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/postgresql/postgresql -->
        <dependency>
            <groupId>postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.1-901.jdbc4</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.4.0</version>
        </dependency>
    </dependencies>
</project>

Что я делаю не правильно и как правильно? Перечитав множество информации я поняла что это весьма актуально не только для меня. Спасибо.


(Максим Таран) #2

@Yuliya_Himij
А что не так? Пока, выглядит всё правильно. Обычный мавен проект.


(Юлия Химий) #3

На текущий момент при запуске .jar файла получаю ошибку:
“C:\Program Files (x86)\Java\jdk1.8.0_121\bin\java” -Dfile.encoding=windows-1251 -jar “D:\Autotests\page factory\target\11-1.0-SNAPSHOT.jar”
no main manifest attribute, in D:\Autotests\page factory\target\11-1.0-SNAPSHOT.jar

Process finished with exit code 1


#4

Во 1 исполняемый фалй никто не делает из тестов.
Во 2 в мавен джар плагине нужно укзать путь к меин класу

<build>
  <plugins>
    <plugin>
      <!-- Build an executable JAR -->
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <version>3.0.2</version>
      <configuration>
        <archive>
          <manifest>
            <addClasspath>true</addClasspath>
            <classpathPrefix>lib/</classpathPrefix>
            <mainClass>com.mypackage.MyClass</mainClass>
          </manifest>
        </archive>
      </configuration>
    </plugin>
  </plugins>
</build>

(Максим Таран) #5

А как собирался джарник?


(Юлия Химий) #6

Приведи пример, пожалуйста. По структуре видно что у меня есть 3-и класса, в каждом из них набор тестов для соответственного модуля (страницы) и мне нужно что бы каждый из них был в исполняемом файле…


(Юлия Химий) #7

Maven Projects-> Lifecycle-> package (двойной клик)


#8

Я не приведу пример потому что апликейшены с тестами никто не делает. Если нужно иметь 3 пачки разных тестов, то проставь им группы :

@Test(dataProvider = "Create Experiment with selected files", dataProviderClass = ExperimentDataProvider.class, groups = {"test"})

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

В тестах мейн класса нет. Хотя конечно ты можешь взять все свои тесты, создать меин класс в папке src->main-> java. Но нормальные люди так не делают.


(Михаил Братухин) #9

Я делал так :joy::sweat_smile::zipper_mouth_face:


#10

А чего перестал?:smile:


(Михаил Братухин) #11

Не то, чтобы перестал. На каких-то проектах эти рудименты сохранились. Просто сейчас не стоит задачи максимально разгонять скорость тестов или изолированных запусков из alm систем.


(Юлия Химий) #12

Хочу убедится что мы правильно друг друга понимаем.

  • да это проект в котором есть только тесты;
  • все эти классы (и тесты) должны быть в исполняемом файле;
  • нужна возможность задавать приоритет тестам до запуска исполняемого файла или во время его работы;
    Проект большой и для регрессионного тестирования это необходимо.

Ты бы не мог пояснить более подробно какую функцию в приведённом тобой примере выполняет dataProvider и dataProviderClass? Дело в том что я использую его для передачи входящих параметров в тест… и как бы другого назначения не встречала. Например как описано здесь https://www.tutorialspoint.com/testng/testng_parameterized_test.htm.


#13
  • все эти классы (и тесты) должны быть в исполняемом файле;
    и
  • нужна возможность задавать приоритет тестам до запуска исполняемого файла или во время его работы;

Честно говоря я с таким не сталкивался что бы менять приоритеты уже внутри исполняемого файла. Т.к это уже получается не тесты а программы что ли.
dataProvider не несёт никакой смысловой нагрузки в данном примере, просто показал как будет выглядеть строчка если ты его используешь. Но опять же если это будет исполняемый файл, а не тест то группы тут уже не помогут.

Если не секрет зачем именно исполняемые файлы?


(Юлия Химий) #14

Программисты люди загадочные… На тестовый заливаем одно, а в продакшен отдаём другое… Тесты написаны так что они сами делают какие-то подготовительные шаги @BeforeTest (а случае с авторизацией это будит регистрация), выполняется тест и @AfterTest подчищаем за собой (например это удаление зарегистрированного пользователя с БД) Вообщем нужно что бы они выполнялись после внесения изменений программистами (деплоя), а по тому как честных людей мало это должно происходить само собой (выполнение тестов). Очень грустно когда клиенты говорят нам о том что апа упала или не работает и т.д.
Я имела ввиду ни в самом джарнике что-то менять во время выполнения, а файл с которого джарник читает какие тесты и в каком порядке ему выполнять.


#15

Так и всё же зачем джарник? Почему бы не запускать mvn test -Dgroups=auth,register ?


(Юлия Химий) #16

Какой это даст результат?


#17

Не нужно собирать джарник каждый раз, конфигами можно менять параметры запуска тестов . А главное - тесты будут тестами а не апликейшенами.


(Юлия Химий) #18

А как конфигами менять параметры запуска тестов?
Допустим такой вариант устроит. Я смогу эти тесты положить на виртуалку и в бесконечном цикле их выполнять? Если да то подскажи пожалуйста как это сделать. То есть что мне туда(на виртуалку) закинуть и как запустить.


#19

Про конфиги лучше нагуглите т.к это долго и нудно расписывать.

В идеале ставите дженкинс или на крайняк windows scheduler можете запускать тесты по графику. Закидываете просто папку с проектом. Т.к у тебя мавен проект то все тесты можно запустить через консоль командой mvn test ( в папке с проектом) или сделать все нужные настройки в дженкинсе.
У меня проект лежит на битбакете. Дженкинс сам тянет код из репозитория, мавеном компилит и запускает.


Тестирование UI web приложения. Нужен совет
#20

А можешь поподробнее про запуск из alm систем?
на данный момент вопрос не стоит, но интересно для общего развития.

Наверное, это стоит вырезать в отдельную ветку