1

我创建了一个 webtest 并有一个 CSV 数据源,其中包含一个包含短日期列表(MM/dd/yyyy)的列

我需要操作参数,因为我正在测试的部分网页有一个表单参数,需要将其格式化为yyyyMMdd

当从数据源捕获的日期(例如:02/12/2016)时,我注意到在我的测试运行的上下文选项卡中,格式为“2/12/2016 12:00:00 AM”

我创建了一个请求插件并添加了以下代码:

public override void PreRequest(object sender, PreRequestEventArgs e)
{
   base.PreRequest(sender e)

   string CSVDate = e.WebTest.Context["<datasource date column>"].ToString();
   DateTime dt = DateTime.ParseExact(CSVDate, "MM/dd/yyyy HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture);
   e.WebTest.Context.Add("NewDate", dt.ToString("yyyyMMdd"));

}

这会生成一个字符串未被识别为有效的日期时间错误。我尝试将格式更改为MM/dd/yyyy,但遇到了同样的错误。

有谁知道我应该如何使用正确的 DateTime 格式?

4

1 回答 1

0

上下文中显示的日期时间是2/12/2016 12:00:00 AM。这个月份只有一个数字,而格式说明符MM需要两个数字。AM日期时间还包含格式不匹配的字母。

将格式修改为M/dd/yyyy HH:mm:ss与 date-time2/12/2016 12:00:00匹配,但与部分不匹配AM。理论上tt格式说明符应该匹配这个,但它对我不起作用。

ParseExact您可以使用而不是使用Parse它,它可以得出正确的格式。使用以下方法处理提供的日期时间字符串:

DateTime dt1 = DateTime.Parse(CSVDate, new System.Globalization.CultureInfo("en-US"));

之所以需要,CultureInfo是因为输入日期的月份和日期是错误的。

然而,真正的问题在于 Web 测试处理 CSV 文件的方式。它似乎使用与 Microsoft Excel 在读取 CSV 时使用的相同逻辑来读取它们。也就是说,如果它看起来像一个日期,则将其转换为日期。因此,任何匹配的字符串dd/dd/dddd(其中d是数字)都可能被转换为日期。(例如15/15/2017,因为不是月份数字,所以不会被转换15。)我建议重写 CSV 以不同地格式化输入日期,使用 Excel 不会将其视为日期的东西。一种选择是将日期放在 CSV 的三列中,因此有明确的day,月份and年份columns. Another option is to add non-date characters to the string and format it correctly, eg asz20160212 and then remove thez within the web test. Generally, I would advise to avoid the conversion of string toDateTime`,然后再转换为不同的字符串。

于 2017-02-14T10:46:19.207 回答