属性 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
我正在尝试将测试结果写入 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