如何配置xUnit生成含userMessage的测试报告及HTML报告?
问题解答
1. 让XML包含断言的userMessage
xUnit默认的XML日志仅会在测试失败时,将断言的userMessage写入<failure>节点中。若要捕获所有断言(包括通过的)的消息,需通过以下方式实现:
- 修改测试代码,注入
ITestOutputHelper输出断言消息:
在测试类中注入ITestOutputHelper,每个断言通过后手动输出对应的userMessage,这样日志会捕获这些输出内容。示例代码:using Xunit; using Xunit.Abstractions; public class LoginTests { private readonly ITestOutputHelper _testOutput; // 构造函数注入输出助手 public LoginTests(ITestOutputHelper testOutput) { _testOutput = testOutput; } [Fact] public async Task Login_is_Success() { var client = new Client(); var loginResponse = await carConfigClient.Login(); var errorAssertMsg = "Error should be NULL"; Assert.True(string.IsNullOrEmpty(loginResponse.Error), errorAssertMsg); _testOutput.WriteLine($"Assert passed: {errorAssertMsg}"); var tokenAssertMsg = "Acces Token should have more than 8 characters"; Assert.True(loginResponse.AccessToken.Length > 8, tokenAssertMsg); _testOutput.WriteLine($"Assert passed: {tokenAssertMsg}"); } [Fact] public async Task Login_is_Failure() { var client = new Client(); var loginResponse = await carConfigClient.Login("Basic wrongCreds"); var tokenNullMsg = "AccessToken should be NULL"; Assert.True(string.IsNullOrEmpty(loginResponse.AccessToken), tokenNullMsg); _testOutput.WriteLine($"Assert passed: {tokenNullMsg}"); var errorLengthMsg = "Error.length should be greater than 0 characters"; Assert.True(loginResponse.Error.Length > 0, errorLengthMsg); _testOutput.WriteLine($"Assert passed: {errorLengthMsg}"); } } - 重新生成XML日志:
执行命令生成包含输出内容的XML:
此时XML的dotnet test --logger:xunit;logfilename=test-results.xml<test>节点下会新增<output>标签,包含所有断言的输出消息。
2. 无需服务器生成HTML报告
可以使用第三方命令行工具直接将XML转换为静态HTML报告,无需本地服务器,直接打开本地文件即可查看:
方案1:使用ReportGenerator
- 全局安装工具:
dotnet tool install -g dotnet-reportgenerator-globaltool - 生成HTML报告:
打开reportgenerator -reports:"TestResults/*.xml" -targetdir:"TestResults/HTMLReport" -reporttypes:HtmlTestResults/HTMLReport/index.html即可查看包含断言消息的详细报告。
方案2:使用xunit-viewer
- 全局安装工具(需先安装Node.js):
npm install -g xunit-viewer - 生成单文件HTML报告:
直接打开生成的xunit-viewer -r TestResults/*.xml -o TestResults/test-report.htmltest-report.html文件即可查看。
3. 配置xUnit生成符合需求的报告
结合前两点,完整配置流程如下:
- 改造测试代码:注入
ITestOutputHelper,在每个断言通过后输出对应的userMessage,确保所有断言消息被捕获。 - 生成带输出的XML结果:执行
dotnet test --logger:xunit生成包含断言输出的XML文件。 - 转换为静态HTML报告:使用
ReportGenerator或xunit-viewer将XML转换为静态HTML,实现类似Playwright的详细报告效果,可直接本地打开查看。
内容的提问来源于stack exchange,提问作者surfmuggle
相关产品推荐
相关产品推荐

