Karate JUnit5/Core运行TestRunner时data.json路径重复问题求助
解决Karate测试读取data.json时路径重复的问题
问题根源
代码里硬编码了本地绝对路径来引用data.json,而Karate运行时会把src/test/java下的资源文件复制到target/test-classes目录,此时绝对路径会被错误拼接到target路径之后,生成无效路径,最终触发org.opentest4j.AssertionFailedError和java.io.FileNotFoundException。
解决步骤
使用类路径相对引用
在.feature文件或TestRunner代码里,改用类路径方式读取文件:- Feature文件中:
read('classpath:Karate/APITESTING/TestData/data.json') - Java测试代码(TestRunner)中:
// 通过类路径获取文件路径 String jsonPath = getClass().getResource("/Karate/APITESTING/TestData/data.json").getPath(); // 或者直接读取文件流 JsonObject data = JsonPath.read(getClass().getResourceAsStream("/Karate/APITESTING/TestData/data.json"), "$");
- Feature文件中:
确保资源文件被正确复制到target目录
若使用Maven,需要在pom.xml中添加配置,让src/test/java下的.json和.feature文件在编译时被复制到target/test-classes:<build> <resources> <resource> <directory>src/test/java</directory> <includes> <include>**/*.json</include> <include>**/*.feature</include> </includes> </resource> </resources> </build>移除硬编码的绝对路径
所有引用data.json的地方,删掉类似C:\Users\LHCP\eclipse-workspace\...的本地绝对路径,统一用类路径或相对包路径引用,避免环境切换时的路径问题。验证资源复制结果
执行mvn test-compile命令后,检查target/test-classes/Karate/APITESTING/TestData/目录下是否存在data.json,确认资源复制正常。
内容的提问来源于stack exchange,提问作者Simon Simon
相关产品推荐
相关产品推荐

