如何在MSTest的AssemblyCleanup中为TFS测试运行添加结果文件?
解决方案:将文件附加到TFS测试运行(或最后一个测试)
我之前也踩过这个坑——MSTest的AssemblyCleanup方法里调用TestContext.AddResultFile()确实没法把文件附加到测试运行或者单个测试上,因为这个方法的执行时机太晚了:所有测试执行完毕后,测试框架已经在收尾,测试运行的附件上下文已经关闭,不会再接收新的附件了。
给你两个可行的方案,按需选择:
方案一:借助最后一个测试方法附加文件(简单直接)
这个方法完全符合你“仅添加到最后一个测试也可接受”的需求,操作起来最省心:
- 专门写一个收尾测试方法,把它设为整个测试套件的最后一个执行的测试(MSTest默认按方法名排序,所以可以给它起个像
Test_Final_AttachRunFiles这样靠后的名字,或者用[TestPriority]标记高优先级让它最后跑)。 - 在这个测试方法里,用当前的
TestContext调用AddResultFile(),文件就会附加到这个测试上,也就是整个测试运行的最后一个测试条目里。
示例代码:
[TestClass] public class YourTestSuite { public TestContext TestContext { get; set; } // 你的其他测试方法... [TestMethod] public void Test_FirstTest() { // 测试逻辑 } // 最后执行的收尾测试 [TestMethod] public void Test_Final_AttachRunFiles() { // 附加你需要的文件,路径可以是绝对路径或相对路径 TestContext.AddResultFile(@"C:\test-output\summary-report.log"); TestContext.AddResultFile(@"C:\test-output\screenshot.png"); } }
方案二:通过TFS REST API直接上传到测试运行(更灵活)
如果不想依赖某个测试方法,想直接把文件加到测试运行级别的附件里,可以用TFS的REST API来实现:
- 从
TestContext或者TFS运行时的环境变量中获取当前测试运行的ID(比如环境变量TEST_RUN_ID,或者从TestContext.Properties["TestRunId"]里读取)。 - 调用TFS的
AttachmentsAPI,把文件上传到对应的测试运行下。
示例代码(简化版,需要处理认证):
using System.Net.Http; using System.Net.Http.Headers; using System.IO; using System.Text; public static void AttachFileToTestRun(string testRunId, string filePath, string tfsCollectionUrl, string patToken) { using (var client = new HttpClient()) { // 用Personal Access Token (PAT)做认证 client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.ASCII.GetBytes($":{patToken}"))); var fileContent = new ByteArrayContent(File.ReadAllBytes(filePath)); fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/octet-stream"); var formData = new MultipartFormDataContent(); formData.Add(fileContent, "file", Path.GetFileName(filePath)); var response = client.PostAsync($"{tfsCollectionUrl}/_apis/test/runs/{testRunId}/attachments?api-version=5.1", formData).Result; response.EnsureSuccessStatusCode(); } }
你可以把这个方法放在AssemblyCleanup里调用,只要能拿到正确的测试运行ID和认证信息,就能直接把文件加到测试运行的附件里,在TFS网页UI的测试运行详情里就能看到。
内容的提问来源于stack exchange,提问作者hoffimar
相关产品推荐
相关产品推荐

