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

如何在Jenkins配置Appium测试套件每日运行并自动启动Appium服务与模拟器

Maven+TestNG安卓Appium测试套件Jenkins自动运行配置方案

测试层内置自动启动逻辑(核心实现)

利用TestNG的套件级生命周期钩子实现测试前自动启动资源、测试后自动释放,无需额外写独立脚本调度。

  • 首先确认项目已引入适配版本的io.appium:java-client依赖,该依赖内置了Appium服务的编程式管理能力。
  • 在测试套件的根配置类中添加@BeforeSuite注解的启动方法,示例代码如下:
import io.appium.java_client.service.local.AppiumDriverLocalService;
import io.appium.java_client.service.local.AppiumServiceBuilder;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeSuite;
import java.io.File;
import java.io.IOException;

public class TestBase {
    private static AppiumDriverLocalService appiumService;
    private static Process emulatorProcess;

    @BeforeSuite
    public void initTestResources() throws IOException, InterruptedException {
        // 提前杀掉残留进程避免端口/设备占用
        new ProcessBuilder("bash", "-c", "lsof -i:4723 | grep -v PID | awk '{print $2}' | xargs kill -9 2>/dev/null || true").start().waitFor();
        new ProcessBuilder("adb", "emu", "kill", "2>/dev/null || true").start().waitFor();

        // 启动安卓模拟器,替换为你自己的AVD名称
        emulatorProcess = new ProcessBuilder("emulator", "-avd", "test_avd", "-no-window", "-no-audio", "-no-boot-anim")
                .redirectErrorStream(true)
                .start();
        // 等待模拟器启动完成,可替换为adb循环检测设备上线的逻辑,适配不同性能的节点
        Thread.sleep(35000);

        // 启动Appium服务,可自定义端口、日志路径
        AppiumServiceBuilder serviceBuilder = new AppiumServiceBuilder()
                .usingPort(4723)
                .withLogFile(new File("appium-runtime.log"));
        appiumService = AppiumDriverLocalService.buildService(serviceBuilder);
        appiumService.start();
    }

    @AfterSuite
    public void releaseTestResources() throws IOException {
        // 测试结束后停止Appium服务
        if (appiumService != null && appiumService.isRunning()) {
            appiumService.stop();
        }
        // 关闭模拟器
        if (emulatorProcess != null && emulatorProcess.isAlive()) {
            emulatorProcess.destroy();
        }
        new ProcessBuilder("adb", "emu", "kill").start();
    }
}
  • 所有测试类继承该TestBase类即可,执行mvn test时会自动先执行资源启动逻辑。

Jenkins端配置

  • 新建Jenkins项目,配置源码管理拉取测试代码仓库。
  • 配置构建触发器,选择「定时构建」,日程表达式填写0 2 * * *即可实现每日凌晨2点自动触发执行,可根据需求调整时间规则。
  • 提前在Jenkins运行节点上配置好必备环境:Android SDK(配置ANDROID_HOME环境变量)、Node.js、Appium服务、Maven,所有命令都要加入系统PATH中。
  • 构建步骤添加Maven执行指令:mvn clean test -DsuiteXmlFile=testng.xml,指定你自己的TestNG套件配置文件路径即可。
  • 构建后操作可添加「Publish TestNG Results」插件,配置测试报告路径为**/target/surefire-reports/testng-results.xml,方便直接在Jenkins上查看测试结果。

常见问题修复

  • 无桌面Linux节点启动模拟器失败:必须加上-no-window参数,同时开启CPU虚拟化支持提升启动速度。
  • Appium端口冲突:每次启动前执行端口清理命令,或者每次启动随机生成可用端口,避免固定端口占用。
  • 模拟器启动超时:将固定等待逻辑替换为循环执行adb devices检测设备状态,直到设备显示为device状态再继续执行后续逻辑。

内容的提问来源于stack exchange,提问作者rakeshsahu59

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:24:03