一、前置说明
- 总体目录:《从 0-1 搭建企业级 APP 自动化测试框架》
- 上节回顾:在 os_util 工具类和方法的实现 中,实现了启动应用程序和查杀进程的一些基本方法。
- 本节目标:简单实现通过代码启动
appium server
,代替手动启动。
二、操作步骤
1. 目录结构
说明:启动 appium server
的相关方法,可以被看成是 appium
使用中特定用途的辅助方法,因此可以将它存放在 appium --> support --> env_setup.py
文件中。
2. 代码实现
core/driver/appium/support/env_setup.py
import logging
import time
from utils.os_util import application_manager, process_manager, port_manager
logger = logging.getLogger(__name__)
class AppiumServer:
"""
- appium server 的默认监听端口号是 4723,默认以 4723 端口启动 appium server;
- 4723 端口可能会被其他程序占用,如果已被占用,需要使用其它端口号启动 appium server;
- 假设成功启动 appium 的端口号为 `4723` ,检查 4723 端口是否被占用;
- 如果 4723 端口已被占用,则说明 appium 已启动,则不重复启动;
- 如果 4723 端口未被占用,说明 appium 未启动,则在终端命令行中执行命令,启动 appium server;
- 有时可能需要清理测试环境,因此允许强制重启 appium server。
"""
def __init__(self, port):
self.port = port
def start(self, force_restart=False):
if force_restart:
self.stop()
application_manager.start_application(f'appium -p {self.port}', is_run_in_command=True)
time.sleep(10) # 启动 appium server 需要一定时间
else:
if not port_manager.is_port_in_use(self.port):
application_manager.start_application('appium', is_run_in_command=True)
logger.debug('Appium Server is already running')
def stop(self):
process_manager.kill_process_by_port(self.port)
class EmulatorDevice:
...
class UIAutomatorViewer:
...
if __name__ == '__main__':
logging.basicConfig(level=logging.DEBUG)
app = AppiumServer(4723)
app.start(force_restart=True)
app.start()
3. 代码验证
通过执行上述代码,可以实现如下功能:
- appium server 的默认监听端口号是 4723,默认以 4723 端口启动 appium server;
- 假设成功启动 appium 的端口号为
4723
,检查 4723 端口是否被占用; - 如果 4723 端口已被占用,则说明 appium 已启动,则不重复启动;
- 如果 4723 端口未被占用,说明 appium 未启动,则在终端命令行中执行命令,启动 appium server;
- 有时可能需要清理测试环境,因此允许强制重启 appium server。
测试通过。
三、要点小结
- 本节只是对启动
appium server
的简单实现,可作用临时功能使用; - 在启动 appium server 时,除了使用
-p
参数指定端口外,还有很多其它参数,比如:使用-g
参数指定日志输出的路径等; - 更多参数,请参考 appium 官方文档 ;
- Appium-Python-Client 库提供了
AppiumService
类来启动 appium 服务,但是经过调试存在一些问题; - 在后续章节,会对该类进行二次封装,以实现本节中描述的需求。
点击返回主目录