使用Chrome For Testing执行Karma测试需--no-sandbox的原因咨询
Chrome For Testing执行Karma-Jasmine测试需添加
--no-sandbox的原因分析 问题背景
使用系统已安装的Chrome浏览器执行Karma-Jasmine测试时可正常运行,但改用Chrome For Testing时会触发报错:Chrome has not captured in 60000 ms, killing,只有添加--no-sandbox参数后,测试才能成功执行。
核心原因解析
1. 安装版与解压版的沙箱权限差异
Chrome的沙箱是核心安全机制,依赖系统层面的权限配置:
- 安装版Chrome:通过官方安装程序部署时,会自动完成系统级的沙箱权限配置(比如Windows上注册组件、设置安全策略),启动时默认就能正常启用沙箱,无需额外参数。
- Chrome For Testing:作为独立解压分发的版本,未经过安装流程的系统权限配置,无法自动获取沙箱运行所需的系统级权限,导致沙箱初始化失败,进而无法正常连接Karma的测试服务,最终触发超时被杀的报错。
2. --no-sandbox参数的作用
--no-sandbox会强制Chrome关闭沙箱机制,绕过系统权限校验,让Chrome For Testing能以非沙箱模式启动,从而正常连接Karma并执行测试用例。
补充说明
沙箱的作用是隔离浏览器进程与系统资源,降低恶意代码的影响。非必要情况下不建议长期禁用沙箱,但在测试环境中,为保证流程顺畅,临时使用该参数是可行的。
复现步骤
- 在D盘创建测试目录,例如
karma-test - 执行以下命令搭建Karma环境:
npm install karma --save-dev npm install karma-jasmine --save-dev npm install karma-junit-reporter --save-dev npm install karma-mocha-reporter --save-dev npm install karma-chrome-launcher --save-dev - 下载与已安装Chrome同版本的Chrome For Testing浏览器
- 将压缩包解压至目标文件夹
- 创建
karma.conf.js配置文件,内容如下:// Karma configuration // Generated on Tue Jul 09 2024 11:52:18 GMT+0530 (India Standard Time) module.exports = function(config) { config.set({ basePath: '../..', frameworks: ['jasmine'], files: [ 'D:\\karma-test\\test.js' ], exclude: [ ], preprocessors: { }, reporters: ['progress','junit','mocha'], junitReporter: { outputDir: 'jasmine/reports ', //suite: moduleName }, htmlReporter: { outputFile: 'jasmine/reports/test-results.html' }, mochaReporter: { output: 'minimal' }, port: 9876, colors: true, logLevel: config.LOG_DEBUG, autoWatch: false, browsers: ['chrome_testing'], customLaunchers: { chrome_testing:{ base: "Chrome", chromeDataDir: "D:\\karma-test\\ChromeLogs\\logs-karma-installedChrome", //chromeDataDir: "D:\\karma-test\\ChromeLogs\\logs-karma-chromeForTesting", //chromeDataDir: "D:\\karma-test\\ChromeLogs\\logs-karma-installedChrome_noSandBox", //chromeDataDir: "D:\\karma-test\\ChromeLogs\\logs-karma-chromeForTesting_noSandBox", flags: [ "--enable-logging=stderr", "--v=1" ,"--disable-infobars" ,"--no-sandbox" ] } }, singleRun: true, concurrency: Infinity }) } - 创建示例测试用例
test.js,并将路径配置到karma.conf.js的files字段中:describe("suite name", function() { beforeEach(function () {/*执行每个测试用例前的操作*/ }) it("包含带断言的测试用例", function() { var browserAgent = navigator.userAgent; alert(browserAgent) alert("Hello World") //expect(true).toBe(true); }); afterEach(function () { /*执行每个测试用例后的操作*/ }) }); - 使用Chrome For Testing执行测试时,先设置环境变量指定Chrome路径:
完成后执行测试命令set CHROME_BIN=D:\karma-test\chrome-win64\chrome\chrome.exe - 使用已安装Chrome执行测试时,直接进入
karma-test目录执行测试命令 - 运行测试:执行
karma start或karma start <karma.conf.js文件路径> - 测试
--no-sandbox参数时,修改karma.conf.js中flags数组的参数注释状态
内容的提问来源于stack exchange,提问作者Yogesh
相关产品推荐
相关产品推荐

