Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
之前我們玩過一些手機自動化軟件,比如Airtest,ADB,通過這些軟件我們可以和自己的手機進行關(guān)聯(lián),并且使用程序來代替我們本人來操作手機,今天我們要說的是另一款給力的自動化APP,這里要介紹的并不是Windows平臺上的可執(zhí)行文件哦,而是Android平臺上的JavaScript IDE,更重要的一點就是這個工具是國人開發(fā)的,必須支持一個不是。而且AutoJs兼容性更好,傳統(tǒng)的按鍵精靈,腳本精靈,雖然上手快,門檻低,但是他們是以坐標為基礎(chǔ),很容易出現(xiàn)分辨率的問題,而AutoJs則是以控件為基礎(chǔ),因而更強大,并且我們在玩自動化時是不需要Root的;那么,廢話不多說,趕快讓我們一睹為快這款強大的IDE吧。
為了運行Autojs腳本,我們需要使用Android平臺,這里小編選擇的是夜神模擬器,將我們下載好的AutoJs.apk安裝到夜神模擬器中,下載地址:
https://u062.com/file/7715018-454641893
然后我們開啟無障礙服務(wù),即可打開Autojs并正常運行,如圖:
要想進行腳本的編寫,我們需要點擊藍色圓圈里的加號創(chuàng)建一個腳本文件,下面我們來創(chuàng)建一個簡單的腳本,如下:
因為AutoJs有著JavaScript的部分特性,因此他也有選擇器可供我們選擇元素,總共有四種,如下:
ID 選擇器
Text 選擇器
ClassName 選擇器
Desc 選擇器
在打開之前我們需要對Autojs進行授權(quán),很簡單,如下:
auto();//授權(quán)auto.js
然后我們就可以打開對應(yīng)應(yīng)用,比如我想打開瀏覽器,如下:
launchApp('瀏覽器')#打開瀏覽器
如果我們想自定義打開的應(yīng)用了,通過輸入的方法,增加一個交互,可以這樣做,如下:
var app=rawInput("","");
launchApp(app);
我們還可以添加一個控制臺,顯示我們操作的進度,如下:
auto();
console.show() //顯示控制臺
log('hello') //控制臺輸出
console.log('開啟瀏覽器') //控制臺輸出
sleep(1000)//休眠
var app=rawInput("",""); //自定義輸入
launchApp(app);//運行App
我們還可以檢查是否有Root權(quán)限,如下:
if(auto.waitFor()){
toastLog('有權(quán)限')
}
else{
toastLog('無權(quán)限')
}
setScreenMetrics(1080,1920); #屏幕大小
toast("歡迎大家來到我的世界,Helloworld ,520");#屏幕通知
toastLog(‘hello’) #屏幕通知+控制臺日志
images.requestScreenCapture() #向系統(tǒng)申請屏幕截圖權(quán)限
images.captureScreen() #截圖
swipe(100,200,130,320,230)#滑動屏幕,只支持安卓7.0以上
img=images.load('讀取本地或者網(wǎng)絡(luò)圖片')#讀取
images.save('圖片來源','圖片名')#保存
var c=findColor(img.'顏色十六進制')#尋找對應(yīng)顏色對象
c.x c.y #對應(yīng)顏色的橫縱坐標
images.findColorEquals(img,color[, x, y, width, height]) #區(qū)域找色
images.findColorInRegion(img,color[, x, y, width, height])
device.width #取屏幕寬度
device.height #取屏幕高度
toast('歡迎光臨')
if(requestScreenCapture()){
console.log('截圖成功')
}
else{
console.log('截圖失敗')
}
我們還可以保存網(wǎng)絡(luò)上的圖片到設(shè)備中,如:
var pic=images.load('http://wnk5.fulitmm.cn/comm/2020053009318366378.jpg');
images.save(pic,'/sdcard/mm.jpg')
另外我們還可以通過找色來定位目標,如圖:
可以看到橫縱標125。
back() #返回
exit() #退出
如果我們想讓程序等待一段時間,可以使用休眠功能,如下:
sleep(3000);#休眠
有時候我們進入應(yīng)用需要進行一些操作,這個時候我們可以通過找尋應(yīng)用中文本的位置來進行精確操作,如下:
text('請輸入網(wǎng)址')#找文本
這里要說的是,雖然我們之前的操作比較方便,但是如果你想把這些操作做成一個界面的話,就需要用到UI了,這樣就會更方便了,像一些自動化工具,比如自動電擊器就是這個原理了,我們來看一個最簡單的例子,如下:
"ui";
ui.layout(
<vertical foreground="#BBFFFF" bg='#F5F5F5'> #垂直布局加前景背景色設(shè)置
<input id="name" text="請輸入名字"/>#輸入框
<button id="one" text="按鈕1" alpha="0.6" w="200dp" textSize="10sp"/>#按鈕
<button class="two" w="100dp" text="按鈕2"/>
<horizontal>#水平布局
<button w="auto" alpha="0.8" text="按鈕3"/>
<button w="*" text="按鈕4"/>
</horizontal>
</vertical>
);
ui.one.click(function(){#元素點擊事件
var n=ui.name.getText();
toast(n)
})
其實UI控件中的方法基本大部分和JavaScript的方法一樣,掌握了JavaScript你就可以非常輕松的使用UI控件了。
Autojs主要就是用于我們的手機設(shè)備的腳本編寫,所以與ADB也會有很多相似之處,可以這么說,只要你掌握了ADB和JavaScript,掌握這就跟喝水那么簡單。
對了,還要跟大家補充一句,那就是Autojs的在線官方文檔地址:
https://hyb1996.github.io/AutoJs-Docs/#/
上面介紹的有很多方面,如果你不方便每次都聯(lián)網(wǎng)查詢的話,可以結(jié)合咱們前幾天講的整站爬取方案哦。
ndroid 自動化測試的工具非常多,但是目前主流使用的就那幾個,我會詳細說明他們各自的情況,你可以根據(jù)自己的需要決定使用哪款工具。
Appium
Appium 是目前最主流的移動測試自動化框架,不僅支持 Android 應(yīng)用,而且適用于 iOS、混合和 Web 應(yīng)用程序。
它底層完全使用了 Selenium 和 WebDriver 的 API,所以如果你之前有用過 selenium, 幾乎不需要額外的學(xué)習(xí)成本就可以使用 appium。
appium 通過 uiautomator(API 級別 16 或更高)和 Seledroid(API 級別低于 16)支持 Android,但是你不需要具體懂這兩個框架的具體用法,appium 都已經(jīng)幫你封裝成了統(tǒng)一的使用規(guī)則。
Appium 的最大優(yōu)勢之一是幾乎可以使用任何編程語言(例如 Java、Objective-C、JavaScript、PHP、Ruby、Python 或 C# 等)編寫 Appium 腳本。
這意味這選擇權(quán)在你,你可以使用自己最擅長的編程語言。如果你還熟悉 Selenium,那么不出意外,你可以在一天之內(nèi)上手使用。
另外 webdriver 是一個統(tǒng)一的標準,已經(jīng)提交給了 w3c 組織,你可以基于它的協(xié)議做進一步的擴展。看看簡單的代碼:
textFields = driver.find_elements_by_tag_name('textField')
assertEqual(textFields[0].get_attribute("value"), "Hello")
Airtest
第二個我要推薦國產(chǎn)之光 Airtest。Airtest 項目是由網(wǎng)易游戲推出的一款自動化測試框架,項目有幾大組件:
使用 Airtest 的好處是中文文檔健全,對英文不好的同學(xué)支持優(yōu)化。官網(wǎng)也貼心的準備了視頻教學(xué)和演示,幫助你快速上手。
Detox
這個框架非常低調(diào),但是你用過一定會愛上它。
Detox 一個非常強的 JavaScript 移動測試框架,它的測試執(zhí)行非常快速和健壯,因為在測試執(zhí)行期間不需要外部附加工具來編排和同步。
如果你優(yōu)先考慮以下因素,你可以直接選用 detox:
下面是具體的代碼,比較典型的代碼編寫方式:
describe('HelloDetoxTest', ()=> {
beforeEach(async ()=> {
await device.reloadReactNative();
});
it('應(yīng)該有歡迎屏幕', async ()=> {
await expect(element(by .id('welcome'))).toBeVisible();
});
it('should show hello Rect after tap', async ()=> {
await element(by.id('hello_react')).tap() ;
await expect(element(by.text('React!!!'))).toBeVisible();
});
it('點擊后應(yīng)該顯示屏幕', async ()=> {
await element(by.id ('detox_button')).tap();
await expect(element(by.text('Detox!!!'))).toBeVisible();
});
});
Espresso
Espresso 是新型的的 Android 測試自動化框架,由 Google 開源,Espresso 的 API 體積小、可預(yù)測、易于學(xué)習(xí)。
你可以使用它快速編寫簡潔可靠的 Android UI 測試。
它非常可靠,與 UI 線程同步并且速度很快,因為不需要任何睡眠(當(dāng)應(yīng)用程序空閑時,測試在同一毫秒內(nèi)運行)。
而且通過簡單的配置,可以直接集成在 appium 中。
總結(jié)
這幾個工具幾乎涵蓋了所有的 Android 自動化測試技術(shù)選型側(cè)重點。在掌握好這 4 個當(dāng)中的其中一個以后,有精力你可以去研究一下其他的工具,有上百種選擇,每種都有側(cè)重和具體的場景。
名稱:本屬性用于標識一個取樣器,建議使用一個有意義的名稱。
注釋:對于測試沒有任何作用,僅用戶記錄用戶可讀的注釋信息。
協(xié)議:向目標服務(wù)器發(fā)送HTTP請求時的協(xié)議,可以是http或者是https或者File ,默認值為http 。
服務(wù)器名稱或IP :HTTP請求發(fā)送的目標服務(wù)器名稱或IP地址(注意:此處不可帶http:/或者https:/)。
端口號:目標服務(wù)器的端口號,默認值為80 。
方法:發(fā)送HTTP請求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。
路徑:目標URL路徑(不包括服務(wù)器地址和端口);也可以直接寫完整路徑(上面的IP+端口就可以省略了)。
Content encoding :內(nèi)容的編碼方式(當(dāng)PUT、POST、File和PATCH方式有效),默認值為iso8859(所以常用為UTF-8減少亂碼)。
自動重定向:如果選中該選項,當(dāng)發(fā)送HTTP請求后得到的響應(yīng)是3xx時,JMeter 會自動重定向到新的頁面,但是Jmeter是不記錄重定向的過程內(nèi)容。查看結(jié)果集中無法查看轉(zhuǎn)發(fā)請求結(jié)果。
跟隨重定向:Http Request取樣器的默認選項,當(dāng)響應(yīng)code是3xx時,自動跳轉(zhuǎn)到目標地址。與自動重定向不同,Jmeter會記錄重定向過程中的所有請求響應(yīng),在查看結(jié)果樹時可以看到服務(wù)器返回的內(nèi)容,如有多個跳轉(zhuǎn)則多個請求都會被記錄下來,此為默認選項。
備注:自動重定向和跟隨重定向的區(qū)別只在于是否記錄多個跳轉(zhuǎn)的請求上
Use keep Alive : 當(dāng)該選項被選中時,jmeter 和目標服務(wù)器之間使用 Keep-Alive方式進行HTTP通信,默認選中。
Use multipart/from-data for HTTP POST :當(dāng)發(fā)送HTTP POST 請求時,使用Use multipart/from-data方法或者application/x-www-form-urlencoded方法發(fā)送,默認不選中。
Browser-compatible headers:當(dāng)勾選multipart/form-data時,勾選此項會截掉http請求頭中的Content-Type和Content-Transfer-Encoding,而只發(fā)送Content-Disposition部分;
參數(shù) : 在請求中發(fā)送URL參數(shù)。用戶可以將URL中所有參數(shù)設(shè)置在本表中,表中的每一行是一個參數(shù)值對(對應(yīng)URL中的 名稱=值)。
-名稱:參數(shù)名
-值:參數(shù)值
-否是編碼:選中時,對值進行URL編碼;建議勾選,因為當(dāng)參數(shù)值內(nèi)含有ASCII Control Chars或者Non-ASCII characters或者其他符號的話,如果不勾選會導(dǎo)致發(fā)送失敗。
消息體:放置消息體,如:post請求時,json內(nèi)容等
文件上傳:在請求中發(fā)送文件,HTTP文件上傳可以通過這種方式模擬,參數(shù)名稱就是發(fā)送文件對應(yīng)的參數(shù),MINE Type為資源媒體類型
Implementation(實現(xiàn)):發(fā)送http請求的方式,可選項為java和HttpClient4,默認為HttpClient4;
Connect:連接超時時間,單位為毫秒;
Response:響應(yīng)等待超時時間,單位為毫秒;
從HTML文件獲取所有內(nèi)含的資源:當(dāng)該選項被選中時,jmeter在發(fā)出HTTP請求并獲得響應(yīng)的HTML文件內(nèi)容后,還對該HTML進行解析 并獲取HTML中包含的所有資源(圖片、flash等),默認不選中,如果用戶只希望獲取頁面中的特定資源,可以在下方的Embedded URLs must match 文本框中填入需要下載的特定資源表達式,這樣,只有能匹配指定正則表達式的URL指向資源會被下載。
Parallel downloads.:是否使用自設(shè)資源池,勾選后可設(shè)置大小;
Number:資源池大小,默認為6。
URLs must match:URL匹配過濾,填寫此項則只會下載與此內(nèi)容項匹配的url的資源,例如要獲取http://test.com/下的所有資源,使用正則表達式http://test.com/.*;
Source address:只用于http協(xié)議且Implementation為HttpClient4的情況。
此屬性用于啟用IP欺騙。會重寫了這個http請求使用的默認本地IP地址。用于Jmeter主機具有多個IP地址(即IP別名、網(wǎng)絡(luò)接口、設(shè)備)的情況。該值可以是主機名、IP地址或網(wǎng)絡(luò)接口設(shè)備,如“ey0”或“l(fā)0”或“wlan0”。
- IP/Hostname:IP /主機名以使用特定的IP地址或(本地)主機名
- Device:選擇設(shè)備以選擇該接口的第一個可用地址,該設(shè)備可以是IPv4或IPv6。
- Device IPV4:選擇IPv4設(shè)備來選擇名稱設(shè)備的IPv4地址(如eth0, lo, em0);
- Device IPV6:選擇IPv6設(shè)備來選擇名稱設(shè)備的IPv4地址(如eth0, lo, em0);
服務(wù)器名稱或IP:代理服務(wù)器的名稱或者IP地址;
端口號:該代理的端口號;
用戶名:使用該代理的用戶名;
密碼:用戶密碼;
Save response as MD5 hash:選中該項,在執(zhí)行時僅記錄服務(wù)端響應(yīng)數(shù)據(jù)的MD5值,而不記錄完整的響應(yīng)數(shù)據(jù)。在需要進行數(shù)據(jù)量非常大的測試時,建議選中該項以減少取樣器記錄響應(yīng)數(shù)據(jù)的開銷;
(1)當(dāng)get有帶參數(shù),勾中編碼時
設(shè)置如下:
測試結(jié)果:
分析中文有進行編碼轉(zhuǎn)化
中文有編碼轉(zhuǎn)化,“張三”轉(zhuǎn)碼為“%E5%BC%A0%E4%B8%89”。
(2)當(dāng)get有帶參數(shù),不勾選編碼
設(shè)置如下
測試結(jié)果:
中文沒有轉(zhuǎn)化。
post http請求
測試結(jié)果:
請求
響應(yīng)
*請認真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。