SOAtest与Maven集成问题:执行测试时因工作区被删无法读取Excel数据源
我帮你排查下这个问题——你用mvn clean test命令执行测试时,clean阶段会默认删除项目的target目录,如果你的SOAtest工作区或者Excel数据源文件刚好存放在这个被清理的目录里,那测试运行时自然找不到数据源了。下面给你几个可行的解决方案:
方案1:修改Maven Clean插件,排除数据源目录
如果你的Excel数据源是放在项目内的某个目录(比如src/test/resources/excel或者根目录下的test-data),可以配置maven-clean-plugin,让它清理时跳过这些目录。在你的pom.xml里添加如下配置:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-clean-plugin</artifactId> <version>3.3.2</version> <configuration> <!-- 保留默认清理目录,只排除指定路径 --> <excludeDefaultDirectories>false</excludeDefaultDirectories> <excludes> <!-- 替换成你的数据源实际路径 --> <exclude>src/test/resources/excel/**</exclude> <exclude>test-data/**</exclude> </excludes> </configuration> </plugin> </plugins> </build>
方案2:将数据源部署到测试阶段前的指定位置
如果你的SOAtest配置的数据源路径指向target目录(比如工作区在target/soatest-workspace),可以用maven-resources-plugin在测试执行前,把数据源复制到target目录里。这样即使clean删掉了target,后续的process-test-resources阶段会重新把数据源复制回来。
在pom.xml中添加:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.3.1</version> <executions> <execution> <id>copy-test-datasource</id> <!-- 在测试资源处理阶段执行复制 --> <phase>process-test-resources</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <!-- 复制到target下的指定目录 --> <outputDirectory>${project.build.directory}/test-datasource</outputDirectory> <resources> <resource> <!-- 你的数据源所在的源目录 --> <directory>src/test/resources/excel</directory> <filtering>false</filtering> </resource> </resources> </configuration> </execution> </executions> </plugin> </plugins> </build>
之后记得在SOAtest里把数据源路径改成${project.build.directory}/test-datasource对应的实际路径。
方案3:拆分执行命令(备选)
如果不想修改配置,可以分开执行命令:先执行mvn clean清理环境,然后手动或者通过脚本把数据源复制到指定位置,再执行mvn test。不过这种方式不够自动化,适合临时测试场景。
另外还要确认下你的SOAtest本地配置(localsettings)里的工作区路径是不是指向了会被clean删除的目录,如果是的话,直接把工作区路径改成项目内不会被清理的目录(比如src/test/soatest-workspace)也是个直接的解决办法。
内容的提问来源于stack exchange,提问作者Sourabh Roy

