Dav*_*ing 7 tfs automated-tests mstest fitnesse tfsbuild
我正在将Fitnesse Acceptance测试套件集成到基于TFS的CI过程中.
我可以以RESTful方式运行Fitnesse测试套件(http://fitnesse.org/FitNesse.UserGuide.RestfulTests):
http://myfitnesseserver/MyTestSuite?suite&format=xml
Run Code Online (Sandbox Code Playgroud)
并获取测试结果的XML文档.
我想将其转换为TFS可以解释为通过/失败的测试数量的格式.
有什么指针吗?
谢谢
我有一个类似的目标,所以我创建了一个通用的命令行Fitnesse测试运行器,它将测试或套件作为Web请求执行,解析生成的XML并使用下面的样式表对其进行转换,最后将结果写入a由Visual Studio中的通用测试指定的%TestOutputDirectory%中名为"results.xml"的文件.
结果文件由Visual Studio加载并解析为摘要结果文件,该文件报告Fitnesse测试或套件中通过或失败的子测试的数量.这里记录了输出文件格式的详细信息,但是在默认的Fitnesse wiki中针对Fitnesse的两分钟示例运行时,一个简单的示例如下所示:
<?xml version="1.0" encoding="utf-8"?>
<SummaryResult>
<TestName>TwoMinuteExample</TestName>
<TestResult>Failed</TestResult>
<ErrorMessage>6 right, 1 wrong, 0 ignores and 0 exceptions.</ErrorMessage>
<InnerTests>
<InnerTest>
<TestName>TwoMinuteExample</TestName>
<TestResult>Failed</TestResult>
<ErrorMessage>6 right, 1 wrong, 0 ignores and 0 exceptions.</ErrorMessage>
</InnerTest>
</InnerTests>
</SummaryResult>
Run Code Online (Sandbox Code Playgroud)
因此,现在可以在测试项目中为要从Visual Studio执行的每个Fitnesse测试/套件或作为构建的一部分创建Visual Studio"通用测试".通用测试必须指定wiki中通用测试运行程序可执行文件,Fitnesse服务器,端口和测试/套件名称的路径.它需要选中"摘要结果文件"框并输入"Results.xml"以获取在测试运行或构建的输出中显示的详细信息.
我可以与您共享此代码,或者您可以使用通用命令行测试运行器并将输出传递到一个小应用程序,该应用程序使用下面的样式表转换结果.
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="msxsl"
>
<xsl:output method="xml" indent="yes"/>
<xsl:variable name="GlobalRightCount" select="sum(//result/counts/right)"/>
<xsl:variable name="GlobalIgnoresCount" select="sum(//result/counts/ignores)"/>
<xsl:variable name="GlobalWrongCount" select="sum(//result/counts/wrong)"/>
<xsl:variable name="GlobalExceptionsCount" select="sum(//result/counts/exceptions)"/>
<xsl:variable name="GlobalFailureCount" select="$GlobalWrongCount + $GlobalExceptionsCount"/>
<xsl:template match="testResults">
<SummaryResult>
<TestName>
<xsl:value-of select="rootPath"/>
</TestName>
<xsl:choose>
<xsl:when test="$GlobalFailureCount = 0">
<TestResult>Passed</TestResult>
<xsl:call-template name="GlobalErrorMessage"/>
</xsl:when>
<xsl:otherwise>
<TestResult>Failed</TestResult>
<xsl:call-template name="GlobalErrorMessage"/>
</xsl:otherwise>
</xsl:choose>
<InnerTests>
<xsl:for-each select="result">
<InnerTest>
<TestName>
<xsl:value-of select="relativePageName"/>
</TestName>
<xsl:choose>
<xsl:when test="sum(counts/wrong) + sum(counts/exceptions) = 0">
<TestResult>Passed</TestResult>
<xsl:call-template name="ResultErrorMessage"/>
</xsl:when>
<xsl:otherwise>
<TestResult>Failed</TestResult>
<xsl:call-template name="ResultErrorMessage"/>
</xsl:otherwise>
</xsl:choose>
</InnerTest>
</xsl:for-each>
</InnerTests>
</SummaryResult>
</xsl:template>
<xsl:template name="GlobalErrorMessage">
<ErrorMessage><xsl:value-of select ="$GlobalRightCount"/> right, <xsl:value-of select ="$GlobalWrongCount"/> wrong, <xsl:value-of select ="$GlobalIgnoresCount"/> ignores and <xsl:value-of select ="$GlobalExceptionsCount"/> exceptions.</ErrorMessage>
</xsl:template>
<xsl:template name="ResultErrorMessage">
<ErrorMessage><xsl:value-of select ="sum(counts/right)"/> right, <xsl:value-of select ="sum(counts/wrong)"/> wrong, <xsl:value-of select ="sum(counts/ignores)"/> ignores and <xsl:value-of select ="sum(counts/exceptions)"/> exceptions.</ErrorMessage>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
更新:添加通用测试运行器代码
这绝对只是概念证明,不一定是最终解决方案.您可以将此技术与Martin Woodward的答案结合起来,以获得测试列表本身动态的完整图片.或者,您可以更改测试运行器以运行它在整个(子)维基中找到的所有测试.这里可能还有其他几种选择.
以下代码远未优化,但显示了一般过程.您可以将其粘贴到新的控制台应用程序项目中.请注意,它需要命令行参数,您可以在项目属性中为这些参数提供默认值:
示例命令行:localhost 80 FitNesse.UserGuide.TwoMinuteExample
class Program
{
static int Main(string[] args)
{
//Default to error unless proven otherwise
int returnValue = 1;
try
{
List<string> commandLineArgs = args.ToList<string>();
string host = args[0];
int port = int.Parse(args[1]);
string path = args[2];
string testCommand = "suite";
XmlDocument fitnesseResults = GetFitnesseResult(host, port, path, testCommand);
XmlDocument visualStudioResults = TransformFitnesseToVisualStudioResults(fitnesseResults);
visualStudioResults.Save("Results.xml");
var testResultNode = visualStudioResults.DocumentElement.SelectSingleNode("TestResult");
var value = testResultNode.InnerText;
if (value == "Success")
{
returnValue = 0;
}
}
catch (System.Exception ex)
{
Console.WriteLine(ex.ToString());
}
return returnValue;
}
private static XmlDocument GetFitnesseResult(string host, int port, string path, string testCommand)
{
UriBuilder uriBuilder = new UriBuilder("http", host, port, path, "?" + testCommand + "&format=xml");
WebRequest request = HttpWebRequest.Create(uriBuilder.Uri);
request.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
WebResponse response = request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader responseReader = new StreamReader(responseStream);
string responseString = responseReader.ReadToEnd();
XmlDocument rawResults = new XmlDocument();
rawResults.LoadXml(responseString);
return (rawResults);
}
private static XmlDocument TransformFitnesseToVisualStudioResults(XmlDocument fitnesseResults)
{
XslCompiledTransform transformer = new XslCompiledTransform(false);
string codeBase = Assembly.GetEntryAssembly().CodeBase;
string directory = Path.GetDirectoryName(codeBase);
string xsltPath = Path.Combine(directory, "FitnesseToSummaryResult.xslt");
transformer.Load(xsltPath);
MemoryStream resultsStream = new MemoryStream();
transformer.Transform(fitnesseResults, null, resultsStream);
resultsStream.Position = 0;
XmlDocument results = new XmlDocument();
results.Load(resultsStream);
return (results);
}
}
Run Code Online (Sandbox Code Playgroud)
2008 年的 TRX 文件格式相当容易生成,但没有详细记录。它包含一堆 GUIDS - 最好的文档在这篇博客文章中:
我编写了一些代码,它将获取 JUnit 的输出并将其转换为 TRX 文件。它实际上分两步完成 - 第一步将所有 JUnit 结果文件合并到一个文件中,并生成 TRX 文件所需的必要 GUIDS。然后,它对合并的 XML 文件运行 XSLT,将其转换为 TRX 文件格式,然后使用 Visual Studio 团队版(团队套件、开发人员或测试版)附带的 MSTest.exe 命令行工具发布到 TFS。
您可以在此处根据 MSPL 许可证下载该代码
归档时间: |
|
查看次数: |
6023 次 |
最近记录: |