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

如何使用Python以编程方式启动和停止Appium Server

解决Jenkins上运行Appium的两个常见问题

Hey there! 作为Python新手能搞定Appium自动化测试还搭了Jenkins,已经超棒啦😉 针对你遇到的两个问题,我给你整理了具体的解决方案:

问题1:Jenkins运行Appium命令后挂起

直接在Jenkins执行appium命令会因为进程占据控制台导致任务一直处于运行状态,解决办法是让Appium后台运行,同时把日志输出到文件方便排查:

  • Linux/macOS环境:使用nohup命令让进程脱离终端执行

    nohup appium -p 4723 -g appium_run.log > /dev/null 2>&1 &
    

    解释:nohup保证进程在Jenkins任务结束后也能继续运行,-p指定端口,-g指定日志文件,最后的&把进程放到后台。

  • Windows环境:使用start /B命令后台启动

    start /B appium -p 4723 -g appium_run.log
    

    解释:/B参数让Appium在后台运行,不会弹出新的命令窗口占用Jenkins控制台。

问题2:Python编程式启动Appium Server

Python可以用自带的subprocess模块来启动和管理Appium进程,不需要额外安装依赖,下面是完整的示例代码:

import subprocess
import time
from appium import webdriver

def start_appium_server(port=4723, log_file="appium_server.log"):
    """启动Appium服务器并返回进程对象"""
    # 构造Appium启动命令
    appium_cmd = ["appium", "-p", str(port), "-g", log_file]
    # 启动进程,重定向输出避免阻塞主程序
    appium_process = subprocess.Popen(
        appium_cmd,
        stdout=subprocess.PIPE,
        stderr=subprocess.STDOUT,
        text=True
    )
    
    # 等待服务器启动完成(可根据机器性能调整等待时间)
    time.sleep(6)
    
    # 可选:检查服务器是否成功启动(通过日志关键字判断)
    with open(log_file, "r") as f:
        logs = f.read()
        if "listener started on port" not in logs:
            raise RuntimeError("Appium服务器启动失败,请检查日志")
    
    return appium_process

def run_android_test():
    """执行你的Appium自动化测试用例"""
    desired_caps = {
        "platformName": "Android",
        "deviceName": "YourDeviceName",  # 替换成你的设备名或模拟器名
        "appPackage": "com.your.app.package",  # 替换成测试App的包名
        "appActivity": "com.your.app.MainActivity",  # 替换成测试App的启动Activity
        "noReset": True  # 根据需求调整是否重置App状态
    }
    
    # 连接Appium服务器
    driver = webdriver.Remote(f"http://localhost:4723/wd/hub", desired_caps)
    
    # 这里写你的测试逻辑
    print("开始执行测试...")
    # 示例:点击某个元素
    # driver.find_element(AppiumBy.ID, "com.your.app:id/button").click()
    
    # 测试完成后关闭driver
    driver.quit()

if __name__ == "__main__":
    appium_proc = None
    try:
        # 启动Appium服务器
        appium_proc = start_appium_server()
        print("Appium服务器启动成功")
        
        # 执行测试
        run_android_test()
    except Exception as e:
        print(f"测试过程出错:{str(e)}")
    finally:
        # 不管测试成功还是失败,都要关闭Appium服务器
        if appium_proc:
            appium_proc.terminate()
            appium_proc.wait()
            print("Appium服务器已关闭")

代码说明:

  • subprocess.Popen:启动Appium进程,不会阻塞主程序,方便后续执行测试用例。
  • 等待时间:time.sleep(6)是给服务器启动留的缓冲时间,你可以根据自己的机器性能调整。
  • 进程管理:在finally块里终止Appium进程,避免测试结束后残留后台进程占用端口。
  • 启动校验:通过读取日志关键字确认服务器启动成功,能提前发现问题。

额外提示:

  1. 在Jenkins上运行时,确保Jenkins用户的环境变量里包含node和appium(也就是这两个命令能直接在终端执行)。
  2. 如果需要同时运行多个Appium实例,记得指定不同的端口(比如-p 4723、-p 4724)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:20:08