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

如何在Katalon Studio中存储HTML响应动态字符串供后续请求使用

Katalon Studio 提取REST接口HTML响应动态值并跨请求复用实现方案

整个流程完全可以在脚本模式下通过Groovy代码实现,不需要额外安装插件,具体操作步骤如下:

  • 第一步:发送初始POST请求,获取HTML格式响应
    先调用你配置好的POST接口请求对象,拿到完整响应内容,建议先做状态码校验,避免响应异常导致后续提取逻辑报错:
    // 替换为你自己的测试对象路径
    def firstPostRequest = findTestObject('接口目录/第一个POST请求')
    def response = WS.sendRequest(firstPostRequest)
    // 校验响应状态为200,可根据你的实际接口成功状态调整
    WS.verifyResponseStatusCode(response, 200)
    // 拿到完整的HTML响应文本
    String htmlResponse = response.getResponseBodyContent()
    
  • 第二步:从HTML文本中提取目标动态字符串,两种常用方案按需选择
    方案1:正则匹配提取(适合目标内容前后有固定文本标识的场景,实现最简单)
    先找到目标动态值在HTML源码里的前后固定内容,写正则做捕获即可,比如你要提取的内容在<div class="dynamic-code">abc123xyz</div>标签中间,其中abc123xyz是动态变化的,代码如下:
    // 正则中括号包裹的部分就是要提取的动态内容,用非贪婪匹配.*?避免匹配范围溢出
    def matcher = (htmlResponse =~ /<div class="dynamic-code">(.*?)<\/div>/)
    String targetValue
    if (matcher.find()) {
        targetValue = matcher.group(1)
        // 提取后如果有HTML转义字符可以做反转义处理
        // targetValue = org.apache.commons.text.StringEscapeUtils.unescapeHtml4(targetValue)
        // 将值存入全局变量,全测试用例/测试套件可复用
        GlobalVariable.storedDynamicValue = targetValue
    } else {
        throw new RuntimeException("HTML响应中未匹配到目标动态字符串,请检查正则规则")
    }
    
    方案2:HTML结构解析提取(适合HTML结构复杂、正则容易误匹配的场景)
    用Groovy内置的XmlSlurper解析HTML节点,按标签、属性定位目标内容:
    import groovy.xml.XmlSlurper
    def htmlParser = new XmlSlurper()
    // 关闭外部DTD加载,避免不规范HTML解析报错
    htmlParser.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false)
    def htmlDoc = htmlParser.parseText(htmlResponse)
    // 示例:查找id为verifyCode的input标签,取其value属性值,可根据你的实际节点路径调整
    String targetValue = htmlDoc.body.'**'.find { it.@id == 'verifyCode' }.@value.toString()
    GlobalVariable.storedDynamicValue = targetValue
    
  • 第三步:在后续请求的请求体中引用存储的变量
    两种使用方式都可以:
    • 手动模式配置请求对象时,直接在请求体对应位置写占位符${GlobalVariable.storedDynamicValue}即可,Katalon发送请求时会自动替换为实际值
    • 脚本模式下构造请求体时,直接拼接变量即可:
      // 构造第二个请求的JSON请求体,把动态值填入对应字段
      String secondRequestBody = """
      {
          "verifyCode": "${GlobalVariable.storedDynamicValue}",
          "userId": "10001"
      }
      """
      def secondPostRequest = findTestObject('接口目录/第二个POST请求')
      secondPostRequest.setBodyContent(new org.apache.http.entity.StringEntity(secondRequestBody, "UTF-8"))
      secondPostRequest.setHeader("Content-Type", "application/json")
      def secondResponse = WS.sendRequest(secondPostRequest)
      

实操注意:

  1. 写正则时优先用非贪婪匹配符.*?,不要用贪婪匹配.*,否则容易匹配到超出目标范围的内容
  2. 提取完变量后建议加非空判断,避免后续请求因为拿不到值出现非预期报错
  3. 如果你的动态值存在特殊字符被HTML转义(比如&quot;代表双引号、&amp;代表&),提取后记得做反转义处理再传入后续请求

内容的提问来源于stack exchange,提问作者Michele Scianatico

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:18:15