Azure Pipelines运行Cypress测试时遇ALSA音频错误求助
在Azure宿主代理上运行Cypress测试时,出现以下ALSA相关错误:
##[error]Bash向标准错误流写入了一行或多行内容。
##[error]ALSA lib confmisc.c:767:(parse_card) cannot find card '0' ALSA lib conf.c:4732:(_snd_config_evaluate) function snd_func_card_driver returned error: No such file or directory ALSA lib confmisc.c:392:(snd_func_concat) error evaluating strings ALSA lib conf.c:4732:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory ALSA lib confmisc.c:1246:(snd_func_refer) error evaluating name ALSA lib conf.c:4732:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory ALSA lib conf.c:5220:(snd_config_expand) Evaluate error: No such file or directory ALSA lib pcm.c:2642:(snd_pcm_open_noupdate) Unknown PCM default
(上述错误信息重复出现一次)
以下是几种可行的解决方法:
方法1:在Cypress配置中禁用音频访问
修改cypress.config.js(或cypress.config.ts),为浏览器启动添加音频禁用参数:
const { defineConfig } = require("cypress"); module.exports = defineConfig({ e2e: { // 保留原有配置 browserLaunchOptions: { chrome: { args: ['--mute-audio', '--use-fake-device-for-media-stream'] }, firefox: { args: ['--mute-audio'] } } } });
方法2:配置虚拟ALSA音频设备
在Pipeline的bash任务中,先加载虚拟音频驱动并设置默认设备,再执行测试:
# 加载虚拟音频驱动模块 sudo modprobe snd-dummy # 创建自定义ALSA配置,指定默认设备为虚拟设备 echo "pcm.default { type plug slave { pcm \"dummy\" } }" > ~/.asoundrc # 运行Cypress测试 npx cypress run
方法3:在测试命令中直接添加参数
执行Cypress时,通过命令行参数禁用音频和媒体设备:
npx cypress run --headless --browser chrome --args="--mute-audio --use-fake-device-for-media-stream"
方法4:通过环境变量屏蔽ALSA配置
在Pipeline中设置环境变量,跳过ALSA的配置加载:
export ALSA_CONFIG_PATH=/dev/null # 随后运行测试 npx cypress run
内容的提问来源于stack exchange,提问作者Tayyab Ansari

