ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

WebdriverIO 云端测试服务接入指南:Sauce Labs、BrowserStack、TestingBot、TestMu AI 与 Perfecto 实战

WebdriverIO 云端测试服务接入指南:Sauce Labs、BrowserStack、TestingBot、TestMu AI 与 Perfecto 实战 WebdriverIO 云端测试服务接入指南Sauce Labs、BrowserStack、TestingBot、TestMu AI 与 Perfecto 实战【免费下载链接】webdriverioNext-gen browser and mobile automation test framework for Node.js项目地址: https://gitcode.com/GitHub_Trending/we/webdriverioSauce Labs、BrowserStack、TestingBot、TestMu AI前身为 LambdaTest与 Perfecto 都是按需on-demand提供浏览器与移动端真机/模拟器资源的云端测试平台。使用 WebdriverIO 连接这些平台非常简单通常只需在配置中设置平台的user与key再配合各平台特有的 capabilities 即可将本地测试用例无缝迁移到云端执行。本文基于 CloudServices.md 展开结合仓库内wdio/sauce-service、wdio/testingbot-service等官方服务的源码实现完整讲解各平台的接入方式、本地隧道Local Testing / Sauce Connect、CI以 Travis 为例下的参数化技巧以及超时等进阶配置读完即可在自己的wdio.conf.js中接入任一云端服务。通用接入模型user key capabilities无论是哪家云端服务商WebdriverIO 的连接模型都高度一致——在配置中提供平台的认证信息WebdriverIO 便会在发起 session 请求时携带这些凭据去云端 Hub 建立浏览器会话。通用做法是把user与key写入配置// wdio.conf.js export let config {...}如果你只希望在某些 CI 环境例如 Travis下才使用云端服务可以借助CI环境变量做条件判断动态改写配置// wdio.conf.js export let config {...} if (process.env.CI) { config.user process.env.SAUCE_USERNAME config.key process.env.SAUCE_ACCESS_KEY }这段逻辑的本质是user和key与平台是否激活解耦——即使配置里没有凭据测试也能先正常构建 config 对象只有在真正建立 session 时才会因为缺少凭据而失败。仓库内 wdio-sauce-service 的beforeSession钩子 也印证了这一点当检测到user或key缺失时它会将服务标记为禁用并填充unknown_user/unknown_key占位值避免 session 请求意外崩溃。除了user/key你还可以通过 capabilities 传递各平台的可选参数如build、name、tags实现按构建分组、按用例命名等精细化运营需求。如果你使用 WebdriverIO 的 standalone 模式即不通过 testrunner 的wdio.conf.js也可以把user与key直接传入webdriverio.remote(...)例如仓库 examples/cloudservices/saucelabs.jsimport { remote } from webdriverio const browser await remote({ capabilities: { browserName: chrome, version: latest, platform: Windows 10, tags: [examples], name: This is an example test, public: true // Open Sauce 账号必须开启否则任务状态只显示 Finished }, user: process.env.SAUCE_USERNAME, key: process.env.SAUCE_ACCESS_KEY, logLevel: trace })Sauce Labs在 Sauce Labs 上远程运行测试唯一的前提就是把user和key设置为你 Sauce Labs 账号的用户名与 Access Key——无论是通过wdio.conf.js导出还是传入webdriverio.remote(...)。其余任意 Sauce Labs 支持的 测试配置项如build、name、tags、screenResolution都可以作为 key/value 写进任意浏览器的 capabilities 中。说明当前仓库在packages/wdio-types/src/Capabilities.ts中同样声明了maxDuration等云端会话时长类能力字段Sauce Labs 的完整配置项以官方文档为准下文列出的idle-timeout即属于其中的测试配置项。使用官方 wdio/sauce-service如果你使用 WDIO testrunner强烈建议安装并配置官方服务wdio/sauce-service它不仅能自动拉起 Sauce Connect 隧道还带来了许多深度集成能力。安装方式npm install wdio/sauce-service --save-dev配置示例见 wdio-sauce-service/README.md// wdio.conf.js export const config { // ... user: process.env.SAUCE_USERNAME, key: process.env.SAUCE_ACCESS_KEY, region: us, // 或 eu默认为 us用于 VM 云与真机云 services: [ [sauce, { sauceConnect: true, sauceConnectOpts: { // 对应 Sauce Connect CLI 参数去掉 --可转成 camelCase } }] ], // ... };该服务会把任务元数据name、passed、tags、public、build、custom-data在测试过程中同步到 Sauce Labs此外还会在任务开始时自动设置 job 的name并支持通过setJobName(config, capabilities, suiteTitle)函数动态定制任务名将失败用例的 error stack 推送到 Sauce Labs 的 commands 页签默认只推送前 5 行可通过maxErrorStackLength调整见 types.ts自动配置并拉起 Sauce Connect在命令列表中写入sauce:context注解方便按测试定位具体执行的命令。服务还支持uploadLogs选项默认true会把 WebdriverIO 自身日志上传到 Sauce Labs 平台使用该功能前请确保在 wdio 配置中设置了outputDir否则日志只会输出到 stdout 而无法上传。Sauce Connect访问内网/localhost 服务如果你的被测服务部署在公网不可达的位置例如localhost上的开发服务器就需要使用 Sauce Connect 的实现可以看出只有设置了sauceConnect: true才会启动隧道未指定tunnelName时会自动生成一个随机名称如SC-tunnel-xxx并为每个 capabilities 注入对应的隧道名隧道启动失败仅限 ENOENT 这类竞态错误会自动重试最多重试 3 次见 startTunnel。如果你使用他人创建/共享的现有隧道只需在 capabilities 的sauce:options中提供tunnelName若是共享隧道还需要声明隧道创建者的tunnelOwnerexport const config { // ... capabilities: [{ browserName: chrome, platformName: Windows 10, browserVersion: latest, sauce:options: { tunnelName: YourTunnelName, // 共享隧道时补充tunnelOwner: 隧道创建者用户名, build: your-build-name, screenResolution: 1600x1200 } }] };与 Travis CI 集成Travis CI 原生支持在每次测试前启动 Sauce Connect。如果你自行启动隧道就必须在每个浏览器的 capabilities 中设置tunnel-identifier测试配置项——Travis 默认会把它设成TRAVIS_JOB_NUMBER环境变量。此外想让 Sauce Labs 按构建号对任务分组可把build设置为TRAVIS_BUILD_NUMBER设置name可自定义该测试在 Sauce Labs 中显示的任务名如果配合 WDIO testrunner 与wdio/sauce-serviceWebdriverIO 会自动为测试生成合适的任务名无需手动指定。示例 capabilitiesbrowserName: chrome, version: 27.0, platform: XP, tunnel-identifier: process.env.TRAVIS_JOB_NUMBER, name: integration, build: process.env.TRAVIS_BUILD_NUMBER超时设置远程执行时网络链路更长适当增大超时很有必要。可以通过idle-timeout测试配置项控制 Sauce 在两次命令之间等待多久后才关闭连接browserName: chrome, version: 27.0, platform: XP, idle-timeout: 120 // 单位秒控制命令间最大空闲时间BrowserStackWebdriverIO 内置了 BrowserStack 集成接入方式同样是在配置中设置user与key对应 BrowserStack Automate 的用户名和 Access Key可以把任意 BrowserStack 支持的 capabilities 作为 key/value 传入浏览器 capabilities。其中browserstack.debug设为true会录制会话 screencast对排查问题很有帮助。standalone 模式的示例见 examples/cloudservices/browserstack.jsimport { remote } from webdriverio const browser await remote({ capabilities: { browser: Chrome, browser_version: 46.0, os: Windows, os_version: 10, resolution: 1024x768 }, hostname: hub.browserstack.com, port: 80, user: process.env.BROWSERSTACK_USERNAME, key: process.env.BROWSERSTACK_ACCESS_KEY, logLevel: trace })Local Testing当被测服务位于localhost或内网时需要用到 BrowserStack 的 Local Testing。WebdriverIO 不负责启动它你需要自行处理一旦使用了 local 隧道就要在 capabilities 中把browserstack.local设为true。使用 WDIO testrunner 时可下载并配置wdio/browserstack-service它能帮你拉起 BrowserStack 本地连接并提供更深入的集成功能。与 Travis CI 集成在 Travis 中启用 Local Testing 需自行启动。下面这段脚本会在测试开始前下载并后台启动 BrowserStackLocal建议放在 Travis 的 before_script 阶段执行wget https://www.browserstack.com/browserstack-local/BrowserStackLocal-linux-x64.zip unzip BrowserStackLocal-linux-x64.zip ./BrowserStackLocal -v -onlyAutomate -forcelocal $BROWSERSTACK_ACCESS_KEY sleep 3同样地你可能希望把build设置为 Travis 的构建号。示例 capabilitiesbrowserName: chrome, project: myApp, version: 44.0, build: myApp #${process.env.TRAVIS_BUILD_NUMBER}.${process.env.TRAVIS_JOB_NUMBER}, browserstack.local: true, browserstack.debug: trueTestingBotTestingBot 的接入同样只需要把user与key设为你 TestingBot 账号的用户名与 Secret Key其余任意 TestingBot 支持的测试选项import { remote } from webdriverio const browser await remote({ capabilities: { browserName: chrome, version: 65, platform: XP, name: This is an example test }, hostname: hub.testingbot.com, port: 80, user: process.env.TESTINGBOT_KEY, key: process.env.TESTINGBOT_SECRET, logLevel: trace })Local TestingTestingBot 提供基于 Java 的隧道Tunnel来测试公网不可达的网站具体启动方式以其隧道支持页面为准。若使用 WDIO testrunner可配置官方wdio/testingbot-service它会帮助你自动拉起隧道并集成更多能力。从 packages/wdio-testingbot-service/src/types.ts 可以看到该服务支持两个核心选项tbTunnel设为true时自动运行 TestingBot Tunnel在 TestingBot 虚拟机与你本机之间建立安全连接tbTunnelOpts传递隧道参数如apiKey、apiSecret、verbose、se-port、tunnelIdentifier、logfile、proxy、dns等详见同一文件的TunnelLauncherOptions定义。TestMu AI前身 LambdaTestTestMu AI 的集成同样内置于 WebdriverIO。接入只需把user与key设为你 TestMu AI 账号的用户名与 Access Key任意 TestMu AI capabilities-generator 支持的参数都可放入 capabilities。其中visual设为true会录制会话 screencast。本地隧道Tunnel for local testing当被测服务位于localhost或内网时需使用 TestMu AI 的 Local Testing 隧道。WebdriverIO 不负责启动它需自行处理一旦使用本地隧道应在 capabilities 中把tunnel设为true。使用 WDIO testrunner 时可配置wdio-lambdatest-service以获得更深入的集成能力。与 Travis CI 集成在 Travis 中启用本地隧道需自行启动。下面脚本会在测试前下载并后台启动 LT 隧道wget http://downloads.lambdatest.com/tunnel/linux/64bit/LT_Linux.zip unzip LT_Linux.zip ./LT -user $LT_USERNAME -key $LT_ACCESS_KEY -cui sleep 3同时你可能希望把build设为 Travis 构建号。示例 capabilitiesplatform: Windows 10, browserName: chrome, version: 79.0, build: myApp #${process.env.TRAVIS_BUILD_NUMBER}.${process.env.TRAVIS_JOB_NUMBER}, tunnel: true, visual: truePerfecto与前面几家不同Perfecto 的接入不走user/key凭据而是为每个用户创建 security token并将其直接放进 capabilities 结构中export const config { capabilities: [{ // ... securityToken: your security token }],此外还需要在配置中追加云端连接信息指向你自己的 Perfecto 云端hostname: your_cloud_name.perfectomobile.com, path: /nexperience/perfectomobile/wd/hub, port: 443, protocol: https,这几项属于 WebdriverIO 标准的连接配置hostname指定云端 Hub 域名、path指定 WebDriver 端点路径、port与protocol则定义协议栈。其他平台若使用自建/私有 Hub如 Selenium Grid同样可复用这套hostname/port/path/protocol配置模式。小结接入云端服务的关键路径可以归纳为三步凭据在wdio.conf.js或webdriverio.remote(...)中设置目标平台的user与keyPerfecto 则是securityToken 云端连接地址capabilities按平台文档补充build、name、tags、idle-timeout、browserstack.debug、visual、tunnel等可选配置项并用CI环境变量实现本地/云端按需切换隧道被测服务在公网不可达时Sauce Labs 使用wdio/sauce-service自动拉起 Sauce ConnectBrowserStack 与 TestMu AI 则需自行启动 Local Testing / LT 隧道并在 capabilities 中开启对应开关。如需进一步研究源码细节可重点阅读 packages/wdio-sauce-service 的 launcher.ts隧道启动与重试与 service.tsjob 元数据同步、日志上传、多远程实例支持以及 packages/wdio-testingbot-service 的隧道选项定义各平台的 standalone 完整示例则集中在 examples/cloudservices 目录中含 saucelabs.js、browserstack.js、testingbot.js 与 kobiton.js可直接作为上手模板。【免费下载链接】webdriverioNext-gen browser and mobile automation test framework for Node.js项目地址: https://gitcode.com/GitHub_Trending/we/webdriverio创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表