specflow试图生成测试执行报告时失败(specflow fails when trying t

2019-07-30 06:56发布

我有一个是一个使用SpecFlow,NUnit的和海狸鼠对Web应用程序做验收测试的一个项目。 我有一个生成服务器上通过詹金斯项目建设确定。 詹金斯称它运行在规范项目的MSBuild一个psake脚本,脚本调用NUnit控制台运行规范/测试,然后我想生成SpecFlow报告。

Framework "4.0"

task Default -depends RunSpecs

task BuildSpecs {
    $env:EnableNuGetPackageRestore = "true"
    msbuild /t:Rebuild ReturnsPortal.Specs.csproj
}

task RunSpecs -depends BuildSpecs {
    exec { & "C:\path\to\NUnit 2.5.9\bin\net-2.0\nunit-console-x86.exe" /labels /out=TestResult.txt /xml=TestResult.xml .\bin\Debug\TheWebApp.Specs.dll }
    exec { & "C:\path\to\SpecFlow\1.8.1\specflow.exe" nunitexecutionreport TheWebApp.Specs.csproj /out:SpecResult.html }
}

到specflow.exe这最后exec调用失败,虽然与:

元素<ParameterGroup>元素<UsingTask>下面是无法识别的。 C:\ Program Files文件(x86)的\詹金斯\ \工作TheWebApp \工作区\网络\网站\ TheWebApp.nuget \ nuget.targets

google搜索暗示,也许是与MSBuild的版本问题的一个比特被使用(例如, 在这里 , 在这里 )。 但我有Framework "4.0"在我psake脚本,规格项目的目标是.NET框架4.0,和它建立在构建步骤很好,所以我不知道为什么specflow好像是用的MSBuild的早期版本。 或者,也许是这个问题在其他地方?

Answer 1:

这是我的答案,从SpecFlow维基 :

重要的是.NET 4.0的项目:由于specflow.exe编译为.NET 3.5,它不能被默认加载.NET 4.0程序集。 要生成此报告为.NET 4.0的项目,你必须强制specflow.exe使用配置文件使用.NET 4.0运行时。 只需复制的配置之下,并创建一个specflow.exe.config文件,并把它旁边的specflow.exe,你将能够创建步骤定义报告。

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup> 
        <supportedRuntime version="v4.0.30319" /> 
    </startup> 
</configuration> 


Answer 2:

我尝试使用上述建议的配置文件的解决方案。 它为本地测试,但只要我把我的代码,它扼杀它我们的CI环境,因为在CI环境没有该配置文件。 我们限制了CI的环境中只使用干净的版本的各种包,所以我们不想尝试注入特殊配置到CI服务器。

我们注意到,SpecFlow工作只是我们几个.NET 4.0项目的精细无特殊配置文件。 一个小小的研究后,实际的“问题”似乎是的NuGet 2.1。 一切为了.NET 4.0项目的NuGet 1.7工作正常。

某处1.7和2.1之间的NuGet介绍了NuGet.targets文件中的新功能,不被旧版本的MSBuild的支持。 具体地,问题似乎是<ParameterGroup>元件下方<UsingTask>如由错误消息说明。

在目标文件粗略地看一眼表明该科负责保持的NuGet是最新的。 删除此节完全解决了,添加配置文件上面呢,虽然也消除自我更新功能,是似乎提供了同样的问题。 鉴于.targets文件被提交到存储库,该解决方案也适用于我们的CI环境出来的CI方面的任何变化。

这并不一定比NGM的一个更好的解决方案,它只是一个不同的一个。 根据您的环境,这可能是一个最好的路要走,也许不是。



文章来源: specflow fails when trying to generate test execution report