前言
做app自动化测试比较繁琐的一点是每次都要去启动appium服务,然后跑完之后关闭appium服务。虽然在cmd里面可以使用命令行的appium服务版本,打开cmd启动还是不太方便
不能做到真正自动化开启和关闭。为了解决这个问题,可以用python写个脚本去开启和关闭appium服务
启动appium服务
appium的命令行启动方式参考这篇【appium+python自动化59-appium命令行参数】
python执行cmd指令,可以使用os.system()方法,为了防止重复启动服务,可以先判断该端口是不是已经启动了,写个判断函数
# coding:utf-8
import os
import time
def start_appium(port=4723, udid="", a="127.0.0.1"):
'''
执行cmd指令,启动appium服务
'''
if not is_appium_start(port):
if udid == "":
os.system("appium -a %s -p %s --no-reset" %(a, port))
else:
os.system("appium -a %s -p %s -U %s --no-reset" %(a, port, udid))
else:
pass
def is_appium_start(port=4723):
'''判断端口是否已经启动'''
r = os.popen('netstat -ano | findstr "%s" ' % port)
time.sleep(2)
t = r.read()
if "LISTENING" in t:
print("appium服务已经启动:%s"%t)
return True
else:
return False
os.popen()跟os.system()都是执行cmd指令,不同的是os.popen()可以获取到cmd控制台输出的内容
杀掉appium进程
先在4725端口启动appium服务
C:\Users\dell>appium -p 4725
(node:3704) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
[Appium] Welcome to Appium v1.9.0
[Appium] Non-default server args:
[Appium] port: 4725
[Appium] Appium REST http interface listener started on 0.0.0.0:4725
根据端口号查pid:netstat -aon|findstr 端口号
C:\Users\dell>netstat -aon|findstr 4725
TCP 0.0.0.0:4725 0.0.0.0:0 LISTENING 14528
根据查询到的pid强行终止进程:taskkill /f /pid pid号
C:\Users\dell>taskkill /f /pid 14528
成功: 已终止 PID 为 14528 的进程。
python代码实现
# 接着上面代码
def kill_appium(port=4723):
'''杀掉端口为port的进程'''
p = os.popen('netstat -ano | findstr "%s" ' % port) # 根据端口查pid
t = p.read()
if "LISTENING" in t:
s = str(t).split(" ")
s1 = [i for i in s if i != '']
pid = s1[-1].replace("\n", "")
print("端口 %s 运行 pid: %s" % (port, pid))
os.system("taskkill /f /pid %s" % pid)
print("强行终止:taskkill /f /pid %s" % pid)
else:
pass
if __name__ == "__main__":
start_appium(port=4723, udid="", a="127.0.0.1")
is_appium_start(port=4723)
kill_appium(4723)
上海-悠悠 QQ交流群:330467341