2017-12-06 7 views
0

Selenium Webdriver 테스트를 만들고 싶습니다.이 기능이 작동하려면 OWin SelfHost를 사용하여 기존 OWin 응용 프로그램을 시작하고 싶습니다.셀렌 및 OWin 셀프 호스트 - 디버깅 방법은 무엇입니까?

어떤 이유로 든 OWin 서버는 중단 점이 있으면 응답하지 않습니다 ... 누군가 내가 뭘 잘못하고 있는지 말해 줄 수 있습니까?

아래는 그래서, 응답을받을 것으로 예상하지만, 중단 점 적중되면, 요청이 단지 대기 머물 ...

[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(); 
    } 

좀 더 많은 정보와 코드입니다.

답변

0

테스트와 OWIN 앱은 별개입니다. 그들을 섞지 마십시오. 단위 테스트와 마찬가지로 UI 테스트를 실행해서는 안됩니다. 조롱 된 인스턴스를 만들고 테스트합니다.

OWIN 앱을 컴파일하십시오. 그것을 배치하십시오. 그것을 실행하십시오. 그런 다음 배포 된 앱과 별도의 프로세스에서 테스트를 시작하십시오. 선택적으로 테스트가 끝난 후 서버를 중지하십시오. 이것은 적절한 CI/CD 프로세스의 일부입니다. 이제 귀하의 질문에


확인 : 무슨 일이 Driver = new ChromeDriver(); 비 블로킹 것입니다. 따라서 메소드가 끝나면 가비지 컬렉터가 정리되고 이것은 효과적으로 OWIN 앱의 죽음을 의미합니다.

좋아, 그게 단순화 된 버전입니다. 설명 된 중단 점의 경우 전체 응용 프로그램이 중지되므로 응답을 처리 할 수 ​​없습니다.

이것은 잘못된 것입니다,하지만 당신은 정말 정말 동일한 응용 프로그램 내에서 작업을 수행해야한다 :

  1. 상속 (NUnit과) [OneTimeSetup]에서 해당 자료의 일부 기본
  2. 에서 모든 테스트 클래스 또는 동등한 방법으로 별도의 스레드에서 명시 적으로 말하기 전까지 멈추지 않을 owin 서버를 만듭니다. [OneTimeTearDown]의 (while(!ready2Exit){Thread.Sleep(100);})
  3. ready2Exit에서 true으로 설정합니다.

하지만 약간의 차이는 있습니다.

+0

안녕하세요 Mike, 내 지속적인 배포 파이프 라인에서 실제 배포하기 전에 webdriver/selenium 테스트를 실행하고 싶습니다. 새로운 ChromeDriver(); 이후 OWin 프로세스가 가비지 수집을 마친 후 이유를 따르지 않습니다. 나는'[OneTimeTearDown]'메서드에서 모든 테스트의 끝에서 처리 할 IDisposable 인 HttpServer에 대한 참조를 유지합니다. 다른 스레드 (또는 Topshelf)에서 시작하는 방법에 대해 생각해 보겠습니다. - 궁금합니다! 도움을 주셔서 감사합니다. – rdehuyss

+0

OK, 서버가 TearDown에서만 처리되는 경우 가비지 수집되지 않습니다. 다음은 답변의 두 번째 이탤릭체 부분입니다. 응용 프로그램이 중단 점에 도달하면 완전히 고정되므로 Owin 앱은 단순히 응답하지 않습니다. –