我试图将测试结果写入ReadyAPI中的带时间戳的文件。我有一个DataGen,它在第一步中创建时间戳,然后在DataSink中创建时间戳,我在out文件的文件名中使用该时间戳。我听说DataSinks允许扩展属性,但我的文件没有被创建。
我是否需要首先初始化并创建文件(Groovy Script)?
在DataSink中输出文件: C:/Users/xxxxxx/Desktop/Projects/xxx/TestResults/OutFile_${DataGen#time}.xlsx
测试步骤
更新
最后一次运行的时间戳正在数据链中使用。所以,让我们说这些是运行:
运行1: 8:00:00 AM - >时间戳值?
运行2:8:15:00 AM - >带时间戳的值 8:00:00 AM
运行3:8:30:00 AM - >时间戳值8:15:00 AM
似乎数据链保留了属性的最后一个缓存版本,并且在新运行开始之前不会更新
答案 0 :(得分:2)
这很奇怪。
如果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}
答案 1 :(得分:0)
问题不在于时间戳或文件创建。问题是尝试在DataSink中使用属性扩展。使用时间戳作为文件名的唯一方法是在测试用例TearDown脚本中创建它。这可确保所有outfiles关闭且没有锁定。
要解决此问题,请在测试期间使用临时文件写入 - 在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