2016-04-20 5 views
0

Ich habe jetzt schon eine lange Zeit mit diesem Problem zu kämpfen. Einige Hintergrundinformationen: Ich habe mein automatisiertes Testframework mit Selenium erstellt. Bei einem Projekt handelt es sich um reine NUnit-Tests, bei einem anderen um die Tests. Jetzt, im Testprojekt, behalte ich die Verzeichnisse in allen Umgebungen, gegen die ich meine Tests durchführe. Bisher waren viele meiner Tests schreibgeschützt und kümmerten sich nicht darum, ob die Tests nicht mit der Umgebung abliefen, in der sie sich befanden. Dies hat sich geändert, als ich anfing, einige "Schreib" -Tests durchzuführen.Verhindern, dass NUnit-Tests abhängig von der Umgebung ausgeführt werden

Ich muss verhindern, dass diese 'Schreiben'-Tests in einer anderen Umgebung als localhost ausgeführt werden. Bis jetzt habe ich versucht, Methodenattribute zu verwenden und Testmethodennamen zur Laufzeit zu erhalten und dann zu arbeiten, aber das ist nicht sehr effizient. Können Sie mir eine gute Lösung zeigen? Vielen Dank!

Antwort

0

NUnit haben category Attribut. Sie können Tests nach Kategorien gruppieren und nur gewünschte Kategorien ausführen.

+0

Ich denke, ich habe dieses Attribut vor, aber diese Gruppen Tests zu einer Kategorien, aber immer noch, wenn ich vergessen, URL (in app.config) zu ändern, zeigt auf QA Umgebung sagen, es wird immer noch diese Tests ausführen. Aber ich könnte falsch liegen ... – Jakubee

+0

@Jakubee Sie konfigurieren für jede Umgebung separate Testkonfigurationen, und jede Konfiguration enthält eine ausgewählte Gruppe von Tests. Wenn Sie die Datei app.config nicht ändern, passiert nichts, weil diese Testgruppe nicht funktioniert. – BWA

2

Ich würde die Tests mit einem bestimmten Kategorienamen ausschließen und dann eine SetUp-Funktion definieren, die die Ausführung der Tests verhindert, wenn sie mit diesem Namen versehen sind und Sie sich in einer bestimmten Umgebung wie Produktion befinden. Platzieren Sie die SetUp-Funktion in einer BaseClass und lassen Sie sie von allen Test-Fixtures erben. Die Setup-Funktion wird vor jedem Test ausgeführt und verhindert, dass sie bei Bedarf ausgeführt wird.

Etwas wie folgt aus:

public class BaseSetup 
{ 
     protected const string CategoryToExclude = "Write"; 

     [SetUp] 
     public void Init() 
     { 
      string env = ConfigurationManager.GetEnvironment(); 
      if (env == Constants.Environments.PROD && (TestContext.CurrentContext.Test.Properties["Categories"].Contains(CategoryToExclude))) 
      { 
       Assert.Inconclusive(String.Format("Cannot run this test on environment: {0}", env)); 
      } 
     } 
    } 

    [TestFixture] 
    public class UnitTests : BaseSetup 
    { 
     [Test] 
     [Category(CategoryToExclude)] 
     public void TestMethod1() 
     { 
      Console.WriteLine("TestMethod1"); 
     } 

     [Test] 
     public void TestMethod2() 
     { 
      Console.WriteLine("TestMethod2"); 
     } 
    } 

hoffe, das hilft!

+0

Ihre Antwort ist fast die gleiche, mit der ich endete. Ich werde es abstimmen, da dies eine detailliertere und korrekte Antwort ist. Vielen Dank!! – Jakubee

+0

Danke für meine erste Verbesserung @Jakubee! Ich möchte auch erwähnen, dass TestContext.CurrentContext.Test.Properties ["Categories"] nicht in allen Versionen von NUnit funktioniert, da sie immer noch damit experimentieren ... in diesem Fall würde ich vielleicht den Namen der Testen Sie mit der Kategorie, und verwenden Sie dann TestContext.CurrentContext.Test.Name.Contains (CategoryToExclude). – Xena