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,
monthand
yearcolumns. Another option is to add non-date characters to the string and format it correctly, eg as
z20160212and then remove the
zwithin the web test. Generally, I would advise to avoid the conversion of string to
DateTime` 然后另一个转换为不同的字符串。
我已经创建了一个网络测试并且有一个 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,
monthand
yearcolumns. Another option is to add non-date characters to the string and format it correctly, eg as
z20160212and then remove the
zwithin the web test. Generally, I would advise to avoid the conversion of string to
DateTime` 然后另一个转换为不同的字符串。