性能測(cè)試新手誤區(qū)(四):一切來(lái)自錄制
性能測(cè)試新手誤區(qū)(二):為什么我模擬的百萬(wàn)測(cè)試數(shù)據(jù)是無(wú)效的?
性能測(cè)試新手誤區(qū)(三):用戶(hù)數(shù)與壓力
經(jīng)常會(huì)有性能測(cè)試新手問(wèn)這樣的問(wèn)題:
C/S的系統(tǒng)如何錄制,應(yīng)該選擇什么協(xié)議呢?
待測(cè)系統(tǒng)A的一個(gè)功能,是由B系統(tǒng)調(diào)用的,也需要搭建B系統(tǒng)的測(cè)試環(huán)境并對(duì)其錄制么?
我的回答是,先弄清楚你想測(cè)的是什么?對(duì)它而言,壓力又是什么?
新手總是想著如何錄制客戶(hù)端的操作,如何模擬客戶(hù)端的點(diǎn)擊。這種想法應(yīng)該是受到了主流測(cè)試工具影響,性能測(cè)試的入門(mén)基本都是從工具開(kāi)始,比如使用最廣的 LR,其最方便好用的功能應(yīng)該就是錄制了。但是需要清楚的是,錄制只是為性能測(cè)試提供便利的一個(gè)功能(可以傻瓜式的產(chǎn)生向服務(wù)器施加壓力的腳本),錄制本 身并不是性能測(cè)試的根本或者所必需,能夠產(chǎn)生壓力的那些腳本或是程序才是關(guān)鍵所在。
第一個(gè)問(wèn)題,比如一個(gè)即時(shí)通訊類(lèi)的軟件如何測(cè)試?
首先要明確你想測(cè)的是客戶(hù)端還是服務(wù)端,如果是服務(wù)端,那么服務(wù)端承受的壓力是什么呢?
是每一條消息都要經(jīng)過(guò)服務(wù)器么?
服務(wù)器是要將消息進(jìn)行存儲(chǔ),還是僅僅轉(zhuǎn)發(fā)?
不同的功能,如普通會(huì)話(huà)和多人會(huì)話(huà),從服務(wù)端來(lái)看的區(qū)別是什么?
客戶(hù)端是如何同服務(wù)端通信的,是采用了一些標(biāo)準(zhǔn)的開(kāi)源協(xié)議(如XMPP),還是經(jīng)過(guò)了自己的重新擴(kuò)展?
……
為了回答那兩個(gè)看似很簡(jiǎn)單的問(wèn)題(想測(cè)什么?壓力是什么?),其實(shí)你需要了解整個(gè)系統(tǒng)的運(yùn)行方式。這些信息完全可以從一些設(shè)計(jì)文檔或者開(kāi)發(fā)人員的口中獲取到,并不需要你能讀懂源碼。
如果我知道了這個(gè)軟件使用了XMPP協(xié)議,一條普通的會(huì)話(huà)是客戶(hù)端向服務(wù)器發(fā)送了這樣一條信息:
消息類(lèi)型:普通 接收人:A 消息內(nèi)容:XXX |
而多人會(huì)話(huà)是客戶(hù)端發(fā)送了這樣的信息:
消息類(lèi)型:多人 接收人:A, B, C 消息內(nèi)容:XXX |
那么應(yīng)該會(huì)知道,表面上這些不同的功能,其實(shí)只是客戶(hù)端發(fā)送信息中個(gè)別字段的區(qū)別而已。那么我就可以想辦法直接向服務(wù)器發(fā)送這些信息,讓服務(wù)器根據(jù)接收 信息的內(nèi)容去完成相應(yīng)的功能。也許根本沒(méi)有必要去想如何錄制客戶(hù)端發(fā)起一個(gè)會(huì)話(huà)并發(fā)送消息這個(gè)動(dòng)作,或者發(fā)送文件、群消息等等其他操作。
至于如何實(shí)現(xiàn),如果你有編碼能力,可以將開(kāi)源代碼引入到自己的測(cè)試代碼中(需是標(biāo)準(zhǔn)協(xié)議),否者可能需要讓程序的開(kāi)發(fā)人員實(shí)現(xiàn)一個(gè)測(cè)試程序。不 要不敢開(kāi)口,開(kāi)發(fā)人員協(xié)助進(jìn)行性能測(cè)試是很正常的,而且這種工作量不會(huì)很大,只是把程序中的一些代碼封裝成一個(gè)可配置可方便調(diào)用的執(zhí)行文件。
讓開(kāi)發(fā)人員來(lái)實(shí)現(xiàn)測(cè)試工具不丟臉,怕的是你自己不知道測(cè)試工具應(yīng)該實(shí)現(xiàn)成什么樣。(當(dāng)然,如果自己可以看源碼來(lái)實(shí)現(xiàn)工具那就更好了)
第二個(gè)問(wèn)題,同樣的,所謂的B系統(tǒng)調(diào)用A系統(tǒng)這個(gè)動(dòng)作,是如何實(shí)現(xiàn)的?
會(huì)不會(huì)只是一個(gè)簡(jiǎn)單的HTTP請(qǐng)求?
或者是調(diào)用A系統(tǒng)的一個(gè)webservice接口?
你要測(cè)的是A的這個(gè)功能么?
如果是,那我們?yōu)槭裁匆欢ㄒㄟ^(guò)B系統(tǒng)來(lái)錄制這A的這個(gè)功能呢?完全可以直接向A發(fā)送請(qǐng)求或者是調(diào)用接口(如LR中的webservice協(xié)議)。
至于具體如何做,可能有很多現(xiàn)成的接口測(cè)試工具,也可能仍然需要開(kāi)發(fā)人員的協(xié)助。比如B與A之間傳遞的數(shù)據(jù)是經(jīng)過(guò)加密的,那對(duì)(黑盒)測(cè)試來(lái)說(shuō)就會(huì)非常困難,這種情況下,確實(shí)有可能通過(guò)B來(lái)錄制會(huì)更簡(jiǎn)單。
在51Testing上看到的一個(gè)問(wèn)題,問(wèn)如何測(cè)試一個(gè)統(tǒng)計(jì)報(bào)表的另存為(excel)功能。
點(diǎn)這個(gè)按鈕后,服務(wù)器會(huì)生成一張報(bào)表,然后彈出瀏覽器的另存為對(duì)話(huà)框,保存為本地文件。提問(wèn)題的這個(gè)人遇到的困難是,LR中好像沒(méi)法錄制“另存為”這個(gè)動(dòng)作。
之所以會(huì)有這樣的問(wèn)題,根本原因還是沒(méi)有理解系統(tǒng)的運(yùn)行原理,沒(méi)有區(qū)分哪是服務(wù)器、哪是客戶(hù)端。
一般來(lái)說(shuō),這個(gè)過(guò)程是這樣的:
1、點(diǎn)另存為按鈕時(shí),向服務(wù)器發(fā)送了一個(gè)計(jì)算報(bào)表的請(qǐng)求,這個(gè)請(qǐng)求中會(huì)包含一些參數(shù),如報(bào)表類(lèi)型、統(tǒng)計(jì)時(shí)間等等。
2、服務(wù)器計(jì)算完成后,將結(jié)果數(shù)據(jù)返回給客戶(hù)端(瀏覽器)。
3、瀏覽器本身的功能,將數(shù)據(jù)保存為一個(gè)本地文件。
(這里假設(shè)了計(jì)算過(guò)程是另存為按鈕觸發(fā)的,如果是打開(kāi)頁(yè)面時(shí)就計(jì)算完,那點(diǎn)按鈕時(shí)甚至有可能根本沒(méi)與服務(wù)器進(jìn)行交互)
如果明白了這個(gè)過(guò)程,那么就不會(huì)糾結(jié)于錄制“另存為”這種事情了,你要做的只是向服務(wù)器發(fā)送一個(gè)請(qǐng)求,然后接收響應(yīng)數(shù)據(jù)。
那么就不需要生成本地文件了么?當(dāng)然不是,否則怎么驗(yàn)證返回的數(shù)據(jù)沒(méi)有問(wèn)題呢。只不過(guò)這個(gè)文件的操作需要自己來(lái)實(shí)現(xiàn)了,創(chuàng)建文件、寫(xiě)入數(shù)據(jù)、關(guān)閉文件。
最后再總結(jié)一下要點(diǎn):
● 理解系統(tǒng)的運(yùn)行原理
● 區(qū)分服務(wù)端和客戶(hù)端
● 弄清楚你要測(cè)的是什么,哪些東西其實(shí)是可有可無(wú)的
● 要模擬的是服務(wù)器的壓力,而不是客戶(hù)端的操作
● 錄制只是一種手段,很多情況下并不是最佳選擇
● 開(kāi)發(fā)人員的協(xié)助是應(yīng)當(dāng)?shù)模疤崾悄阋鞔_的知道應(yīng)該如何測(cè)試
相關(guān)鏈接:
性能測(cè)試新手誤區(qū)(一):找不到測(cè)試點(diǎn),不知為何而測(cè)
性能測(cè)試新手誤區(qū)(二):為什么我模擬的百萬(wàn)測(cè)試數(shù)據(jù)是無(wú)效的?
posted on 2012-09-17 10:16 順其自然EVO 閱讀(222) 評(píng)論(0) 編輯 收藏 所屬分類(lèi): 性能測(cè)試