引言

我最初開(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)

四、相關(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概覽







六、待完善部分
平臺(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ì)較低。