日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

实现android应用程序自动化测试的批处理脚本,简单入手移动端并发自动化测试:Appium+Robot+ 批处理脚本...

發布時間:2025/3/11 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实现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+ 批处理脚本...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。