属性 DataSink 中的扩展

Property Expansion in DataSink

我正在尝试将测试结果写入 ReadyAPI 中的时间戳文件。我有一个 DataGen,它在第一步中创建时间戳,然后在 DataSink 中,我在输出文件的文件名中使用该时间戳。我听说 属性 DataSinks 允许扩展,但我的文件没有被创建。

我是否需要先初始化并创建文件(Groovy 脚本)?

DataSink 中的输出文件配置: C:/Users/xxxxxx/Desktop/Projects/xxx/TestResults/OutFile_${DataGen#time}.xlsx

数据生成配置:

测试步骤

更新:
最后一个 运行 的时间戳正在数据接收器中使用。所以假设这些是 运行s:
运行 1: 8:00:00 AM -> 时间戳值 ??
运行 2: 8:15:00 AM -> 时间戳值 8:00:00 AM
运行 3:8:30:00 AM -> 时间戳值 8:15:00 AM

数据接收器似乎保留了 属性 的最后一个缓存版本,并且在新的 运行 开始之前没有更新

真奇怪。

如果 DataGen 步骤除了创建 timestamp 之外没有做任何事情,那么我建议尝试以下操作:

  • DataGen 步骤替换为 Groovy Script 测试步骤。
  • 将以下脚本内容放入Groovy Script.
def dateTime = new Date().format('yyyy_MM_ddHHmmss')
def fileName = "C:/Users/xxxxxx/Desktop/Projects/xxx/TestResults/OutFile_${dateTime}.xlsx"
context.testCase.setPropertyValue('DATA_SINK_FILE_PATH', fileName as String)
  • 文件名请使用-${#TestCase#DATA_SINK_FILE_PATH}

问题根本不在于时间戳或文件创建。问题是试图在 DataSink 中使用 属性 扩展。使用时间戳作为文件名的唯一方法是在 测试用例拆解脚本 中创建它。这确保所有输出文件都已关闭并且没有锁定。

要解决此问题,请在测试期间使用临时文件写入 - 在 DataSink 中。然后在 TearDown 脚本中,创建时间戳,创建新的输出文件,并将旧文件的内容写入其中。

这是我最终使用的 Groovy 脚本:

import jxl.*
import jxl.write.*
import java.text.SimpleDateFormat

def timestamp = ''
timestamp = new Date().format('yyyy_MM_dd_HH_mm_ss')

def tempFile = context.testCase.getPropertyValue('tempFile')

def output = tempFile +"_" + timestamp + ".xlsx"
tempFile += ".xlsx"

new File(output) << new File(tempFile).bytes