Karate中能否在Examples段调用自定义函数遍历资源目录图片执行接口测试
完全可以实现,无需额外维护CSV文件,Karate原生支持在Examples段调用自定义函数生成动态用例数据,不用硬编码图片名称,新增删除图片都不需要修改用例逻辑。
具体实现方案
你可以直接用Karate的Java互操作能力实现图片读取转base64的逻辑,也可以直接调用你自己提前实现好的自定义工具类,参考用例结构如下:
Feature: 批量图片接口校验 Background: # 自定义读取resource目录图片转base64的函数,也可以直接调用你自己实现的Java工具类 * def loadImageBase64List = """ function() { // 引入Java工具类 var File = Java.type('java.io.File'); var Files = Java.type('java.nio.file.Files'); var Base64 = Java.type('java.util.Base64'); // 替换为你自己的resource下的图片目录路径 var imageDir = new File('src/test/resources/test-images/').listFiles(); var resultList = []; for each (var imgFile in imageDir) { // 过滤非图片文件 if (imgFile.getName().match(/\.(png|jpg|jpeg)$/i)) { var fileBytes = Files.readAllBytes(imgFile.toPath()); var base64Content = Base64.getEncoder().encodeToString(fileBytes); resultList.push({ imageBase64: base64Content, imageName: imgFile.getName() }); } } return resultList; } """ Scenario Outline: 图片接口测试 - 用例:<imageName> Given url "你的目标接口地址" And request { "image": "#(imageBase64)" } When method POST Then status 200 # 这里加你自己的断言逻辑 Examples: | karate.mapWithKey(loadImageBase64List()) |
补充说明
- 上述示例是用内嵌JS实现的读取逻辑,如果你已经自己写好了Java工具类,直接替换
loadImageBase64List函数里的实现,调用你的工具类方法返回列表即可 - 用
Scenario Outline方式实现的话,每一张图片对应一条独立的测试用例,测试报告中会单独展示每条用例的执行结果 - 如果你不需要单独统计每个图片的执行结果,也可以直接在普通Scenario中遍历图片列表循环发请求,实现起来更简洁:
Scenario: 批量循环调用图片接口 * def imageList = loadImageBase64List() * def result = call read('@singleImageTest') imageList @ignore Scenario: singleImageTest Given url "你的目标接口地址" And request { "image": "#(imageBase64)" } When method POST Then status 200
内容的提问来源于stack exchange,提问作者yash choube
相关产品推荐
相关产品推荐

