自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

使用macaca進(jìn)行移動(dòng)端hybird自動(dòng)化測試(一)

移動(dòng)開發(fā) 自動(dòng)化
以模塊為單元,測試你代碼的本身,確保你編寫的模塊還有邏輯正確。只要輸入的值不變,輸出的值也應(yīng)該不發(fā)生改變。

[[174581]]

部分基本概念及內(nèi)容:

單元測試:

以模塊為單元,測試你代碼的本身,確保你編寫的模塊還有邏輯正確。只要輸入的值不變,輸出的值也應(yīng)該不發(fā)生改變

前端自動(dòng)化測試:

  • 界面回歸測試 測試界面是否正常,包括文案,圖片等。
  • 功能測試 包括交互邏輯和功能模塊是否符合預(yù)期。
  • 性能測試 頁面性能越來越受到關(guān)注,并且性能需要在開發(fā)過程中持續(xù)關(guān)注,否則很容易隨著業(yè)務(wù)迭代而下降。

本文主要的內(nèi)容集中在界面回歸測試和功能測試。這2部分的測試工作是通過模擬用戶進(jìn)行頁面操作,通過查看頁面狀態(tài)的變化,從而檢測功能是否運(yùn)行正常:它的測試流程是:

  1. DOM元素選取
  2. 觸發(fā)DOM元素綁定事件
  3. 查看綁定事件結(jié)果是否符號(hào)預(yù)期

如何去做前端UI自動(dòng)化測試

要完成前端UI自動(dòng)化測試至少需要測試框架,斷言庫。

工具的選擇

Headless無界面:

  1. PhantomJS.包含了WebKit瀏覽器引擎和JavaScript API的腳本解釋器,因此可以去運(yùn)行js代碼。只不過不提供圖形界面,其他的功能都和瀏覽器一樣。比如一些爬蟲爬了網(wǎng)站,這個(gè)網(wǎng)站并不是靜態(tài)的,那么需要執(zhí)行Js才行。因此PhantomJS提供了執(zhí)行頁面中的代碼功能。
  2. casperjs.基于PhantomJS進(jìn)行開發(fā),提供的功能也和PhantomJS,不過語法更加簡練。不像PhantomJS callback hell那樣惡心。同時(shí)和PhantomJS不同的地方還在于它直接提供了測試的功能,比如對(duì)遠(yuǎn)程DOM的斷言測試,還能編寫功能測試套件。具體的API文檔參見casperjs的官網(wǎng)。
  1. casper.start('http://www.google.fr/'function() {                                          //打開谷歌主頁,添加頁面加載完成時(shí)的回調(diào)函數(shù) 
  2.     this.test.assertTitle('Google''google homepage title is the one expected');           //檢測頁面標(biāo)題是否是'Google',如果是,輸出第二個(gè)參數(shù)指定的字符串 
  3.     this.test.assertExists('form[action="/search"]''main form is found');                 //檢測頁面中是否存在選擇器指定的元素,如果存在輸出第二個(gè)參數(shù)指定的字符串 
  4.     this.fill('form[action="/search"]', {                                                   //填充表單并提交,執(zhí)行搜索操作 
  5.         q: 'foo' 
  6.     }, true); 
  7. }); 
  8.  
  9. casper.then(function() { 
  10.     this.test.assertTitle('foo - Recherche Google''google title is ok');                  //檢測搜索結(jié)果頁的頁面標(biāo)題是否正確     
  11.     this.test.assertUrlMatch(/q=foo/, 'search term has been submitted');                    //檢測搜索結(jié)果頁的網(wǎng)址是否匹配指定的正則表達(dá)式 
  12.     this.test.assertEval(function() { 
  13.         return __utils__.findAll('h3.r').length >= 10;                                      //自定義一個(gè)檢測函數(shù) 
  14.     }, 'google search for "foo" retrieves 10 or more results'); 
  15. }); 
  16.  
  17. casper.run(function() { 
  18.     this.test.renderResults(true);                                                          //輸出檢測結(jié)果 
  19. });  

UI測試

nightwatch (簡單的語法,可以快速上手使用強(qiáng)大的 Selenium WebDriver API 來在 DOM 元素上執(zhí)行命令和斷言) 

  1. module.exports = { 
  2.   'Demo test Google' : function (client) { 
  3.     client 
  4.       .url('http://www.google.com'
  5.       .waitForElementVisible('body', 1000) 
  6.       .assert.title('Google'
  7.       .assert.visible('input[type=text]'
  8.       .setValue('input[type=text]''rembrandt van rijn'
  9.       .waitForElementVisible('button[name=btnG]', 1000) 
  10.       .click('button[name=btnG]'
  11.       .pause(1000) 
  12.       .assert.containsText('ol#rso li:first-child'
  13.         'Rembrandt - Wikipedia'
  14.       .end(); 
  15.   } 
  16. };  

nightmare.js 基于phatomJS為測試封裝的的一套High level Api(非常的語義化:click, refresh, goto...).同時(shí)nightmare還基于electron,那么它也提供了GUI的界面工具,當(dāng)你使用nightmare.js進(jìn)行自動(dòng)化測試的時(shí)候就可以看到所有的模擬用戶動(dòng)作了。

  1. yield Nightmare() 
  2.   .goto('http://yahoo.com'
  3.   .type('input[title="Search"]''github nightmare'
  4.   .click('.searchsubmit');  
  1. protractor angular的親兒子,angular團(tuán)隊(duì)自己開發(fā)的e2e測試工具。同樣提供模擬用戶的操作的API,來驗(yàn)證Angular運(yùn)行狀況。
  2. selenium 暫時(shí)還沒用過,網(wǎng)上有大量的關(guān)于它的資料
  3. macaca 本系列要講的重點(diǎn)
  4. Appium 支持ios/android/firefoxos多種平臺(tái)的測試,native、h5、hybrid都支持,以及所有支持jsonWireProtocal協(xié)議的腳本語言:python,java,nodejs ruby都可以用來書寫用例.它實(shí)際上包含了: a. 基于express的server用于發(fā)送/接收client端的協(xié)議命令;
  5. 作為bootstrap客戶端用于將命令傳遞給對(duì)應(yīng)的UIAutomator/UIAutomation/Google’s Instrumentation

測試框架

測試框架的作用就是運(yùn)行測試開發(fā)人員編寫的腳本工具,測試框架會(huì)抓取到代碼拋出的AssertionError,并在控制臺(tái)或者網(wǎng)頁中輸出。測試框架提供了特定的測試語法,一般分為兩類TDD(測試驅(qū)動(dòng)開發(fā))和BDD(行為驅(qū)動(dòng)開發(fā))。測試框架通常提供TDD(測試驅(qū)動(dòng)開發(fā))或BDD(行為驅(qū)動(dòng)開發(fā))的測試語法來編寫測試用例。

TDD:是指先寫好測試代碼,然后再根據(jù)測試來寫代碼。它的步驟一般是:

  1. 寫個(gè)測試
  2. 寫出最少數(shù)量的代碼,使其保持測試通過
  3. 優(yōu)化代碼
  4. 重復(fù)前面的工作

BDD:不去針對(duì)代碼細(xì)節(jié),而是針對(duì)行為進(jìn)行測試

現(xiàn)在用的比較多的測試框架是:

  1. mocha
  2. jasmine

斷言庫

斷言的作用就是判斷源碼的實(shí)際執(zhí)行結(jié)果與預(yù)期結(jié)果是否相同,如果不一致就拋出一個(gè)錯(cuò)誤。

  • chai

chai.js提供了assert, expect, should三種風(fēng)格的斷言??筛鶕?jù)自己的喜好去選擇斷言風(fēng)格。具體API請(qǐng)查閱相關(guān)的文檔。

利用上面的工具基本上就可以開始進(jìn)行測試腳本的測試工作了。

下面一篇文章就會(huì)介紹如何使用macaca來對(duì)hybird應(yīng)用進(jìn)行測試。

責(zé)任編輯:龐桂玉 來源: segmentfault
相關(guān)推薦

2016-10-26 22:16:48

macaca自動(dòng)化測試javascript

2016-10-26 22:24:00

macaca自動(dòng)化測試javascript

2016-10-26 22:29:13

macaca自動(dòng)化測試javascript

2024-11-21 15:24:49

2009-08-19 09:00:48

單元測試框架自動(dòng)化測試

2020-08-03 15:40:57

Web自動(dòng)化工具測試

2017-04-21 07:41:37

iOS自動(dòng)化測試容器

2011-05-16 15:36:00

軟件測試

2022-01-14 11:51:00

測試工具自動(dòng)化

2022-02-15 08:07:17

測試軟件開發(fā)

2020-10-10 06:30:07

PythonSEO自動(dòng)化測試

2023-01-09 15:20:16

2014-04-16 14:15:01

QCon2014

2013-05-16 10:58:44

Android開發(fā)自動(dòng)化測試

2022-02-17 10:37:16

自動(dòng)化開發(fā)團(tuán)隊(duì)預(yù)測

2012-02-27 17:34:12

Facebook自動(dòng)化

2021-09-03 09:56:18

鴻蒙HarmonyOS應(yīng)用

2021-06-30 19:48:21

前端自動(dòng)化測試Vue 應(yīng)用

2012-12-24 22:54:31

2011-12-23 17:09:57

自動(dòng)化測試
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)