dw做網(wǎng)站一般設為什么樣南安網(wǎng)站建設
jmeter 這個工具既可以做接口的功能測試,也可以做自動化測試,還可以做性能測試,其主要用途就是用于性能測試。但是,有些公司和個人,就想用 jmeter 來做接口自動化測試。
你有沒有想過呢?
下面我就給大家講講,用 jmeter 如何做接口自動化測試。
?jmeter 與接口自動化測試
如果要你用 jmeter 來做接口自動化測試,你是不是把幾乎每一個測試用例,都是用一個取樣器來實現(xiàn)?
相信很多人都是這么想的,也是這么干的。
但是,很遺憾,你這種,是初級入門做法。你能實現(xiàn)所有的測試用例都被執(zhí)行,但是,你寫腳本和維護腳本的時間,可能比你用手工執(zhí)行所有的測試用例時間還要長,而且還可能長很多。
因為,只要開發(fā)人員改了接口一個地方,你得從所有取樣器中,找出與這個接口相關的所有取樣器,然后一一修改,萬一有遺漏,哪出現(xiàn)的失敗,不是 bug,而是你腳本的問題。所以說,這是入門級人干的事情。
那有沒有更好的辦法呢?
平時寫功能測試用例的時候,習慣用 Excel 的同學,可能就會想,我能把自動化測試用例每個信息都寫在 Excel 表格中,然后,使用 jmeter 的 CSV 數(shù)據(jù)文件讀取功能,把它讀取出來執(zhí)行,是不是就可以呢?
這種方法,就比前面的方法好了很多,用例還是用 Excel 來維護,只是使用 jmeter 來讀取,執(zhí)行就可以了。整體的可維護性要好很多很多,工作量也要少很多。
但是,在真正動手去做的時候,我們又會發(fā)現(xiàn),困難重重。
寫過自動化測試用例的同學,應該會有這樣的經(jīng)歷,就是做接口測試時,我們通常會先對某個接口各種參數(shù)進行測試,這樣,接口地址相同,但是參數(shù)不一樣,校驗的接口也一樣。
在做完單個接口之后,我們還會做由多個接口構(gòu)成的業(yè)務測試,這個時候,每個接口地址都不一樣,接口請求的方法也可能不一樣,最后的校驗點,也可能變化,這樣的自動化腳本,應該要怎么寫呢?
第一個對單接口,編寫自動化測試腳本,可能還好實現(xiàn),因為接口相同,那么他的請求方法肯定相同,雖然,請求頭、請求體、校驗信息可能不同,但是,至少還有共同點。
而第二個,對業(yè)務編寫自動化測試腳本,那就很難了,因為幾乎所有的都可能不同,請求的協(xié)議、方法、請求頭、請求體,全都可能不同,而且請求頭和請求體還可能要有動態(tài)值,這個怎么做呢?
萬事開頭難,只怕去實踐。只要你想好了,真正去動手做了,這很多問題,就不那么難了。
有很多事情,我們可以加條件判斷,和循環(huán)控制等邏輯控制器,就可以實現(xiàn)的。
靠我一篇文章,就把它全部寫出來,這是不現(xiàn)實的,所以,今天,主要講一個,被很多同學問到,難倒了一大片好漢的問題。
看到這個問題,你想到什么方法?
實操案例
如果你在 jmeter 中,每個接口寫一個取樣器,這個問題很好解決,直接使用參數(shù)引用就可以解決,但是,這個同學的做法是把測試用例寫在 CSV 文件中,然后使用 jmeter 去讀取 CSV 文件,執(zhí)行測試用例,如何來實現(xiàn)動態(tài)參數(shù)呢?
肯定,有的同學已經(jīng)想到了,使用變量引用,在 CSV 中,按照 jmeter 的寫法,寫引用變量。
好了,給大家一個看一個參考:
這個 CSV 文件中,有兩個不同的接口,說明是做的業(yè)務場景自動化測試,第一個接口,是注冊,那么每次注冊的賬戶肯定不能相同,如果相同了,那么第二次肯定失敗,所以,就使用了隨機函數(shù),讓注冊的賬戶自動生成。
第二個接口是登錄,當然,可以用固定賬戶登錄,但是,我們前面進行注冊,最好還是用前面注冊的賬戶來登錄,這樣更加真實,body 中使用了變量引用,顯然,這是用到了關聯(lián)。
我們用 jmeter 寫個腳本,來運行下,看能否成功。
從腳本來運行情況來看,我們可以取到名稱,地址,和請求體,但是,因為請求體在 CSV 中寫了 jmeter 函數(shù),結(jié)果讀取出來運行時,還是原樣運行,并沒有對請求體中的函數(shù)進行執(zhí)行。
怎么辦呢?
很多人,就卡在這了,不知道怎么辦了。
其實,我們想一下,現(xiàn)在是內(nèi)容讀取出來了,但是內(nèi)容是原樣進行請求,沒有對內(nèi)容中的函數(shù)進行執(zhí)行,現(xiàn)在的問題,只需要解決 body 中的函數(shù),能被運行就可以了。
我們再想下,在 jmeter 中,有哪些可以運行函數(shù)的方法?jexl3 函數(shù)可以,groovy 函數(shù)可以。
Exl3 函數(shù)
jexl3 函數(shù),是要運行一段代碼,返回代碼結(jié)果,我們的 body 是 JSON 格式,顯然不能直接運行,要想運行,還得寫 Java 代碼調(diào)用 JSON 運行才可以,非常復雜。
?
groovy 函數(shù),是要運行一個表達式,顯然,也不行。
那還有沒有其他的函數(shù)呢?eval 函數(shù),這個函數(shù),返回的是字符串表達式運行的結(jié)果。
此時,我們修改下我們 jmeter 中取樣器的請求體。
?
看,運行結(jié)果,函數(shù)被執(zhí)行了,注冊的賬號動態(tài)變化了。
接下來,我們就把第 2 條用例,使用了關聯(lián),也寫出來。
?
現(xiàn)在,我們已經(jīng)實現(xiàn),在 jmeter 中,使用一個取樣器執(zhí)行 2 個不同接口,并且動態(tài)參數(shù)值的自動化運行了。
現(xiàn)在,我們再把斷言加上。
?
注意:斷言中,如果有中文,就要特別注意文件編碼
現(xiàn)在,我們再加大難度,在 CSV 文件中寫個 GET 接口。
?
我們發(fā)現(xiàn),多個接口請求方法不一樣,jmeter 肯定不能用 1 個取樣器了, get 請求沒有 body 參數(shù),但是,請求頭要添加一個 Token 參數(shù)。
是不是一下楞圈了,不知道怎么動了?看懂下面的圖,你就知道怎么做了。
在取樣器的前面增加一個條件判斷,判斷是請求方法,根據(jù)請求方法,執(zhí)行 POST 取樣器或 GET 取樣器
然后,把循環(huán)次數(shù)設置為 CSV 文件條數(shù)一致,其他的地方,應該就比較容易理解了。
END
看最后,多條測試用例,只用 2 個取樣器就搞定了。以后,改動 CSV 文件,可能都不用動 jmeter 腳本,增加測試用例,改下循環(huán)控制器數(shù)量就可以了。
當然,這還不是最完美的,里面還有諸多不足。給想用 jmeter 做接口自動化測試的同學開了個頭,更多的,還需要同學們自己動手,也歡迎同學們,在文章后面留言討論。
注意,這篇文章的技術,只適合在自動化中,不能用這個腳本進行性能測試。
?
最后感謝每一個認真閱讀我文章的人,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:
這些資料,對于【軟件測試】的朋友來說應該是最全面最完整的備戰(zhàn)倉庫,這個倉庫也陪伴上萬個測試工程師們走過最艱難的路程,希望也能幫助到你!有需要的小伙伴可以點擊下方小卡片領取?
?
?