開發(fā)測試平臺難嗎?
有挺長一段時(shí)間沒出來正兒八經(jīng)的分享干貨了,今天登錄后臺一看,關(guān)注人數(shù)居然沒掉還增了不少,這讓我有些慚愧,暗自覺得有必要抽空繼續(xù)寫作下去,給關(guān)注我的朋友們帶來一點(diǎn)價(jià)值。
關(guān)于近況?
來深圳有1年零8個(gè)月了。這期間一直在做著測試開發(fā)相關(guān)的工作,很感激又積累了一些大廠經(jīng)驗(yàn)(解釋下我還在的,沒有潤)。業(yè)內(nèi)的裁員消息此起彼伏,雖然不乏各種自媒體和XX平臺的焦慮話題熱炒,但確實(shí)感覺卷的又更厲害了,體驗(yàn)比之前差了一些,但大環(huán)境如此卻又好像無可奈何(聽說讀書可以破萬卷),做好當(dāng)下,以不變應(yīng)萬變。
關(guān)于主題?
以前我喜歡寫純技術(shù)主題的內(nèi)容,這種知識分享確實(shí)簡單明了,別人拿來就可以用,但是對于我來說總有技術(shù)話題枯竭的時(shí)候(其實(shí)是水平有限,江郎才盡,沒得寫了),所以后面可能會(huì)嘗試各種主題風(fēng)格,當(dāng)然核心還是測試開發(fā)相關(guān)技術(shù),只為了找到一個(gè)比較舒適的表達(dá)和分享方式(比如今天這種)。
說點(diǎn)有價(jià)值的?
之前在交流群里,聽到很多同學(xué)在問如何開發(fā)測試平臺,需要什么知識?開發(fā)測試平臺——曾經(jīng)這是很多業(yè)務(wù)線測試er心中難以逾越的技術(shù)高度,包括當(dāng)初我也是,可是隨著工程技能的提高(注意我說的是工程技能),發(fā)現(xiàn)這并不是很復(fù)雜的事情。
為什么我用的是工程技能?而不是編程技能?
后面接觸很多同事和圈內(nèi)人士才發(fā)現(xiàn),其實(shí)只要是這個(gè)行業(yè)內(nèi)大家的編程基礎(chǔ)都不算差,if - else - for - while 大家都懂,可是為什么實(shí)踐起來就犯難了呢?其實(shí)就是缺乏工程能力,不知道怎么去搭建工程、拆解模塊、分析程序業(yè)務(wù)……
工程能力就好比房子的設(shè)計(jì)和搭框架結(jié)構(gòu)的能力,編程實(shí)現(xiàn)就好比給房子結(jié)構(gòu)里面添磚加瓦,總的來說工程能力是包含了一定的設(shè)計(jì)和架構(gòu)能力的,需要有全局的思維,不僅僅只是盯著編程實(shí)現(xiàn)。具體表現(xiàn)為解決下面幾個(gè)問題:
1、技術(shù)如何選型?
要實(shí)現(xiàn)這個(gè)功能或平臺之前,你得先確定用什么編程語言、用什么框架、用什么來存儲(chǔ)……?這就是技術(shù)選型,你需要結(jié)合你自身或團(tuán)隊(duì)的技術(shù)棧來選擇合適的語言和框架。
2、業(yè)務(wù)模塊如何拆解?
為啥要拆解,主要是兩方面考慮,一是用于業(yè)務(wù)分析,編程也要對應(yīng)具體的業(yè)務(wù)需求,如果不拆解分析,稍微復(fù)雜點(diǎn)的業(yè)務(wù),就容易導(dǎo)致邏輯不清、流程不明,實(shí)現(xiàn)全靠感覺,這樣功能的實(shí)現(xiàn)后不就是災(zāi)難嗎?二是用于團(tuán)隊(duì)開發(fā)模式,團(tuán)隊(duì)成員分工和工時(shí)評估都是基于這些。
3、工程結(jié)構(gòu)如何搭建?
前面準(zhǔn)備工作都完成了,現(xiàn)在要具體的實(shí)施了,工程結(jié)構(gòu)如何搭建呢?打開IDE,從創(chuàng)建項(xiàng)目開始,根據(jù)你的項(xiàng)目特點(diǎn)(比如web項(xiàng)目、純后臺項(xiàng)目、多平臺項(xiàng)目等)選擇不同的項(xiàng)目類型(通常IDE都會(huì)根據(jù)你的項(xiàng)目類型自動(dòng)給你生成項(xiàng)目結(jié)構(gòu))。
各種語言各種項(xiàng)目模式,不過核心就只有一個(gè):前臺負(fù)責(zé)展示,后臺負(fù)責(zé)數(shù)據(jù)和計(jì)算。基于這個(gè)核心不管你什么花里胡哨的模式,都逃不過這個(gè)工程結(jié)構(gòu):
common層:放一些通用方法、類,比如errors、常量等
controller層:控制器層,放跟前臺交互的接口映射入口和路由
service層:可以理解是controller的具體業(yè)務(wù)邏輯實(shí)現(xiàn)層,包含與dao層的數(shù)據(jù)交互
dao層:數(shù)據(jù)層,包含models模型數(shù)據(jù)定義等,跟db或緩存之類的crud操作
utils層:工具類,也可以放common里面
4、基于結(jié)構(gòu)編碼實(shí)現(xiàn)
前期編碼實(shí)現(xiàn)可以就按著結(jié)構(gòu)去寫就行了,即使有冗余代碼和結(jié)構(gòu)也沒關(guān)系,等你多實(shí)踐幾次熟練后,可以結(jié)合編程的設(shè)計(jì)理念(各種繼承、多態(tài)、聚合、封裝等)來優(yōu)化你的代碼。
5、前后臺如何關(guān)聯(lián)?
有些同學(xué)可能對前后臺是如何交互的還不太了解,那么你打開一個(gè)web頁面,按下F12顯示出開發(fā)者工具欄,再刷新下頁面在右側(cè)網(wǎng)絡(luò)tab可以看到各種請求,這些請求除去資源類,其他基本都是與后臺交互的http請求。
目前最常見的就是前后臺分離的交互模式,前臺負(fù)責(zé)渲染和展示,后臺提供接口來實(shí)現(xiàn)數(shù)據(jù)和業(yè)務(wù)邏輯,前臺通過請求接口向后臺拉取數(shù)據(jù)。
6、服務(wù)如何部署?
前后臺服務(wù)都寫好了,以web服務(wù)為例,這時(shí)候你發(fā)現(xiàn)請求的都是ip:端口的方式,對外使用還是不夠方便,這就還需要綁定域名,通過再啟動(dòng)一個(gè)nginx反向代理服務(wù)來綁定域名和前后臺服務(wù)的ip,這樣就能通過域名友好的訪問了。
注:當(dāng)然上述幾個(gè)問題單獨(dú)拎出來每個(gè)都能寫一篇大長文,這里作為引入就點(diǎn)到為止,后續(xù)可以慢慢鋪開寫。
