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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

APP自动化效果测试工具

發(fā)布時間:2023/12/2 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 APP自动化效果测试工具 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1. 背景

項目測試過程中經(jīng)常需要在手機(jī)端體驗語音產(chǎn)品的識別效果和穩(wěn)定性,識別效果與手機(jī)硬件強(qiáng)相關(guān)無法拋開硬件影響。因此開發(fā)了一套基于uiautomator2+python UI自動化工具,可以實現(xiàn)在電腦端控制手機(jī)demo開始收音+播放待測音頻+保存識別結(jié)果的APP自動化效果測試工具。

2. uiautomator2安裝及介紹

uiautomator2是一個自動化測試開源工具,僅支持Android平臺的原生應(yīng)用測試。它本來是Google提供的一個自動化測試的Java庫,后來發(fā)展了python-uiautomator2,封裝了谷歌自帶的uiautomator測試框架,提供便利的python接口,用它可以很便捷的編寫python腳本來實現(xiàn)app的自動化測試。uiautomator2 提供了點擊、長按、輸入文本、滑動、拖拽、截屏等方法,能夠模擬用戶的各種動作。用戶可以通過控件的 id 或 text 等屬性,定位到控件,從而對控件實施上述操作。

2.1 環(huán)境搭建

2.1.1 安裝adb

安裝adb并使手機(jī)與電腦連接(具體安裝自行百度)。 adb devices 查看連接設(shè)備。

2.1.2 安裝uiautomator2

pip install --pre -U uiautomator2

2.1.3 設(shè)備安裝atx-agent

python -m uiautomator2 init (安裝包含httprpc服務(wù)的apk到手機(jī))

2.1.4 安裝weditor

基于瀏覽器技術(shù)的weditor UI查看器,方便抓取手機(jī)上應(yīng)用的控件。

pip install --pre weditor(安裝) python -m weditor(運行)

2.2 atx主要方法

2.2.1 設(shè)備連接

import uiautomator2 as u2d = u2.connect('192.168.1.169') #通過WIFI d = u2.connect_usb('123456f') #通過USB(手機(jī)的序列號可以通過adb devices獲取到,假設(shè)序列號是123456f)

2.2.2 獲取當(dāng)前包名

cmd界面輸入“uiautomator2 current ”,能獲取手機(jī)當(dāng)前界面APP的包名、activity以及pid等相關(guān)信息,如下:{"package": "com.android.browser", "activity": "com.uc.browser.InnerUCMobile", "pid": 28478 }。

2.2.3 啟動/停止APP

//啟動 d.app_start("com.android.browser") #默認(rèn)的這種方法是先通過atx-agent解析apk包的mainActivity,然后調(diào)用am start -n $package/$activity啟動 d.app_start("com.android.browser", use_monkey=True) #使用 monkey -p com.example.hello_world -c android.intent.category.LAUNCHER 1 啟動,這種方法有個副作用,自動會將手機(jī)的旋轉(zhuǎn)鎖定給關(guān)掉 //停止 d.app_stop("com.android.browser") d.app_clear('com.android.browser')

2.2.4 元素定位方法

d(resourceId="com.smartisanos.clock:id/text_stopwatch").click() #ResourceId定位 d(text="發(fā)現(xiàn)").click() #Text定位 d(description="..").click() #Description定位 d(className="android.widget.TextView").click() #ClassName定位

2.2.5 控件操作

d.click(x, y) #點擊 d.double_click(x, y) #雙擊 d.double_click(x, y, 0.1) # 兩次點擊時間間隔0.1秒 d.long_click(x, y) d.long_click(x, y, 0.5) # 點擊時間0.5秒,長按

2.3 uiautomator2+python UI自動化測試框架簡介

python端:運行腳本,并向移動設(shè)備發(fā)送HTTP請求。移動設(shè)備:移動設(shè)備上運行了封裝了uiautomator2的HTTP服務(wù),解析收到的請求,并轉(zhuǎn)化成uiautomator2的代碼,對被測程序進(jìn)行相關(guān)操作。

3.實戰(zhàn)案例

3.1 手機(jī)計算器

以下以計算器為例,計算七加八并自動獲取計算結(jié)果。

#!/usr/bin/env python # -*- coding: utf-8 -*- import uiautomator2 as u2 import timeif __name__ == '__main__':d = u2.connect_usb("123456f") # 通過USB連接手機(jī)(手機(jī)的序列號可以通過adb devices獲取到,假設(shè)序列號是123456f)d.app_start("com.coloros.calculator") # 通過包名啟動手機(jī)計算器(不同手機(jī)計算器包名可能不同,需要修改)d(resourceId="com.coloros.calculator:id/digit_7").click() # resourceId定位法,點擊“7”d(resourceId="com.coloros.calculator:id/op_add").click() # 點擊“+”d(text="8").click() # text定位法,點擊“8”# d(resourceId="com.coloros.calculator:id/eq").click()d.click(0.829, 0.92) # 坐標(biāo)定位法,找到“=”的坐標(biāo)點,點擊“=”d(resourceId="com.coloros.calculator:id/result").get_text() #獲取result結(jié)果time.sleep(5)d.app_stop("com.coloros.calculator") #關(guān)閉手機(jī)計算器

3.2 語音助手識別效果自動化測試

同時控制手機(jī)和音箱,配合模擬人與手機(jī)助手的語音交互并保存返回的識別結(jié)果

控制手機(jī)打開語音助手

def openAssistant()d = u2.connect_usb("手機(jī)序列號")d.app_start("包名", "activity", use_monkey=True) #啟動手機(jī)語音助手,需要通過語音助手包名啟動d.click(x, y) #通過坐標(biāo)定位方法,點擊語音助手浮球,開啟語音助手交互

播放測試音頻文件

# pcm音頻讀取 class PcmRead:def __init__(self, path, sampleRate, sampleSize, channelCount):self._i_opened_the_file = Noneif isinstance(path, str):f = open(path, 'rb')self._i_opened_the_file = f# else, assume it is an open file object alreadyself._framerate = sampleRateself._sampwidth = sampleSizeself._nchannels = channelCountself._nframes = os.path.getsize(path) // (sampleSize * channelCount);def __del__(self):self.close()def __enter__(self):return selfdef __exit__(self, *args):self.close()def close(self):file = self._i_opened_the_fileif file:self._i_opened_the_file = Nonefile.close()def getnchannels(self):return self._nchannelsdef getnframes(self):return self._nframesdef getsampwidth(self):return self._sampwidthdef getframerate(self):return self._frameratedef readframes(self, nframes):size = nframes * self._sampwidth * self._nchannels;data = self._i_opened_the_file.read(size);return data#播放音頻文件 def play(audioPath):if audioPath.endswith(".pcm"):wf = PcmRead(audioPath, "音頻采樣率", "采樣點大小,只支持2", "音頻聲道數(shù)")elif audioPath.endswith(".wav"):wf = wave.open(audioPath, 'rb')else:raise ValueError("invalid suffix")with wf:p = pyaudio.PyAudio()stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),channels=wf.getnchannels(),rate=wf.getframerate(),output=True)CHUNK = 1024data = wf.readframes(CHUNK)while b'' != data:stream.write(data)data = wf.readframes(CHUNK)stream.stop_stream()stream.close()p.terminate()

4.可擴(kuò)展領(lǐng)域

uiautomator2+python UI自動化測試框架,與selenium 和 unittest 的 Web UI自動化測試框架相類似,基于Android系統(tǒng)有屏設(shè)備的自動化測試解決方案,支持對被測設(shè)備的模擬點擊、截圖、獲取返回結(jié)果等功能。可用于所有Android帶屏設(shè)備的APP測試。

總結(jié)

以上是生活随笔為你收集整理的APP自动化效果测试工具的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。