如何在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任务,把报告从存储下载到代理机器:
注意:存储账户密钥这类敏感信息,要放在Azure DevOps的变量组里并标记为「保密」,不要硬编码在脚本里。az storage file download --account-name <你的存储账户名> --account-key <你的存储密钥> --share-name <文件共享名> --source protractor-test-results.xml --destination $(System.DefaultWorkingDirectory)/test-results/
方式二:用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的自定义代理:
- 在Azure DevOps组织的「代理池」里下载自定义代理安装包,上传到Azure VM并完成配置。
- 管道运行时指定用这个VM代理池,测试直接在VM上运行,报告就生成在VM本地。
- 然后直接用「发布测试结果」任务读取VM上的报告路径(比如
./test-results/protractor-test-results.xml),不需要中转。
注意事项
- 确保VM和代理之间的网络连通性:如果用托管代理,需要VM能被公网访问;如果是自定义代理(VM本身作为代理),则没有这个问题。
- 所有敏感信息(存储密钥、SSH密钥)都要放在Azure DevOps的保密变量或安全文件里,避免泄露。
内容的提问来源于stack exchange,提问作者anuvrat singh
相关产品推荐
相关产品推荐

