2016-03-22 13 views
8

Mam projekt z ogórkiem i maven również używam JUnit.Uruchamianie testów ogórek bezpośrednio z pliku wykonywalnego słoiczka

Jestem w stanie uruchomić i zbudować mój projekt z powodzeniem z Eclipse.

Teraz chcę uruchomić test z wiersza poleceń w innym systemie, który nie powinien (powinien) mieć zainstalowanego zaćmienia lub ogórka. Mam pomysł, że możemy stworzyć JAR ze słoika, możemy uruchomić testy za pomocą poleceń java cli.

Poniżej znajdują się kombinacje Próbuję uruchomić z moich testów, również jestem wklejając pom.xml i plik RunCukesTest.java ..

enter image description here

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 { 


    } 
} 
  • Dodałem JUNIT Jar w ścieżce klasy.

jestem generowania słoików na 2 sposoby,

1) Eksportowanie JAR użyciu -> Projekt -> Export -> JAR Plik Wybór klasy MAIN w ostatnim etapie jak: RunCukesTest jak zdefiniowano metodę main tutaj do punktu wejścia (mamy wymagać to główne metody w tej klasie ???)

Po eksporcie, używam poniżej polecenia

1,1 java -jar xyz.jar otrzymuję błąd: NoClassDef znaleziono: org/JUnit/runner/JUnitCore

Więc wpadłem to w ten sposób:

1,2 java -cp xyz.jar;junit-4.12.jar org.junit.runner.JUnitCore Mówi,

JUnit version 4.12 
Time:0.001 
OK(0 tests) 

To nadal nie działał, więc dołączany do RunCukesTest nazw plików w ostatniej,
1,3 java -cp xyz.jar;junit-4.12.jar org.junit.runner.JUnitCore se.stepDefinations.RunCukesTest
Dało mi to błąd: wpisz cucumber.api.junit. Ogórek nie występuje

2) Więc zrezygnowałem z opcji n dla eksportu słoika i próbuję teraz użyć JAR-a z maven Build. I wybranych POM do działania z Mavenie zbudowano i utworzona 2 słoje w katalogu docelowym,

1 o nazwie xyz-0.0.1-zdjęć za 16kb nawzajem 2 z
xyz-0,0.1-SNAPSHOT-jar-z zależnościami z 33MB

1) Pobiegłem większy plik z zależnościami, używając

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

Dało mi wiadomość:

Nie mam ścieżkę do funkcji katalog

2) Próbowałem więc dołączyć przestrzeń nazw do pliku RunCukesTest,

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

otrzymałem błąd: nie znaleziono pliku lub katalogu

, jako oczywiście jak mówi o błędzie, że stara się znaleźć funkcję wewnątrz folderu docelowego.

Ponownie, chcę uruchomić JAR niezależnie od takich zależności plików projektu w jakimkolwiek innym komputerze, jak plik wykonywalny.

Każda pomoc zostanie doceniona. Dzięki.

Odpowiedz

6

Chciałbym podzielić problem, o którym myślisz w dwóch częściach.

  • Tworzenie pliku wykonywalnego słoika
  • Run Ogórek z własnego sposobu głównej

tworzenia słoik wykonywalny przy użyciu Maven można zrobić na różne sposoby. Jednym ze sposobów jest to opisane tutaj: http://www.thinkcode.se/blog/2011/03/05/create-an-executable-jar-from-maven

Jest to mały przykład, który skupia się tylko na wykonaniu coś z linii poleceń jak poniżej:

java -jar wykonywalny-example.jar

przykład zawiera wszystkie zależności. Wszystkie są spakowane w tym samym słoiku. Nie potrzeba żadnych dodatkowych słoików.

Następnym krokiem byłoby wykonanie ogórka z głównej metody. Moim podejściem byłoby napisanie głównej, która wykonuje główną metodę Ogórka używaną do wersji Cucumber w linii poleceń. Główna metoda używana do uruchamiania ogórka z linii poleceń mieszka w bibliotece cucumber-java. Znajdziesz go w cucumber.api.cli.Main

Prowadzenie główne metody z innej metody głównego odbywa się to tak:

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

gdzie argumenty są argumenty linii poleceń zawsze chcesz wykonać ogórek.

Biorąc pod uwagę te dwa kroki, powinieneś być w stanie wykonać Ogórek z własnego pliku wykonywalnego, gdziekolwiek jesteś w stanie wykonać słoik.

Zauważ, że miksujesz wersję biblioteki dla ogórka w twoim pom. Chciałbym użyć najnowszej wersji wszystkich bibliotek. Porównaj cucumber-java, cucumber-testng i cucumber-junit.Najnowsza wersja ogórka to 1.2.4. Zrobiłbym to dla nich wszystkich.

Więcej informacji o prowadzeniu Ogórek z linii poleceń można znaleźć tutaj: https://cucumber.io/docs/reference/jvm#cli-runner

0
@SpringBootApplication 
public class Application { 

    public static void main(final String[] args) throws Throwable { 
     // SpringApplication.run(TestApplication.class, args); 
     JUnitCore.main(CucumberTest.class.getCanonicalName()); 
    } 

} 
Powiązane problemy