appium--多进程启动多设备

简介: appium--多进程启动多设备

前戏


在前面我们都是使用一个机器进行测试,在做app自动化的时候,我们要测不同的机型,也就是兼容性测试,如果一台一台设备去执行,那就显的太麻烦了。所以经常需要我们启动多个设备,同时跑自动化测试用例,要跑多个设备时,首先要启动多个appium服务。


启动多个appium服务


在之前我们都是在命令行里输入appium来启动appium服务,这样启动的默认端口是4723,我们可以使用-p参数来指定端口号,输入appium等价与appium -p 4723

启动另一个服务

appium -p 4725

这样我们就启动了两个appium服务。

服务要隔一个数字,如端口为4723,则4724为连接安卓设备的端口号,所以下个服务为4725


appium的参数


appium不止一个参数-p,还有其他的参数

参数  默认值 含义
-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之间不重置应用状态
--session-override false 允许session被覆盖(冲突的话)
--app-activity null 打开Android应用时,启动的Activity的名字
--app null 本地app的路径或远程的安装包

其他的参数可以使用appium -h查看


多设备启动


前提条件:

1.连接两个机器

2.启动两个服务

yaml文件

platformName: Android
platforVersion: 6.1.1
deviceName: 127.0.0.1:62001
appPackage: com.jgw.csca
appActivity: com.jgw.csca.view.activity.LoginActivity
unicodeKeyboard: True
resetKeyboard: True
noReset: False
ip: 127.0.0.1
port: 4723

脚本

from appium import webdriver
import yaml
devices_list = ['127.0.0.1:62001', '127.0.0.1:62025']  # 两个设备
'''
udid是设备的,如果是真机,这个必须有,有udid后deviceName就可以随便写一个
port是appium服务的端口,我启动的是4723和4725
'''
def desiredCaps(udid, port):
    with open('../conf/capability.yaml', 'r', encoding='utf-8') as file:
        data = yaml.load(file, Loader=yaml.FullLoader)
    desired_caps = {}
    desired_caps['platformName'] = data['platformName']
    desired_caps['platforVersion'] = data['platforVersion']
    desired_caps['deviceName'] = data['deviceName']
    desired_caps['udid'] = udid
    desired_caps['appPackage'] = data['appPackage']
    desired_caps['appActivity'] = data['appActivity']
    desired_caps['unicodeKeyboard'] = data['unicodeKeyboard']
    desired_caps['resetKeyboard'] = data['resetKeyboard']
    desired_caps['noReset'] = data['noReset']
    driver = webdriver.Remote('http://' + str(data['ip']) + ':' + str(port)+ '/wd/hub', desired_caps)
    '''
    第一次启动
    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
    第二次启动
    driver = webdriver.Remote('http://127.0.0.1:4725/wd/hub', desired_caps)
    '''
    return driver
if __name__ == '__main__':
    desiredCaps(devices_list[0], 4723)
    desiredCaps(devices_list[1], 4725)

这样,第一台设备执行结束之后就会在第二台设备上执行


多进程启动多个设备


可以使用python的多线程或者多进程实现,推荐使用多进程,原因如下

多进程中,同一个变量,各自有一份拷贝存在于每个进程中, 互不影响。而多线程中,所有变量都由所有线程共享,所以,任何一个变量都可以被任何一个线程修改, 因此,线程之间共享的数据量最大的危险在于多个线程同一时间修改一个变量,容易把数据给改乱了

前置条件,和上面的一样

from appium import webdriver
import yaml
import multiprocessing
devices_list = ['127.0.0.1:62001', '127.0.0.1:62025']  # 两个设备
def desiredCaps(udid, port):
    with open('../conf/capability.yaml', 'r', encoding='utf-8') as file:
        data = yaml.load(file, Loader=yaml.FullLoader)
    desired_caps = {}
    desired_caps['platformName'] = data['platformName']
    desired_caps['platforVersion'] = data['platforVersion']
    desired_caps['deviceName'] = data['deviceName']
    desired_caps['udid'] = udid
    desired_caps['appPackage'] = data['appPackage']
    desired_caps['appActivity'] = data['appActivity']
    desired_caps['unicodeKeyboard'] = data['unicodeKeyboard']
    desired_caps['resetKeyboard'] = data['resetKeyboard']
    desired_caps['noReset'] = data['noReset']
    driver = webdriver.Remote('http://' + str(data['ip']) + ':' + str(port)+ '/wd/hub', desired_caps)
    return driver
desired_process = []  # 存储多设备
for i in range(len(devices_list)):
    port = 4723 + 2*i
    desired = multiprocessing.Process(target=desiredCaps, args=(devices_list[i], port))
    desired_process.append(desired)  # 将设备添加到里面,ip和端口
if __name__ == '__main__':
    for desired in desired_process:
        desired.start()
    for desired in desired_process:
        desired.join()

相关文章
|
8月前
|
Python
Python Appium Selenium 查杀进程的实用方法
Python Appium Selenium 查杀进程的实用方法
96 1
|
8月前
|
测试技术
Appium 并行测试多个设备
Appium 并行测试多个设备
199 0
|
测试技术 Windows Python
python-windows命令行启动appium及杀掉对应接口进程
文章目录 windows命令行启动appium及杀掉对应接口进程 一.环境配置 1.安装命令行版appium 2.安装appium-doctor检测 3.python安装Appium-Python-Client: 4.定位uiautomatorviewer.bat 5.查看主包名主类名Activity 二.python-appium启动app 1.appium启动一加计算器相关参数: 2.windows查看端口 三.windows杀掉对应进程
233 0
python-windows命令行启动appium及杀掉对应接口进程
|
测试技术 Windows Python
windows命令行启动appium及杀掉对应接口进程
本人环境前置条件:手机设备为真机一加7 Pro,使用的应用为一加计算器
437 0
windows命令行启动appium及杀掉对应接口进程
|
测试技术
Appium自动化如何控制多设备并行执行
前言:     如何做到,控制多设备并行执行测试用例呢。
|
8月前
|
测试技术 API Python
Appium控件交互策略:优化自动化测试效率的关键方法
该文介绍了如何使用Selenium与APP进行交互,包括点击、输入和状态判断等操作。例如,通过element.click()点击控件,element.send_keys()输入文本,以及element.is_displayed()检查元素是否可见。还展示了如何获取元素属性,如resource-id、text和class,并提供了Python代码示例来定位并操作APP元素,如滑动条的显示、可点击性检测及点击滑动条中心位置。在编写测试脚本时,应注意元素定位和状态验证以确保测试稳定性。
|
2月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
147 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
5月前
|
测试技术 Android开发 iOS开发
Appium 是一个开源的自动化测试框架,它支持多种平台和多种编程语言
Appium是一款开源自动化测试框架,支持iOS和Android多平台及多种编程语言。通过WebDriver协议,开发者可编写自动化测试脚本。在iPhone上实现屏幕点击等操作需安装Appium及其依赖,启动服务器,并设置所需的测试环境参数。利用Python等语言编写测试脚本,模拟用户交互行为,最后运行测试脚本来验证应用功能。对于iPhone测试,需准备真实设备或Xcode模拟器。
159 1
|
8月前
|
Web App开发 小程序 Android开发
Appium微信小程序自动化环境准备
Appium微信小程序自动化环境准备
262 1