gpt4 book ai didi

python 基于Appium控制多设备并行执行

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 27 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章python 基于Appium控制多设备并行执行由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

前言:

    如何做到,控制多设备并行执行测试用例呢.

思路篇

  我们去想下,我们可以获取参数的信息,和设备的信息,那么​我们也可以针对每台设备开启不一样的端口服务。那么每个服务都对应的端口,我们在获取设备列表的时候,要和 每个服务对应起来,这样,我们开启一个进城池,我们在进程池里去控制设备,​每个进程池 控制不一样的设备即可.

实现篇

  首先实现对应的参数篇和对应的设备端口, 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def startdevicesApp():
     l_devices_list = []
     port_list = []
     alldevices = get_devices()
     if len (alldevices)> 0 :
         for item in alldevices:
             port = random.randint( 1000 , 6000 )
             port_list.append(port)
             desired_caps = {
                     'platformName' : 'Android' ,
                     'deviceName' : item,
                     'platformVersion' : getPlatForm(item),
                     'appPackage' : get_apkname(apk_path),  # 包名
                     'appActivity' : get_apk_lautc(apk_path),  # apk的launcherActivity
                     'skipServerInstallation' : True ,
                 "port" :port
                 }
             l_devices_list.append(desired_caps)
     return  l_devices_list,port_list

    ​接下来,我们去​写一个端口开启服务.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class RunServer(threading.Thread): #启动服务的线程
  def __init__( self , cmd):
   threading.Thread.__init__( self )
   self .cmd = cmd
  def run( self ):
   os.system( self .cmd)
def start(port_list: list ):
  def __run(url):
   time.sleep( 10 )
   response = urllib.request.urlopen(url, timeout = 5 )
   if str (response.getcode()).startswith( "2" ):
    return True
  for i in range ( 0 , len (port_list)):
   cmd = "appium -p %s " % (
    port_list[i])
   if platform.system() = = "Windows" : # windows下启动server
    t1 = RunServer(cmd)
    p = Process(target = t1.start())
    p.start()
    while True :
     time.sleep( 4 )
     if __run( "http://127.0.0.1:" + port_list[i] + "/wd/hub/status" ):
      break

​我们开启服务了,接下来,我们怎样根据​不同进程执行测试用例.

?
1
2
3
4
5
6
7
8
9
10
def runcase(devics):
  #执行测试用例
  pass
def run(deviceslist: list ):
  pool = Pool( len (deviceslist))
  for i in deviceslist:
   pool. map (runcase, i)
  pool.close()
  pool.join()

  接下来,就是我们去组合形成最后的执行的代码.

    最终代码展示 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
from appium import webdriver
from androguard.core.bytecodes.apk import APK
import os
import random
apk_path = "/Users/lileilei/Downloads/com.tencent.mobileqq_8.5.0_1596.apk"
 
 
def get_devices() - > list :
  all_devices = []
  cmd = "adb devices"
  reslut = os.popen(cmd).readlines()[ 1 :]
  for item in reslut:
   if item ! = "\n" :
    all_devices.append( str (item).split( "\t" )[ 0 ])
  return all_devices
 
 
def getPlatForm(dev: str ) - > str :
  cmd = 'adb -s {} shell getprop ro.build.version.release' . format (dev)
  reslut = os.popen(cmd).readlines()[ 0 ]
  return str (reslut).split( "\n" )[ 0 ]
 
 
def get_apkname(apk):
  a = APK(apk, False , "r" )
  return a.get_package()
 
 
def get_apk_lautc(apk):
  a = APK(apk, False , "r" )
  return a.get_main_activity()
 
import platform
from multiprocessing import Process,Pool
import time,urllib.request
import threading
class RunServer(threading.Thread): #启动服务的线程
  def __init__( self , cmd):
   threading.Thread.__init__( self )
   self .cmd = cmd
  def run( self ):
   os.system( self .cmd)
def start(port_list: list ):
  def __run(url):
   time.sleep( 10 )
   response = urllib.request.urlopen(url, timeout = 5 )
   if str (response.getcode()).startswith( "2" ):
    return True
  for i in range ( 0 , len (port_list)):
   cmd = "appium -p %s " % (
    port_list[i])
   if platform.system() = = "Windows" : # windows下启动server
    t1 = RunServer(cmd)
    p = Process(target = t1.start())
    p.start()
    while True :
     time.sleep( 4 )
     if __run( "http://127.0.0.1:" + port_list[i] + "/wd/hub/status" ):
      break
 
def startdevicesApp():
  l_devices_list = []
  port_list = []
  alldevices = get_devices()
  if len (alldevices)> 0 :
   for item in alldevices:
    port = random.randint( 1000 , 6000 )
    port_list.append(port)
    desired_caps = {
      'platformName' : 'Android' ,
      'deviceName' : item,
      'platformVersion' : getPlatForm(item),
      'appPackage' : get_apkname(apk_path), # 包名
      'appActivity' : get_apk_lautc(apk_path), # apk的launcherActivity
      'skipServerInstallation' : True ,
     "port" :port
     }
    l_devices_list.append(desired_caps)
  return l_devices_list,port_list
def runcase(devics):
  #执行测试用例
  pass
def run(deviceslist: list ):
 
  pool = Pool( len (deviceslist))
  for devices in deviceslist:
   pool. map (runcase, devices)
  pool.close()
  pool.join()
if __name__ = = "__main__" :
  l_devices_list,port_list = startdevicesApp()
  start(port_list)
  run(l_devices_list)

以上就是python 基于Appium控制多设备并行执行的详细内容,更多关于Appium控制多设备并行执行的资料请关注我其它相关文章! 。

原文链接:https://www.cnblogs.com/leiziv5/p/14225882.html 。

最后此篇关于python 基于Appium控制多设备并行执行的文章就讲到这里了,如果你想了解更多关于python 基于Appium控制多设备并行执行的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com