2013-10-07 3 views
0

TFS 빌드로 작업하는 specflow UI 테스트를 시도하는 중이고 매우 가까이 있습니다.nunit 및 TFS 빌드를 사용하는 specflow 플러그인

나는 브라우저의 수에 동일한 테스트를 실행할 수 있기를 원하고, 그래서 몇 가지 조사 후 나는이 발견 :

http://www.baseclass.ch/blog/Lists/Beitraege/Post.aspx?ID=4&mobile=0

을 그리고 로컬 테스트 실행을위한 꿈처럼 작동합니다. 다음 단계는 TFS 2010 빌드 중에 셀레늄 그리드를 호출하는 것입니다.

nunit 커뮤니티 빌드 작업을 내 빌드 템플리트로 가져간 후에 해결할 수없는 오류가 발생했습니다. 빌드는 다음과 같은 오류를보고합니다

Error: The system cannot find the file specified. Stack Trace: at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo) at System.Diagnostics.Process.Start() at TfsBuildExtensions.Activities.CodeQuality.NUnit.RunProcess(String fullPath, String workingDirectory, String arguments) in d:\Projects\CodePlex\teambuild2010contrib\CustomActivities\Legacy\VS2010\Source\Activities\CodeQuality\NUnit\NUnit.cs:line 339 at TfsBuildExtensions.Activities.CodeQuality.NUnit.PublishMSTestResults(String resultTrxFile, String collectionUrl, String buildNumber, String teamProject, String platform, String flavor) in d:\Projects\CodePlex\teambuild2010contrib\CustomActivities\Legacy\VS2010\Source\Activities\CodeQuality\NUnit\NUnit.cs:line 394 at TfsBuildExtensions.Activities.CodeQuality.NUnit.PublishTestResultsToTFS(ActivityContext context, String folder) in d:\Projects\CodePlex\teambuild2010contrib\CustomActivities\Legacy\VS2010\Source\Activities\CodeQuality\NUnit\NUnit.cs:line 387 at TfsBuildExtensions.Activities.CodeQuality.NUnit.InternalExecute() in d:\Projects\CodePlex\teambuild2010contrib\CustomActivities\Legacy\VS2010\Source\Activities\CodeQuality\NUnit\NUnit.cs:line 299 at TfsBuildExtensions.Activities.BaseCodeActivity.Execute(CodeActivityContext context) in d:\Projects\CodePlex\teambuild2010contrib\CustomActivities\Legacy\VS2010\Source\Common\BaseCodeActivity.cs:line 67.

그러나, 이것은 나에게로 깊은 오류를 마스킹 것으로 보인다 단순히 NUNIT는 사용자 지정 어셈블리를로드 할 수 있다고 말한다. 내가 경로를보고 시작이에서

System.Configuration.ConfigurationErrorsException : The type 'OpenQA.Selenium.Remote.RemoteWebDriver, Baseclass.Contrib.SpecFlow.Selenium.NUnit.SpecFlowPlugin' could not be found. It may require assembly qualification, e.g. "MyType, MyAssembly".

at Autofac.Configuration.ConfigurationRegistrar.LoadType(String typeName, Assembly defaultAssembly) at Autofac.Configuration.ConfigurationRegistrar.RegisterConfiguredComponents(ContainerBuilder builder, SectionHandler configurationSection) at Autofac.Configuration.ConfigurationRegistrar.RegisterConfigurationSection(ContainerBuilder builder, SectionHandler configurationSection) at Autofac.Configuration.Core.ConfigurationModule.Load(ContainerBuilder builder) at Autofac.Module.Configure(IComponentRegistry componentRegistry) at Autofac.ContainerBuilder.Build(IComponentRegistry componentRegistry, Boolean excludeDefaultModules) at Autofac.ContainerBuilder.Build(ContainerBuildOptions options) at RegistrationForm.Tests.Acceptance.Features.UserRegistrationFeature.FeatureSetup() in c:\Builds\1\Testing\RegistrationForm - Nightly - Main\Sources\Testing\RegistrationForm\Main\RegistrationForm.Tests.Acceptance\Features\UserRegistration.feature.cs:line 0

: 그래서 나는 NUNIT 로그에 대한 빌드 서버의 바이너리 폴더를 통해보고 있었고, 내 테스트 실행 .xml 파일에 충분한 있는지 나는 다른 오류를 찾을 수 맞춤 어셈블리. 이것은 app.config 파일에서 빌드 동안 변환 된 프로젝트에 대해 지정되었으며 파일이 변환되고 있는지 확인하고 빌드 서버의 바이너리 디렉토리에 있는지 확인했습니다. 파일의 관련 섹션은이 부분입니다. 로컬로 작동

<specFlow> 
<stepAssemblies> 
    <stepAssembly assembly="SpecFlow.Assist.Dynamic" /> 
    <stepAssembly assembly="Baseclass.Contrib.SpecFlow.Selenium.NUnit.Bindings" /> 
</stepAssemblies> 
<unitTestProvider name="SeleniumNUnit" /> 
<plugins> 
    <add name="Baseclass.Contrib.SpecFlow.Selenium.NUnit" path="..\packages\Baseclass.Contrib.SpecFlow.Selenium.NUnit.1.2.0\tools" /> 
</plugins> 

. 변환 된 파일에서 경로를 변경해야한다고 생각했습니다. "

<specFlow> 
<plugins xdt:Transform="Replace"> 
    <add name="Baseclass.Contrib.SpecFlow.Selenium.NUnit" path="." /> 
</plugins> 

DLL이 같은 디렉토리 (바이너리)에 내가 시도", "."처음에 나는 내가이이 파일을 변환에 있도록 작업 디렉토리가 바이너리 디렉토리이었다 가정 , ". \"-이 중 아무 것도 작동하지 않았습니다. 따라서 조금 더 생각하고 오류를 더 자세히 읽은 후에 빌드 서버의 Sources 폴더를 살펴 봐야한다고 생각했습니다. Dll은 packages 폴더 (nuget 패키지 복원)에 있으므로 경로는 로컬로 사용하는 것과 동일해야합니다. 이것도 작동하지 않았다. 그렇다면 ".feature"파일과 관련된 경로가 오류를 던지는 것은 어떻습니까? 이것은 단순히 여분의 ".. \"- 여전히 운이 필요했습니다.

저는 약간의 손실이 있습니다. 생각할 수있는 모든 경로를 시도했지만, 필자의 specflow 플러그인과 TFS 빌드에 대한 지식은 나를 실망 시켰습니다. 아무도 내게 어떤 포인터를 줄 수 있습니까?

답변

0

나는 결국 거기에 갔다! (가 오류가 말한대로)가 OpenQA를 찾을 수 있다는 것입니다

<component 
      name="IE" 
      type="Baseclass.Contrib.SpecFlow.Selenium.NUnit.RemoteWebDriver, Baseclass.Contrib.SpecFlow.Selenium.NUnit.SpecFlowPlugin" 
      service="OpenQA.Selenium.Remote.RemoteWebDriver, WebDriver" 
      instance-scope="per-dependency"> 
    <parameters> 
     <parameter name="browser" value="InternetExplorer" /> 
     <parameter name="url" value="http://192.168.1.3:4444/wd/hub" /> 
    </parameters> 
    </component> 

문제 :

그래서 어딘가에서이 설정의 라인을 따라 내의 app.config에서이 같은 결과가 endded 셀레늄. 원격. 원격 웹 드라이버. 나는 bassclass 페이지에서 찾은 예제 중 하나에서 이것을 보았습니다. OpenQA.Selenium으로 변경하십시오.IWebDriver는 모두 정상적으로 작동했으며 nUnit은 TFS 2010 빌드 서버에서 specFlow 테스트를 실행할 수있었습니다. 빌드가 결과를 구문 분석하려고 시도 할 때 VST를 사용하기 때문에 MSTest 11 대신 10을 사용하려고했습니다 (prob는 VS 2012를 사용했기 때문에). 그러나이 TFS 머신은 개념의 증거 일 뿐이며 Windows 7의 Virtual PC에서 실행되는 Windows 2008 32 비트 에디션이었습니다 (64 비트를 실행할 수 없기 때문에 VS2012를 빌드 서버에 설치할 수 없었습니다). 저는 MStest 11을위한 새로운 환경 변수를 만들고 MSTest 10을 가리키면서이를 해결했습니다. 이제 전체 프로세스가 완벽하게 작동합니다.

0

그러나 초기 오류는 기본적으로 TFSs nunit 지원이 CreateProcess를 호출 할 때 파일을 찾을 수 없다는 것을 말하며 로컬 테스트 실행을 위해 작동한다고 말하면서 NUnit가 컴퓨터에 설치되지 않은 것처럼 간단합니다. 너를 위해 시험을하고 있니?

+0

nunit이 있고, 내가 말했듯이, 다른 오류를 표시하는 nunit 테스트 실행 출력 파일을 얻을 수 있습니다. 내가 아는 한 nunit은 specflow를 실행 중이며 플러그인을 찾을 수 없으며 오류가 발생합니다. 그 다음에 nunit은 빌드 로그에 자신을 오도하는 오류가 있음을보고합니다. –

관련 문제