2017-02-14 5 views
0

ich eine CSV-Datenquelle erstellt haben eine webtest und haben die eine Spalte mit einer Liste von Kurzdaten (MM/dd/yyyy)Webtest - Termine als Kontext mit Hilfe von Parametern

I due den Parameter müssen manipulieren enthält ich Testen der Web-Seite bin hat einen Formparameter zu Teil, die es als yyyyMMdd formatiert werden muss

Wenn das Datum, das von der Datenquelle (zB: 2016.02.12) erfasst wird, habe ich bemerkt, in der Registerkarte Context meines Testlaufs, dass das Format zu "2/12/2016 12:00:00"

Ich habe ein Request-Plug-in erstellt und die hinzugefügt folgender Code:

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

} 

Dies erzeugt einen String wurde nicht als gültige Datetime Fehler erkannt. Ich habe versucht, das Format zu MM/TT/JJJJ zu ändern, aber ich stieß auf den gleichen Fehler.

Weiß jemand, wie das richtige DateTime-Format ich verwenden sollte?

Antwort

0

Das Datum und die Uhrzeit im Kontext ist 2/12/2016 12:00:00 AM. Dies hat nur eine Ziffer für den Monat, während der Formatbezeichner MM hat, der zwei Ziffern haben soll. Das Datum-Uhrzeit enthält auch die Buchstaben AM, die nicht durch das Format übereinstimmen.

Das Ändern des Formats auf M/dd/yyyy HH:mm:ss stimmt mit der Datum-Uhrzeit 2/12/2016 12:00:00 überein, entspricht aber nicht dem AM Teil. Theoretisch sollte der Formatbezeichner tt diesem entsprechen, aber es hat nicht für mich funktioniert.

Anstatt ParseExact verwenden Sie Parse und es funktioniert das richtige Format. Mit Hilfe der folgenden arbeitete am Tag-Zeit-String zur Verfügung gestellt:

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

Die CultureInfo benötigt wird, weil das Eingangsdatum um den Monat und die Tage der falsche Weg ist.

Das eigentliche Problem besteht jedoch in der Art und Weise, wie CSV-Dateien im Webtest behandelt werden. Es scheint, sie mit der gleichen Logik zu lesen, die Microsoft Excel beim Lesen von CSVs verwendet. Nämlich, wenn es wie ein Datum aussieht, wandeln Sie es in ein Datum um. Daher kann jede Zeichenfolge, die mit dd/dd/dddd übereinstimmt (wobei d eine Ziffer ist), zu einem Datum konvertiert werden. (Z. B. 15/15/2017 wird nicht konvertiert, da 15 keine Monatszahl ist.) Ich empfehle, die CSV-Datei neu zu formatieren, um das Eingabedatum anders zu formatieren. Verwenden Sie etwas, das Excel nicht als Datum behandeln würde. Eine Option besteht darin, das Datum in drei Spalten der CSV zu haben, also explizit day, Monat and Jahr columns. 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 `dann eine andere Umwandlung in eine andere Zeichenfolge.

+0

DateTime.Parse war die bessere Option für mich zu verwenden. Es sieht so aus, als würde das Neuschreiben der CSV dazu führen, dass jedes Datum berührt wird, weil es mit dem Format "short" versehen ist. Wenn Sie das Format ändern, werden die Spaltenzellen in eine fünfstellige Zahl umgewandelt. Schätze die Hilfe! – bigspank