2017-02-14 17 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

相關問題