用命令方式启动、停止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 ...
随机推荐
- myBatis源码解析-反射篇(4)
前沿 前文分析了mybatis的日志包,缓存包,数据源包.源码实在有点难顶,在分析反射包时,花费了较多时间.废话不多说,开始源码之路. 反射包feflection在mybatis路径如下: 源码解析 ...
- Mybatis-09-缓存
缓存 什么是缓存[Cache]? 存在内存中的临时数据 提高查询效率,解决高并发的性能问题 为什么使用缓存? 减少和数据库的交互次数,减少系统开销,提高系统效率 什么样的数据能使用缓存? 经常查询且不 ...
- ubuntu开发机所需工具,做个记录,不断补充
文件搜索 FSearch 用了下可以, 类似windows下的Everything 或者mac的cmd+空格 地址 安装: sudo add-apt-repository ppa:christian- ...
- 实体类转xml
看项目中需要实体类转xml,大家是拼接的.感觉可以利用反射实现.于是写了下 代码如下 package com.kevin.util; import org.springframework.util.O ...
- Windows下nacos单机部分发现的坑
一.下载nacos的地址: https://github.com/alibaba/nacos/releases 下载 nacos-server-1.3.2.tar.gz 就好 二.在Window ...
- 微信DLL劫持反弹shell复现
(该文参考网络他人资料,仅为学习,不许用于非法用途) 一.操作环境 Windows7 : 微信 , Process Explorer(任务管理工具,本实验中用于查找微信程序调用的DLL文件) Ka ...
- echarts 导出为word文档
https://www.jianshu.com/p/5bd47ab59bbe 主要思路:前台echarts生成图片后,获取base64码,传给后台解析,然后写入freemarker模板,进行下载. 图 ...
- 2 Spark角色介绍及运行模式
第2章 Spark角色介绍及运行模式 2.1 集群角色 从物理部署层面上来看,Spark主要分为两种类型的节点,Master节点和Worker节点:Master节点主要运行集群管理器的中心化部分,所承 ...
- js中的寄生组合继承
function inheritProperty(subType, superType) { function F(){} F.prototype = superType.prototype; sup ...
- Python九九乘法表(正序和逆序)
正序: for i in range(1,10): for j in range(1,i+1): print(str(i)+"*"+str(j)+"="+str ...