当前位置: 首页 > 知识库问答 >
问题:

通过不使用Maven的可执行JAR从cmdline执行Cucumber测试

邹举
2023-03-14

步骤1:在此基础上,我使用maven-shade-plugin构建了一个包含所有依赖项的独立jar。

pom.xml

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.2</version>
            <configuration>
                <testFailureIgnore>true</testFailureIgnore>
                <testSourceDirectory>${basedir}/src/main/java/</testSourceDirectory>
                <testClassesDirectory>${project.build.directory}/classes/</testClassesDirectory>
                <reportsDirectory>${project.build.directory}/test-output/${timestamp}</reportsDirectory>
            </configuration>
        </plugin>
        <!-- https://maven.apache.org/plugins/maven-shade-plugin/examples/executable-jar.html -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.1</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <!-- https://maven.apache.org/plugins/maven-shade-plugin/shade-mojo.html -->
                        <shadedArtifactAttached>true</shadedArtifactAttached>
                        <shadedClassifierName>standalone</shadedClassifierName>
                        <transformers>
                            <!-- https://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html -->
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>runners.RunCukesTest</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

main()方法添加到runner类,并根据this、this和this传递cmdline arg。

package runners;

import cucumber.api.CucumberOptions;
import cucumber.api.SnippetType;
import cucumber.api.cli.Main;
import cucumber.api.testng.AbstractTestNGCucumberTests;

@CucumberOptions(features = { "src/main/resources/features" }, glue = { "steps" }, tags = { "not @ignore" }, plugin = {
        "pretty" }, monochrome = true)
public class RunCukesTest extends AbstractTestNGCucumberTests {

    public static void main(String[] args) {
        System.out.println("Begin running tests...");
        Main.main(new String[]{ "-g", "steps", "-t", "not @ignore", "-p", "pretty", "-m", "src/main/resources/features" });
    }

}
λ java -jar project-xyz-1.0.0-standalone.jar
Begin running tests...
Exception in thread "main" java.lang.IllegalArgumentException: Not a file or directory: \path\to\jar\src\main\resources\features
        at cucumber.runtime.io.FileResourceIterator$FileIterator.<init>(FileResourceIterator.java:63)
        at cucumber.runtime.io.FileResourceIterator.<init>(FileResourceIterator.java:28)
        at cucumber.runtime.io.FileResourceIterator.createFileResourceIterator(FileResourceIterator.java:14)
        at cucumber.runtime.io.FileResourceIterable.iterator(FileResourceIterable.java:19)
        at cucumber.runtime.model.FeatureLoader.loadFromFeaturePath(FeatureLoader.java:112)
        at cucumber.runtime.model.FeatureLoader.load(FeatureLoader.java:48)
        at cucumber.runtime.model.FeatureLoader.load(FeatureLoader.java:30)
        at cucumber.runtime.FeaturePathFeatureSupplier.get(FeaturePathFeatureSupplier.java:22)
        at cucumber.runtime.Runtime.run(Runtime.java:68)
        at cucumber.api.cli.Main.run(Main.java:26)
        at cucumber.api.cli.Main.main(Main.java:8)
        at runners.RunCukesTest.main(RunCukesTest.java:17)
Main.main(new String[]{ "-g", "steps", "-t", "not @ignore", "-p", "pretty", "-m", "src/main/resources/features" });

如何通过cmdline args指向JAR中的features目录?

共有1个答案

萧韬
2023-03-14

您将一个相对路径传递给Cucumbersrc\main\resources\features。因为您正在执行Jar,所以使用当前工作目录将这个相对路径转换为绝对路径。但是,因为src\main\resources\features是您的特性的源文件夹,所以找不到任何特性,您会得到:

线程“main”java.lang.IllegalArgumentException:不是文件或目录:\path\to\jar\src\main\resources\features

相反,您必须告诉Cucumber,您的特性在类路径上。您可以通过以下方式完成:

"classpath:features"
 类似资料:
  • 我有一个项目与cucumber和maven也我使用JUnit。 我能够从Eclipse成功地运行和构建我的项目。 现在,我想在另一个没有安装eclipse或cucumber的系统中从命令行运行测试。我有一个想法,我们可以从JAR创建一个JAR,我们可以通过java cli命令运行测试。 我已经在类路径中添加了JUNIT Jar。 我以两种方式生成jar, 1)使用->project->export

  • 各位工程师,大家好! 我在试图创建一个胖罐子来执行cucumber测试时遇到了一个问题。最初,我按照指南从Baeldung设置测试。当在Maven测试阶段执行时,测试运行良好。当运行带有参数的mvn exec:java命令时,它也能正常工作。 然而,当我创建了一个胖罐子并试图执行测试时,我面临着错误 以下是我的项目的解释,它基本上与Baeldung的测试项目完全一样。 项目结构 直接从可执行jar

  • 我试图用scala和Maven创建可执行jar。我正在使用maven-scala-plugin和maven-assembly-plugin,但在我看来,汇编插件被忽略了。我得到没有依赖项的jar和包含没有主类行的manifest。

  • 我有一些Spring测试,这些测试可以加速应用程序上下文并测试一些服务。我能够使用Maven并通过IDE运行这些测试。现在我需要在另一台无法访问Maven的机器上运行这些测试。我的想法是创建一个测试jar并通过命令行运行它们。 所以我创建了一个自定义Runner,它调用我需要的测试类,这些测试将启动Spring Application上下文并测试一些服务。 以下是示例代码: 我的自定义跑步者: 上

  • 问题内容: 我试图使用maven为名为“ logmanager”的小型家庭项目生成可执行jar,如下所示: 如何使用Maven创建具有依赖项的可执行JAR? 我将此处显示的代码段添加到pom.xml中,并运行了mvn assembly:assembly。它在logmanager / target中生成两个jar文件:logmanager-0.1.0.jar和logmanager-0.1.0-jar

  • 问题内容: 我想使用码头来启动我的应用程序,因此我添加了下面提到的依赖项。当我运行主要方法Jetty成功启动时(我正在一个struts2 + spring3 + hibernate maven项目中,我也可以将其部署在tomcat中) 现在,我想从war包装pom创建一个可执行jar。所以我在pom中添加了maven-assembly-plugin。(我尝试使用maven jar插件,但未添加依赖