整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          玩轉(zhuǎn)手機(jī)自動(dòng)化測(cè)試

          玩轉(zhuǎn)手機(jī)自動(dòng)化測(cè)試

          家好,我是皮皮。

          前言

          之前我們玩過一些手機(jī)自動(dòng)化軟件,比如Airtest,ADB,通過這些軟件我們可以和自己的手機(jī)進(jìn)行關(guān)聯(lián),并且使用程序來代替我們本人來操作手機(jī),今天我們要說的是另一款給力的自動(dòng)化APP,這里要介紹的并不是Windows平臺(tái)上的可執(zhí)行文件哦,而是Android平臺(tái)上的JavaScript IDE,更重要的一點(diǎn)就是這個(gè)工具是國(guó)人開發(fā)的,必須支持一個(gè)不是。而且AutoJs兼容性更好,傳統(tǒng)的按鍵精靈,腳本精靈,雖然上手快,門檻低,但是他們是以坐標(biāo)為基礎(chǔ),很容易出現(xiàn)分辨率的問題,而AutoJs則是以控件為基礎(chǔ),因而更強(qiáng)大,并且我們?cè)谕孀詣?dòng)化時(shí)是不需要Root的;那么,廢話不多說,趕快讓我們一睹為快這款強(qiáng)大的IDE吧。


          一、安裝AutoJs

          為了運(yùn)行Autojs腳本,我們需要使用Android平臺(tái),這里小編選擇的是夜神模擬器,將我們下載好的AutoJs.apk安裝到夜神模擬器中,下載地址:

          https://u062.com/file/7715018-454641893

          然后我們開啟無障礙服務(wù),即可打開Autojs并正常運(yùn)行,如圖:


          二、基本使用大全

          要想進(jìn)行腳本的編寫,我們需要點(diǎn)擊藍(lán)色圓圈里的加號(hào)創(chuàng)建一個(gè)腳本文件,下面我們來創(chuàng)建一個(gè)簡(jiǎn)單的腳本,如下:

          1.選擇器

          因?yàn)锳utoJs有著JavaScript的部分特性,因此他也有選擇器可供我們選擇元素,總共有四種,如下:

          ID 選擇器
          Text 選擇器
          ClassName 選擇器
          Desc 選擇器

          2.打開應(yīng)用

          在打開之前我們需要對(duì)Autojs進(jìn)行授權(quán),很簡(jiǎn)單,如下:

          auto();//授權(quán)auto.js

          然后我們就可以打開對(duì)應(yīng)應(yīng)用,比如我想打開瀏覽器,如下:

          launchApp('瀏覽器')#打開瀏覽器

          如果我們想自定義打開的應(yīng)用了,通過輸入的方法,增加一個(gè)交互,可以這樣做,如下:

          var app=rawInput("","");
          launchApp(app);

          我們還可以添加一個(gè)控制臺(tái),顯示我們操作的進(jìn)度,如下:

          auto();
          console.show() //顯示控制臺(tái)
          log('hello') //控制臺(tái)輸出
          console.log('開啟瀏覽器') //控制臺(tái)輸出
          sleep(1000)//休眠
          var app=rawInput("",""); //自定義輸入
          launchApp(app);//運(yùn)行App

          我們還可以檢查是否有Root權(quán)限,如下:

          if(auto.waitFor()){
              toastLog('有權(quán)限')
              }
            else{
             toastLog('無權(quán)限')
                }

          3.屏幕操作

          setScreenMetrics(1080,1920); #屏幕大小
          toast("歡迎大家來到我的世界,Helloworld ,520");#屏幕通知
          toastLog(‘hello’) #屏幕通知+控制臺(tái)日志
          images.requestScreenCapture() #向系統(tǒng)申請(qǐng)屏幕截圖權(quán)限
          images.captureScreen() #截圖
          swipe(100,200,130,320,230)#滑動(dòng)屏幕,只支持安卓7.0以上
          img=images.load('讀取本地或者網(wǎng)絡(luò)圖片')#讀取
          images.save('圖片來源','圖片名')#保存
          var c=findColor(img.'顏色十六進(jìn)制')#尋找對(duì)應(yīng)顏色對(duì)象
          c.x c.y #對(duì)應(yīng)顏色的橫縱坐標(biāo)
          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')

          另外我們還可以通過找色來定位目標(biāo),如圖:

          可以看到橫縱標(biāo)125。

          4.返回退出

          back() #返回
          exit() #退出

          5.休眠

          如果我們想讓程序等待一段時(shí)間,可以使用休眠功能,如下:

          sleep(3000);#休眠

          6.文本操作

          有時(shí)候我們進(jìn)入應(yīng)用需要進(jìn)行一些操作,這個(gè)時(shí)候我們可以通過找尋應(yīng)用中文本的位置來進(jìn)行精確操作,如下:

          text('請(qǐng)輸入網(wǎng)址')#找文本

          7.Auto Js UI

          這里要說的是,雖然我們之前的操作比較方便,但是如果你想把這些操作做成一個(gè)界面的話,就需要用到UI了,這樣就會(huì)更方便了,像一些自動(dòng)化工具,比如自動(dòng)電擊器就是這個(gè)原理了,我們來看一個(gè)最簡(jiǎn)單的例子,如下:

          "ui";
          ui.layout(
              <vertical foreground="#BBFFFF" bg='#F5F5F5'> #垂直布局加前景背景色設(shè)置
                  <input id="name" text="請(qǐng)輸入名字"/>#輸入框
                  <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(){#元素點(diǎn)擊事件
              var n=ui.name.getText();
              toast(n)
              })

          其實(shí)UI控件中的方法基本大部分和JavaScript的方法一樣,掌握了JavaScript你就可以非常輕松的使用UI控件了。


          三、總結(jié)

          Autojs主要就是用于我們的手機(jī)設(shè)備的腳本編寫,所以與ADB也會(huì)有很多相似之處,可以這么說,只要你掌握了ADB和JavaScript,掌握這就跟喝水那么簡(jiǎn)單。

          對(duì)了,還要跟大家補(bǔ)充一句,那就是Autojs的在線官方文檔地址:

          https://hyb1996.github.io/AutoJs-Docs/#/

          上面介紹的有很多方面,如果你不方便每次都聯(lián)網(wǎng)查詢的話,可以結(jié)合咱們前幾天講的整站爬取方案哦。

          ndroid 自動(dòng)化測(cè)試的工具非常多,但是目前主流使用的就那幾個(gè),我會(huì)詳細(xì)說明他們各自的情況,你可以根據(jù)自己的需要決定使用哪款工具。

          Appium


          Appium 是目前最主流的移動(dòng)測(cè)試自動(dòng)化框架,不僅支持 Android 應(yīng)用,而且適用于 iOS、混合和 Web 應(yīng)用程序

          它底層完全使用了 Selenium 和 WebDriver 的 API,所以如果你之前有用過 selenium, 幾乎不需要額外的學(xué)習(xí)成本就可以使用 appium。

          appium 通過 uiautomator(API 級(jí)別 16 或更高)和 Seledroid(API 級(jí)別低于 16)支持 Android,但是你不需要具體懂這兩個(gè)框架的具體用法,appium 都已經(jīng)幫你封裝成了統(tǒng)一的使用規(guī)則。

          Appium 的最大優(yōu)勢(shì)之一是幾乎可以使用任何編程語(yǔ)言(例如 Java、Objective-C、JavaScript、PHP、Ruby、Python 或 C# 等)編寫 Appium 腳本

          這意味這選擇權(quán)在你,你可以使用自己最擅長(zhǎng)的編程語(yǔ)言。如果你還熟悉 Selenium,那么不出意外,你可以在一天之內(nèi)上手使用。

          另外 webdriver 是一個(gè)統(tǒng)一的標(biāo)準(zhǔn),已經(jīng)提交給了 w3c 組織,你可以基于它的協(xié)議做進(jìn)一步的擴(kuò)展。看看簡(jiǎn)單的代碼:

          textFields = driver.find_elements_by_tag_name('textField')
          assertEqual(textFields[0].get_attribute("value"), "Hello")
          

          Airtest


          第二個(gè)我要推薦國(guó)產(chǎn)之光 Airtest。Airtest 項(xiàng)目是由網(wǎng)易游戲推出的一款自動(dòng)化測(cè)試框架,項(xiàng)目有幾大組件:

          • Airtest:是一個(gè)跨平臺(tái)的、基于圖像識(shí)別的 UI 自動(dòng)化測(cè)試框架,適用于游戲和 App,支持平臺(tái)有 Windows、Android 和 iOS
          • Poco:是一款基于 UI 控件識(shí)別的自動(dòng)化測(cè)試框架,目前支持 Android 原生 app/iOS 原生 app/微信小程序,還有主流的游戲引擎,也可以在其他引擎中自行接入 poco-sdk 來使用
          • AirtestIDE:跨平臺(tái)的 UI 自動(dòng)化測(cè)試編輯器,內(nèi)置了 Airtest 和 Poco 的相關(guān)插件功能,能夠使用它快速簡(jiǎn)單地編寫 Airtest 和 Poco 代碼,甚至都可以不寫代碼。
          • AirLab:真機(jī)自動(dòng)化云測(cè)試平臺(tái),提供了非常多的手機(jī)型號(hào)和兼容性測(cè)試、海外云真機(jī)兼容性測(cè)試等服務(wù)
          • 私有化手機(jī)集群技術(shù)方案:從硬件到軟件,提供企業(yè)內(nèi)部私有化手機(jī)集群的解決方案

          使用 Airtest 的好處是中文文檔健全,對(duì)英文不好的同學(xué)支持優(yōu)化。官網(wǎng)也貼心的準(zhǔn)備了視頻教學(xué)和演示,幫助你快速上手。

          Detox


          這個(gè)框架非常低調(diào),但是你用過一定會(huì)愛上它。

          Detox 一個(gè)非常強(qiáng)的 JavaScript 移動(dòng)測(cè)試框架,它的測(cè)試執(zhí)行非常快速和健壯,因?yàn)樵跍y(cè)試執(zhí)行期間不需要外部附加工具來編排和同步

          如果你優(yōu)先考慮以下因素,你可以直接選用 detox:

          • 使用 JavaScript 編程語(yǔ)言
          • 比其他測(cè)試自動(dòng)化框架更易于調(diào)試
          • app 是 React Native 開發(fā)的,可迅速和 detox 集成
          • 在測(cè)試執(zhí)行方面比 Appium 快
          • 文檔比較容易掌握

          下面是具體的代碼,比較典型的代碼編寫方式:

          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(
          '點(diǎn)擊后應(yīng)該顯示屏幕', async ()=> {
          await element(by.id ('detox_button')).tap();
          await expect(element(by.text('Detox!!!'))).toBeVisible();
          });
          });

          Espresso


          Espresso 是新型的的 Android 測(cè)試自動(dòng)化框架,由 Google 開源,Espresso 的 API 體積小、可預(yù)測(cè)、易于學(xué)習(xí)

          你可以使用它快速編寫簡(jiǎn)潔可靠的 Android UI 測(cè)試。

          它非常可靠,與 UI 線程同步并且速度很快,因?yàn)椴恍枰魏嗡撸ó?dāng)應(yīng)用程序空閑時(shí),測(cè)試在同一毫秒內(nèi)運(yùn)行)。

          而且通過簡(jiǎn)單的配置,可以直接集成在 appium 中。

          總結(jié)


          這幾個(gè)工具幾乎涵蓋了所有的 Android 自動(dòng)化測(cè)試技術(shù)選型側(cè)重點(diǎn)。在掌握好這 4 個(gè)當(dāng)中的其中一個(gè)以后,有精力你可以去研究一下其他的工具,有上百種選擇,每種都有側(cè)重和具體的場(chǎng)景。

          • 如果你不知道要選什么工具,用 appium
          • 如果你在自動(dòng)化測(cè)試方面純小白,用 airtest
          • 如果公司用的 reactive native, 用 detox
          • Espresso 適合改善 appium 的體驗(yàn)

          HTTP請(qǐng)求

          名稱:本屬性用于標(biāo)識(shí)一個(gè)取樣器,建議使用一個(gè)有意義的名稱。
          注釋:對(duì)于測(cè)試沒有任何作用,僅用戶記錄用戶可讀的注釋信息。

          基本配置

          協(xié)議:向目標(biāo)服務(wù)器發(fā)送HTTP請(qǐng)求時(shí)的協(xié)議,可以是http或者是https或者File ,默認(rèn)值為http 。

          服務(wù)器名稱或IP :HTTP請(qǐng)求發(fā)送的目標(biāo)服務(wù)器名稱或IP地址(注意:此處不可帶http:/或者h(yuǎn)ttps:/)。

          端口號(hào):目標(biāo)服務(wù)器的端口號(hào),默認(rèn)值為80 。

          方法:發(fā)送HTTP請(qǐng)求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。

          路徑:目標(biāo)URL路徑(不包括服務(wù)器地址和端口);也可以直接寫完整路徑(上面的IP+端口就可以省略了)。

          Content encoding :內(nèi)容的編碼方式(當(dāng)PUT、POST、File和PATCH方式有效),默認(rèn)值為iso8859(所以常用為UTF-8減少亂碼)。

          自動(dòng)重定向:如果選中該選項(xiàng),當(dāng)發(fā)送HTTP請(qǐng)求后得到的響應(yīng)是3xx時(shí),JMeter 會(huì)自動(dòng)重定向到新的頁(yè)面,但是Jmeter是不記錄重定向的過程內(nèi)容。查看結(jié)果集中無法查看轉(zhuǎn)發(fā)請(qǐng)求結(jié)果。

          跟隨重定向:Http Request取樣器的默認(rèn)選項(xiàng),當(dāng)響應(yīng)code是3xx時(shí),自動(dòng)跳轉(zhuǎn)到目標(biāo)地址。與自動(dòng)重定向不同,Jmeter會(huì)記錄重定向過程中的所有請(qǐng)求響應(yīng),在查看結(jié)果樹時(shí)可以看到服務(wù)器返回的內(nèi)容,如有多個(gè)跳轉(zhuǎn)則多個(gè)請(qǐng)求都會(huì)被記錄下來,此為默認(rèn)選項(xiàng)。

          備注:自動(dòng)重定向和跟隨重定向的區(qū)別只在于是否記錄多個(gè)跳轉(zhuǎn)的請(qǐng)求上
          Use keep Alive : 當(dāng)該選項(xiàng)被選中時(shí),jmeter 和目標(biāo)服務(wù)器之間使用 Keep-Alive方式進(jìn)行HTTP通信,默認(rèn)選中。

          Use multipart/from-data for HTTP POST :當(dāng)發(fā)送HTTP POST 請(qǐng)求時(shí),使用Use multipart/from-data方法或者application/x-www-form-urlencoded方法發(fā)送,默認(rèn)不選中。

          Browser-compatible headers:當(dāng)勾選multipart/form-data時(shí),勾選此項(xiàng)會(huì)截掉http請(qǐng)求頭中的Content-Type和Content-Transfer-Encoding,而只發(fā)送Content-Disposition部分;

          參數(shù) : 在請(qǐng)求中發(fā)送URL參數(shù)。用戶可以將URL中所有參數(shù)設(shè)置在本表中,表中的每一行是一個(gè)參數(shù)值對(duì)(對(duì)應(yīng)URL中的 名稱=值)。

          -名稱:參數(shù)名

          -值:參數(shù)值

          -否是編碼:選中時(shí),對(duì)值進(jìn)行URL編碼;建議勾選,因?yàn)楫?dāng)參數(shù)值內(nèi)含有ASCII Control Chars或者Non-ASCII characters或者其他符號(hào)的話,如果不勾選會(huì)導(dǎo)致發(fā)送失敗。

          消息體:放置消息體,如:post請(qǐng)求時(shí),json內(nèi)容等

          文件上傳:在請(qǐng)求中發(fā)送文件,HTTP文件上傳可以通過這種方式模擬,參數(shù)名稱就是發(fā)送文件對(duì)應(yīng)的參數(shù),MINE Type為資源媒體類型

          高級(jí)配置

          • Client implementation(客戶端實(shí)現(xiàn))

          Implementation(實(shí)現(xiàn)):發(fā)送http請(qǐng)求的方式,可選項(xiàng)為java和HttpClient4,默認(rèn)為HttpClient4;

          • Timeouts(milliseconds)

          Connect:連接超時(shí)時(shí)間,單位為毫秒;
          Response:響應(yīng)等待超時(shí)時(shí)間,單位為毫秒;

          • Embedded Resources from HTML Files(從HTML文件中嵌入資源)

          從HTML文件獲取所有內(nèi)含的資源:當(dāng)該選項(xiàng)被選中時(shí),jmeter在發(fā)出HTTP請(qǐng)求并獲得響應(yīng)的HTML文件內(nèi)容后,還對(duì)該HTML進(jìn)行解析 并獲取HTML中包含的所有資源(圖片、flash等),默認(rèn)不選中,如果用戶只希望獲取頁(yè)面中的特定資源,可以在下方的Embedded URLs must match 文本框中填入需要下載的特定資源表達(dá)式,這樣,只有能匹配指定正則表達(dá)式的URL指向資源會(huì)被下載。
          Parallel downloads.:是否使用自設(shè)資源池,勾選后可設(shè)置大小;
          Number:資源池大小,默認(rèn)為6。
          URLs must match:URL匹配過濾,填寫此項(xiàng)則只會(huì)下載與此內(nèi)容項(xiàng)匹配的url的資源,例如要獲取http://test.com/下的所有資源,使用正則表達(dá)式http://test.com/.*;

          • Source address(源地址)

          Source address:只用于http協(xié)議且Implementation為HttpClient4的情況。
          此屬性用于啟用IP欺騙。會(huì)重寫了這個(gè)http請(qǐng)求使用的默認(rèn)本地IP地址。用于Jmeter主機(jī)具有多個(gè)IP地址(即IP別名、網(wǎng)絡(luò)接口、設(shè)備)的情況。該值可以是主機(jī)名、IP地址或網(wǎng)絡(luò)接口設(shè)備,如“ey0”或“l(fā)0”或“wlan0”。
          - IP/Hostname:IP /主機(jī)名以使用特定的IP地址或(本地)主機(jī)名
          - Device:選擇設(shè)備以選擇該接口的第一個(gè)可用地址,該設(shè)備可以是IPv4或IPv6。
          - Device IPV4:選擇IPv4設(shè)備來選擇名稱設(shè)備的IPv4地址(如eth0, lo, em0);
          - Device IPV6:選擇IPv6設(shè)備來選擇名稱設(shè)備的IPv4地址(如eth0, lo, em0);

          • Proxy Server(比如不想用本機(jī)的地址來發(fā)送Http請(qǐng)求而想使用代理服務(wù)器則填寫這部分)

          服務(wù)器名稱或IP:代理服務(wù)器的名稱或者IP地址;
          端口號(hào):該代理的端口號(hào);
          用戶名:使用該代理的用戶名;
          密碼:用戶密碼;

          • 其他任務(wù)

          Save response as MD5 hash:選中該項(xiàng),在執(zhí)行時(shí)僅記錄服務(wù)端響應(yīng)數(shù)據(jù)的MD5值,而不記錄完整的響應(yīng)數(shù)據(jù)。在需要進(jìn)行數(shù)據(jù)量非常大的測(cè)試時(shí),建議選中該項(xiàng)以減少取樣器記錄響應(yīng)數(shù)據(jù)的開銷;

          get請(qǐng)求例子

          (1)當(dāng)get有帶參數(shù),勾中編碼時(shí)

          設(shè)置如下:

          測(cè)試結(jié)果:

          分析中文有進(jìn)行編碼轉(zhuǎn)化

          中文有編碼轉(zhuǎn)化,“張三”轉(zhuǎn)碼為“%E5%BC%A0%E4%B8%89”。

          (2)當(dāng)get有帶參數(shù),不勾選編碼

          設(shè)置如下

          測(cè)試結(jié)果:

          中文沒有轉(zhuǎn)化。

          post請(qǐng)求例子

          post http請(qǐng)求

          測(cè)試結(jié)果:

          請(qǐng)求

          響應(yīng)


          主站蜘蛛池模板: 国产精品va一区二区三区| 亚洲AV成人精品日韩一区18p| 国产成人精品一区二区A片带套| 亚洲色无码专区一区| 国产乱码精品一区二区三区四川| 亚洲一区二区三区久久久久| 久久久精品日本一区二区三区 | 一区二区三区免费视频观看| 无码人妻久久久一区二区三区| 91麻豆精品国产自产在线观看一区 | 日本人真淫视频一区二区三区| 日本一区二区三区在线观看视频| 国产爆乳无码一区二区麻豆| 久久亚洲国产精品一区二区| 亚洲一区二区三区无码中文字幕| 国产精品日本一区二区不卡视频 | 国产伦精品一区二区三区不卡| 亚洲日韩精品一区二区三区 | 狠狠爱无码一区二区三区| 国产成人综合一区精品| 亚洲乱码国产一区三区| 视频一区二区中文字幕| 国产一区二区三区不卡AV| 全国精品一区二区在线观看| 国模极品一区二区三区| 免费一区二区无码视频在线播放 | 国产成人一区二区三区电影网站| 亚洲视频一区在线观看| 四虎在线观看一区二区| 一区二区三区在线观看| 亚洲AV无码一区二区大桥未久 | 综合无码一区二区三区四区五区 | 在线中文字幕一区| 日本一区二区不卡在线| 国产裸体歌舞一区二区| 中文字幕在线一区| 国产综合一区二区| 亚洲国产精品第一区二区| 日本伊人精品一区二区三区| 国产在线精品一区在线观看| 日韩伦理一区二区|