Appium自动化如何控制多设备并行执行

简介: 前言:    如何做到,控制多设备并行执行测试用例呢。

思路篇


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


实现篇  


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


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


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


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 runcase(devics):
    #执行测试用例
    pass
def run(deviceslist:list):
    pool = Pool(len(deviceslist))
    for i in deviceslist:
        pool.map(runcase, i)
    pool.close()
    pool.join()


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


最终代码展示


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)




相关文章
|
11天前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
46 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
1月前
|
Java 测试技术 C#
自动化测试之美:从Selenium到Appium
【10月更文挑战第3天】在软件开发的海洋中,自动化测试如同一艘航船,引领着质量保证的方向。本文将带你领略自动化测试的魅力,从Web端的Selenium到移动端的Appium,我们将一探究竟,看看这些工具如何帮助我们高效地进行软件测试。你将了解到,自动化测试不仅仅是技术的展示,更是一种提升开发效率和产品质量的智慧选择。让我们一起启航,探索自动化测试的世界!
|
2月前
|
敏捷开发 Java 测试技术
探索自动化测试的奥秘:从Selenium到Appium
【9月更文挑战第14天】软件测试,这个看似枯燥乏味却至关重要的领域,正经历着一场革命。随着技术的进步,自动化测试工具如Selenium和Appium已成为质量保证的利器。本文将带你一探这些工具的神秘面纱,了解它们如何简化测试流程、提升效率,并确保软件产品的质量。准备好,我们将深入自动化测试的世界,解锁其背后的原理和实践技巧。
|
3月前
|
测试技术 Android开发 iOS开发
Appium 是一个开源的自动化测试框架,它支持多种平台和多种编程语言
Appium是一款开源自动化测试框架,支持iOS和Android多平台及多种编程语言。通过WebDriver协议,开发者可编写自动化测试脚本。在iPhone上实现屏幕点击等操作需安装Appium及其依赖,启动服务器,并设置所需的测试环境参数。利用Python等语言编写测试脚本,模拟用户交互行为,最后运行测试脚本来验证应用功能。对于iPhone测试,需准备真实设备或Xcode模拟器。
116 1
|
3月前
|
Java 测试技术 API
探索自动化测试的奥秘:从Selenium到Appium
【8月更文挑战第31天】本文旨在引导读者理解自动化测试的重要性,并逐步深入介绍如何利用Selenium和Appium这两个强大的工具来提升测试效率和质量。文章不仅分享理论知识,还通过具体代码示例,展示如何在Web应用和移动应用测试中实施自动化策略。
|
3月前
|
测试技术 Android开发 iOS开发
探索自动化测试的奥秘:从Selenium到Appium
【8月更文挑战第31天】在软件测试的海洋中,自动化测试如同一艘快艇,带领我们高效地穿越波涛汹涌的手动测试海域。本文将带你从Selenium的网页自动化测试出发,一路驶向Appium的移动应用自动化测试岛屿,揭秘这两种工具如何改变软件测试的航向。你将看到代码示例的灯塔,指引你理解它们如何在实战中发挥作用,以及为什么掌握这些技能对于测试人员来说至关重要。
|
3月前
|
Java 测试技术 Android开发
探索自动化测试之美:从Selenium到Appium
【8月更文挑战第31天】在软件开发的世界中,测试是确保产品质量的关键步骤。随着技术的发展,自动化测试工具如Selenium和Appium成为了开发者的得力助手。本文将通过一个简单的代码示例,带领读者了解如何利用这些工具进行高效的自动化测试,确保软件的稳定性和可靠性,同时也让测试过程变得更加轻松有趣。
|
5月前
DC/AC电源模块具有高效率、高可靠性和灵活性的特点,广泛应用于各种工业自动化设备
DC/AC电源模块具有高效率、高可靠性和灵活性的特点,广泛应用于各种工业自动化设备。
DC/AC电源模块具有高效率、高可靠性和灵活性的特点,广泛应用于各种工业自动化设备
|
3月前
|
运维 监控 大数据
深入探讨网络自动化的魅力所在,以及如何利用Python这一强大工具,实现网络设备的批量配置与监控
在信息洪流的浪潮中,网络自动化如同一盏明灯,引领着我们穿越复杂网络管理的迷雾。它不仅简化了网络运维人员的工作,更是在大数据、云计算等技术飞速发展的背景下,成为了构建高效、稳定网络环境的关键。本文将深入探讨网络自动化的魅力所在,以及如何利用Python这一强大工具,实现网络设备的批量配置与监控,以此展现网络自动化在简化复杂网络管理中的重要作用。
72 0
|
4月前
|
数据采集 存储 监控
通过LabVIEW提升生产设备自动化水平
通过LabVIEW提升生产设备自动化水平
34 0