Web自動(dòng)化測(cè)試平臺(tái)設(shè)計(jì)與落地-概覽

引言

自動(dòng)化金字塔-靈魂手繪版
關(guān)于Web自動(dòng)化測(cè)試,投入產(chǎn)出比是一個(gè)繞不開(kāi)的話題,對(duì)于走到2017年的測(cè)試人,這時(shí)候可能已經(jīng)有很多人會(huì)想到著名的自動(dòng)化測(cè)試金字塔。它形象地展示了Mike Cohn對(duì)自動(dòng)化分層中各層所應(yīng)該投入比重的看法,可以作為我們Web自動(dòng)化實(shí)施策略的重要參考。

我最初開(kāi)始接觸Web自動(dòng)化測(cè)試的時(shí)候,沒(méi)有直接的領(lǐng)路人,測(cè)試行業(yè)知識(shí)也遠(yuǎn)不及如今這么豐富和易獲取,當(dāng)時(shí)我對(duì)于自動(dòng)化測(cè)試的分層幾乎沒(méi)有什么了解,更不知道什么金字塔,就如很多同行一樣,我一開(kāi)始先入的是UI自動(dòng)化的坑,那時(shí)候我還沒(méi)有養(yǎng)成搜索英文資料的習(xí)慣,關(guān)于Selenuim2、WebDriver的中文信息還相當(dāng)有限,國(guó)內(nèi)主流還在Selenuim1, 先熟悉API,熟悉元素定位方式,進(jìn)行一些簡(jiǎn)單的封裝,到后來(lái)的PageObject,干勁十足。

不過(guò)在UI自動(dòng)化這個(gè)階段的后期,我已經(jīng)對(duì)自動(dòng)化測(cè)試有了更多的認(rèn)識(shí),加上工作變動(dòng),開(kāi)始跳接口自動(dòng)化的坑,通過(guò)工作經(jīng)歷、朋友和網(wǎng)絡(luò),對(duì)現(xiàn)狀有了一定的了解,大約2015年的時(shí)候,心里隱約有一些想法,我們的測(cè)試對(duì)象的架構(gòu)從最簡(jiǎn)單的三層架構(gòu),到分布式架構(gòu),再到SOA,到微服務(wù),一路向前,而再看我們測(cè)試人對(duì)Web系統(tǒng)接口自動(dòng)化的實(shí)現(xiàn)方式,直接使用如 Postman這樣成熟工具的先不談,就自研框架而言,有用Java的,如Junit/TestNG + Ant( + Jenkins + JMeter + xxx),有用Python的,比如基于廣為人知的RobotFramework,有用Ruby的,可能基于BDD界耳熟能詳?shù)腃ucumber,等等,技術(shù)??赡芨饔胁煌?,本質(zhì)上,大多是孤立的工程 + 文件形式管理的數(shù)據(jù)和用例。

可能四五年前,我看到的,大多是這樣的方案,到今天,測(cè)試從業(yè)者的數(shù)量大幅度增長(zhǎng),有良好代碼能力的并且能將其用到測(cè)試工作中的也越來(lái)越多,然而我看到的,這些的方案仍然占大多數(shù),除開(kāi)國(guó)內(nèi)幾家頂尖的互聯(lián)網(wǎng)企業(yè),就我所了解的以及網(wǎng)絡(luò)上能搜索到的,嘗試將方案走到簡(jiǎn)單Web系統(tǒng)的形式,用數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù),在線管理自動(dòng)化實(shí)施的,很少。就這些方案本身,我覺(jué)得只要能達(dá)到自己團(tuán)隊(duì)的目的,都是很好的,沒(méi)有優(yōu)劣之分,我在意的是,我看到的變化低于預(yù)期很多,新的嘗試低于預(yù)期很多,我覺(jué)得很多新的嘗試,對(duì)于現(xiàn)在的測(cè)試人來(lái)說(shuō),難度并不會(huì)比以前的方案高多少,所需要的時(shí)間成本,也并不會(huì)高出多少,我希望我們測(cè)試人在做自動(dòng)化實(shí)施的時(shí)候,能夠像做業(yè)務(wù)測(cè)試一樣,能夠不局限于某一個(gè)方向。

既然看到的嘗試很少,那我就想自己去做一做,慢慢形成一些思路,到2016年,公司原有的自動(dòng)化方案不能支撐一些新產(chǎn)品的需求,開(kāi)始投入精力去設(shè)計(jì)和實(shí)現(xiàn)一個(gè)Web類型的測(cè)試平臺(tái),當(dāng)時(shí)感覺(jué)就像當(dāng)年剛開(kāi)始自主實(shí)施UI自動(dòng)化一樣,有一股勁。設(shè)計(jì)選型、編碼、首版服務(wù)端上線、第一個(gè)團(tuán)隊(duì)開(kāi)始使用、首版UI上線、1.6、2.0、...在功能方面來(lái)說(shuō),算是做出了勉強(qiáng)接近自己預(yù)期的系統(tǒng)(如果不考慮那拙劣UI的話)。 平臺(tái)明面上是我單獨(dú)完成的,但實(shí)際上,同行大牛對(duì)思路的肯定、工作安排上的支持、業(yè)務(wù)線伙伴的需求,都是不可或缺的。本來(lái)今年年就計(jì)劃寫關(guān)于這部分的文章,但由于今年工作、生活上都很忙,這半年幾乎沒(méi)有一個(gè)周末有自己獨(dú)立的時(shí)間,加上拖延癥作祟,所以直到今天才總算開(kāi)始碼了。

雖然并不確定這次計(jì)劃輸出的內(nèi)容對(duì)讀者能有多少幫助,但還是計(jì)劃分幾篇來(lái)寫,當(dāng)然具體能輸出幾篇現(xiàn)在我也沒(méi)底,拖延癥是個(gè)強(qiáng)敵,所以決定第一篇先做一個(gè)總覽

這期的引言太長(zhǎng)了點(diǎn),抱歉。希望本文能為有耐心讀到這里的人帶來(lái)些許價(jià)值

一、目標(biāo)和定位

首選需要說(shuō)明的是,由于近年的工作重心主要在Web服務(wù)端,同時(shí)根據(jù)團(tuán)隊(duì)當(dāng)前的工作情況,定的自動(dòng)化策略是優(yōu)先實(shí)施接口層而非UI層,所以平臺(tái)當(dāng)前的主要功能是圍繞HTTP層的自動(dòng)化測(cè)試展開(kāi)的。

平臺(tái)的定位是作為公司各業(yè)務(wù)線服務(wù)端的自動(dòng)化公共平臺(tái),目標(biāo)是通過(guò)快速落地自動(dòng)化測(cè)試來(lái)支撐公司各產(chǎn)品組提高測(cè)試效率。

二、平臺(tái)特點(diǎn)

最基本的特點(diǎn),平臺(tái)是一個(gè)前后端分離的Web服務(wù)、由數(shù)據(jù)庫(kù)管理基本信息和測(cè)試用例、在線查看測(cè)試報(bào)告。詳細(xì)一點(diǎn)的話,我認(rèn)為通過(guò)對(duì)比的方式來(lái)呈現(xiàn)可能比較明了。這里以引言中提到的實(shí)施方案與本文所述的測(cè)試平臺(tái)進(jìn)行對(duì)比。

對(duì)比項(xiàng) 業(yè)界常見(jiàn)項(xiàng)目 本文平臺(tái)
定位 支撐某一產(chǎn)品線的接口自動(dòng)化需求 支撐各產(chǎn)品線的多種自動(dòng)化需求
適用性 適用于特定Web系統(tǒng)接口的自動(dòng)化 適用于不同產(chǎn)品、不同設(shè)計(jì)理念接口的自動(dòng)化
基礎(chǔ)架構(gòu) 獨(dú)立的工程,基于文件管理數(shù)據(jù) 前后端分離的Web服務(wù),基于數(shù)據(jù)庫(kù)管理數(shù)據(jù)
落地方式 本地搭建運(yùn)行環(huán)境,獲取工程并運(yùn)行以調(diào)試新用例 在線UI操作,開(kāi)放接口便于CI集成
數(shù)據(jù)管理 通過(guò)更新/上傳文件的形式管理用例 在線創(chuàng)建/更新用例,使用MySQL管理數(shù)據(jù)
運(yùn)行方式 通過(guò)編輯Jenkins job/Crontab等實(shí)現(xiàn)運(yùn)行計(jì)劃管理 在線自定義運(yùn)行時(shí)間計(jì)劃和運(yùn)行內(nèi)容
結(jié)果校驗(yàn) 校驗(yàn)粒度較粗,數(shù)據(jù)庫(kù)校驗(yàn)可能在代碼中 基于Json解析的細(xì)粒度校驗(yàn),在線管理數(shù)據(jù)庫(kù)校驗(yàn)
歷史數(shù)據(jù) 歷史數(shù)據(jù)缺乏有效管理 在線查看歷史運(yùn)行記錄和測(cè)試報(bào)告

三、系統(tǒng)架構(gòu)

整個(gè)平臺(tái)的大體系統(tǒng)架構(gòu)如下圖,其中產(chǎn)品數(shù)據(jù)庫(kù)交互主要是數(shù)據(jù)預(yù)置/清理/校驗(yàn)


平臺(tái)系統(tǒng)架構(gòu)

四、相關(guān)技術(shù)棧

應(yīng)用 技術(shù)/工具
Web服務(wù)基礎(chǔ)框架 Spring Boot
Web容器 Jetty
持久層框架 MyBatis
HTTP調(diào)用和校驗(yàn)基礎(chǔ)框架 REST-assured
用例調(diào)度執(zhí)行 TestNG
HTML報(bào)告 Allure
平臺(tái)接口信息 Swagger
基礎(chǔ)UI組件 Bootstrap
前后端交互 AJAX(Jquery)
在線代碼編輯 Ace

關(guān)于在線代碼編輯,主要提供給有基礎(chǔ)代碼能力的同學(xué)應(yīng)用在復(fù)雜場(chǎng)景的自動(dòng)化實(shí)施,普通的接口自動(dòng)化需求不需要。后續(xù)文章會(huì)做更多的說(shuō)明。

五、UI概覽

基礎(chǔ)信息管理

用例管理

在線場(chǎng)景編輯

定時(shí)計(jì)劃管理

用例調(diào)試

在線報(bào)告

郵件樣例

六、待完善部分

平臺(tái)目前有兩個(gè)較大的功能欠缺:

  • 賬戶體系和權(quán)限控制
  • 代碼動(dòng)態(tài)編譯運(yùn)行的安全控制(沙箱)

賬戶體系和權(quán)限控制目前沒(méi)有實(shí)現(xiàn),主要是時(shí)間成本的問(wèn)題,考慮目前平臺(tái)都是公司內(nèi)部各測(cè)試組使用,暫時(shí)沒(méi)有特別強(qiáng)的需求。至于動(dòng)態(tài)編譯運(yùn)行的安全問(wèn)題,主要是難度和時(shí)間成本兩方面的原因,對(duì)于這個(gè)安全問(wèn)題,目前我自己還沒(méi)有一個(gè)周全的解決方案,歡迎提出寶貴意見(jiàn),另一方面,作為內(nèi)網(wǎng)運(yùn)行的平臺(tái),安全需求相對(duì)較低。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容