You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VSTS中生成Azure VM上Protractor测试的测试结果

解决方案:在Azure VM运行Protractor测试并在Azure DevOps(原VSTS)中展示JUnit测试结果

我来帮你搞定这个问题——核心思路是让Azure DevOps能获取到Azure VM上生成的JUnit报告,然后用内置任务解析展示结果。下面分步骤说明具体实现方式:

1. 先确保Azure VM上能正确生成JUnit报告

首先得确认你的Protractor配置已经正确启用了JUnit报告输出,不然后续都是白搭。

在你的protractor.conf.js里添加jasmine-reporters的配置(如果还没装这个包,先在VM上跑npm install jasmine-reporters --save-dev):

const JasmineReporters = require('jasmine-reporters');

exports.config = {
  // 你的其他Protractor配置(比如selenium地址、测试文件路径等)
  onPrepare: function() {
    // 配置JUnit报告生成
    jasmine.getEnv().addReporter(new JasmineReporters.JUnitXmlReporter({
      savePath: './test-results', // 报告保存的目录
      consolidateAll: true, // 把所有测试结果合并到一个XML文件里
      filePrefix: 'protractor-test-results' // 报告文件名前缀
    }));
  }
};

运行测试后,去VM上的./test-results目录看看,应该能找到protractor-test-results.xml文件,先手动验证这一步没问题。

2. 把VM上的JUnit报告传递到Azure DevOps代理

因为测试跑在VM上,而DevOps的测试结果任务需要读取代理机器上的文件,所以得把报告从VM传到代理。这里有两种常用方式:

方式一:用Azure存储账户中转(适合托管代理场景)

  • 先在Azure上创建一个存储账户,然后创建一个文件共享(或者Blob容器)。
  • 在VM的测试脚本末尾,添加上传报告的命令(用Azure CLI,VM上需要先安装Azure CLI):
    # 上传JUnit报告到Azure文件共享
    az storage file upload --account-name <你的存储账户名> --account-key <你的存储密钥> --share-name <文件共享名> --source ./test-results/protractor-test-results.xml --destination protractor-test-results.xml
    
  • 回到Azure DevOps管道,添加一个Azure CLI任务,把报告从存储下载到代理机器:
    az storage file download --account-name <你的存储账户名> --account-key <你的存储密钥> --share-name <文件共享名> --source protractor-test-results.xml --destination $(System.DefaultWorkingDirectory)/test-results/
    
    注意:存储账户密钥这类敏感信息,要放在Azure DevOps的变量组里并标记为「保密」,不要硬编码在脚本里。

方式二:用SSH直接拉取报告(适合代理能访问VM SSH端口的场景)

  • 先在Azure DevOps里配置好VM的SSH密钥(作为安全文件或者保密变量),确保代理能通过SSH连接到VM。
  • 在管道里添加一个SSH任务,用scp命令把报告从VM复制到代理:
    scp -i <SSH密钥路径> <VM用户名>@<VM公网IP>:/path/to/your/test-results/protractor-test-results.xml $(System.DefaultWorkingDirectory)/test-results/
    

3. 在Azure DevOps中添加「发布测试结果」任务

拿到报告文件后,就可以让DevOps解析并展示测试结果了:

  • 在你的管道里添加一个**发布测试结果(Publish Test Results)**任务。
  • 配置任务参数:
    • 测试结果格式:选择JUnit
    • 测试结果文件路径:填写你下载到代理的报告路径,比如$(System.DefaultWorkingDirectory)/test-results/protractor-test-results.xml
    • 可选:设置「失败条件」,比如当有测试失败时让管道失败,或者根据需求调整。

可选方案:把Azure VM配置成DevOps自定义代理

如果不想来回传文件,更简单的方式是把Azure VM设置成Azure DevOps的自定义代理:

  1. 在Azure DevOps组织的「代理池」里下载自定义代理安装包,上传到Azure VM并完成配置。
  2. 管道运行时指定用这个VM代理池,测试直接在VM上运行,报告就生成在VM本地。
  3. 然后直接用「发布测试结果」任务读取VM上的报告路径(比如./test-results/protractor-test-results.xml),不需要中转。

注意事项

  • 确保VM和代理之间的网络连通性:如果用托管代理,需要VM能被公网访问;如果是自定义代理(VM本身作为代理),则没有这个问题。
  • 所有敏感信息(存储密钥、SSH密钥)都要放在Azure DevOps的保密变量或安全文件里,避免泄露。

内容的提问来源于stack exchange,提问作者anuvrat singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:18:32