使用TFS API克隆测试套件

在软件开发过程中,测试是不可或缺的一环。随着软件版本的迭代,测试用例和测试套件也需要不断更新以适应新的功能和修复。本文将介绍如何使用Team Foundation Server (TFS) 的API来克隆测试套件,以便于在不同版本或补丁中重用现有的测试用例。

有一个名为“基础测试集”的测试计划,其中包含了代表不同测试集合的套件。例如,它包含了回归测试、冒烟测试等套件。每个发布或补丁,都会运行不同的测试集合。将所需的套件复制到该版本的测试计划中。

为了详细说明测试系统和需求,为软件的每个版本/发布创建一个测试计划。在计划中,为每个冲刺、发布候选版本、一般发布和补丁设置一个套件。每个补丁发布都运行相同的测试用例集,但如果复制测试用例的新副本,每个补丁或发布都会有大量的测试用例。这可以通过Microsoft Test Manager (MTM) 完成,但并非每个人都可以访问MTM,而且它可能会成为负担。

警告

请自行承担使用此代码的风险。下面概述的系统在当前系统上没有问题,但修改代码或错误可能会导致TFS系统出现问题。直接使用API工作时,需要自行承担风险。为了安全起见,在正常TFS系统的开发环境克隆中测试了下面的代码。

需求

需要添加对TFSDLLs的引用。为此,使用的是Visual Studio 12中的DLLs。大多数DLLs可以在以下路径找到:

C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ReferenceAssemblies

开始

一直在将所有TFSAPI代码添加到一个名为TFSWrapper的项目中,这是一个库,可以由UI项目、Windows服务项目或任何需要的项目使用。

以下using语句可以放在喜欢的任何类中,但将其放在包含所有TFSAPI方法的上述项目中。

C# using Microsoft.TeamFoundation.TestManagement.Client;

获取团队项目

首先,需要获取测试管理服务并调用GetTeamProject以获取ITestManagementTeamProject的实例。这些值是硬编码的,但可以将变量放入配置或其他数据存储系统中。

public static ITestManagementTeamProject GetTestmanagementProject(string projectName) { NetworkCredential networkCredentials = new NetworkCredential( "username", "password", "domain"); var tfsUri = "https://tfs.company.com/tfs"; var myTFSTeamProjectCollection = new TfsTeamProjectCollection( TfsTeamProjectCollection.GetFullyQualifiedUriForName(tfsUri), networkCredentials); ITestManagementService tms = myTFSTeamProjectCollection.GetService; return tms.GetTeamProject(projectName); }

获取测试套件

现在已经可以访问测试管理团队项目,可以开始处理测试项。由于想要克隆测试套件,需要使用其Id来检索它。将设置一个方法,可以通过其Id获取测试套件。

public static ITestSuiteBase GetTestSuite(int id, string teamProjectName) { return GetTestManagementProject(teamProjectName).TestSuites.Find(id); }

开始复制

接下来,从Id获取套件,并开始克隆。

public static IStaticSuiteBase CopyStaticTestSuiteWithNewEntries( int fromSuiteID, int toSuiteID, string teamProjectName) { var suiteToClone = (IStaticTestSuite)GetTestSuite(fromSuiteID, teamProjectName); var suiteToCloneInto = (IStaticTestSuite)GetTestSuite(toSuiteID, teamProjectName); if (suiteToClone.TestSuiteType != TestSuiteType.StaticTestSuite) { throw new NotSupportedException("Only Static Test Suites Can be Cloned."); } var clone = CopyStaticSuite(suiteToClone, suiteToCloneInto); return clone; }

递归复制子套件

需要克隆套件及其所有子套件,因此将设置一个递归方法。这有一个外部方法调用,接下来会讲到,但现在只需按照注释操作。

public static IStaticTestSuite CopyStaticSuite(IStaticTestSuite originalTestSuite, IStaticTestSuite testSuiteToCloneInto) { IStaticTestSuite clone; clone = CreateStaticSuiteWithoutChildren(originalTestSuite.Project.TeamProjectName, originalTestSuite, testSuiteToCloneInto); testSuiteToCloneInto.Entries.Add(clone); foreach (var entry in originalTestSuite.Entries) { if (entry.EntryType == TestSuiteEntryType.TestCase) { clone.TestCases.AddCases(new[] { entry.TestCase }); } else if (entry.EntryType == TestSuiteEntryType.StaticTestSuite) { CopyStaticSuite((IStaticTestSuite)entry.TestSuite, clone); } } return clone; }

克隆套件

现在来创建CreateStaticSuiteWithoutChildren方法,这个名字是因为系统可以克隆带有子项的测试套件。在这里,只想创建一个新的静态测试套件并复制设置。

public static IStaticTestSuite CreateStaticSuiteWithoutChildren(string projectName, IStaticTestSuite suiteToClone) { IStaticTestSuite newSuite = GetTestManagementProject(projectName).TestSuites.CreateStatic(); newSuite.Title = suiteToClone.Title; newSuite.Description = suiteToClone.Description; return newSuite; }

使用

现在有了所需的一切,将留下设置UI或控制台应用程序或想以任何方式使用系统的设置。要调用代码,只需要传入套件的Ids和测试计划的名称。可以使用返回的值进行日志记录和消息传递。

var suiteToCopyId = 123; var suiteToCopyToId = 456; var projectName = "default"; var clonedSuite = CopyStaticTestSuiteWithNewEntries(suiteToCopyId, suiteToCopyToId, projectName); console.WriteLine($"New Suite {clonedSuite.Id} cloned from Suite {suiteToCopyId} into Suite {suiteToCopyToId}");

额外:克隆套件时复制子项

public static CloneOperationInformation CloneTestSuiteAndCloneTests( string projectName, int sourceSuiteId, int destinationSuiteId) { CloneOptions options = new CloneOptions(); var testManagementProject = GetTestManagementProject(projectName); var testSuites = testManagementProject.TestSuites; var result = testSuites.BeginCloneOperation(sourceSuiteId, destinationSuiteId, options, projectName); var info = testSuites.GetCloneOperationInformation(result); return info; }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485