2017-12-06 4 views
0

Ich möchte einen Selenium-Webdriver-Test erstellen und damit dies funktioniert, möchte ich die bestehende OWin-Anwendung mit OWin SelfHost starten.Selenium und OWin Selfhost - wie debuggen?

Aus irgendeinem Grund reagiert der OWin-Server nicht, sobald ein Haltepunkt es ist ... Kann mir jemand sagen, was ich falsch mache?

Unten ist der Code mit ein paar mehr Infos ...

[OneTimeSetUp] 
    public void InitDriverAndBackend() 
    { 
     string baseAddress = "http://127.0.0.1:9001/"; 
     httpServer = WebApp.Start<Startup>(url: baseAddress); 
     Thread.Sleep(30000); 
     //I have a breakpoint on the line below. Before the breakpoint is hit, 
     //I receive a response when going one of my webapi's on port 9001 
     //However, once the breakpoint is hit, the server does not response at all and the request stays pending 
     Driver = new ChromeDriver(); 
    } 

So erwarte ich eine Antwort zu erhalten, aber sobald ein Haltepunkt erreicht wird, bleiben die Anfragen nur noch aus.

Antwort

0

Ihre Tests und Ihre OWIN-App sind separate Dinge. Misch sie nicht zusammen. Sie sollten keine UI-Tests wie für Komponententests ausführen, sondern eine gespielte Instanz erstellen und testen.

Kompilieren Sie Ihre OWIN App. Stellen Sie es bereit. Starte es. Starten Sie dann Ihre Tests von einem separaten Prozess gegen die bereitgestellte App. Optional, stoppen Sie den Server nach Abschluss der Tests. Dies ist ein Teil des sogenannten CI/CD-Prozesses.


OK, jetzt zu Ihrer Frage: Was passiert, ist, dass diese Driver = new ChromeDriver(); ist nicht blockierend. Wenn die Methode beendet ist, räumt der Garbage Collector auf und dies bedeutet den Tod Ihrer OWIN App.

OK, das war vereinfachte Version. Im Falle eines von Ihnen beschriebenen Haltepunkts wird die gesamte Anwendung gestoppt, sodass Ihre Antwort nicht verarbeitet werden kann.

Das ist falsch, aber Sie sollten wirklich wirklich brauchen es innerhalb der gleichen Anwendung zu tun:

  1. erben alle Testklassen von einigen Basis
  2. in dieser Basis in [OneTimeSetup] (nUnit) oder äquivalente Methode, erstellen Sie in einem separaten Thread den OWIN-Server, der nicht stoppt, bis dies explizit mitgeteilt wird (while(!ready2Exit){Thread.Sleep(100);})
  3. in [OneTimeTearDown] festlegen, dass ready2Exit zu true;

Aber beachten Sie, das ist marginal falsch.

+0

Hallo Mike, in meiner Continuous Deployment-Pipeline würde ich gerne meine Webdriver/Selenium-Tests ausführen, bevor ich sie tatsächlich einsetze. Ich folge nicht, warum nach dem 'neuen ChromeDriver();' mein OWin-Prozess Müll sammeln würde. Ich behalte einen Verweis auf den HttpServer, der eine IDisposable ist, die ich am Ende aller Tests in einer '[OneTimeTearDown]' Methode entsorge. Ich werde versuchen, es in einem anderen Thread (oder Topshelf?) Zu starten - ich bin neugierig! Vielen Dank für die Hilfe – rdehuyss

+0

OK, wenn Ihr Server nur in TearDown entsorgt wird, wird kein Müll gesammelt. Dann ist es der zweite, kursiv geschriebene Teil der Antwort: Sobald die Anwendung den Haltepunkt erreicht, ist sie vollständig eingefroren, so dass die Owin-App einfach nicht antwortet. –

Verwandte Themen