appium 多线程还是多进程(转)

https://www.cnblogs.com/zouzou-busy/p/11440175.html

在前面我们都是使用一个机器进行测试,在做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()

分类: appium

原文地址:https://www.cnblogs.com/showker/p/11609992.html

时间: 2025-01-11 02:51:00

appium 多线程还是多进程(转)的相关文章

多线程和多进程的区别与联系

1.单进程单线程:一个人在一个桌子上吃菜.2.单进程多线程:多个人在同一个桌子上一起吃菜.3.多进程单线程:多个人每个人在自己的桌子上吃菜. 多线程的问题是多个人同时吃一道菜的时候容易发生争抢,例如两个人同时夹一个菜,一个人刚伸出筷子,结果伸到的时候已经被夹走菜了...此时就必须等一个人夹一口之后,在还给另外一个人夹菜,也就是说资源共享就会发生冲突争抢. 1.对于 Windows 系统来说,[开桌子]的开销很大,因此 Windows 鼓励大家在一个桌子上吃菜.因此 Windows 多线程学习重点

编程思想之多线程与多进程(2)——线程优先级与线程安全

原文:http://blog.csdn.net/luoweifu/article/details/46701167 作者:luoweifu 转载请标名出处 <编程思想之多线程与多进程(1)--以操作系统的角度述说线程与进程>一文详细讲述了线程.进程的关系及在操作系统中的表现,这是多线程学习必须了解的基础.本文将接着讲一下线程优先级和线程安全. 线程优先级 现在主流操作系统(如Windows.Linux.Mac OS X)的任务调度除了具有前面提到的时间片轮转的特点外,还有优先级调度(Prior

线程、进程、多线程、多进程

http://blog.csdn.net/lishenglong666/article/details/8557215 线程进程的联系和区别 定义: 进程是程序在计算机上的一次执行活动,是系统进行资源分配和调度的一个独立单位:  线程是进程的一个实体,是cpu调度和分派的基本单位,他是比进程更小的能独立运行的基本单位:线程自己基本上不拥有系统资源,只用有点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),一个线程可以创建和撤销另一个线程: 线程与进程的关系: 1)     一个线程只能属于

老男孩教育每日一题-2017年3月23日-请问多线程与多进程的区别,在什么时候用线程或进程更合适?

解答: 进程: 优点:多进程可以同时利用多个CPU,能够同时进行多个操作. 缺点:耗费资源(创建一个进程重新开辟内存空间). 进程不是越多越好,一般进程个数等于cpu个数. 线程: 优点:共享内存,尤其是进行IO操作(网络.磁盘)的时候(IO操作很少用cpu),可以使用多线程执行并发操作. 缺点:抢占资源. 线程也不是越多越好,具体案例具体分析,切换线程关系到请求上下文切换耗时. 计算机中执行任务的最小单元:线程. IO密集型(不用cpu):多线程 计算密集型(用cpu):多进程 网友精品回答:

c++的多线程和多进程

一.多进程和多线程对比 多进程:进程不止一个,开销比较大,通信方式比较复杂(可以用过管道.文件.消息队列进行通信),维护成本不高. 多线程:利用共享内存的方式进行指令的执行,开销比较低,但是维护起来比较麻烦,需要考虑到共享资源的问题.不支持分布式运算. 二.多线程举例 #include "iostream.h" #include "thread.h" using namespace std; void function() { cout<<"h

编程思想之多线程与多进程(4)——C++中的多线程

<编程思想之多线程与多进程(1)--以操作系统的角度述说线程与进程>一文详细讲述了线程.进程的关系及在操作系统中的表现,<编程思想之多线程与多进程(2)--线程优先级与线程安全>一文讲了线程安全(各种同步锁)和优先级,这是多线程学习必须了解的基础.本文将接着讲一下C++中多线程程序的开发.这里主要讲Windows平台线程的用法,创建线程要调用windows API的CreateThread方法. 创建线程 在Windows平台,Windows API提供了对多线程的支持.前面进程和

编程思想之多线程与多进程(2)——Java中的多线程

原文:http://blog.csdn.net/luoweifu/article/details/46673975 作者:luoweifu 转载请标名出处 <编程思想之多线程与多进程(1)--以操作系统的角度述说线程与进程>一文详细讲述了线程.进程的关系及在操作系统中的表现,这是多线程学习必须了解的基础.本文将接着讲一下Java中多线程程序的开发 单线程 任何程序至少有一个线程,即使你没有主动地创建线程,程序从一开始执行就有一个默认的线程,被称为主线程,只有一个线程的程序称为单线程程序.如下面

几种并发服务器模型的实现:多线程,多进程,select,poll,epoll

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/socket.h> #include <arpa/inet.h> #include &q

Python多线程和多进程谁更快?

python多进程和多线程谁更快 python3.6 threading和multiprocessing 四核+三星250G-850-SSD 自从用多进程和多线程进行编程,一致没搞懂到底谁更快.网上很多都说python多进程更快,因为GIL(全局解释器锁).但是我在写代码的时候,测试时间却是多线程更快,所以这到底是怎么回事?最近再做分词工作,原来的代码速度太慢,想提速,所以来探求一下有效方法(文末有代码和效果图) 这里先来一张程序的结果图,说明线程和进程谁更快 一些定义 并行是指两个或者多个事件