当前位置: 首页 > news >正文

python+Appium自动化:python多线程多并发启动appium服务

Python启动Appium 服务

使用Dos命令或者bat批处理来手动启动appium服务,启动效率低下。如何将启动Appium服务也实现自动化呢?

这里需要使用subprocess模块,该模块可以创建新的进程,并且连接到进程的输入、输出、错误等管道信息,并且可以获取进程的返回值。

场景

使用Python启动2台appium服务,端口配置如下:

  • Appium服务器端口:4723,bp端口为4724
  • Appium服务器端口:4725,bp端口为4726

说明:bp端口( –bootstrap-port)是appium和设备之间通信的端口,如果不指定到时无法操作多台设备运行脚本

工程文件中新建一个文件夹

新建multi_subprocess.py

# -*- coding: utf-8 -*-#import subprocess
from time import ctimedef appium_start(host,port):# bp端口( –bootstrap-port)是appium和设备之间通信的端口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('../appiumlog/'+str(port)+'.log', 'a'), stderr=subprocess.STDOUT)if __name__ == '__main__':host = '127.0.0.1'port = 4723appium_start(host,port)

效验是否成功 :

1.cmd中输入netstat -ano | findstr 端口号(4723)

2. 在appiumlog路径中生成4723.log日志文件

终止appium服务

taskkill -f -pid appium进程,如下:

多个appium服务启动

if __name__ == '__main__':host = '127.0.0.1'for i in range(2):port=4723+2*iappium_start(host,port)

多进程并发启动appium服务

上面还不是并发执行启动appium,因此需要使用多进程来实现并发启动。
同样需要引入multiprocessing多进程模块。

muti_appium_sync.py

import multiprocessing
import subprocess
from time import ctimedef appium_start(host, port):bootstrap_port = str(port + 1)cmd = 'start /b appium -a ' + host + ' -p ' + str(port) + ' --bootstrap-port ' + str(bootstrap_port)print('%s at %s' % (cmd, ctime()))subprocess.Popen(cmd, shell=True,stdout=open('./appiumlog/'+str(port)+'.log', 'a'), stderr=subprocess.STDOUT)#构建appium进程组
appium_process=[]#加载appium进程
for i in range(2):host='127.0.0.1'port = 4723 + 2 * iappium=multiprocessing.Process(target=appium_start, args=(host, port))appium_process.append(appium)if __name__ == '__main__':#并发启动appium服务for appium in appium_process:appium.start()for appium in appium_process:appium.join()

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!  

http://www.lryc.cn/news/251110.html

相关文章:

  • 【计算机网络笔记】802.11无线局域网
  • 用C++和python混合编写数据采集程序?
  • Android HCI日志分析案例1
  • LangChain(0.0.339)官方文档四:Prompts下——prompt templates的存储、加载、组合和部分格式化
  • 鸿蒙开发笔记
  • 「计算机网络」Cisco Packet Tracker计算机网络仿真器的使用
  • 【已解决】if lock.acquire(block, timeout):KeyboardInterrupt
  • 将Excel中的数据导入shell脚本,并调用expect脚本
  • elementui el-table用span-method方法对相同的列名或行名进行合并
  • 汇编语言实现音乐播放器
  • 大型网站系统架构演化(Web)
  • 三轴加速度计LIS2DW12开发(2)----基于中断信号获取加速度数据
  • Shell循环:whileuntil
  • Redis 安装部署
  • 项目中遇到的半导体公司
  • 汇编:call与ret/retf指令
  • Fiddler抓包工具之高级工具栏中的重定向AutoResponder的用法
  • 如何基于OpenCV和Sklearn库开展数据降维
  • 详解SpringAop开发过程中的坑
  • 【海思SS528 | VDEC】MPP媒体处理软件V5.0 | VDEC的使用总结
  • Kubernetes sample-controller 例子介绍
  • 【C/C++指针】指针*与引用的区别
  • 【ArcGIS Pro微课1000例】0039:制作全球任意经纬网的两种方式
  • 【二叉树】练习题终章
  • flutter开发实战-实现获取视频的缩略图封面video_thumbnail
  • Prompt Toolkit探索:打造交互式CLI应用
  • 【已解决】AttributeError: module ‘gradio‘ has no attribute ‘outputs‘
  • WPF Mvvm模式下面如何将事件映射到ViewModel层
  • C# WPF上位机开发(计算器界面设计)
  • [c]比较月亮大小