由于公司架構(gòu)升級,之前的測試方法跟不上開發(fā)進(jìn)度需要屎篱,所以使用jmeter做自動化接口測試服赎。為配合后階段的回歸測試,jmeter選用3.0版本交播。此筆記旨在記錄3.0中的一些坑重虑,日常如何使用不再記錄。
數(shù)據(jù)庫外置
jmeter做自動化時(shí)秦士,同一個(gè)腳本根據(jù)不同的環(huán)境會有不同的數(shù)據(jù)庫配置缺厉,為避免頻繁的修改腳本,將數(shù)據(jù)庫鏈接作為單獨(dú)的腳本外置之后會方便很多隧土。
數(shù)據(jù)庫外置的實(shí)現(xiàn)是通過將數(shù)據(jù)庫配置信息單獨(dú)作為一個(gè)腳本存在提针,在需要引用的腳本中引入即可。
數(shù)據(jù)庫外置腳本:
線程組-->配置元件-->JDBC Connection Configuration(填寫必要的數(shù)據(jù)庫配置信息曹傀,Variable Name與引用腳本中JDBC Request的Variable Name名稱保持一致)
主腳本(引用數(shù)據(jù)庫的腳本):
線程組-->邏輯控制器-->Include Controller(文件名處傳入數(shù)據(jù)庫腳本路徑)
文件上傳
文件上傳提供了單張和批量兩個(gè)接口辐脖,使用數(shù)據(jù)流和MultipartFile(multipart/form-data)方式實(shí)現(xiàn)。下述方式方式實(shí)現(xiàn)基于圖片格式(jpg皆愉、png嗜价、pdf、zip)幕庐。
數(shù)據(jù)流
線程組-->HTTP請求-->HTTP請求體(Files Upload)
Files Upload參數(shù):
文件名稱:要上傳文件的路徑(絕對路徑久锥,這里的路徑可以進(jìn)行參數(shù)化進(jìn)行傳遞,數(shù)據(jù)更改腳本修改量少)
參數(shù)名稱:
代碼中實(shí)現(xiàn)文件上傳的參數(shù)(可以使用抓包工具抓取翔脱,這里不需要參數(shù)奴拦,參數(shù)名稱為空)
MIME類型:
| MIME 類型? ? | 圖片類型? ? ? ? ? ? ? ? ? ? ? ? ? ? |
| ------------- | ------------------------------------ |
| image/gif? ? | GIF 圖片 (無損耗壓縮方面被PNG所替代) |
| image/jpeg? ? | JPEG 圖片? ? ? ? ? ? ? ? ? ? ? ? ? ? |
| image/png? ? | PNG 圖片? ? ? ? ? ? ? ? ? ? ? ? ? ? |
| image/svg+xml | SVG圖片 (矢量圖)? ? ? ? ? ? ? ? ? ? |
MultipartFile
MultipartFile的實(shí)現(xiàn)和數(shù)據(jù)流基本一致,只是Files Upload中參數(shù)名稱為file届吁,多個(gè)文件添加多個(gè)參數(shù)即可错妖。
文件名稱參數(shù)化
在代碼提交回歸腳本時(shí),我們的腳本通常不是存放在本地疚沐,而是上傳服務(wù)器暂氯,觸發(fā)流水線去自動執(zhí)行,文件的路徑就只能去獲取服務(wù)器的路徑亮蛔。我們可以通過參數(shù)化文件名稱去實(shí)現(xiàn)痴施。
Files Upload中文件名稱參數(shù)化通過自定義變量和BeanShell Sampler 調(diào)用FileServer來實(shí)現(xiàn)。
自定義變量中定義文件相對于腳本文件的相對路徑,F(xiàn)ileServer獲取當(dāng)前腳本的絕對路徑辣吃,拼接實(shí)現(xiàn)文件訪問的絕對路徑(具體拼接方式以自定義變量的路徑和腳本路徑相對位置為準(zhǔn))动遭。
實(shí)例目錄層級:
- folder
? - csv
? ? - test.jpg
? - script
? ? - xxx.jmx
自定義變量:
| 名稱? ? | 值? ? ? ? ? ? ? | Description |
| ------- | --------------- | ----------- |
| imgfile | ../csv/test.jpg |? ? ? ? ? ? |
BeanShell Sampler:
import org.apache.jmeter.services.FileServer;
//獲取當(dāng)前腳本路徑
String baseDir = FileServer.getFileServer().getBaseDir();
//拼接腳本路徑和文件路徑
String imgFilePath = baseDir + "/" +? vars.get("imgfile");
//賦值傳遞
vars.put("imgFilePath", imgFilePath);