PC端WebUI自動(dòng)化測(cè)試框架簡(jiǎn)介

背景:我們做PC端的WebUI自動(dòng)化測(cè)試時(shí)滩愁,經(jīng)常會(huì)聽(tīng)到selenium、webdriver等框架瞧筛,我們希望能夠了解各個(gè)框架區(qū)別是什么,相互之間是否有繼承關(guān)系导盅;同時(shí)現(xiàn)在各個(gè)互聯(lián)網(wǎng)公司都喜歡基于一些UI自動(dòng)化測(cè)試的工具定制一套測(cè)試框架较幌,希望能夠一眼識(shí)別這些定制框架的背后實(shí)現(xiàn)技術(shù)。

我們常用到的PC端WebUI自動(dòng)化框架:


UI端到端測(cè)試框架:

  • 基于non-headless browser
    • Selenium
      • Selenium通常指的是Selenium1.0白翻,也就是Selenium Remote Control(Selenium RC)乍炉,是一套瀏覽器dom元素操作接口實(shí)現(xiàn)绢片,可以在很多的測(cè)試框架以及語(yǔ)言中集成。
      • 5年前在華為做Web網(wǎng)管UI自動(dòng)化測(cè)試的時(shí)候就是用Ruby+Selenium RC去做的岛琼,每次測(cè)試前底循,都需要單獨(dú)啟動(dòng)Selenium的Server端,印象十分深刻槐瑞。
      • 官網(wǎng):http://docs.seleniumhq.org/projects/remote-control/
    • Selenium WebDriver
      • 我們通澄醯樱可以稱之為:Selenium 2.0或者WebDriver
      • Selenium WebDriver是Selenium RC的繼承者,是Selenium和WebDriver Api的結(jié)合
      • 官網(wǎng)是這樣說(shuō)的:Selenium 1.0 + WebDriver = Selenium 2.0困檩。
      • 官網(wǎng):http://docs.seleniumhq.org/projects/webdriver/
    • WebDriver
      • WebDriver可以是指Selenium 2.0祠挫,也多指最新的w3c候選標(biāo)準(zhǔn)WebDriver。
      • 絕大多數(shù)的non-headless框架都是對(duì)WebDriver的不同實(shí)現(xiàn)悼沿。
      • 官網(wǎng):https://www.w3.org/TR/webdriver/
    • WebdriverIO
      • WebdriverIO是基于Webdriver API的一種node.js實(shí)現(xiàn)等舔,是一種端到端的測(cè)試框架
      • 官網(wǎng):http://webdriver.io/
var wait_time = 5000;
module.exports = {
    before: function (browser) {
        // 打開頁(yè)面
        browser.maximizeWindow()
            .deleteCookies()
            .url(loginUrl)
            .waitForElementVisible("body", wait_time)
            .pause(wait_time);
    },

    after: function (browser) {
        browser.end();
    },

    "01_進(jìn)入XXXX管理頁(yè)面": function (browser) {
        // 檢查XXX管理頁(yè)面正常
        browser
            .assert.containsText(bt_batch_modify, '測(cè)試按鈕')
            .assert.elementPresent(ct_workshift);
    }
}
  • Nightmare
    • 官網(wǎng):http://www.nightmarejs.org/
    • Nightmare是基于Electron的一個(gè)瀏覽器操作lib软瞎,Electron和PhatomJS類似
    • 實(shí)際使用發(fā)現(xiàn)Nightmare運(yùn)行時(shí)是會(huì)打開瀏覽器的,和headless模式不同
    • 可以使用mocha框架來(lái)運(yùn)行基于Nightmare的UI自動(dòng)化用例
/**
 * Created by arthur.hw on 2017/7/20.
 */
var Nightmare = require('nightmare');
var nightmare = Nightmare({ show: true });

nightmare
    .goto('https://www.baidu.com/')
    .type('#kw', 'nightmare')
    .click('#su')
    .end()
    .then(function (result) {
        console.log(result);
    })
    .catch(function (error) {
        console.error('Search failed:', error);
    });
  • CodeceptJS
    • 官網(wǎng):http://codecept.io/
    • CodeceptJS對(duì)頁(yè)面DOM元素的操作是基于WebDriverIO拉讯、Protractor這些框架封裝涤浇,且可以根據(jù)自己的偏好來(lái)設(shè)置


// 有味道的CodeceptJS代碼風(fēng)格
Feature('CodeceptJS Demonstration');

Scenario('submit form successfully', (I) =>

  I.amOnPage('/documentation')

  I.fillField('Email', 'hello@world.com')

  I.fillField('Password', '123456')

  I.checkOption('Active')

  I.checkOption('Male');

  I.click('Create User')

  I.see('User is valid')

  I.dontSeeInCurrentUrl('/documentation')

});

  • Protractor
    • 原設(shè)計(jì)初衷是針對(duì)Angular/AngularJS的應(yīng)用的端到端測(cè)試框架
    • 需要單獨(dú)啟動(dòng)selenium server(吐槽下)
    • 官網(wǎng):http://www.protractortest.org/#/
  • 基于headless browser
    headless介紹:https://en.wikipedia.org/wiki/Headless_browser
    headless browser就是沒(méi)有圖形化界面的瀏覽器,通過(guò)命令行界面的方式來(lái)運(yùn)行瀏覽器魔慷,通常是基于webkit只锭,不依賴于具體的瀏覽器。
    • PhatomJS
      • 特點(diǎn):PhatomJS并不是一個(gè)測(cè)試框架院尔,只是提供了一套headless browser的操作接口及實(shí)現(xiàn)蜻展,UI自動(dòng)化測(cè)試只是PhatomJS的一個(gè)應(yīng)用場(chǎng)景。
      • 官網(wǎng):http://phantomjs.org/
  • CasperJS
    • 特點(diǎn):基于PhatomJS的UI自動(dòng)化測(cè)試框架邀摆。
    • 官網(wǎng):http://casperjs.org/

總結(jié):

  • 上面的框架的目標(biāo)都是實(shí)現(xiàn)對(duì)瀏覽器dom元素的操作纵顾,并支持測(cè)試需要的各種斷言方法assert,殊途同歸栋盹,其中WebDriver已經(jīng)成為w3c的標(biāo)準(zhǔn)施逾,大部分non-headless框架也是對(duì)WebDriver標(biāo)準(zhǔn)的不同實(shí)現(xiàn)。

  • 不同的框架可以組合使用例获,相互彌補(bǔ)一些特性上的缺陷和不足

  • 再結(jié)合一些測(cè)試管理框架+持續(xù)集成工具汉额,就可以將整個(gè)UI測(cè)試的自動(dòng)化框架搭建起來(lái)

  • CodeceptJS的代碼風(fēng)格比較有意思,其他的框架都是把用戶操作翻譯為瀏覽器的動(dòng)作榨汤,CodeceptJS就是原滋原味的用戶動(dòng)作語(yǔ)言:我打開頁(yè)面蠕搜,我點(diǎn)擊按鈕,我輸入文本......

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末收壕,一起剝皮案震驚了整個(gè)濱河市妓灌,隨后出現(xiàn)的幾起案子轨蛤,更是在濱河造成了極大的恐慌,老刑警劉巖虫埂,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件俱萍,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡告丢,警方通過(guò)查閱死者的電腦和手機(jī)枪蘑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)岖免,“玉大人岳颇,你說(shuō)我怎么就攤上這事÷妫” “怎么了话侧?”我有些...
    開封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)闯参。 經(jīng)常有香客問(wèn)我瞻鹏,道長(zhǎng),這世上最難降的妖魔是什么鹿寨? 我笑而不...
    開封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任新博,我火速辦了婚禮,結(jié)果婚禮上脚草,老公的妹妹穿的比我還像新娘赫悄。我一直安慰自己,他們只是感情好馏慨,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開白布埂淮。 她就那樣靜靜地躺著,像睡著了一般写隶。 火紅的嫁衣襯著肌膚如雪倔撞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天慕趴,我揣著相機(jī)與錄音痪蝇,去河邊找鬼。 笑死秩贰,一個(gè)胖子當(dāng)著我的面吹牛霹俺,可吹牛的內(nèi)容都是我干的柔吼。 我是一名探鬼主播毒费,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼愈魏!你這毒婦竟也來(lái)了觅玻?” 一聲冷哼從身側(cè)響起想际,我...
    開封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎溪厘,沒(méi)想到半個(gè)月后胡本,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡畸悬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年侧甫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蹋宦。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡披粟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出冷冗,到底是詐尸還是另有隱情守屉,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布蒿辙,位于F島的核電站拇泛,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏思灌。R本人自食惡果不足惜俺叭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望泰偿。 院中可真熱鬧绪颖,春花似錦、人聲如沸甜奄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)课兄。三九已至牍氛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間烟阐,已是汗流浹背搬俊。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蜒茄,地道東北人唉擂。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像檀葛,于是被迫代替她去往敵國(guó)和親玩祟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容