启动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的更多相关文章

  1. Appium+Python app自动化测试之脚本启动和停止Appium服务

    研究了一段时间的Appium android app的自动化测试,工作中需要连接多台手机终端同时执行测试用例,我实现的方式是获取用例中需要执行用例的设备id个数以及实际连接到的设备数(通过adb de ...

  2. delphi 启动停止windows服务 转

    http://blog.csdn.net/haiou327/article/details/6106233 不用cmd用delphi如何实现启动停止windows服务建议参考一下Delphi的Sckt ...

  3. Linux Systemd——在RHEL/CentOS 7中启动/停止/重启服务

    RHEL/CentOS 7.0中一个最主要的改变,就是切换到了systemd.它用于替代红帽企业版Linux前任版本中的SysV和Upstart,对系统和服务进行管理.systemd兼容SysV和Li ...

  4. bat启动/停止oracle服务

    原文:bat启动/停止oracle服务 自己的电脑比较慢,尤其装了oracle10g后,服务开启和关闭用bat文件操作省事点 开启服务 @echo offnet start OracleService ...

  5. 在CentOS 7中启动/停止/重启服务

    RHEL/CentOS 7.0中一个最主要的改变,就是切换到了systemd.它用于替代红帽企业版Linux前任版本中的SysV和Upstart,对系统和服务进行管理.systemd兼容SysV和Li ...

  6. Delphi启动/停止Windows服务,启动类型修改为"自动"

    unit U_StartServices; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Contr ...

  7. Windows下使用service.bat安装tomcat服务, 启动停止tomcat服务

    在项目开发过程中,以前只是在Eclipse中配置.启动.停止tomcat服务器 如果只想在机器中使用tomcat服务器,而不想安装MyEclipse,可以使用service.bat 将tomcat安装 ...

  8. 【OF框架】使用OF.WinService项目,添加定时服务,进行创建启动停止删除服务操作

    准备 使用框架搭建完成项目,包含OF.WinService项目. 了解Window Service 和定时服务相关知识. 一.添加一个定时服务 第一步:了解项目结构 第二步:创建一个新的Job 第三步 ...

  9. Windows下启动停止Oracle11g服务-为解决系统变慢而生

    我们拿Oracle 11g作为例子. 首先在“开始=〉运行”中输入“services.msc”,按回车,进入“服务”控制台, 将 Oracle ORCL VSS Writer Service.Orac ...

随机推荐

  1. java类的定义与使用

    一 引用数据类型 1.引用数据类型的分类 我们可以把类的类型为两种: 第一种,Java为我们提供好的类,如Scanner类,Random类等,这些已存在的类中包 含了很多的方法与属性,可供我们使用. ...

  2. 个性探测综述阅读笔记——Recent trends in deep learning based personality detection

    目录 abstract 1. introduction 1.1 个性衡量方法 1.2 应用前景 1.3 伦理道德 2. Related works 3. Baseline methods 3.1 文本 ...

  3. python设计模式之修饰器模式

    python设计模式之修饰器模式 无论何时我们想对一个对象添加额外的功能,都有下面这些不同的可选方法. [ ] 如果合理,可以直接将功能添加到对象所属的类(例如,添加一个新的方法) [ ] 使用组合 ...

  4. 轻音少女K-on闹钟,时钟,日历,整点报时

    在网上找了很久才找到这个东西, 所以分享出了,方便大家下载 链接: https://pan.baidu.com/s/11wB57F2Td1FPp9RBmTvg 密码: 2xt5

  5. 《Java从入门到失业》第二章:Java环境(三):Java命令行工具

    2.3Java命令行工具 2.3.1编译运行 到了这里,是不是开始膨胀了,想写一段代码来秀一下?好吧,满足你!国际惯例,我们写一段HelloWorld.我们在某个目录下记事本,编写一段代码如下: 保存 ...

  6. JavaScript学习系列博客_11_JavaScript中的for语句

    for循环 - 语法: for(①初始化表达式 ; ②条件表达式 ; ④更新表达式){ ③语句... } - 执行流程: 首先执行①初始化表达式,初始化一个变量,(这里只会执行一次) 然后对②条件表达 ...

  7. Redis取出中文乱码问题

    直接打开Redis客户端,如果存储了中文的内容,取出时会发生乱码: 解决办法很简单,打开客户端时加上 --raw,这样就可以了: 顺便说一下,-a后面跟的是密码,打码了,各位见谅!

  8. Ubuntu 统计文件夹下文件个数的命令

    查看当前目录下的文件数量(不包含子目录中的文件) ls -l|grep "^-"| wc -l 查看当前目录下的文件数量(包含子目录中的文件) 注意:R,代表子目录 ls -lR| ...

  9. Java面试题(Kafka篇+zookeeper 篇)

    Kafka 152.kafka 可以脱离 zookeeper 单独使用吗?为什么? kafka 不能脱离 zookeeper 单独使用,因为 kafka 使用 zookeeper 管理和协调 kafk ...

  10. [CSP-S2019]树上的数 题解

    CSP-S2 2019 D1T3 考场上写了2h还是爆零……思维题还是写不来啊 思路分析 最开始可以想到最简单的贪心,从小到大枚举每个数字将其移动到最小的节点.但是通过分析样例后可以发现,一个数字在移 ...