You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 21:42:01