2017-02-14 79 views
0

我创建了一个WebTest的,并有一个包含列短日期列表(MM/DD/YYYY)WebTest的 - 使用日期为上下文参数

一个CSV数据源我需要操作由于参数我测试的网页部分有一个表单参数,需要它被格式化为yyyyMMdd

当从数据源捕获的日期(例如:02/12/2016),我注意到在我的测试运行的上下文选项卡中,格式为“2016/12/12 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")); 

} 

这产生字符串未被识别为有效的DateTime错误。我试图将格式更改为MM/dd/yyyy,但我遇到了同样的错误。

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

回答

0

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

将格式修改为M/dd/yyyy HH:mm:ss与日期时间2/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,个月andcolumns. Another option is to add non-date characters to the string and format it correctly, eg as z20160212 and then remove the Z和within the web test. Generally, I would advise to avoid the conversion of string to DateTime`另一次转换到不同的字符串。

+0

DateTime.Parse最终成为我使用的更好的选择。在我看来,重写CSV会涉及到每个日期,因为它提供了设置为短日期的格式。更改格式将列单元格转换为5位数字。感谢帮助! – bigspank

相关问题