軟件測(cè)試進(jìn)階路線之測(cè)試開(kāi)發(fā)

隨著這兩年測(cè)試行業(yè)的不斷內(nèi)卷,不管工作需要還是不需要,整個(gè)行業(yè)對(duì)測(cè)試人員的要求越來(lái)越高。
以前自動(dòng)化測(cè)試、性能測(cè)試都算是中高級(jí)的測(cè)試技能。
現(xiàn)在自動(dòng)化測(cè)試、性能測(cè)試已經(jīng)成為了測(cè)試人員的標(biāo)配技能了。
你簡(jiǎn)歷上沒(méi)有一個(gè)自動(dòng)化測(cè)試的經(jīng)驗(yàn),不會(huì)一門代碼什么的,找工作的時(shí)候,連簡(jiǎn)歷篩選這一關(guān)都過(guò)不了。
在大環(huán)境的技術(shù)要求不斷的提高的背景下,測(cè)試開(kāi)發(fā)的概念應(yīng)運(yùn)而生。
測(cè)試開(kāi)發(fā)介紹
說(shuō)起來(lái)測(cè)試開(kāi)發(fā)的概念也不算是已經(jīng)很新的概念了,畢竟在17年的時(shí)候我就已經(jīng)知道了什么是測(cè)試開(kāi)發(fā)了。
所謂的測(cè)試開(kāi)發(fā)其實(shí)就是字面意思,測(cè)試人員去做開(kāi)發(fā)。
不過(guò)這里做開(kāi)發(fā),主要指的是測(cè)試人員去開(kāi)發(fā)測(cè)試工具,和開(kāi)發(fā)人員所做的工作并不是一樣的。
開(kāi)發(fā)人員做的開(kāi)發(fā)的工作是圍繞公司的項(xiàng)目需求所進(jìn)行的。
而測(cè)試人員的開(kāi)發(fā)工作是圍繞公司的測(cè)試同事的需求進(jìn)行的。
也就是說(shuō),測(cè)試開(kāi)發(fā)的核心工作是給公司的測(cè)試人員提供定制的測(cè)試工具。
最開(kāi)始的時(shí)候,測(cè)試開(kāi)發(fā)只是給公司定制一些簡(jiǎn)單好用的測(cè)試工具而已,比如現(xiàn)在測(cè)試界比較出名的httprunner就是在這個(gè)時(shí)候做出來(lái)的。
而現(xiàn)在的測(cè)試開(kāi)發(fā)已經(jīng)不再滿足于只是完成一些基本的工具的開(kāi)發(fā),而是圍繞公司的測(cè)試流程和測(cè)試人員的需求,去為公司定制測(cè)試平臺(tái)。
測(cè)試平臺(tái)上面會(huì)集成各種所需要的測(cè)試工具,比如可以通過(guò)測(cè)試平臺(tái)實(shí)現(xiàn)接口測(cè)試,接口自動(dòng)化測(cè)試,性能測(cè)試,測(cè)試環(huán)境的自動(dòng)部署,測(cè)試數(shù)據(jù)的自動(dòng)生成等等功能。
可以讓不懂編程的同事,直接在平臺(tái)上操作,而實(shí)現(xiàn)一些復(fù)雜的測(cè)試過(guò)程。
技術(shù)棧
測(cè)試開(kāi)發(fā)人員的技能要求是沒(méi)有一個(gè)準(zhǔn)確的標(biāo)準(zhǔn)的。
因?yàn)闇y(cè)試平臺(tái)這個(gè)東西一般都是根據(jù)公司測(cè)試團(tuán)隊(duì)的要求進(jìn)行定制的。
不同的功能涉及到的技術(shù)點(diǎn)是不一樣的。
比如,我們要開(kāi)發(fā)一個(gè)測(cè)試平臺(tái),先不管這個(gè)平臺(tái)具體的功能有什么,我們要實(shí)現(xiàn)這么樣的一個(gè)平臺(tái),那么后端、前端、數(shù)據(jù)庫(kù)這些東西是必須要掌握的。
而后端、前端的開(kāi)發(fā)都可以采用各種不同的編程語(yǔ)言或者框架來(lái)實(shí)現(xiàn)。
數(shù)據(jù)庫(kù)也有各種選擇。
而且實(shí)現(xiàn)的平臺(tái)是需要在服務(wù)器上運(yùn)行的,所以Linux、docker、shell等環(huán)境運(yùn)維的知識(shí)點(diǎn)也是需要掌握的。
所以在具體的實(shí)現(xiàn)的過(guò)程中,大家可以選擇自己所擅長(zhǎng)的技術(shù)來(lái)開(kāi)發(fā)。
基本框架的實(shí)現(xiàn)
因?yàn)槲疑瞄L(zhǎng)的python的那一套東西,所以后續(xù)的內(nèi)容都是以python為核心的,當(dāng)然你也可以用其他語(yǔ)言同類型的包來(lái)實(shí)現(xiàn)。
要實(shí)現(xiàn)一個(gè)平臺(tái)首先就是后端的開(kāi)發(fā)。
python也是可以做后端開(kāi)發(fā)的,但是需要使用對(duì)應(yīng)的后端框架,比如flask或者django。
借助后端框架我們可以很快的完成一個(gè)基本接口。
后端有了那么就是數(shù)據(jù)庫(kù)了,總是會(huì)有很多數(shù)據(jù)需要保存的。
比如使用MySQL數(shù)據(jù)庫(kù),這里接口要去操作MySQL,就需要掌握pymysql。
通過(guò)對(duì)pymysql的封裝,實(shí)現(xiàn)接口對(duì)數(shù)據(jù)庫(kù)的增刪改查的操作。
如果后端還要考慮狀態(tài)管理,那么也許還需要使用redis。
而前端的實(shí)現(xiàn),現(xiàn)在基本上都是Vue\react\anglue三大框架。
要掌握這三大框架,又必須先掌握HTML+CSS+JS。
那么搭建一個(gè)最基本的測(cè)試平臺(tái)就得掌握以下內(nèi)容:
python的基本語(yǔ)法
flask/django框架的應(yīng)用
pymysql操作MySQL數(shù)據(jù)庫(kù)
redis操作redis數(shù)據(jù)庫(kù)
MySQL存儲(chǔ)數(shù)據(jù)
redis存儲(chǔ)用戶緩存
html+css+JavaScript
vue的基本語(yǔ)法
vue-router路由操作
vuex頁(yè)面狀態(tài)管理
axios調(diào)用接口
linux操作系統(tǒng)
nginx
gunicorn
實(shí)現(xiàn)接口測(cè)試
基本的平臺(tái)框架起來(lái)后,就需要實(shí)現(xiàn)具體的測(cè)試功能,而最常見(jiàn)的就是直接在平臺(tái)上實(shí)現(xiàn)一個(gè)接口測(cè)試的功能。
這里你可以理解成是直接實(shí)現(xiàn)了一個(gè)網(wǎng)頁(yè)版的postman。
可能這個(gè)時(shí)候就有人問(wèn)了,postman或者apifox之類的接口測(cè)試工具那么好用,為啥還需要自己去實(shí)現(xiàn)一個(gè)接口測(cè)試工具呢?
因?yàn)槭褂玫谌降臏y(cè)試工具,對(duì)于不同的測(cè)試資源的管理是分散的,每個(gè)人都在自己的電腦上的工具去完成對(duì)應(yīng)的工作,
對(duì)工作進(jìn)度的把控不直觀,對(duì)團(tuán)隊(duì)協(xié)作的內(nèi)容管理也不方便,每個(gè)人寫(xiě)好了腳本后,還需要單獨(dú)進(jìn)行管理。
所以做到平臺(tái)上,就可以一目了然的看到了。
而且apifox、postman等工具有不少的功能對(duì)于不少團(tuán)隊(duì)來(lái)說(shuō)有些多余,或者在某些細(xì)節(jié)上不能滿足測(cè)試團(tuán)隊(duì)的需求,
所以就需要單獨(dú)的開(kāi)發(fā)一套接口測(cè)試工具。
而完成一個(gè)接口測(cè)試工具最基本的技能要求就是掌握requests的應(yīng)用。通過(guò)requests就可以實(shí)現(xiàn)對(duì)接口的操作。
可能公司已經(jīng)存在了一些接口的測(cè)試用例了,有可能在excle表里,也有可能在postman、jemter、apifox里面,
所以就需要平臺(tái)具備導(dǎo)入導(dǎo)出的功能。openpyxl就是用于excle文件的讀寫(xiě)的,yaml、json也是用于對(duì)應(yīng)格式的文件的操作。
所以要實(shí)現(xiàn)接口測(cè)試工具,必備的技能就是以下的python第三方包的應(yīng)用。
requests調(diào)用接口
openpyxl讀取excle文件
yaml格式的用例讀寫(xiě)
json文件的轉(zhuǎn)換
實(shí)現(xiàn)接口自動(dòng)化測(cè)試
接口測(cè)試和接口自動(dòng)化測(cè)試最主要的區(qū)別就是接口測(cè)試只需要關(guān)心單個(gè)接口的運(yùn)行結(jié)果。
而接口自動(dòng)化測(cè)試,就難免需要考慮接口的參數(shù)和響應(yīng)的互相關(guān)聯(lián)。
如果從0開(kāi)始自己去實(shí)現(xiàn)這么一套工具肯定是很難的,所以這里我們可以直接使用httprunner來(lái)實(shí)現(xiàn)接口的數(shù)據(jù)關(guān)聯(lián)和批量運(yùn)行。
接口自動(dòng)化測(cè)試工具的原理一般都是采用數(shù)據(jù)驅(qū)動(dòng)的方式來(lái)實(shí)現(xiàn)的。
所以要實(shí)現(xiàn)一套接口自動(dòng)化測(cè)試工具,除了httprunner外,還需要掌握對(duì)數(shù)據(jù)的操作。
而數(shù)據(jù)在平臺(tái)里,就可以通過(guò)多種方式來(lái)記錄。
比如excle文件直接導(dǎo)入到系統(tǒng)中,又比如直接從數(shù)據(jù)庫(kù)中讀取。
所以這里我們就需要掌握以下python的第三方的包。
httprunner
openpyxl
pymysql
實(shí)現(xiàn)性能測(cè)試
對(duì)于性能測(cè)試,雖然python也有做性能測(cè)試的包,locustIo,雖然locustIo確實(shí)也很好用,但是業(yè)界采用locustIo來(lái)做性能測(cè)試的團(tuán)隊(duì)確實(shí)很少。
所以這里我們有多種方案去實(shí)現(xiàn)性能測(cè)試工具。
第一種就是直接對(duì)locustIo進(jìn)行二次封裝,好處是locustIo天生就支持接口測(cè)試用例的使用,不需要重復(fù)的編寫(xiě)測(cè)試用例,但是缺點(diǎn)也十分的明顯,只能在平臺(tái)所在的服務(wù)器去運(yùn)行性能測(cè)試。
所以很可能會(huì)因?yàn)閮?nèi)存占用過(guò)高而導(dǎo)致平臺(tái)直接崩潰。
第二種是通過(guò)shell腳本的方式,使用ssh協(xié)議遠(yuǎn)程操控jmeter,而且可以借助docker實(shí)現(xiàn)在任意服務(wù)器上去快速部署性能測(cè)試環(huán)境。
所以要在平臺(tái)上實(shí)現(xiàn)性能測(cè)試的效果,就必須掌握以下技能。
jmeter
shell
locustIo
docker
linux
paramiko
實(shí)現(xiàn)測(cè)試環(huán)境的部署
在測(cè)試的過(guò)程中,每次開(kāi)發(fā)發(fā)版,都需要重新去部署更新測(cè)試環(huán)境,如果公司沒(méi)有使用持續(xù)集成工具來(lái)自動(dòng)化部署,手工部署的過(guò)程是很難受的。
所以大多數(shù)的公司都會(huì)使用類似于Jenkins的工具來(lái)實(shí)現(xiàn)自動(dòng)化部署環(huán)境。
但是Jenkins等工具能實(shí)現(xiàn)的只是代碼的更新,等部署完成后,還需要測(cè)試手動(dòng)去刪除歷史的垃圾文件或者數(shù)據(jù)。
而我們自己去實(shí)現(xiàn)的測(cè)試環(huán)境部署的工具就可以不受這個(gè)限制。
我們可以利用git自動(dòng)的拉取最新的代碼,編譯打包,然后制作docker鏡像,然后根據(jù)設(shè)定好的配置信息自動(dòng)化的服務(wù)器上完成環(huán)境部署。
并且可以選擇是否對(duì)測(cè)試環(huán)境中的數(shù)據(jù)進(jìn)行初始化,一鍵完成測(cè)試環(huán)境的初始化,
讓每一次測(cè)試迭代都擁有一個(gè)干干凈凈的環(huán)境,以此來(lái)避免測(cè)試的時(shí)候因?yàn)槔鴶?shù)據(jù)導(dǎo)致的問(wèn)題。
要實(shí)現(xiàn)這個(gè)過(guò)程,我們就必須掌握以下知識(shí)點(diǎn)。
git
github/gitlab/gitee
docker
mysql
測(cè)試數(shù)據(jù)的生成
在我們的測(cè)試過(guò)程中 ,經(jīng)常都會(huì)去制造我們需要的測(cè)試數(shù)據(jù)。
根據(jù)不同的需要,手動(dòng)的去制造測(cè)試數(shù)據(jù),只能夠在頁(yè)面上通過(guò)被測(cè)項(xiàng)目的功能去制造所需要的數(shù)據(jù)。
聽(tīng)起來(lái)這個(gè)過(guò)程就是十分的枯燥和麻煩的。
所以測(cè)試數(shù)據(jù)的生成功能也是必不可少的。
根據(jù)項(xiàng)目的實(shí)際情況,去定制生成測(cè)試數(shù)據(jù)的功能,只需要輸入所需要的數(shù)據(jù)量,就可以一鍵生成測(cè)試數(shù)據(jù)了,非常的方便。
要實(shí)現(xiàn)這個(gè)功能也是十分的簡(jiǎn)單的,我們既可以直接在數(shù)據(jù)庫(kù)中插入數(shù)據(jù),也可以調(diào)用被測(cè)項(xiàng)目的接口去批量的生成。
所以這里我們需要掌握的技術(shù)就有以下幾點(diǎn):
random
time
requests
pymysql
實(shí)現(xiàn)消息推送
不管是什么工具,在執(zhí)行完功能后都是需要告訴我們結(jié)果的。
不論是接口自動(dòng)化測(cè)試、性能測(cè)試、環(huán)境部署,在運(yùn)行了對(duì)應(yīng)的功能后,都是需要一定的時(shí)間去完成的。
我們不可能守著平臺(tái)等結(jié)果,所以我們就需要一個(gè)能及時(shí)通知我們的方式。
而釘釘、企業(yè)微信就是目前最佳的選擇。
我們可以利用釘釘、企業(yè)微信的機(jī)器人,實(shí)現(xiàn)自動(dòng)的把結(jié)果推送到我們的手機(jī)上。
讓相關(guān)的同事都可以及時(shí)的都是運(yùn)行結(jié)果。
釘釘機(jī)器人
企業(yè)微信機(jī)器人
requests
總結(jié)
在上述的內(nèi)容中,我們所描述的只是一些通用的測(cè)試平臺(tái)的功能,除了這些常見(jiàn)的以為,不同的公司根據(jù)項(xiàng)目的特點(diǎn)不同,還會(huì)有更多的定制化的需求。
不過(guò),在掌握了以上的內(nèi)容后,我相信不管是什么需求,大家都是有能力去完成實(shí)現(xiàn)的。
希望大家在軟件測(cè)試的路上不要停步不前,堅(jiān)持學(xué)習(xí),提升自己,不斷向前。