Appium+Python3 并发测试实例

from selenium import webdriver
import yaml
from time import ctime

with open(‘desired_caps.yaml‘,‘r‘) as f:
    data = yaml.load(f)

desired_list=[‘127.0.0.1:62001‘,‘127.0.0.1:62025‘]
def appium_devices(udid,port):
    desired_caps={}
    desired_caps[‘platformName‘]=data[‘platformName‘]
    desired_caps[‘platformVerion‘]=data[‘platformVersion‘]
    desired_caps[‘deviceName‘]=data[‘deviceName‘] #没有实际作用

    desired_caps[‘udid‘]=udid

    desired_caps[‘app‘]=data[‘app‘]
    desired_caps[‘noReset‘]=data[‘noReset‘]
    desired_caps[‘appPackage‘]=data[‘appPackage‘]
    desired_caps[‘appActivity‘]=data[‘appActivity‘]

    print(‘appium port:%s start run %s at %s‘%(port,udid,ctime()))
    driver=webdriver.Remote(‘http://‘+str(data[‘ip‘])+‘:‘+str(port)+‘/wd/hub‘,desired_caps)
    return driver

if __name__ == ‘__main__‘:
    appium_devices(desired_list[0],4723)
    appium_devices(desired_list[1],4725)
import subprocess
from time import ctime

def appium_start(host,port):
    bootstrap_port=str(port+1)
    cmd=‘start /b appium -a ‘+ host +‘ -p ‘+ str(port) +‘ -bp ‘+ str(bootstrap_port)

    print(‘%s at %s‘%(cmd,ctime()))
    subprocess.Popen(cmd,shell=True,stdout=open(‘./appium_log/‘+str(port)+‘.log‘,‘a‘),stderr=subprocess.STDOUT)

if __name__ == ‘__main__‘:
    host=‘127.0.0.1‘
    # port=4723
    # appium_start(host,port)

    #启动两个进程
    for i in range(2):
        port=4723+2*i
        appium_start(host,port)
import socket
import os

def check_port(host,port):
    ‘‘‘检测端口是否被占用‘‘‘
    #创建socket对象
    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

    try:
        s.connect((host,port))
        s.shutdown(2)
    except OSError as msg:
        print(‘port %s is available‘%port)
        print(msg)
        return True
    else:
        print(‘port %s is already use‘%port)
        return False

def relase_port(port):
    ‘‘‘释放指定端口‘‘‘
    #查找指定端口对应的pid
    cmd_find=‘netstat -aon | findstr %s‘%port
    print(cmd_find)

    #返回命令执行后的结果
    result=os.popen(cmd_find).read()
    print(result)

    if str(port) and ‘LISTENING‘ in result:
        #获取端口对应的pid进程
        i=result.index(‘LISTENING‘)
        start=i+len(‘LISTENING‘)+7
        end=result.index(‘\n‘)
        pid=result[start,end]

        #关闭被占用端口的pid
        cmd_kill=‘taskkill -f -pid %s‘%pid
        print(cmd_kill)
        os.popen(cmd_kill)
    else:
        print(‘port %s is available‘%port)

if __name__ == ‘__main__‘:
    host=‘127.0.0.1‘
    port=4725
    # check_port(host,port)
    relase_port(port)

实例:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2019-08-07 12:03
# @Author : zhouyang
# @File : appium_devices_sync.py
‘‘‘Appium并发测试
并发启动两台appium服务,再并发启动2台设备测试考研帮APP
2个appium服务,端口如下:
Appium服务端口:4723 ,bp端口:4724
Appium服务端口:4725 ,bp端口:4726
2台设备:
127.0.0.1:62001
127.0.0.1:62025
‘‘‘

from appium_sync.mulit_devices import appium_devices
from appium_sync.mulit_appium import appium_start
from appium_sync.check_port import *
import multiprocessing
from time import sleep

desired_list=[‘127.0.0.1:62001‘,‘127.0.0.1:62025‘]

def start_appium_action(host,port):
    if check_port(host,port):
        appium_start(host,port)
        return True
    else:
        print(‘appium %s is start fail‘%port)
        return False

def start_device_action(udid,port):
    host=‘127.0.0.1‘
    if start_appium_action(host,port):
        appium_devices(udid,port)
    else:
        relase_port(port)

def appium_start_sync():
    print(‘=======appium_start_sync=======‘)
    appium_process = []

    for i in range(2):
        host = ‘127.0.0.1‘
        port = 4723 + 2 * i
        appium = multiprocessing.Process(target=start_appium_action, args=(host, port))
        appium_process.append(appium)

    for appium in appium_process:
        appium.start()
    for appium in appium_process:
        appium.join()

    sleep(5)

def devices_start_sync():
    print(‘======devices_start_sync=======‘)

    # 创建desired进程组
    desired_process = []
    # 加载进程
    for i in range(len(desired_process)):
        port = 4723 + 2 * i
        deired = multiprocessing.Process(target=start_device_action, args=(desired_process[i], port))
        desired_process.append(deired)

    # 开启进程
    for deired in desired_process:
        deired.start()
    # 关闭进程
    for deired in desired_process:
        deired.join()

    sleep(5)

if __name__ == ‘__main__‘:
    appium_start_sync()
    devices_start_sync()

原文地址:https://www.cnblogs.com/xiuxiu123456/p/11322459.html

时间: 2024-10-07 09:34:48

Appium+Python3 并发测试实例的相关文章

Appium Grid并发测试

背景 Selenium玩的比较6的同学比较清楚:在Selenium中三大组件中有包含了Selenium Grid,而其作用就是分布式执行测试用例.主要的应用场景在于: 缩短测试执行时间,提高自动化测试效率 多浏览器的兼容性测试. Selenium只是针对于web平台的自动化,然而移动端平台的兼容性测试所涉及到机型众多,多设备并发测试需求更加迫切.而Appium Grid恰好就是基于Selenium Grid这一模式发展而来,可以很好的满足我们的需求. Google爬到一张原理图,大家可以来看下:

appium 并发测试

Android并发测试 Appium提供了在一台设备上启动多个Android会话的方案,而这个方案需要你输入不同的指令来启动多个Appium服务来实现. 启动多个Android会话的重要指令包括: -p Appium的主要端口 -U 设备id -bp Appium bootstrap端口 --chromedriver-port chromedriver端口(当使用了webviews或者chrome) --selendroid-port selendroid端口(当使用了selendroid) 如

使用JMeter3.0实战之分布式并发测试以及web API接口测试

简介: 该文档是以Apche JMeter-3.0为例进行编写的,通过网上的学习资料和官方文档的说明手册学习后,进行项目操作实践,将测试的过程记录下提供给大家学习. 本博文的内容主要是进行配置JMeter的测试参数,进行并发测试,分布式测试和收集服务器端的性能参数以及如何去测试web api接口的方法. 本博文以工作的项目作为并发测试的实验案例.如果有错误,请大家指出. 1.使用Badboy录制Web性能测试脚本 1.1使用Badboy工具进行录制Web性能测试脚本 (1)启动Badboy.首次

Android并发测试

Appium提供了在一台设备上启动多个Android会话的方案,而这个方案需要你输入不同的指令来启动多个Appium服务来实现. 启动多个Android会话的重要指令包括: -p Appium的主要端口 -U 设备id -bp Appium bootstrap端口 --chromedriver-port chromedriver端口(当使用了webviews或者chrome) --selendroid-port selendroid端口(当使用了selendroid) 更多参数的解释详见 her

iOS并发编程笔记,包含GCD,Operation Queues,Run Loops,如何在后台绘制UI,后台I/O处理,最佳安全实践避免互斥锁死锁优先级反转等,以及如何使用GCD监视进程文件文件夹,并发测试的方案等

iOS并发编程笔记,包含GCD,Operation Queues,Run Loops,如何在后台绘制UI,后台I/O处理,最佳安全实践避免互斥锁死锁优先级反转等,以及如何使用GCD监视进程文件文件夹,并发测试的方案等 线程 使用Instruments的CPU strategy view查看代码如何在多核CPU中执行.创建线程可以使用POSIX 线程API,或者NSThread(封装POSIX 线程API).下面是并发4个线程在一百万个数字中找最小值和最大值的pthread例子: #import

百万级别长连接,并发测试指南

前言 都说haproxy很牛x, 可是测试的结果实在是不算满意, 越测试越失望,无论是长连接还是并发, 但是测试的流程以及工具倒是可以分享分享.也望指出不足之处. 100w的长连接实在算不上太难的事情,不过对于网上关于测试方法以及测试工具的相关文章实在不甚满意,才有本文. 本文有两个难点,我算不上完全解决. 后端代码的性能. linux内核参数的优化. 环境说明 下面所有的测试机器都是基于openstack云平台,kvm虚拟化技术创建的云主机. 由于一个socket连接一般占用8kb内存,所以百

Python3快速入门(九)——Python3并发编程

Python3快速入门(九)--Python3并发编程 一.Python线程模块 1.线程简介 一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成.线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程本身不拥有系统资源,与进程内的其它线程共享进程的所有资源.一个进程中至少有一个线程,并作为程序的入口,即主线程,其它线程称为工作线程.???? 多线程,是指从软件或者硬件上实现多个线程并发执行的技术.支持多线程能力的计算机因有硬件支持而能够在同一时间执行多个线程,进而提升

使用CodeBenchmark对逻辑代码进行并发测试

一直对性能测试比较感兴趣,所以也写了不少的测试工具有WebApiBenchmark和TcpBenchmark等;但这些工具测试都是有针对性和配置的方式来进行功能有限所以很难适用更多的场景,所以单独开发一个组件CodeBenchmark来解决不同业务代码下的性能测试;严格来说CodeBenchmark并不算一个完整的测试工具,它提供一个测试管理功能和测试环境,可以对实现某一规则业务代码进行一个并发测试并提供一个最终的测试结果.以下主要介绍如何使用CodeBenchmark. 环境要求 CodeBe

多线程访问网页+高并发测试网站

多线程访问网页+高并发测试网页 仅供学习,请勿用于非法用途. 线程类如下 import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; public class TestThread extends Thread{ private String httpurl