1. 程式人生 > >appium+python自動化62-命令列啟動和關閉appium服務

appium+python自動化62-命令列啟動和關閉appium服務

前言

做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