将 Roxy Unit Tester 集成到 TeamCity 版本中



Marklogic对roxy的描述如下:

Roxy Unit Tester 生成 JUnit XML 输出,因此您可以将其与您喜欢的连续测试工具一起使用

有人知道如何将Roxy Unit Tester实际集成到TeamCity构建中吗?

具体来说,我正在寻找一种从 TeamCity 调用单元测试执行的方法,以及一种检索单元测试输出的方法。理想情况下,当测试未全部成功通过时,能够使生成失败。

Roxy的命令行界面(ml或ml.bat(可用于运行单元测试表单命令行。返回的XML采用某种标准格式(jUnit或其他格式(,可以解析并用于确定测试的执行方式。

我们将 Roxy 测试与 Jenkins 的 ml 命令结合使用,并根据结果停止构建过程。

此功能的(非常薄的(信息可以在这里找到:https://github.com/marklogic/roxy/wiki/Deployer

基本上:

> ml <environment> test

然后看看输出,看看这将如何帮助你。

TeamCity集成 "我个人最喜欢的CI构建系统--我会使用"命令行"运行器",选择"自定义脚本"并遵循David Ennis的建议。

若要报告测试结果和生成状态,请使用团队城市"[服务消息]界面。 阿拉伯数字

使用"流 ID"分隔组件。对每个测试套件使用"测试套件消息"。 这可能包括捕获要在仪表板中显示的输出。

对于每个测试,您可以生成不同的结果。

我没有使用过"XML 报表处理",但看起来可能有效

The XML Report processing build feature allows using report files produced by an external tool in TeamCity. TeamCity will parse the specified files on the disk and report the results as the build results.
The report parsing can also be initiated from within the build via service messages.
XML Report Processing supports the following testing frameworks:
JUnit Ant task
Maven Surefire/Failsafe plugin
NUnit-Console XML reports
TRX reports (for MSTest 2005/2008/2010/2012/2013/2015 and VSTest 2012/2013/2015)
Google Test XML reports
XML output from CTest

尽管使用 ml <environment> test 也是一个完全有效的解决方案,但我采取了略有不同的方法:

可以直接调用 xquery 模块(即 default.xqy(,该模块在此地址运行测试:http://your-server-name:test-app-port-number/test/

查看模块的代码,在参数"func"中传递值"run"将触发指定"套件"的执行,并以指定的"格式"返回结果。

从那里,我创建了一个简单的Power-Shell脚本,该脚本首先调用"list"方法来检索已部署测试套件的列表。

Function Get-Tests-List {
    Write-Host "Retrieving test list"
    $body = @{ 
        func="list" 
    }
    [xml]$tests = Invoke-RestMethod -Method Post -Uri $url -Headers $headers -Body $body
    [System.Xml.XmlNamespaceManager] $nsmgr = $tests.NameTable;
    $nsmgr.AddNamespace('t','http://marklogic.com/roxy/test');
    $root = $tests.DocumentElement
    $root.SelectNodes("//t:suite", $nsmgr) | Select path
}

,然后循环浏览此列表以执行测试并将结果另存为 JUnit xml 文件

$url = "http://xxxxx:8102/test/"
$headers = @{"Authorization"="Digest username=""xxxx"", realm=""public"", nonce="""", uri=""/test/"", response=""xxxxxxxxxxx"", opaque="""""}
$output_folder = "C:DeploymentScriptstest-outputs"
$suites = Get-Tests-List
foreach($suite in $suites) {
    $body = @{ 
        func="run" 
        format="junit" 
        runsuiteteardown = "true"
        runteardown = "true"
        suite=$suite.path
    }
    Invoke-RestMethod -Method Post -Uri $url -Headers $headers -Body $body -OutFile ("{0}{1}.xml" -f $output_folder,$suite.path)
}

然后将这些文件传递给"XML 报告处理"构建功能,该功能负责报告测试结果,甚至在需要时使构建失败。

最新更新