2016-06-29 3 views
0

Ich habe einen codedui Test, der Wert aus einer CSV-Datei liest. Ich verwende den folgenden Code:Codierte ui - Lesen/Schreiben von Werten aus CSV-Dateien

[DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\\testdata.csv", "testdata#csv", DataAccessMethod.Sequential), DeploymentItem("testdata.csv"), TestMethod] 

public void test() 
{ 
String a = TestContext.DataRow["Field 1"].ToString(); 
} 

Als Teil meiner Anforderung muss ich die Testergebnisse erfassen, z. ID generiert und schreibe es wieder in "testdata.csv".

Ich habe versucht, mit: TestContext.DataRow["IDField"] = id;

Aber es ist nicht erfolgreich.

Meine Frage ist:

  1. Wie wir Wert auf diese Datei während der Laufzeit schreiben?
  2. Wie kann man den obigen Wert in einem anderen Test lesen?
  3. Wenn ich Werte aus mehreren Quellen lesen muss, gibt es eine Möglichkeit, dies zu tun, weil ich in der Datenquelle nur einen Dateinamen angeben kann.

Dank

+0

Warum müssen Sie diesen Wert erfassen? Können Sie einfach einen Fehler bestätigen, wenn der Wert nicht dem entspricht, was erwartet wird, und das Testprotokoll überprüfen? Wenn Sie versuchen, Tests miteinander zu ketten, wäre dies nicht meine Empfehlung dafür. In meinem Blog behandle ich einen Ansatz (Szenarien genannt), um Aktionen auszuführen, die für einen anderen Test erforderlich sind, um korrekt ausgeführt zu werden (z. B. Vorbedingungen wie ausstehende Aufträge einrichten usw.). http://michaelpavlakcoding.blogspot.com/2016/06/decomposing-page-objects.html – MPavlak

+0

Vielen Dank für Ihre Antwort. Ich muss diesen Wert erfassen, da ich ihn als Teil eines End-to-End-Szenarios einem anderen Test übergeben muss. Außerdem möchte das Unternehmen die Ergebnisse in der Excel-Tabelle sehen und nicht als codierte ui-Standardausgabe. –

+0

Es wäre nicht ratsam, die Tests auf diese Weise zu fahren. Ihre Tests sollten unabhängig voneinander ablaufen können. Wenn Sie dazu in der Lage sind, kann Microsoft Test Manager eine bessere Berichterstattung darüber ausgeben, was passiert und nicht erfolgreich ist. – MPavlak

Antwort

0

Sie können nicht in eine CSV-Datenquelldatei aktualisieren, die gelesen wird. Ein Ansatz besteht darin, in eine neue CSV-Datei zu schreiben. Diese neue Datei könnte alle Daten aus der CSV-Datenquelle sowie alle neuen Felder enthalten. Die [ClassInitialize] oder [AssemblyInitialize] könnte verwendet werden, um die erste Zeile der CSV mit den Spaltentiteln zu schreiben. Die [TestCleanup] könnte ein guter Ort sein, um die CSV-Datenzeile so zu schreiben, wie sie aufgerufen werden sollte, ob der Testfall bestanden wurde oder nicht. Wenn die CSV nur für Tests geschrieben werden soll, die bestanden haben, schreiben Sie die CSV-Datenzeile als letzte Aktion der [TestMethod].

Ein zweiter Test, der die CSV wie oben beschrieben liest, kann verwendet werden. Der Versuch, beide Tests gleichzeitig auszuführen, schlägt wahrscheinlich fehl. Wenn ein CSV von einem Testfall gelesen wird, während ein anderer Testfall Zeilen schreibt, kann dies zu Problemen führen. (ZB was ist, wenn der zweite Test mit dem ersten Schritt beginnt, wie behandelt er das Lesen einer Datei ohne Daten? Gehen Sie nicht davon aus, dass dies so funktioniert, wie Sie möchten.)

Codierte UI lässt nur eine Daten zu Quellattribut für einen Test.

+0

Ich glaube, das mag funktionieren, aber ich möchte noch einmal betonen, dass dies keine gute Möglichkeit ist, Ihre Testsuiten zu steuern. – MPavlak

+0

@MPavlak Ich verstehe Ihren Punkt, aber es gibt Fälle in Tests, wo die einzige vernünftige Weise die Einführungsbedingungen für einen Test einzurichten, ist die Verwendung der Ausgangsbedingungen eines anderen. Vielleicht ist das Argument für Unit-Tests schwach, für UI-Tests mit Coded UI ist das Argument stärker. Für Leistungstests, bei denen Tausende von Ausführungen von mehreren Testfällen ausgeführt werden, kann es notwendig sein, die Testausführung sorgfältig zu planen, so dass Daten immer für Tests verfügbar sind.Einige Daten werden vor dem Lauf geladen, aber viele der Daten werden von einem Test zum anderen "weitergegeben". – AdrianHHH

+0

@MPavlak Beim Testen der Leistung (Last) müssen Sie die Datenbankgrößen berücksichtigen. Der Test sollte die Datenbank in der erwarteten realen Größe halten. Im Allgemeinen sollte ein Testlauf die Datenbank nicht durch den Verbrauch aller Datensätze leeren, noch sollte er so viele Daten erzeugen, dass die Datenbank überlastet ist. Daher kann ein Belastungstest ** Daten von einem Testfall zu einem anderen übertragen müssen. – AdrianHHH

Verwandte Themen