Appium并发测试1--启动多个appium服务

本文详细介绍了Appium服务的配置参数,包括如何指定端口号、连接物理设备、监听IP地址等,以及如何在脚本中使用这些参数来启动多个Appium服务。

客户端和服务器进行通信,是要指定端口号(默认是4723),所以要启动多个服务,则需要多个端口号

Appium常用命令参数:查看更多命令参数,则输入appium -h

参数

默认值

含义

-U,--udid

Null

连接物理设备的唯一设备标识符

-a,--address

0.0.0.0

监听的IP地址

-p,--port

4723

监听的端口

-bp,--bootstrap-port

4724

连接Android设备的端口号(Android-only)

-g,--log

Null

日志输出到指定文件

--no-reset

False

Session之间不重置应用状态

--app-activity

Null

应用的启动的activity的名字

--app

Null

本地绝对路径或远程url指向的一个安装包

以上参数,可在脚本里面直接使用如下:

实例:

启动多个appium,则使用参数-p:

### Python和Appium实现Android多设备并发测试 在Python中使用Appium进行Android多设备并发测试,涉及启动多个Appium服务器、配置设备参数以及通过多线程或多进程实现并发。以下是详细的实现方法: #### 1. 启动多个Appium服务器 为了支持多设备并发测试,每个设备需要一个独立的Appium服务器实例。可以通过指定不同的端口号(`-p`)和Bootstrap端口号(`-bp`)来启动多个Appium服务器[^2]。例如: ```bash appium -a 127.0.0.1 -p 4723 -bp 4726 -U <device_id_1> appium -a 127.0.0.1 -p 4727 -bp 4728 -U <device_id_2> ``` 其中: - `-a`:指定Appium服务器绑定的IP地址。 - `-p`:指定Appium服务器监听的端口号。 - `-bp`:指定Bootstrap端口号。 - `-U`:指定连接的设备ID。 #### 2. 配置设备参数 设备参数可以通过YAML文件进行管理,便于动态加载和修改。以下是一个示例YAML配置文件[^5]: ```yaml platformName: Android platformVersion: "11" deviceName: "Android Emulator" udid: appPackage: "com.example.app" appActivity: ".MainActivity" automationName: "UiAutomator2" autoGrantPermissions: true noReset: true url: "127.0.0.1" ports: - 4723 - 4727 devices: - U4AIUKFAL7W4MJLR - U4AIUKFAL7W4MHUHUDS ``` 加载YAML文件为每个设备生成对应的desired capabilities: ```python import yaml def load_config(file_path): with open(file_path, 'r') as file: data = yaml.load(file, Loader=yaml.FullLoader) return data def generate_desired_caps(data, udid, port): desired_caps = { 'platformName': data['platformName'], 'platformVersion': data['platformVersion'], 'deviceName': data['deviceName'], 'udid': udid, 'appPackage': data['appPackage'], 'appActivity': data['appActivity'], 'automationName': data['automationName'], 'autoGrantPermissions': data['autoGrantPermissions'], 'noReset': data['noReset'] } return desired_caps, port ``` #### 3. 实现多进程并发启动设备 可以使用`multiprocessing`模块实现多进程并发启动设备[^4]。以下是一个完整的代码示例: ```python from appium import webdriver from multiprocessing import Process import yaml import time # 加载配置文件 config = load_config(r"config.yaml") def start_appium_server(platform_name, port): # 模拟启动Appium服务器的逻辑 print(f"Starting Appium server on port {port} for {platform_name}") time.sleep(2) # 模拟启动时间 def stop_appium_server(platform_name, port): # 模拟停止Appium服务器的逻辑 print(f"Stopping Appium server on port {port} for {platform_name}") def run_cases(device, port): desired_caps, _ = generate_desired_caps(config, device, port) driver = webdriver.Remote(f"http://{config['url']}:{port}/wd/hub", desired_caps) driver.implicitly_wait(10) print(f"Running test cases on {device} at port {port}") time.sleep(5) # 模拟测试用例执行时间 driver.quit() if __name__ == "__main__": processes = [] for index, device in enumerate(config['devices']): port = config['ports'][index] # 启动Appium服务器 start_appium_server("Android", port) # 创建多进程任务 p = Process(target=run_cases, args=(device, port)) processes.append(p) p.start() # 等待所有进程完成 for p in processes: p.join() # 停止Appium服务器 for index, device in enumerate(config['devices']): port = config['ports'][index] stop_appium_server("Android", port) ``` #### 4. 注意事项 - 确保每个设备的端口号唯一,避免端口冲突[^3]。 -测试完成后,记得关闭所有Appium服务器实例以释放资源。 - 使用`ThreadPoolExecutor`或`ProcessPoolExecutor`可以进一步简化多线程或多进程的实现[^1]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Miss糖豆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值