DataSink中的资产扩展

时间:2016-08-22 12:43:16

标签: groovy ready-api

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

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

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

DataGen配置: enter image description here

enter image description here

测试步骤

enter image description here

更新
最后一次运行的时间戳正在数据链中使用。所以,让我们说这些是运行:
运行1: 8:00:00 AM - >时间戳值?
运行2:8:15:00 AM - >带时间戳的值 8:00:00 AM
运行3:8:30:00 AM - >时间戳值8:15:00 AM

似乎数据链保留了属性的最后一个缓存版本,并且在新运行开始之前不会更新

2 个答案:

答案 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