Webtest - 使用日期作为上下文参数

Webtest - Using Dates as Context Parameters

我已经创建了一个网络测试并且有一个 CSV 数据源,其中包含一个包含短日期列表的列 (MM/dd/yyyy)

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

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

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

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"));

}

这会生成 String was not recognized as a valid DateTime 错误。我尝试将格式更改为MM/dd/yyyy,但我遇到了同样的错误。

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

上下文中显示的date-time是2/12/2016 12:00:00 AM。月份只有一位数字,而格式说明符 MM 需要两位数字。 date-time 还包含与格式不匹配的字母 AM

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

您可以使用 Parse 而不是使用 ParseExact,它会计算出正确的格式。在提供的 date-time 字符串上使用以下内容:

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,monthandyearcolumns. Another option is to add non-date characters to the string and format it correctly, eg asz20160212and then remove thezwithin the web test. Generally, I would advise to avoid the conversion of string toDateTime` 然后另一个转换为不同的字符串。