開山篇--Java接口自動化測試選型與基礎(chǔ)搭建

最近我司事業(yè)部的業(yè)務(wù)中臺開發(fā)完畢,由于中臺業(yè)務(wù)的特殊性姥宝,并沒有對應(yīng)的頁面操作等础米,所以我們需要做
一個線上的可自動化部署的接口自動化測試平臺汗菜,但是搜遍了全網(wǎng)的博客資料等,發(fā)現(xiàn)居然沒有完整的自動
化的系列文章摧莽,找到的幾十篇博客更是把如今的博客生態(tài)圈的抄襲展現(xiàn)的淋漓盡致庙洼,很多文章的內(nèi)容是完全
一樣的,而且最讓人氣憤的是镊辕,很多搭建的細(xì)節(jié)都沒有描述油够,或者描述的并不是正確的,居然沒有人進行驗
證后在發(fā)征懈,后來基于認(rèn)識的某大廠的資深工程師給的經(jīng)驗和方案石咬,慢慢摸索,踩了無數(shù)坑終于完成了我司的
接口自動化測試平臺卖哎,現(xiàn)整理成系列給后來人使用

自動化測試的目標(biāo)

首先鬼悠,我們搭建之前必須要做的兩件事:分析自動化測試平臺需要完成的目標(biāo)或者能實現(xiàn)的功能删性,以及基于我司業(yè)務(wù)的自動化測試的技術(shù)選型和工具選型,我們先來看第一點焕窝,自動化測試平臺要完成的目標(biāo)蹬挺,決定這一點更重要的是根據(jù)我們需要測試的工程和項目是什么類別,業(yè)務(wù)方向它掂,如何測試巴帮,以及測試目標(biāo)等來決定

項目類型

我司項目類型為業(yè)務(wù)中臺,即開放的業(yè)務(wù)Api平臺虐秋,我司的中臺架構(gòu)采用CloudAlibaba系列重構(gòu)榕茧,內(nèi)部產(chǎn)品線使用RPC接口,Resful接口僅開放OpenApi使用熟妓,所以測試需要完全依賴于接口覆蓋測試

業(yè)務(wù)方向(業(yè)務(wù)架構(gòu))

我司主要業(yè)務(wù)方向為電商與數(shù)字商業(yè)化雪猪,所以業(yè)務(wù)中臺整體架構(gòu)為三層服務(wù),一級服務(wù)為各個基礎(chǔ)能力中心起愈,如注冊中心只恨,Redis開放能力中心,Mongo存儲能力中心抬虽,外部服務(wù)中心官觅,以及各個中間件、短信等基礎(chǔ)能力中心阐污,二級服務(wù)為依據(jù)我司數(shù)十個產(chǎn)品線業(yè)務(wù)功能模塊能力整合拆分出來的業(yè)務(wù)中心休涤,每個中心僅完成獨立能力,如店鋪相關(guān)能力中心笛辟,價格控制能力中心等功氨,三級服務(wù)為完整的部分業(yè)務(wù)能力,按照完整的功能流程獨立拆分手幢,例如活動捷凄、促銷、秒殺等相關(guān)的促銷域围来,短信跺涤、EMAIL、商城客服聊天IM等相關(guān)的消息域等(僅對外開放三級業(yè)務(wù)域服務(wù))

如何測試

由于我司項目的特殊性监透,所以在制定測試方式上桶错,分為三類測試,即分為接口覆蓋測試胀蛮、子流程閉環(huán)測試院刁、主分支業(yè)務(wù)流程覆蓋測試,首先我們看第一類接口覆蓋測試粪狼,此測試需要把我司對外的四百多個三級業(yè)務(wù)服務(wù)全部進行單元測試覆蓋黎比,并且完整測試通過超营,第二類子流程閉環(huán)測試,簡單理解為每個域獨立的業(yè)務(wù)串聯(lián)測試阅虫,例如市場域的完整閉環(huán)流程可能會有多個演闭,例如其中一個流程:申請開店-->審核開店(Y/N)-->設(shè)置店鋪風(fēng)格-->設(shè)置裝修模版-->申請商品(創(chuàng)建商品)-->設(shè)置價格-->設(shè)置快遞模版-->上架商品-->下架商品,至此一個簡單的部分流程閉環(huán)完成颓帝,為什么說是簡單的閉環(huán)流程呢米碰?我想細(xì)心的可能發(fā)現(xiàn),此流程都是涉及市場域相關(guān)的接口购城,并且按照流程順序執(zhí)行的吕座,但是很多與之相關(guān)的操作并不存在,例如瘪板,用戶注冊吴趴、登錄、實名認(rèn)證侮攀、賬戶設(shè)置等前置流程沒有涉及锣枝,且中間流程還有設(shè)置促銷活動、訂單兰英、支付撇叁、配送、倉儲畦贸、物流陨闹、結(jié)算等諸多流程沒有涉及,所以僅為簡單閉環(huán)流程--即本域業(yè)務(wù)范圍內(nèi)從無到有再到無的過程薄坏,而第三類測試即屬于按照公司業(yè)務(wù)線發(fā)展趋厉,將中間所有的主流程全部涉及,覆蓋面更廣胶坠,數(shù)據(jù)要求更嚴(yán)格

測試目標(biāo)

第一類接口測試我們的目標(biāo)是接口全覆蓋君账,代碼覆蓋率達到90%,并且測試目標(biāo)為可持續(xù)多次運行涵但,且測試通過,第二類測試要求可以循環(huán)測試多輪帖蔓,且測試通過矮瘟,第三類測試要求可動態(tài)循環(huán)測試,并且要求每一個流程的數(shù)據(jù)與理想數(shù)據(jù)相符塑娇,且測試通過

技術(shù)選型與測試相關(guān)工具

有了前面的條件后澈侠,我們就可以考慮技術(shù)選型和工具相關(guān)的準(zhǔn)備工作了,畢竟工欲善其事埋酬,必先利其器嘛哨啃,我們先把能想到的準(zhǔn)備好了烧栋,才能防止未知的問題,首先我們來看看技術(shù)選型拳球,測試工程肯定是需要遠(yuǎn)程調(diào)用接口服務(wù)的审姓,而常見的接口一般是Http和RPC兩種,我們產(chǎn)品線內(nèi)部使用則是直接選擇RPC調(diào)度祝峻,所以Dubbo是必不可少的魔吐,而項目工程可能會需要獨立運行的能力,而SpringBoot也是不錯的選擇莱找,(至于Http接口酬姆,這里可以默認(rèn)選擇使用HttpClient框架進行請求工具類封裝,也可以選擇使用OkHttp3+Retfit2進行快速簡單的Http請求操作)奥溺。而我們需要測試一般可選的市場主流的測試框架并不多辞色,常見的如Junit、Nunit浮定、TestNg相满、Mock等,而Mock用于模擬用戶操作壶唤,并不觸發(fā)真實操作雳灵,一般情況下用于接口開發(fā)的單元測試使用,可以有效的查找問題闸盔,而我們當(dāng)前測試需要依賴真實的遠(yuǎn)程服務(wù)悯辙,進行請求操作,與Mock背道而馳迎吵,且我司在項目開發(fā)的過程中躲撰,已經(jīng)使用Mock進行了單元測試睬塌,所以Mock被排除在外铣焊,JunitNunit屬于類似的測試框架產(chǎn)物,由于是最早提出的測試剝離的框架搔预,并且也是第一個進行完善測試的框架蔫巩,所以一直到現(xiàn)在也是最常用的測試框架之一谆棱,但是JUnit有以下幾個約束至今依然存在:

  • 它們的名稱必須以 test 開始,如果不是test開頭將會啟動異常
  • 它們不返回任何值,junit測試過程中所有的測試方法必須是void,否則測試啟動異常
  • 它們不能帶任何參數(shù),junit直到最新的版本中依然不支持動態(tài)測試傳遞參數(shù)圆仔,即方法必須無參垃瞧,雖然發(fā)展到現(xiàn)在有各種設(shè)計模式和編程技巧可以讓我們盡量避免這個約束的問題,比如使用全局變量坪郭,并且在測試啟動的時候注入有參構(gòu)造个从,解決傳遞參數(shù)的問題等,但是靈活度和實用性很差,測試工作也會變得局限性很大嗦锐,且復(fù)雜度會很高

而TestNg比起Junit更年輕嫌松,且直到現(xiàn)在依然在保持著更新狀態(tài),TestNg從jdk1.5開始奕污,就開始改變測試的方式和細(xì)節(jié)萎羔,完全擁抱java的新特性,如靜態(tài)菊值、注解等外驱,TestNg提供了更多的生命周期和一堆默認(rèn)組件,甚至于提供了大量的注解腻窒,可以滿足常見的主流測試昵宇,主流IDE來說,TestNg也有對應(yīng)的插件可以輔助測試儿子,并且TestNg還有擴展機制瓦哎,可以支持企業(yè)級復(fù)雜測試需求的定制化,由此可見柔逼,TestNg相比較于其他幾個框架來說會更加合適一些蒋譬,思考完這些,我們可以著手考慮開始快速搭建工程了

項目搭建

首先打開IDEA愉适,使用Spring插件--Spring Assistant快速創(chuàng)建一個Springboot工程犯助,這里我們默認(rèn)選擇SpringBoot2.1.9版本,下面需要選擇的start啟動類维咸,我們默認(rèn)勾選web啟動類即可(其實這里我們不需要任何啟動類剂买,因為工程并不需要啟動,也不需要成為web工程)癌蓖,然后等待工程創(chuàng)建完畢即可

strat.png

創(chuàng)建.png

web.png

選擇完畢以后瞬哼,等待工程創(chuàng)建完畢,這里我們將這三個文件進行刪除:


刪除三個文件.png

這個時候租副,我們打開pom.xml文件可以看到坐慰,當(dāng)前工程中僅僅引入了spring-boot-web相關(guān)的jar以及test相關(guān)的jar,但是我們查看maven依賴可以看到用僧,test中使用的jar是junit系列结胀,所以我們需要重新添加testNg依賴,且為了簡化開發(fā)责循,我們這里也依賴lombok糟港,坐標(biāo)如下:

<!--引入testNg-->
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.10</version>
            <scope>test</scope>
        </dependency>

        <!--引入lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.10</version>
            <scope>provided</scope>
        </dependency>

至此,testNg基本集成已經(jīng)完成沼死,我們開始第一個Test類的編寫吧着逐!由于我們的maven依賴作用域范圍為test崔赌,即jar生效范圍在src/test包下生效意蛀,但是由于我們當(dāng)前工程就是為了測試而搭建的工程耸别,這里建議刪除test包或者完全不編寫,而是修改范圍使其在src/main下生效,并且我們將版本號進行統(tǒng)一管理县钥,修改后的依賴如下:

<!-- 版本號管理 -->
<properties>
        <java.version>1.8</java.version>
        <testNg.version>6.10</testNg.version>
        <lombok.version>1.16.10</lombok.version>
    </properties>

.............
<!--引入testNg-->
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>${testNg.version}</version>
        </dependency>

        <!--引入lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
            <scope>provided</scope>
        </dependency>

現(xiàn)在我們開始編寫我們的第一個Test類秀姐,開啟我們的TestNg學(xué)習(xí)之旅吧

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市若贮,隨后出現(xiàn)的幾起案子省有,更是在濱河造成了極大的恐慌,老刑警劉巖谴麦,帶你破解...
    沈念sama閱讀 222,946評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蠢沿,死亡現(xiàn)場離奇詭異,居然都是意外死亡匾效,警方通過查閱死者的電腦和手機舷蟀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來面哼,“玉大人野宜,你說我怎么就攤上這事∧Р撸” “怎么了匈子?”我有些...
    開封第一講書人閱讀 169,716評論 0 364
  • 文/不壞的土叔 我叫張陵,是天一觀的道長闯袒。 經(jīng)常有香客問我虎敦,道長,這世上最難降的妖魔是什么搁吓? 我笑而不...
    開封第一講書人閱讀 60,222評論 1 300
  • 正文 為了忘掉前任原茅,我火速辦了婚禮,結(jié)果婚禮上堕仔,老公的妹妹穿的比我還像新娘擂橘。我一直安慰自己,他們只是感情好摩骨,可當(dāng)我...
    茶點故事閱讀 69,223評論 6 398
  • 文/花漫 我一把揭開白布通贞。 她就那樣靜靜地躺著,像睡著了一般恼五。 火紅的嫁衣襯著肌膚如雪昌罩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,807評論 1 314
  • 那天灾馒,我揣著相機與錄音茎用,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛轨功,可吹牛的內(nèi)容都是我干的旭斥。 我是一名探鬼主播,決...
    沈念sama閱讀 41,235評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼古涧,長吁一口氣:“原來是場噩夢啊……” “哼垂券!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起羡滑,我...
    開封第一講書人閱讀 40,189評論 0 277
  • 序言:老撾萬榮一對情侶失蹤菇爪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后柒昏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凳宙,經(jīng)...
    沈念sama閱讀 46,712評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,775評論 3 343
  • 正文 我和宋清朗相戀三年职祷,在試婚紗的時候發(fā)現(xiàn)自己被綠了近速。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,926評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡堪旧,死狀恐怖削葱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情淳梦,我是刑警寧澤析砸,帶...
    沈念sama閱讀 36,580評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站爆袍,受9級特大地震影響首繁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜陨囊,卻給世界環(huán)境...
    茶點故事閱讀 42,259評論 3 336
  • 文/蒙蒙 一弦疮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蜘醋,春花似錦胁塞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至胎食,卻和暖如春扰才,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背厕怜。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評論 1 274
  • 我被黑心中介騙來泰國打工衩匣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蕾总,地道東北人。 一個月前我還...
    沈念sama閱讀 49,368評論 3 379
  • 正文 我出身青樓琅捏,卻偏偏與公主長得像谤专,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子午绳,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,930評論 2 361

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

  • 一、testNG TestNG是Java中的一個測試框架映之。Java中已經(jīng)有一個JUnit的測試框架了拦焚。 Test...
    DayBreakL閱讀 1,538評論 0 7
  • “開始的開始,我們都是孩子杠输。最后的最后赎败,渴望變成天使。歌謠的歌謠蠢甲,唱著童話的影子僵刮,孩子的孩子,該要飛往哪去……”從...
    西柚女孩閱讀 214評論 0 2
  • 今天鹦牛,讀了一篇文章搞糕,講了一位老人,如何年輕時從哈佛輟學(xué)曼追,如何用50年在紐約的街頭風(fēng)雨無阻窍仰,拍下了一整部紐約的...
    杜爾伯特閱讀 110評論 0 0
  • 2018.4.7 清明 4月5日清明節(jié),去拜山祭祖礼殊,見到了一年前見過的遠(yuǎn)房親戚驹吮,每年也就見這么一個小時,好些還是會...
    Ly漫步閱讀 227評論 0 0
  • 在我們的眼里,讓學(xué)生怨恨的教師一定是打罵婚陪、體罰族沃、惡意訓(xùn)斥或引發(fā)強烈沖突的教師,但可曾想到泌参,一些常常被教師們忽略的或...
    石成玉_d24e閱讀 266評論 0 0