Выполнение тестов Cucumber непосредственно из исполняемого фляги

У меня есть проект с огурцом и maven, также я использую JUnit.

Я могу успешно запустить и собрать свой проект из Eclipse.

Теперь я хочу запустить тест из командной строки в другой системе, в которой не установлено (не должно быть) затмение или огурец. У меня есть идея, что мы можем создать JAR из jar, мы можем запустить тесты командами java cli.

Ниже приведены комбинации, из которых я пытаюсь запустить свои тесты, а также я вставляю файл pom.xml и RunCukesTest.java.

 введите описание изображения здесь

pom.xml

<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>pmc</groupId>
    <artifactId>se</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>storeEnabler</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>info.cukes</groupId>
            <artifactId>cucumber-java</artifactId>
            <version>1.2.0</version>
        </dependency>

        <dependency>
            <groupId>info.cukes</groupId>
            <artifactId>cucumber-testng</artifactId>
            <version>1.2.0</version>
        </dependency>

        <dependency>
            <groupId>info.cukes</groupId>
            <artifactId>cucumber-junit</artifactId>
            <version>1.2.4</version>
        </dependency>

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>2.52.0</version>
        </dependency>

        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4</version>
        </dependency>

        <dependency>
            <groupId>io.appium</groupId>
            <artifactId>java-client</artifactId>
            <version>3.1.0</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.9</version>
        </dependency>

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.11-beta3</version>
        </dependency>

        <dependency>
            <groupId>xml-apis</groupId>
            <artifactId>xml-apis</artifactId>
            <version>2.0.2</version>
        </dependency>

        <dependency>
            <groupId>xerces</groupId>
            <artifactId>xercesImpl</artifactId>
            <version>2.8.0</version>
        </dependency>
    </dependencies>

    <build>
        <testResources>
            <testResource>
                <directory>${project.basedir}/src/test/java</directory>
            </testResource>
            <testResource>
                <directory>${project.basedir}/src/test/resource</directory>
            </testResource>
        </testResources>
        <pluginManagement>
            <plugins>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.1</version>
                    <configuration>
                        <fork>true</fork>
                        <executable>C:\Program Files\Java\jdk1.8.0_60\bin\javac.exe</executable>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.18</version>
                    <dependencies>
                        <dependency>
                            <groupId>org.apache.maven.surefire</groupId>
                            <artifactId>surefire-junit47</artifactId>
                            <version>2.18</version>
                        </dependency>
                    </dependencies>
                </plugin>
                    <plugin>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <configuration>
                        <archive>
                            <manifest>
                            <addClasspath>true</addClasspath>
                                <mainClass>cucumber.api.cli.Main</mainClass>
                            </manifest>
                        </archive>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

RunCukesTest.java

package se.stepDefinations;


import org.junit.runner.RunWith;

import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;

@RunWith(Cucumber.class)
@CucumberOptions(features = "src/test/resource/features/Printing.feature:117", plugin = { "pretty",
        "html:target/cucumber-html-report" }, glue = { "se.stepDefinations" }, tags = {})
public class RunCukesTest {

    public static void main(String[] args) throws Exception {


    }
}
  • Я добавил JUNIT Jar в путь к классам.

Я создаю банки двумя способами,

1) Экспорт JAR с использованием -> Проект -> Экспорт -> JAR-файл  Выбрав MAIN Class на последнем шаге следующим образом: RunCukesTest, как я определил основной метод здесь для точки входа (нужен ли этот основной метод в этом классе ???)

После экспорта я запускаю команду ниже,

1.1 java -jar xyz.jar Я получаю сообщение об ошибке: NoClassDef найден: org /junit /runner /JUnitCore

Итак, я запустил это так:

1.2 java -cp xyz.jar;junit-4.12.jar org.junit.runner.JUnitCore Он сказал,

JUnit version 4.12
Time:0.001
OK(0 tests) 

Он все еще не работал, поэтому я добавил в конец пространство имен файла RunCukesTest,
1.3 java -cp xyz.jar;junit-4.12.jar org.junit.runner.JUnitCore se.stepDefinations.RunCukesTest
 Это дало мне ошибку: Тип cucumber.api.junit.Cucumber отсутствует

2) Итак, я отказался от опции «Экспортировать банку» и сейчас пытаюсь использовать JAR из сборки maven. Я выбрал POM для работы с Maven Build, и он создал 2 баночки в целевой папке,

  

1 с именем xyz-0.0.1-SNAPSHOT с 16kb другим с 2-м с
  xyz-0.0.1-SNAPSHOT-jar-with-зависимости с 33 МБ

1) Я запустил больший файл с зависимостями, используя

java -jar xyz-0.0.1-SNAPSHOT-jar-with-dependencies.jar

Это дало мне сообщение:

  

У меня нет пути к каталогу объектов

2) Поэтому я попытался добавить пространство имен в файл RunCukesTest,

java -jar xyz-0.0.1-SNAPSHOT-jar-with-dependencies.jar se.stepDefinations.RunCukesTest
  

Я получил ошибку: не найден файл или каталог

, как, конечно, и говорит об ошибке, он пытается найти функцию в целевой папке.

Опять же, я хочу запустить JAR независимо от любых таких зависимостей файлов проекта на любом другом компьютере, например на исполняемом файле.

Любая помощь будет оценена. Спасибо.

10 голосов | спросил Arpan Buch 22 MaramTue, 22 Mar 2016 11:59:34 +03002016-03-22T11:59:34+03:0011 2016, 11:59:34

1 ответ


0

Я бы разделил проблему, о которой вы думаете, на две части.

  • Создать исполняемый файл jar
  • Запустите Cucumber из своего основного метода

Создание исполняемого фляги с помощью Maven может быть сделано по-разному. Один из способов сделать это описан здесь: http://www.thinkcode.se /блог /2011/03/05 /создать-ан-исполняемую-банку-из-Maven

Это небольшой пример, который фокусируется только на выполнении чего-либо из командной строки, например:

java -jar исполняемый файл-example.jar

В примере содержатся все зависимости. Все они упакованы в одну банку. Нет необходимости в дополнительных банках.

Следующим шагом будет выполнение Cucumber из основного метода. Мой подход заключается в написании main, который выполняет основной метод Cucumber, используемый для версии Cucumber для командной строки. Основной метод, используемый для запуска огурца из командной строки, находится в библиотеке cucumber-java. Вы найдете его в cucumber.api.cli.Main

Запуск метода main из другого метода main выполняется следующим образом:

public static void main(String[] args) throws Throwable {
    String[] arguments = {"foo", "bar"};
    cucumber.api.cli.Main.main(arguments);
}

где arguments это аргументы командной строки, с которыми вы всегда хотите выполнить Cucumber.

Учитывая эти два шага, вы сможете запускать Cucumber из своего собственного исполняемого jar, где бы вы ни выполняли jar вообще.

Обратите внимание, что вы смешиваете версию библиотеки для Cucumber в вашем pom. Я бы использовал последнюю версию всех библиотек. Сравните cucumber-java, cucumber-testng и cucumber-junit. Последняя версия огурца является 1.2.4. Я бы использовал его для всех из них.

Дополнительную информацию о запуске Cucumber из командной строки можно найти здесь: https: //cucumber.io/docs/reference/jvm#cli-runner

ответил Thomas Sundberg 23 MaramWed, 23 Mar 2016 10:46:05 +03002016-03-23T10:46:05+03:0010 2016, 10:46:05

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132