我们有几千个本机和.NET单元测试。在Visual Studio 2012中,我可以运行并查看按C ++ / C#项目分组的结果。
我希望得到类似这样的观点,最好按解决方案(产品)分组,然后将项目(.dll)分组给业务人员。至少我希望至少有一些测试运行并且每个解决方案都失败了。
TFS有没有正确的方法呢?
我到处寻找并继续撞墙,
TFS构建测试结果似乎并未存储有关测试类别的任何信息,因此我无法使用这些信息按解决方案进行分组
.vsmdi列表和.testsettings文件已在VS 2012和TFS 2012中逐步淘汰。我们在每个解决方案之前都有单独的列表...现在它只是* test * .dll
对于这么多粒度的测试结果,测试计划和自定义SSRS报告似乎完全没用(为什么?)。 TfsTestWarehouse几乎没有任何东西 - 足以满足每次构建通过/失败的总测试。
答案 0 :(得分:1)
TRX文件只是XML,不需要解析它们。您可以编写XSLT转换以您需要的格式显示数据。 XSLT的一个好处是它具有内置的聚合,分组,排序等功能。
如果TRX文件本身不包含解决方案信息(很可能),那么您将需要生成两阶段报告:准备数据,生成报告。
准备将是一个相对简单的命令行工具,它将覆盖你的sln文件,并构建一个项目所属的项目的地图(搜索网络,我打赌已经有一堆脚本)
生成部分将使用该映射作为转换和报告生成的参数,以正确地聚合数据。
我知道,这是一个通用的回应,但希望它至少有一点帮助。
答案 1 :(得分:0)
我最终通过在构建时通过自定义MSBuild任务在自定义程序集属性(即测试.dll)中添加项目和解决方案信息来解决此问题。这大致是我遵循的步骤(从记忆中)。
首先,我创建了自定义属性:
[AttributeUsage(AttributeTargets.Assembly)]
public class ProjectAttribute: Attribute {
public string Project { get; set; }
public string Solution { get; set; }
public ProjectAttribute(string project, string solution)
{
this.Project = project;
this.Solution = solution;
}
}
此自定义属性是在所有单元测试项目引用的程序集中定义的。
然后我创建了一个非常简单/基本的内联MSBuild任务,CreateProjectAttribCs
,它将动态创建一行额外的C#文件。类似的东西:
[assembly: ProjectAttribute(Project="$(ProjectName)") Solution="$(Solution)"]
然后我将此文件添加到<Compile>
项目组中,在编译之前调用的自定义MSBuild目标内部(再次,从内存中调用):
<Target Name="CreateProjectAttribCs" BeforeTargets="Compile">
<CreateProjectAttribCs File="ProjectAttribute.cs" />
<ItemGroup>
<Compile Include="ProjectAttribute.cs" />
</ItemGroup>
</Target>
<Target Name="CleanupProjectAttribCs" AfterTargets="Compile>
<Delete Files="ProjectAttribute.cs" />
</Target>
对于C ++项目,我以与ProjectAttrib.cs
文件类似的方式将项目和解决方案信息添加到“注入”字符串表资源。
所有这一切的一个主要烦恼是,开发人员必须通过编辑.csproj或.vcxproj来添加此自定义MSBuild .targets
文件(包含自定义目标和程序集引用)。
为了避免这种情况,我还为我们团队的单元测试创建了一个自定义的Visual Studio项目模板,以便所有内容都已添加,我的开发人员将永远不会看到MSBuild项目的内部。
最难的部分是添加项目/解决方案信息。一旦我有了这个,就可以很容易地读取测试程序集中的自定义属性或原生.dll中的String Table资源,并将信息添加到从测试结果解析/转换的数据到自定义测试结果数据库和报告。