【发布时间】:2019-08-05 11:11:07
【问题描述】:
我正在编写一组硒测试,我想构建一个 jar 并在 docker 上运行,我正在做一个基于 maven 的项目。
在大多数视频教程中,我看到这些测试都写在 test 文件夹中。 但在那种情况下,它会构建到 jar 文件中吗?我是否能够执行这些文件?
测试 selenium 项目的合适文件夹结构是什么?
【问题讨论】:
标签: java selenium selenium-webdriver
我正在编写一组硒测试,我想构建一个 jar 并在 docker 上运行,我正在做一个基于 maven 的项目。
在大多数视频教程中,我看到这些测试都写在 test 文件夹中。 但在那种情况下,它会构建到 jar 文件中吗?我是否能够执行这些文件?
测试 selenium 项目的合适文件夹结构是什么?
【问题讨论】:
标签: java selenium selenium-webdriver
是的,它将基于您的 pom.xml 构建配置。
<build>
<finalName>testProject</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<compilerVersion>1.8</compilerVersion>
<source>1.8</source>
<target>1.8</target>
<testSource>1.8</testSource>
<testTarget>1.8</testTarget>
</configuration>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}</outputDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/libs
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
最后一节特别告诉 maven 包含测试类[您在哪里编写测试脚本]并构建测试 jar。
你可以通过写来执行,
java -cp testProject.jar:testProject-tests.jar:libs/*<other parameters like testNG suite or host etc>
当我使用页面对象框架时,我更喜欢在src->main中分离和编写Page类,在src-test中编写Test类
【讨论】:
您可以将文件夹结构保持为标准的 Maven 结构。打包时使用 maven-assembly-plugin 创建 fat jar,其中包含 main 和 test 文件夹中的所有类。
在 POM.XML 中
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.3</version>
<configuration>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</build>
汇编文件:
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<id>fat-tests</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<outputDirectory>/</outputDirectory>
<useProjectArtifact>true</useProjectArtifact>
<unpack>true</unpack>
<scope>test</scope>
</dependencySet>
</dependencySets>
<fileSets>
<fileSet>
<directory>${project.build.directory}/test-classes</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>**/*.class</include>
</includes>
<useDefaultExcludes>true</useDefaultExcludes>
</fileSet>
<fileSet>
<directory>${project.build.directory}/test-classes</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>**/*.xml</include>
</includes>
<useDefaultExcludes>true</useDefaultExcludes>
</fileSet>
</fileSets>
mvn 包
您将获得包含所有测试依赖项和测试类的 fat jar。
对于 TestNG 测试:在下面的示例中,我们正在运行具有组单元的测试。如果你想从命令行发送组,你可以自定义它
例如泊坞窗文件:
FROM openjdk:8-jre-alpine
ADD testng-maven-1.0-SNAPSHOT-fat-tests.jar /
CMD java -cp testng-maven-1.0-SNAPSHOT-fat-tests.jar org.testng.TestNG -testjar testng-maven-1.0-SNAPSHOT-fat-tests.jar -groups unit
【讨论】: