如何在TFS 2018发布管道中实现多机多浏览器分布式运行Selenium测试?
实现TFS 2018发布管道中的多浏览器分布式Selenium测试
针对你在TFS 2018发布管道里要实现的多浏览器分布式Selenium测试需求——也就是让Firefox、Chrome等不同浏览器的测试轮次里,把不同测试用例分发到对应代理机器执行(比如Firefox轮次里Test1跑agent1、Test2跑agent2),我整理了一套在TFS 2018环境下完全可行的方案,毕竟TFS 2018不像后来的Azure DevOps有那么多高级功能,但咱们用现有工具也能精准达成目标。
一、前期准备要做足
- 先确保你的TFS代理池里至少有3台可用代理机器(对应你说的agent1/2/3),每台都装好了Firefox、Chrome以及对应版本的WebDriver,不然测试跑不起来。
- 你的测试程序集得支持通过命令行参数或者环境变量来指定两个关键信息:要运行的测试用例分组、目标浏览器类型。这个是后续分发的基础。
二、发布管道的核心配置
咱们要把管道拆成「浏览器专属阶段」+「阶段内并行作业」的结构,一步步来:
1. 给每个浏览器建独立测试阶段
先给Firefox和Chrome分别创建单独的发布阶段,比如命名成「Firefox测试轮次」「Chrome测试轮次」。如果是像你说的要按轮次执行,就把阶段设置成顺序执行;要是想同时跑两个浏览器,改成并行执行就行。
2. 每个阶段内配置并行作业分发测试
在每个浏览器阶段里,添加「Visual Studio测试」任务,重点配置这几个地方:
- 指定测试程序集:填上你的Selenium测试dll路径,比如
**\*.SeleniumTests.dll。 - 开启多代理并行:在任务的「执行选项」里勾选「在多个代理上并行运行」,把「最大并行代理数」设为3(对应你的3台代理)。
- 测试用例的动态筛选:
这是实现分发的关键。假设你的测试用例命名带编号(比如Checkout_Test1、Login_Test2),咱们可以用TFS的测试筛选器结合变量来动态分配:- 先在管道的「变量」里新增一个
TestGroupNumber变量。 - 然后给每个并行作业设置不同的
TestGroupNumber值——第一个作业设为1,第二个设为2,第三个设为3。 - 最后在「Visual Studio测试」任务的「高级」选项里,把测试筛选器写成:
FullyQualifiedName~Test_$(TestGroupNumber)。这样每个代理就只会跑对应编号的测试用例了。
如果你的测试用例没按编号命名,也可以用TFS测试计划里的测试套件分组——把Test1、Test2、Test3分别放到3个测试套件里,然后在任务里通过TestSuiteId来筛选每个套件的测试,效果是一样的。
- 先在管道的「变量」里新增一个
- 指定目标浏览器:
在任务的「环境变量」里加一行:
到Chrome阶段的任务里就改成BROWSER_TYPE=FirefoxBROWSER_TYPE=Chrome。你的测试代码要能读取这个环境变量来初始化对应的WebDriver。
三、测试代码的适配调整
给你的Selenium测试加一段读取环境变量切换浏览器的逻辑,比如C#的示例代码:
IWebDriver driver; var browserType = Environment.GetEnvironmentVariable("BROWSER_TYPE") ?? "Chrome"; // 默认值可选 switch (browserType.ToLower()) { case "firefox": driver = new FirefoxDriver(); break; case "chrome": driver = new ChromeDriver(); break; default: throw new InvalidOperationException($"不支持的浏览器类型:{browserType}"); }
四、验证调试的小技巧
- 先单独跑一个浏览器阶段,确认每个代理都能正确执行对应测试,浏览器也能正常启动。
- 再跑完整管道,看看Firefox和Chrome轮次是不是按预期执行,测试用例的分发有没有出错。
要是遇到代理分配不均的情况,可以检查下代理的「需求标签」——确保每个代理没有被设置了专属标签,不然TFS可能不会把作业分配过去。
内容的提问来源于stack exchange,提问作者sb_w
相关产品推荐
相关产品推荐

