如何在Jenkins中配置Maven Serenity Appium框架自动执行测试并解决构建失败问题
分步配置指引
1. 先完成Jenkins安卓构建节点的基础环境校验
- 登录标签为
android-mobile的Jenkins节点,逐一确认以下依赖配置正常:- 全局安装Appium:执行
npm install -g appium完成安装后,执行appium -v可正常输出版本号 - Android SDK路径和Jenkinsfile中声明的
/Users/jenkins/Library/Android/sdk完全一致,路径下存在platform-tools、build-tools、对应安卓版本的SDK平台包 - 提前在节点上创建好x86架构的安卓模拟器,执行
emulator -list-avds可正常显示模拟器名称 - 把Android SDK、Node.js、Appium的执行路径都加到节点的系统PATH环境变量中
- 全局安装Appium:执行
- 手动在节点上执行
adb devices确认工具可正常调用
2. 修复Maven项目配置
先检查项目pom.xml中Failsafe插件的配置:
- 确认测试类命名符合Failsafe默认识别规则:类名以
*IT.java/*Test.java/*ITCase.java结尾,不符合的话可以修改命名,或者在插件配置中自定义<includes>规则匹配你的测试类 - 可以临时在测试执行的mvn命令中添加
-e -X参数,输出全量调试日志,方便定位初始化阶段的异常
3. 调整Jenkinsfile逻辑,补充校验和清理步骤
修改后的Jenkinsfile如下:
pipeline { options { timestamps() disableConcurrentBuilds() buildDiscarder(logRotator(numToKeepStr: '20')) skipStagesAfterUnstable() } triggers { pollSCM('H * * * *') } agent { label 'android-mobile' } stages { // 新增环境检查阶段,提前确认依赖正常 stage('Environment Check') { steps { sh 'echo $PATH' sh 'appium -v' sh 'emulator -list-avds' sh 'adb devices' } } stage('Run smoke tests') { steps { wrap([$class: 'AnsiColorBuildWrapper', 'colorMapName': 'xterm']) { copyArtifacts(projectName: "mob-TWLAndroid/develop", target: "Serenity_Framework/src/test/resources/APK") sh "ls -al Serenity_Framework/src/test/resources/APK/AppName" // 增加-e -X参数输出调试日志 sh "cd Serenity_Framework && ANDROID_HOME=/Users/jenkins/Library/Android/sdk mvn verify -e -X -Dcontext=Android -Dproperties=Android.properties" } } // 不管构建结果如何,都执行进程清理,避免残留占用后续任务 post { always { sh 'pkill -f appium || true' sh 'pkill -f emulator || true' } } } // 新增报告收集阶段,方便排查问题 stage('Publish Test Report') { always { junit 'Serenity_Framework/target/failsafe-reports/*.xml' publishHTML(target: [ allowMissing: true, keepAll: true, reportDir: 'Serenity_Framework/target/site/reports/SerenityBDD', reportFiles: 'index.html', reportName: 'Serenity Test Report' ]) } } } }
4. 适配框架内置启动逻辑
如果内置的Appium、模拟器启动逻辑在Jenkins环境下失效,可以做以下调整:
- 模拟器启动逻辑增加超时等待:必须等
adb devices能识别到设备之后,再初始化Appium Driver,避免模拟器还没启动完成就往下执行 - Appium启动逻辑增加端口校验:启动前先杀掉占用4723端口的进程,避免端口冲突
- 检查DesiredCapabilities配置:apk路径要和上游拷贝的路径完全匹配,deviceName、platformVersion要和节点上的模拟器配置完全一致
5. 备选方案:外置启动逻辑(兼容性更高)
如果内置启动逻辑始终调不通,可以把启动逻辑放到Jenkinsfile中执行,更可控,在Run smoke tests步骤的开头增加以下命令:
// 后台启动模拟器,把Android_12_x86替换为你自己的模拟器名称 sh 'nohup emulator -avd Android_12_x86 -no-window -noaudio -no-boot-anim > emulator.log 2>&1 &' // 最长等待5分钟让模拟器启动完成 sh 'timeout 300 sh -c "until adb devices | grep device\$; do sleep 10; done"' // 后台启动Appium服务 sh 'nohup appium -p 4723 > appium.log 2>&1 &' // 等待Appium启动完成 sh 'sleep 15'
同时修改项目中的Appium配置,不需要再内置启动服务和模拟器的逻辑,直接连接本地4723端口的Appium服务即可。
内容的提问来源于stack exchange,提问作者Indira
相关产品推荐
相关产品推荐

