You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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环境变量中
  • 手动在节点上执行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 18:45:02