实现android应用程序自动化测试的批处理脚本,简单入手移动端并发自动化测试:Appium+Robot+ 批处理脚本...
一、前言
好久沒寫帖子,去年晉升為 leader 之后工作比較忙,去年為團隊的產品建立了一輪的移動端(Android&iOS)的自動化測試,到今天為止跑了將近半年,前期感覺還行,但隨著用例的增加,執行自動化腳本的時間越來越長,而且感覺一臺測試環境機器用跑一套用例比較浪費,所以這時候就應該要做并發自動化測試了
RobotFramework 是有一個叫pabot的工具用來并發執行腳本的,但是不知道是不是我才疏學淺不太懂用 pabot,發現它對測試用例執行并發的時候是遍歷到測試套件的,但是一般情況下,一些相關性的測試套件是會放在不同的文件夾下,所以如果對文件夾進行并發執行的吧,那 pabot 就滿足不了這個需求了,所以后來想到用批處理腳本的方法去實現這一需求
二、搭建過程
在 testerhome 上應該說過很多怎么用 appium 跑并發自動化,只是比較少說怎么結合 robot 來用,其實最關鍵的就是要設置不同設備的 id,即 udid,以及啟動不同端口的 appium server,假設當前的需求是同時跑兩臺設備(模擬器)
第一步:啟動模擬器,查看當前設備
還是通過輸入adb devices 查看一下當前設備的 devicename,其實就是可以將 devicename 作為 udid 的值,之后在腳本的 desired_caps 當中填入 udid=xxxx 就好了
第二步:設備 appium
首先是設置不同端口的 appium server
然后是 Bootstrap Port 也設置一下,注意不要用已經占用的端口號,devicename 也可以設置一下
設置完成之后啟動 appium(這里是 2 個)就好了
第三步:批處理腳本編寫
這里主要用到 windows 的批處理腳本作為執行 Robot 的 pybot 命令的基礎,簡單做起的話,有多少臺模擬器就建多少個,當前可以參數化配置,這次就先以比較簡單明了的方法先做了吧。
還有用到 python 的多線程來作為并發的主要執行腳本,實現也非常簡單
具體的實現代碼:
robot_mutil.py #coding=utf-8import threading
from time import ctime,sleep
import os
def run(arg):
os.system(arg)
threads = []
cmd1="Start /wait robot_appium_1.bat" #線程1執行的命令1cmd2="Start /wait robot_appium_2.bat" #線程2執行的命令1cmd3="rebot --logtitle Lunkr4Android_TestLog --reporttitle Lunkr4Android_TestReport output1.xml output2.xml" #測試報告合并的命令3t1 = threading.Thread(target=run,args=(cmd1,))
threads.append(t1)
t2 = threading.Thread(target=run,args=(cmd2,))
threads.append(t2)
if __name__ == '__main__':
for t in threads:
t.setDaemon(True)
t.start()
t.join() #父進程等待子進程結束后再執行下去 os.system(cmd3) #執行命令3用rebot合并output1.xml和output2.xml,輸出合并后的測試報告和日志 print "test finished"
首先說明一下命令中的start /wait,start /wait它的含義是:啟動應用程序并等待它終止,用于調用多個應用程序時,指定:待該程序執行完后再執行下一個(排隊執行)舉個例子,一個文件夾中有很定系統補丁(按時間排序的)想依次安裝完所有補丁,用 start /WAIT 就是最合適了,同樣的我們分析一下腳本,首先是批處理文件的命令
robot_appium_1.bat pybot -o output1.xml -l log1.html -r report1.html ${TEST_FILE_PATH}&exit
robot_appium_2.bat pybot -o output2.xml -l log2.html -r report2.html ${TEST_FILE_PATH}&exit
腳本 1 和腳本 2 分別對應執行不同文件夾下的測試套件的命令,后面加個&exit,就是為了讓腳本啟動的測試用例執行完成后把子線程關掉,要所有的子進程都關掉之后,才會去執行合并測試報告的操作,如果不用 start /wait,python 腳本生成的子進程調用批處理腳本之后未等用例執行完成就會結束掉,這樣就拿不到 output 生成報告了,同樣的,如果一直在 wait,執行完測試用例之后沒有 exit 的話,子進程一直未結束,合并測試報告的命令也不會執行,所以通過上面腳本之間的命令組合來使用有點巧妙的利用多線程的原理來實現并發自動化測試的操作,所以執行完成以后對看到生成對應的這些文件
三、執行過程演示
具體的執行過程就是執行 python 腳本就好了,所以可以看看執行的效果
就這樣,并發的自動化測試就實現了,當然一般還是 jenkins 來做自動構建,所以這里有一個注意的地方,在執行后操作生成測試報告的時候,是需要獲取全部的 output.xml,所以在高級那里,用個模糊匹配配一下就好了
之后執行完成以后就能看到測試報告了
大致的過程就是這樣子啦
四、最后說幾句
上面描述的都是一些很簡單但又是很核心的操作步驟,當然有些大牛有更好的方法,或者更多優化的地方,比如說用腳本自動配置端口啟動 appium,還是上面提到的腳本參數配置化等等,都可以,怎么高效怎么用就好,還有除了對一套用例分布執行之外,很多時候有需求說需要在不同的測試環境中去執行,如分別在 Android6.0 和 Android7.0 跑同套用例來覆蓋系統版本,也是可以參照上面的方法去做的,再考慮一下如何安排測試數據和測試執行過程就可以了
其實上面也是描述的 android 端,這里提一下 ios 端,用模擬器是不可行的,一套 xcode 只能運行一臺模擬器,所以 ios 端做并發的時候更多的要用到真機,但目前的話 appium 對接 xcode8 還很不穩定,包括在 build webdriveragent 到 ios 真機設備里面也一堆坑,現在我們測試團隊在 ios 端的框架上也慢慢轉到使用 macaca,相對 appium,macaca 給我們的感覺是更高效,而且我們將 macaca 大致按照 Robot 的 AppiumLibrary 的方式集成了一個 MacacaLibrary,可以結合 Robot 來之后,但目前還有 bug,之后完成了可能會分享出來,到時再說吧,這次的分享就這樣啦,謝謝大家,歡迎盡情地吐槽
總結
以上是生活随笔為你收集整理的实现android应用程序自动化测试的批处理脚本,简单入手移动端并发自动化测试:Appium+Robot+ 批处理脚本...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 容器技术之快速了解K8S各抽象资源及组件
- 下一篇: C#中采用OLEDB方式来读取EXCEL