1. 程式人生 > >python appium server代碼調起和關閉遇到的坑

python appium server代碼調起和關閉遇到的坑

alt repl 可用 img ace 端口 read andro 轉義

第一次使用博客,小白級,互相交流,有說的不對的地方歡迎來噴!!!

自動化的目的就是減少人工成本,如果每次跑自動化用例時都要手動起appium客戶端,太費事了~~故,將appium server的調起和關閉寫在代碼中是必要的一步。

在步驟中說坑。。。(ps:小白的坑,大神可能會嘲笑~~呼呼~~)

1.將appium客戶端打開,能夠看到啟動server其實是這句話> Launching Appium server with command: D:\Program Files (x86)\Appium\node.exe lib\server\main.js --address 127.0.0.1 --port 4723 --platform-name Android --platform-version 23 --automation-name Appium --device-name "MI 3W" --language en --log-no-color

,如下圖:技術分享圖片

需要將node.exe替換成路徑node_modules\appium\。cmd命令其實就是node一下上述的command

2.拿到了命令只要寫入進代碼就行了。這裏用到了os模塊,最簡單的os.system就可以滿足。

關於路徑的空格、()、\、"的轉義最是坑爹

先將D:\Program Files (x86)\鏡像成一個w:,然後轉義\\和\",

測試機的Android版本對應的appium version和手機device name是測試機獨有屬性,所以定義函數時加了這兩個參數

具體代碼如下:

# coding=utf-8
import os
import time

# os.system("subst w: \"D:\Program Files (x86)\"")  #鏡像用一次就行,所以我註釋掉了
def start_AppiumS(devicename,level): t = "start node w:\\Appium\\node_modules\\appium\\lib\\server\\main.js --address 127.0.0.1 --port 4723 --platform-name Android --platform-version "+level+" --automation-name Appium --device-name \"" + devicename + "\" --language zh_CN --log-no-color" os.system(t) time.sleep(
2) return

這裏要刻意強調一下,os.system會阻塞進程,為避免不影響執行下一步,在命令前面一定要加start


到這裏為止,啟動appium server已經搞定,下面開始寫殺appium server


1.殺appium server主要是在於取得node的進程端口號

可用命令查詢端口號 netstat -aon |findstr 4723

用os.popen獲取執行命令後的返回值,從中提取出需要的pid端口號

說一下此處我遇到的坑吧,先上圖

技術分享圖片

按4723查到的進程有很多,os.popen獲取後是以字符型存儲的,且有許多空格。此處用了最笨的小白方法,去空格分割字符串~~~~~汗汗汗-_-||

代碼如下:

def kill_AppiumS():
    process = os.popen("netstat -aon |findstr 4723").read()
    pid = process.replace(  ,‘‘).split(" ")[2]
    print(pid)
    m = os.popen("taskkill -f -pid %s" % pid)
    print(m.read())

有不對或者需要改進的地方,歡迎大神吐槽~~

python appium server代碼調起和關閉遇到的坑