如何通过Jenkins Pipeline运行pywinauto测试用例?支持无人值守执行吗?
在Windows虚拟机通过Jenkins运行pywinauto GUI测试的实现方案
一、Windows虚拟机环境准备
要运行GUI测试,核心是确保Jenkins能在有交互桌面的会话中执行测试,先完成以下配置:
- 部署Jenkins Agent:在Windows VM上安装Jenkins Agent,优先用JNLP方式启动(而非Windows服务),确保Agent运行在用户已登录的桌面会话中。如果必须用服务启动,需在服务属性中勾选「允许服务与桌面交互」,并将服务登录用户设为有权限访问桌面的本地管理员。
- 安装依赖组件:
- 安装对应版本的Python,确保已添加到系统环境变量
PATH - 执行
pip install pywinauto pytest(若用unittest框架则无需pytest,按需调整)
- 安装对应版本的Python,确保已添加到系统环境变量
- 系统权限与会话配置:
- 开启Windows自动登录:通过
netplwiz工具取消「要使用本计算机,用户必须输入用户名和密码」的勾选,设置自动登录账号,避免VM锁屏导致桌面会话失效 - 配置电源选项:设置从不睡眠、从不关闭显示器、从不锁屏
- 开启Windows自动登录:通过
二、用Jenkins Pipeline运行pywinauto测试
以下是完整的Pipeline示例,包含代码拉取、依赖安装、测试执行和结果归档:
pipeline { agent { label 'windows-gui-test-agent' } // 替换为你的Windows VM Agent标签 stages { stage('拉取测试代码') { steps { git url: '你的测试代码仓库地址', branch: 'main' } } stage('安装依赖') { steps { bat 'pip install -r requirements.txt' // 假设requirements.txt包含pywinauto、pytest等依赖 } } stage('执行GUI测试') { steps { // 若Agent以服务运行,需用psexec指定交互桌面会话(会话ID可通过query session命令查看) // bat 'psexec -i 1 python -m pytest tests/ -v --junitxml=pytest-results.xml' // 若Agent以JNLP在桌面会话运行,直接执行即可 bat 'python -m pytest tests/ -v --junitxml=pytest-results.xml' } } stage('归档测试结果') { steps { junit 'pytest-results.xml' } } } post { always { // 可选:归档测试日志或截图 archiveArtifacts artifacts: '**/*.log, **/*.png', allowEmptyArchive: true } } }
关键注意事项:
- 若测试需要启动被测GUI应用,需在测试代码中通过pywinauto启动(比如
Application().start("path/to/your/app.exe")),确保应用和测试进程在同一个会话中 - 若遇到窗口找不到的问题,可在测试代码中增加适当的等待时间,或用
pywinauto.findwindows.find_elements()排查窗口状态
三、无人值守执行的支持
完全支持无人值守执行,但需满足以下条件:
- Windows VM保持开机状态,且通过自动登录维持桌面会话不锁定
- Jenkins Agent始终运行在有交互桌面的会话中(JNLP启动或服务配置允许交互)
- 测试用例无人工交互依赖:所有GUI操作均由pywinauto实现,避免等待用户输入的逻辑
- 可结合Jenkins的定时构建功能,实现定期自动执行测试
内容的提问来源于stack exchange,提问作者Debajyoti Sikdar
相关产品推荐
相关产品推荐

