用命令方式启动、停止appium服务和app
启动appium服务并监听一个端口命令:
命令command==> appium -a {ip} -p {port} -U {deviceName} -g {log}
以shell命令方式执行命令,并输入日志到log文件:用subprocess需导入
subprocess.Popen(command, stdout=open(LOG_PATH, 'a+'), stderr=subprocess.PIPE, shell=True) #相当于再cmd窗口输入上面的命令command
根据端口号查询是否已经启动服务:
subprocess.getoutput('netstat -ano | findstr %s'%self.port) #如果找到以启动端口包含port,则会返回对应信息,
netstat -ano | findstr 1111 查询端口号1111的进程信息,从中可以获得pid
启动模拟器或手机,访问服务监听的那个端口:
webdriver.Remote('http://127.0.0.1:4723/wd/hub',dic) #dic是模拟器或手机的设备信息和app信息
根据pid查询进程信息,第一列就是进程名称
tasklist | findstr 2472
根据进程名称杀死改名成对应的所有进程:
taskkill /F /IM node.exe /t #node.exe是进程名
根据pid杀死进程
taskkill /pid 2472 -t -f #2472是pid
例子:
yaml文件格式如下:内容为手机信息和app信息
device_type: android
tester:
resetKeyboard: true
appActivity: com.tencent.mobileqq.activity.SplashActivity
appPackage: com.tencent.mobileqq
# appPackage: com.android.browser
# appActivity: .BrowserActivity
noReset: False
unicodeKeyboard: true
devices:
android:
- port: 9009
platformName: Android
udid: emulator-5554
platformVersion: 5.1.1
name: 雷电a
ip: 127.0.0.2
deviceName: emulator-5554
启动服务、测试服务是否启动、启动app
from lib.tool import Tool
from conf.setting import LOG_PATH
from lib.log import logger
from appium import webdriver
import subprocess
class Controller(object):
def __init__(self):#初始化函数主要是对设备和app信息的获取
self.tool=Tool()#tool类中写的有获取设备文件yaml数据的方法
self.yml=self.tool.app_data#获取到yaml文件中的设备信息
self.device_type=self.yml.get('device_type')
self.device_name=self.yml.get('devices').get(self.device_type)[0].get('deviceName')
self.devices=self.yml.get('devices')
self.port=self.devices.get(self.device_type)[0].get('port')
self.tester=self.yml.get('tester')
# print(self.device_name) #taskkill -PID 4152 -F
# 每次启动前都要kill掉所有的进程taskkill /F /IM node.exe /t def kill_server(self): #taskkill /F /IM node.exe /t 我们开启的appium进程名是node.exe
logger.debug('执行[KILL SERVER]操作:%s' % subprocess.getoutput("taskkill /F /IM node.exe /t"))
logger.debug('重启ADB服务!%s' % subprocess.getoutput("adb kill-server")) def start_server(self):#启动server
device=self.devices.get(self.device_type)[0] #命令字符串
command="appium -a {ip} -p {port} -U {deviceName} -g {log}".format(
ip=device.get('ip'),
port=device.get('port'),
deviceName=device.get('deviceName'),
log=LOG_PATH.replace('app_log.log',device.get('name')+'.log') )
print(command)
logger.debug('服务启动命令:%s'%command) #执行命令
subprocess.Popen(command, stdout=open(LOG_PATH, 'a+'), stderr=subprocess.PIPE, shell=True) def test_server(self):
while True:
#查询是否端口已启动,即服务启动
c=subprocess.getoutput('netstat -ano | findstr %s'%self.port)
if c: logger.debug('启动成功。。。。')
break
else:
logger.debug('启动失败,5s后重试')
import time
time.sleep(5)
return True def start_driver(self):
device=self.devices.get(self.device_type)[0]
self.tester.update(device)
# print(self.tester)
driver=webdriver.Remote('http://{ip}:{port}/wd/hub'.format(
ip=device.get('ip'),
port=device.get('port') ),self.tester) if __name__=='__main__':
controller=Controller()
print(controller.device_name)
controller.kill_server()
controller.start_server()
if controller.test_server():
controller.start_driver()
用命令方式启动、停止appium服务和app的更多相关文章
- Appium+Python app自动化测试之脚本启动和停止Appium服务
研究了一段时间的Appium android app的自动化测试,工作中需要连接多台手机终端同时执行测试用例,我实现的方式是获取用例中需要执行用例的设备id个数以及实际连接到的设备数(通过adb de ...
- delphi 启动停止windows服务 转
http://blog.csdn.net/haiou327/article/details/6106233 不用cmd用delphi如何实现启动停止windows服务建议参考一下Delphi的Sckt ...
- Linux Systemd——在RHEL/CentOS 7中启动/停止/重启服务
RHEL/CentOS 7.0中一个最主要的改变,就是切换到了systemd.它用于替代红帽企业版Linux前任版本中的SysV和Upstart,对系统和服务进行管理.systemd兼容SysV和Li ...
- bat启动/停止oracle服务
原文:bat启动/停止oracle服务 自己的电脑比较慢,尤其装了oracle10g后,服务开启和关闭用bat文件操作省事点 开启服务 @echo offnet start OracleService ...
- 在CentOS 7中启动/停止/重启服务
RHEL/CentOS 7.0中一个最主要的改变,就是切换到了systemd.它用于替代红帽企业版Linux前任版本中的SysV和Upstart,对系统和服务进行管理.systemd兼容SysV和Li ...
- Delphi启动/停止Windows服务,启动类型修改为"自动"
unit U_StartServices; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Contr ...
- Windows下使用service.bat安装tomcat服务, 启动停止tomcat服务
在项目开发过程中,以前只是在Eclipse中配置.启动.停止tomcat服务器 如果只想在机器中使用tomcat服务器,而不想安装MyEclipse,可以使用service.bat 将tomcat安装 ...
- 【OF框架】使用OF.WinService项目,添加定时服务,进行创建启动停止删除服务操作
准备 使用框架搭建完成项目,包含OF.WinService项目. 了解Window Service 和定时服务相关知识. 一.添加一个定时服务 第一步:了解项目结构 第二步:创建一个新的Job 第三步 ...
- Windows下启动停止Oracle11g服务-为解决系统变慢而生
我们拿Oracle 11g作为例子. 首先在“开始=〉运行”中输入“services.msc”,按回车,进入“服务”控制台, 将 Oracle ORCL VSS Writer Service.Orac ...
随机推荐
- canvas图片编辑操作:缩放、移动、保存(PC端+移动端)
最近在写canvas关于图片的操作,看了网上的代码基本都是不行的,于是就自己写了一个. html代码 <canvas id="myCanvas" width="37 ...
- JS实例-01
输入成绩(0-100),不同的分数段奖励不同while(true){var a=prompt('请输入成绩');if (a>=0&&a<=100){ break;}}if ...
- CompletableFuture异步线程
1.线程池七大参数介绍 (1)corePoolSize:线程池中常驻核心线程数 (2)maximumPoolSize:线程池能够容纳同时执行的最大线程数,此值必须大于等于1 (3)keepAliveT ...
- 技术分享丨数据仓库的建模与ETL实践技巧
摘要:如何搭建数据仓库,在这个过程中都应该遵循哪些方法和原则,项目实践中有哪些技巧. 一.数据仓库的“心脏” 首先来谈谈数据模型.模型是现实世界特征的模拟和抽象,比如地图.建筑设计沙盘,飞机模型等等. ...
- 深入源码理解Spark RDD的数据分区原理
通过内存创建RDD的分区设置 1.示例代码 在创建RDD的时候,我们可以从内存中进行创建:输出保存为文件.为了演示效果,我们的示例代码如下: import org.apache.spark.{Spar ...
- Airtest操作多台云手机,进行分发,多个脚本后端调度
一.核心重点 使用python后端框架:tornado 调度:redis队列 存手机的class_name采取头取尾曾 多台手机连接方式 connect_device(f"Android:/ ...
- 1 Spark概述
第1章 Spark概述 1.1 什么是Spark Spark是一种快速.通用.可扩展的大数据分析引擎,2009年诞生于加州大学伯克利分校AMPLab,2010年开源,2013年6月成为Apache孵 ...
- 对于CSS里面我之前不太清楚的伪类,我做一些总结
格式: 标签 + : + 参数 +{ 可填背景颜色,字体颜色,鼠标样式,加粗等 } a:hover{ color:#f40;} :link表示鼠标点击之前的样式 :hover表示鼠标放上去的样式 :a ...
- SQL联结笔记(内联结,自联结,自然联结,外联结区别以及应用)
SQL中有三种联结,分别是:内联结,自然联结,外联结. 联结是针对不同表联合起来的一种方式.应用的对象是:表(table) 为了方便验证练习理解,首先展示所要用到的表的内容: 1.Customers表 ...
- Hello,Vue
Vue版本 Vue完整版 有编译器compiler,体积大功能多,可以直接把html字符串变成DOM节点 视图,此处为html字符串,写在index.html里或者写在new Vue构造选项templ ...