使用 npm 安装 BackstopJS:
npm install -g backstopjs
初始化 BackstopJS 配置文件:
backstop init
配置文件 (backstop.json)
创建一个 backstop.json
文件,定义测试设置:
{
"id": "backstop_default",
"viewports": [
{
"label": "phone",
"width": 320,
"height": 480
},
{
"label": "tablet",
"width": 1024,
"height": 768
}
],
"scenarios": [
{
"label": "homepage",
"url": "https://example.com",
"selectors": ["document"],
"delay": 5000,
"misMatchThreshold" : 0.1
}
],
"paths": {
"bitmaps_reference": "backstop_data/bitmaps_reference",
"bitmaps_test": "backstop_data/bitmaps_test",
"engine_scripts": "backstop_data/engine_scripts",
"html_report": "backstop_data/html_report",
"ci_report": "backstop_data/ci_report"
},
"report": ["browser"],
"engine": "puppeteer",
"engineFlags": [],
"asyncCaptureLimit": 5,
"asyncCompareLimit": 50,
"debug": false,
"debugWindow": false
}
运行测试
backstop reference
backstop test
查看报告
生成的视觉差异报告将存储在 backstop_data/html_report
目录下,可以通过浏览器打开查看。
backstop reference:生成参考截图,用于后续比较。
backstop reference
backstop test:运行测试并比较新旧截图,生成差异报告。
backstop test
backstop approve:如果新截图被批准为正确版本,可以将其更新为参考截图。
backstop approve
viewports:定义要测试的设备和浏览器视口。
"viewports": [
{
"label": "phone",
"width": 320,
"height": 480
}
]
scenarios:定义要测试的场景,包括 URL、选择器、延迟等。
"scenarios": [
{
"label": "homepage",
"url": "https://example.com",
"selectors": ["document"],
"delay": 5000,
"misMatchThreshold" : 0.1
}
]
misMatchThreshold:设置图像比较时的误差阈值,以容忍微小的视觉变化。
"misMatchThreshold": 0.1
paths:定义存储截图和报告的路径。
"paths": {
"bitmaps_reference": "backstop_data/bitmaps_reference",
"bitmaps_test": "backstop_data/bitmaps_test"
}
自定义脚本
可以通过 engine_scripts
配置选项来定义自定义脚本,在捕获截图前执行特定操作,例如模拟用户交互。
"engine_scripts": {
"onReadyScript": "path/to/onReady.js"
}
在 onReady.js
中编写脚本:
module.exports = async (page, scenario, viewport, isReference) => {
await page.click('#someElement');
await page.waitForSelector('#someOtherElement');
};
集成 CI/CD 工具
以下是一个简单的 GitHub Actions 配置示例,用于集成 BackstopJS 进行视觉测试:
name: Visual Testing
on: [push, pull_request]
jobs:
visual-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: '14'
- name: Install BackstopJS
run: npm install -g backstopjs
- name: Run visual tests
run: backstop test