前戲
前面我們都是在cmd下通過輸入appium加端口號來啟動服務的,在我們做自動化的時候,我們當然不希望我們手動啟動appium服務,而是希望通過腳本自動啟動appium服務。
我們可以使用subprocess模塊,該模塊可以創建新的進程,並且連接到進程的輸入,輸出,錯誤等管道信息,並且可以獲取進程的返回值
使用python啟動appium服務,端口配置如下
- appium服務器端口:4723,bp端口為4724
- appium服務器端口:4725,bp端口為4726
說明:bp端口(--bootstrap-port)是appium和設備之間通信的端口,如果不指定到時無法操作多台設備 運行腳本
啟動單個服務
import subprocess def appium_start(host, port): bootstrap_port = str(port + 1) cmd = 'start /b appium -a '+host+' -p '+str(port)+' -bp '+str(bootstrap_port) print(cmd) subprocess.Popen(cmd, shell=True, stdout=open('../test_case/'+str(port)+'.log','a'),stderr=subprocess.STDOUT) if __name__ == '__main__': host = '127.0.0.1' port = 4723 appium_start(host, port)
結果:
start /b appium -a 127.0.0.1 -p 4723 -bp 4724
使用os模塊啟動
注意:如果端口已經啟動了,在啟動是不會報錯的,放心執行吧,但是如果這個端口被其他服務占用了,則會報錯
import os def appium_start(host, port): bootstrap_port = str(port + 1) cmd = 'appium -a %s -p %s'%(host, port) os.system(cmd) if __name__ == '__main__': host = '127.0.0.1' port = 4723 appium_start(host, port)
啟動校驗
啟動后我們需要校驗是否啟動成功,校驗方法如下
1.查看有沒有生成對應的log文件,里面的appium日志
2.使用如下命令來查看
netstat -ano | findstr 端口號
netstat命令是一個監控TCP/IP網絡非常有用的工具,它可以顯示路由表,實際的網絡連接以及每一個網絡接口設備的狀態信息,輸入netstat -ano回車,可以查看本機開放的全部端口,輸入命令netstat -h可以查看全部參數含義
關閉appium服務
上面我們啟動了appium的服務,但不能一直不關閉,會消耗我們的系統資源,所以我們一般在執行完自動化之后,希望關閉掉appium服務
關閉服務也有兩種方式
1.通過netstat命令找到對應的appium進程pid然后在資源管理器中關閉
2.使用命令關閉
taskkill -f -pid appium進程id
啟動多個appium服務
上面我們是啟動了一個appium服務,啟動多個服務很簡單,只需要在執行環境中循環調用即可
import subprocess def appium_start(host, port): bootstrap_port = str(port + 1) cmd = 'start /b appium -a '+host+' -p '+str(port)+' -bp '+str(bootstrap_port) print(cmd) subprocess.Popen(cmd, shell=True, stdout=open('../test_case/'+str(port)+'.log','a'),stderr=subprocess.STDOUT) if __name__ == '__main__': host = '127.0.0.1' port = 4723 for i in range(2): port = 4723+2*i appium_start(host, port)
多進程啟動多個appium服務
import subprocess import multiprocessing def appium_start(host, port): bootstrap_port = str(port + 1) cmd = 'start /b appium -a '+host+' -p '+str(port)+' -bp '+str(bootstrap_port) print(cmd) subprocess.Popen(cmd, shell=True, stdout=open('../test_case/'+str(port)+'.log','a'),stderr=subprocess.STDOUT) appium_process = [] # 進程組 for i in range(2): host = '127.0.0.1' port = 4723 + 2*i appium = multiprocessing.Process(target=appium_start, args=(host, port)) appium_process.append(appium) if __name__ == '__main__': for appium in appium_process: appium.start() for appium in appium_process: appium.join()