2016-04-14 3 views
1

Wenn ich Cross-Browser-Tests mit Nunit mit TestFixture implementieren meine Tests fehlgeschlagen, wenn sie zusammen laufen, bestanden, wenn sie einzeln ausgeführt werden. Ausnahme wurde ausgelöst, wenn die SendKeys-Methode aufgerufen wurde, weil das Argument null war, aber dies ist nicht die Ursache, denn wenn ich diesen Test erneut durchführe, wird der Test bestanden. Natürlich habe ich versucht, dieses Problem zu debuggen, aber ich finde keine Lösung. Der einfache OpenHomePage-Test funktioniert einwandfrei. Hier ist mein Code:Test fehlgeschlagen, wenn zusammen laufen, bestanden, wenn einzeln ausgeführt

[TestFixture(typeof(ChromeDriver))] 
[TestFixture(typeof(FirefoxDriver))] 
public class TestClass<TWebDriver> where TWebDriver : IWebDriver, new() 
{ 
    [OneTimeSetUp] 
    public void CreateDriver() 
    { 
     try 
     { 
      PropertiesCollection.driver = new TWebDriver(); 
      Console.WriteLine("Opened browser"); 
      PropertiesCollection.driver.Url = "http://localhost:81/"; 
      Console.WriteLine("Opened URL"); 
      PropertiesCollection.driver.Manage().Window.Maximize(); 
      //initialize test data from excel sheet 
      ExcelLib.PopulateInCollection(@"c:\users\bolec\documents\visual studio 2015\Projects\RowingSectionTests\RowingSectionTests\TestData.xlsx"); 
     } 
     catch (Exception msg) 
     { 
      Console.WriteLine(msg.ToString()); 
     }         
    } 

    [OneTimeTearDown] 
    public void FixtureTearDown() 
    { 
     HomePageObjects homeObj = new HomePageObjects(); 
     homeObj.Logoff(); 
     if (PropertiesCollection.driver != null) PropertiesCollection.driver.Quit(); 
    } 

    [TearDown] 
    public void TearDown() 
    { 
     //Take screen on failure 
     if (TestContext.CurrentContext.Result.Outcome.Status.Equals(TestStatus.Failed)) 
     { 
      string fileName = Regex.Replace(TestContext.CurrentContext.Test.FullName + "_" + DateTime.Now.ToString(), "[^a-z0-9\\-_]+", "_", RegexOptions.IgnoreCase); 
      ((ITakesScreenshot)PropertiesCollection.driver).GetScreenshot().SaveAsFile(@"c:\users\bolec\documents\visual studio 2015\Projects\RowingSectionTests\RowingSectionTests\Screenshots\" + fileName + ".png", System.Drawing.Imaging.ImageFormat.Png); 
     } 
    } 

    //will always passed 
    [Test] 
    public void OpenHomePage() 
    {   
     HomePageObjects homeObj = new HomePageObjects(); 
    } 

    //login with correct credentials will login to acc 
    [Test] 
    public void Login() 
    {    
     HomePageObjects homeObj = new HomePageObjects(); 
     LoginPageObjects loginObj = homeObj.ToLoginPage(); 
     loginObj.Login(ExcelLib.ReadData(1, "UserName"), ExcelLib.ReadData(1, "Password")); 

     //checking is URL correct after loggin 
     Assert.AreEqual("http://localhost:81/", PropertiesCollection.driver.Url.ToString()); 
     //checking is login is correct on navbar 
     Assert.AreEqual(homeObj.GetUserLoginStringInButton().ToLower(), ExcelLib.ReadData(1, "UserName").ToLower()); 
    } 
+0

Nein. Da er NUnit V3 verwendet (sonst würde es nicht kompilieren), sind OneTimeSetUp und OneTimeTearDown korrekt. Die Attribute TestFixtureXxxxxXx sind in V3 veraltet, würden aber dasselbe tun. – Charlie

+0

Haben Sie die parallele Ausführung aktiviert? Wenn dies der Fall ist, können sich die beiden Vorrichtungen gegenseitig stören. – Charlie

+0

Ist PropertiesCollection.driver eine statische? Wenn ja, haben Sie zwei verschiedene Fixtures, die dieselben Daten verwenden. Wird definitiv nicht parallel funktionieren. Wenn nicht parallel, muss jeder Test nach sich selbst aufräumen. – Charlie

Antwort

1

Das Problem mit der statischen PropertiesCollection besteht darin, dass alle Änderungen an die statischen Klasse in einem Test werden in dem anderen Test reflektiert werden, um die Chancen zu machen oder einen Test Abhängigkeit sehr hoch zu schaffen (wie du hast entdeckt).

Sie haben zwei Möglichkeiten, erstens verwenden Sie keine statische statt einer Instanz. Alternativ stellen Sie sicher, dass Sie Ihre PropertiesCollection in einer Setup- und Teardown-Methode auf ihren erforderlichen Status zurücksetzen.

Die Verwendung des OneTimeSetUp-Attributs ist ebenfalls riskant, da es nur einmal für alle Tests in Ihrem Fixture ausgeführt wird.

Verwandte Themen