문제

Windows Server 2003에서 CC.NET에서 XUnit으로 Watin Tests를 실행하고 있습니다.

TestDriven.net이있는 개발 상자와 Xunit GUI 앱이있는 서버에서 모두 잘 실행되는 테스트가 많이 있습니다. 그러나 CC.NET이 테스트를 실행할 때 (MSBuild 작업의 일부로) 기능

ie.ContainsText("some text to find");

예상 값을 반환하지 마십시오. IE 객체의 다른 함수 및 속성은 정상적으로 작동하는 것으로 보입니다 : Button (...). Click (), TextBox (...). 값 등.

서비스 계정이 "서비스가 데스크탑과 상호 작용할 수 있도록 허용"이 필요하다는 것을 알고 있습니다.

지역 시스템과 로컬 관리자 하에서이 실행 CC 서비스를 시도했습니다. 관리자 계정은 방금 걸려 테스트 실행을 끝내지 않는 것처럼 보입니다 (IExplorer.exe 프로세스의 인스턴스를 만듭니다.

서버에서 권한을 부여하는 데 문제가 있습니까? 아니면 구성에서 무언가를 남겨 두었습니까?

도움이 되었습니까?

해결책

우리는 방금이 문제를 해결하는 방법을 알아내는 것을 끝냈습니다. 이제 CruiseControl.net을 통해 서비스로 실행되는 Watin 테스트가 진행되었습니다.

보안 설정 방식으로 인해 테스트중인 웹 사이트에 액세스하기 위해 특정 사용자로 실행하려면 CC.NET 서비스가 필요합니다. 서비스가 도메인 사용자로 실행되고 있으므로 서비스 보안 탭에서 '사용자가 데스크탑과 상호 작용할 수 있도록 허용'확인란이 비활성화되어 있습니다. 프로세스가 재부팅시 자동으로 시작되기 때문에 항상 로그인 한 사용자에서 명령 프로세스를 실행하고 싶지 않습니다. 이제 우리는 알아 냈습니다

우리 가이 작업을 수행 한 방식은 먼저 Nunit-Console.exe를 호출하기 위해 배치 파일을 만드는 것입니다. nunit-console.exe에 대한 매개 변수는 매개 변수로 배치 파일로 전달 된 다음 매개 변수를 전달합니다. 두 번째, 마지막으로 배치 파일의 줄은 nunit-console.exe에서 반환 된 리턴 코드를 반환합니다. 배치 파일은 본질적으로 다음과 같습니다.

 nunit-console.exe %1 %2
 exit /b %ERRORLEVEL%

Nunit-Console로 전달하는 매개 변수의 수는 귀하의 요구에 따라 다를 수 있습니다.

우리는 빌드에 nant를 사용하고 있으므로 기존의 nant 작업을 대체하여 Nunit-Console을 CMD.exe를 호출하는 EXEC 작업으로 호출했습니다.

   <exec program="cmd.exe" failonerror="true">
      <arg value="/interactive" />
      <arg value="/c" />
      <arg value="[batch file name]" />
      <arg value="[parameter one value]" />
      <arg value="[parameter two value" />
   </exec>

MSBuild에서 동일한 작업이 어떻게 보일지 모르겠지만 찾을 수 있다고 확신합니다. 궁극적 인 결과는 본질적으로 다음과 같이 보이는 명령입니다.

   cmd.exe /interactive /c [batch file name] [parameter one value] [parameter two value]

또는 NANT를 사용하고 MSBuld Nant 작업을 만들어 기존 빌드를 호출 할 수 있습니다.

cmd.exe에 대한 '/Interactive'매개 변수가 키입니다. 데스크탑과 상호 작용할 수있는 권한이있는 프로세스에서 배치 파일을 실행합니다. '/c'매개 변수가 필요한 경우 실제로는 긍정적이지 않지만 그대로 작동합니다. 우리는 여전히 Nunit에게 결과를 동일한 XML 파일에 로그인하라고 말하면서 합병 작업이 변경 될 필요가 없으며 크루즈 컨트롤에 대한 테스트 결과를보고하는 것이 훌륭하게 작동합니다.

다른 팁

Watin은 브라우저 자동화에 의존하여 작업을 수행하므로 "서비스가 데스크탑과 상호 작용할 수 있도록합니다"설정.

Watin이 실행하려고 할 때 현재 로그인 된 데스크탑이 아닌 서비스 계정 하에서 그렇게 할 것입니다. 즉, Watin이 실행중인 계정이 실제로 이전에 시작하지 않았을 가능성이 있습니다. IE의 초기 시작 시퀀스에 앉아 설정과 Hoo-Hah의 모든 것을 홍보 할 수 있습니다.

또한 올바르게 기억하면 데스크탑 설정과 상호 작용하려면 상호 작용하려면 활성 로그인이 필요합니다. 당시에 아무도 로그인하지 않으면 서비스가 대화 할 것이 없으며 새로운 데스크톱을 만들지 않을 것입니다.

오프라인으로 몇 가지 제안을 받았습니다.

  1. 서버에서 MSBuild로 테스트를 실행하려고 시도하십시오.
  2. 서비스 대신 콘솔에서 CC.Net을 시작하십시오.

결과로 편집합니다.

편집하다:

결과:

  1. 서버에서 MSBuild로 테스트를 완전히 실행할 수 있습니다.
  2. 명령 줄에서 ccnet.exe를 실행하면 테스트가 잘 실행됩니다. 그러나 시작시 명령 행에서 CCNET.exe를 시작하는 작업을 설정하면 테스트가 중단되고 끝나지 않습니다 (결국 타이밍).

부분 해결 방법은 결코 죽지 않는 세션에서 명령 줄 실행 파일을 실행하는 것입니다. 그래도이 솔루션이 마음에 들지 않으므로 추가 입력에 감사 할 것입니다.

왜 그 대답이 잘못된 exec 예제로 올바른지 잘 모르겠습니다 ..

나는 그것을 다시 작성했다 :

<exec> <baseDirectory>WatinTestDir</baseDirectory> <executable>cmd.exe</executable> <buildArgs>/interactive /C nunit-launcher.bat Test.dll /xml:../Test-results.xml</buildArgs> <buildTimeoutSeconds>2400</buildTimeoutSeconds> </exec>

어느 쪽이 ...하지만 모두 똑같이 실패합니다 ..

나는이 예를 따랐지만 슬프게도 도움이되지 않았다. 이 질문은 Nant에 관한 것이므로 MSBuild를 사용하기 때문에 이것에 대한 별도의 질문을 열었습니다. 여기에.

이것은 좋은 해결책이지만 문제를 해결하지는 않습니다. Watin을 사용하여 파일을 다운로드하려고한다는 것입니다.

http://blog.kikicode.com/2011/10/run-minimized-batch-file-in-task.html

이것은 나를 위해 효과가있었습니다. 문제는 CMD 프롬프트가 IE가 차단되는 것을 차단하고 있다는 것입니다. CMD 프롬프트를 최소화 할 수 있었을 때 IE는 초점을 얻고 프로세스에 필요한 파일을 다운로드 할 수있었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top