摘要:注意名稱和在請求中的名稱保持一致。表示數(shù)組表示第一個(gè)表示跟節(jié)點(diǎn)后的第一個(gè)對象。文件下載文件下載步驟首先文件下載接口請求信息填寫完全然后右鍵點(diǎn)擊線程組添加或者右鍵點(diǎn)擊線程組添加后置處理器。大寫結(jié)果默認(rèn)為。
一、Jmeter總結(jié)
1.響應(yīng)結(jié)果亂碼問題
(1)方案一
修改如下圖:
(2)方案二
2.修改默認(rèn)語言
3.接口返回?cái)?shù)據(jù)中文為Unicode(萬國碼/統(tǒng)一碼)轉(zhuǎn)中文
(1)步驟如下
1.添加一個(gè)后置處理器(BeanShell PostProcessor)
2.編寫轉(zhuǎn)譯方法
3.保存,運(yùn)行
(2)代碼如下
String s2=new String(prev.getResponseData(),“UTF-8”);
//---------------一下步驟為轉(zhuǎn)碼過程---------------
char aChar;
int len= s2.length();
StringBuffer outBuffer=new StringBuffer(len);
for(int x =0; x
aChar= s2.charAt(x++);
if(aChar==’/’){
aChar= s2.charAt(x++);
if(aChar==‘u’){
int value =0;
for(int i=0;i<4;i++){
aChar= s2.charAt(x++);
switch(aChar){
case’0’:
case’1’:
case’2’:
case’3’:
case’4’:
case’5’:
case’6’:
case’7’:
case’8’:
case’9’:
value=(value <<4)+aChar-‘0’;
break;
case’a’:
case’b’:
case’c’:
case’d’:
case’e’:
case’f’:
value=(value <<4)+10+aChar-‘a(chǎn)’;
break;
case’A’:
case’B’:
case’C’:
case’D’:
case’E’:
case’F’:
value=(value <<4)+10+aChar-‘A’;
break;
default:
throw new IllegalArgumentException(
“Malformed /uxxxx encoding.”);}}
outBuffer.append((char) value);}else{
if(aChar==‘t’)
aChar=’/t’;
else if(aChar==‘r’)
aChar=’/r’;
else if(aChar==‘n’)
aChar=’/n’;
else if(aChar==‘f’)
aChar=’/f’;
outBuffer.append(aChar);}}else
outBuffer.append(aChar);}
//-----------------以上內(nèi)容為轉(zhuǎn)碼過程---------------------------
//將轉(zhuǎn)成中文的響應(yīng)結(jié)果在查看結(jié)果樹中顯示
prev.setResponseData(outBuffer.toString());
————————————————
原文鏈接:https://blog.csdn.net/weixin_42675206/article/details/81064257
4.cookie管理器保存登錄后的cookie信息(跳過登錄過程,測試后續(xù)接口)
把這個(gè)表里的所有數(shù)據(jù)的名稱、域名、路徑、值都一一寫到cookie管理器里,如下圖jmeter的這個(gè)位置
注意:名稱、值、域 必填,路徑可不填寫
(1)進(jìn)階:批量獲取cookie信息,跨線程組傳遞
1.設(shè)置配置文件使Cookie管理器保存cookie信息。
修改apache-jmeter-5.2.1/bin/jmeter.properties文件,把CookieManager.save.cookies設(shè)置為true,并去掉前面的注釋#號,如下圖所示:
修改完成后保存,退出,并重啟jmeter。
2.在調(diào)試取樣器和請求中查看具體的cookie信息
在線程組中添加HTTP Cookie 管理器,運(yùn)行測試計(jì)劃后,HTTP Cookie 管理器會(huì)自動(dòng)存儲(chǔ)這些cookie,變量名稱為COOKIE_XXX,XXX對應(yīng)的是cookie的名稱,可以添加【調(diào)試取樣器】來查看自動(dòng)存儲(chǔ)的cookie值,如下圖所示:
下圖中有兩個(gè)cookie值分別為:COOKIE_z92_lastvisit何COOKIE_z92_visitor
這里要注意一下,有時(shí)候你會(huì)發(fā)現(xiàn)這里的cookie不全,所以比較保險(xiǎn)的做法下,進(jìn)入第一個(gè)請求中查看request body中的cookie值。如下圖所示:下圖中有三個(gè)cookie值分別為:z92_visitor和z92_lastvisit以及csrf_token三個(gè)值。這里比前者多了一個(gè)cookie值。
3.設(shè)置cookie為全局變量
在BeanShell后置處理程序中使用__setProperty()函數(shù)將COOKIE_XXXX設(shè)置為全局變量。如下圖所示:
4獲取并存儲(chǔ)Cookie
在HTTP Cookie管理器中通過__P()函數(shù)獲取全局變量Cookie,并加入到Cookie管理器中。注意名稱和在請求中的cookie名稱保持一致。如下圖的z92_visitor和z92_lastvisit以及csrf_token三個(gè)值。
5.jmeter腳本錄制
①創(chuàng)建線程組-創(chuàng)建HTTP代理服務(wù)器-修改端口號
②添加排除模式
(懶得手打的跳轉(zhuǎn) 復(fù)制粘貼:https://blog.csdn.net/qq_42293487/article/details/83822604)
③查看本機(jī)IP(命令框輸入:ipconfig)記住ip地址
④配置瀏覽器代理
在代理框輸入第三步記住的ip地址,端口號填寫8888,與jmeter修改的端口號保持一致(因?yàn)闉g覽器不同,所以入口不一樣,但是設(shè)置的步驟是一樣的)
第五步。點(diǎn)擊啟動(dòng),啟動(dòng)之后去剛剛的瀏覽器中操作你要抓包的網(wǎng)站就可以了。(必須要點(diǎn)擊啟動(dòng)以后,你的瀏覽器才能訪問網(wǎng)絡(luò))
原文鏈接:https://blog.csdn.net/qq_42293487/article/details/88105978
6.windows下Jmeter壓測端口占用問題
百度查找有的是解決方法
https://blog.csdn.net/weixin_43757847/article/details/88188091?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control
7.引用外部文件
(1)引用jar包
一、測試計(jì)劃中添加目錄或jar包到Classpath
操作:測試計(jì)劃->添加目錄或jar包到Classpath–>瀏覽導(dǎo)入jar包
優(yōu)點(diǎn):操作便捷
缺點(diǎn):1)可移植性差;2)jar包較多時(shí)不好管理
二、將需要引用的jar包放在jmeter的extras目錄下
操作:將jar包放在jmeter安裝目錄apache-jmeter-5.0/extras下
優(yōu)點(diǎn):比方法1可移植性強(qiáng)一點(diǎn)
缺點(diǎn):有些jar包放在extras下加載不到,需要放在apache-jmeter-5.0/lib目錄下才可以,導(dǎo)致管理比較混亂
三、通過jmeter.properties設(shè)置依賴路徑
操作:1)jmeter目錄下新建一個(gè)存放第三方j(luò)ar包的文件夾third_dependency,將第三方j(luò)ar包放進(jìn)去
2)apache-jmeter-5.0/bin目錄下找到j(luò)meter.properties設(shè)置依賴路徑
文件中添加一行:plugin_dependency_paths= …/third_dependency;
優(yōu)點(diǎn):可移植性強(qiáng),jar包管理方便
來自于https://www.cnblogs.com/Clairewang/p/12550965.html
(2)引用java文件
添加Bean Shell組件
在bean shel中通過source(“代碼路徑”)方法引入java,然后調(diào)用方法和java一樣,new一個(gè)class,再調(diào)用里面的add 方法。
代碼:
//引用外部的Java文件,要用絕對路徑
source(“D:/xingneng_work_file/work_file/test_add.java”);
//new生成對象并調(diào)用函數(shù)
int res = new Myclass().add(1,2);
//生成結(jié)果賦值給vars
vars.put(“add”,res.toString());
運(yùn)行結(jié)果:
(3)引用class文件
Bean Shell使用代碼如下:
用addClassPath(“D:/”)方法引入 class文件,再用import導(dǎo)入包及類,然后就可以像java一樣調(diào)用了
運(yùn)行結(jié)果:
8.json斷言及json提取器的使用
(1)json斷言
該組件使您可以執(zhí)行JSON文檔的驗(yàn)證。
首先,它將解析JSON,如果數(shù)據(jù)不是JSON則失敗。
其次,它將使用https://github.com/json-path/JsonPath中的語法搜索指定的路徑。如果找不到該路徑,它將失敗。
第三,如果在文檔中找到JSON路徑,并要求針對期望值進(jìn)行驗(yàn)證,它將執(zhí)行驗(yàn)證。對于null值,在GUI中有一個(gè)特殊的復(fù)選框。請注意,如果路徑將返回?cái)?shù)組對象,則將對其進(jìn)行迭代,并且如果找到期望值,則斷言將成功。要驗(yàn)證空數(shù)組,請使用[]字符串。另外,如果patch將返回字典對象,則在比較之前將其轉(zhuǎn)換為字符串。
什么是JSON
JSON(JavaScript Object Notation,JavaScript對象表示法)是一種輕量級的數(shù)據(jù)交換格式。JSON容易理解,便于閱讀和編寫;同時(shí)計(jì)算機(jī)也易于解析和生成,所以JSON有廣泛的應(yīng)用。
鍵值對的形式存在:
(2)JSON斷言分析:
返回的數(shù)據(jù)必須的JSON格式,否則會(huì)解析失敗。
他將JsonPath語法搜索指定的路徑,找不到路徑,則會(huì)失敗。http://goessner.net/articles/JsonPath/ 這個(gè)網(wǎng)址去學(xué)習(xí)JSON語法。
JSON是鍵值對形式存在,通過路徑找到鍵,可以對該鍵的值進(jìn)行校驗(yàn)。
如果鍵的值為null,GUI中有復(fù)選框(Expect null),勾選上則表示以null作為預(yù)期值。
如果路徑找到的數(shù)組對象(在列表頁中比較常見這種情況),則會(huì)對數(shù)組中的數(shù)據(jù)進(jìn)行輪詢。如果其中有一個(gè)值和預(yù)期值匹配,那么斷言也是成功的。
返回的是字典對象,則需要轉(zhuǎn)為字符串后再進(jìn)行比較。
(3)JSON斷言界面參數(shù)說明:
名稱:節(jié)點(diǎn)的名稱,顯示在查看結(jié)果樹中,自己根據(jù)實(shí)際情況定義。
注釋:對該節(jié)點(diǎn)進(jìn)行注釋。
斷言存在JSON路徑:斷言JSON元素的路徑。
附加斷言值:如果要使斷言具有某個(gè)值,把這個(gè)值勾選上。如果寫了(3)JSON元素的路徑,要把這個(gè)值勾選上。
匹配為正則表達(dá)式:如果要使用正則表示式,選中該復(fù)選框。
預(yù)期值:JSON元素路徑對應(yīng)的值。
反轉(zhuǎn)斷言:就是否的意思,即如果符合就失敗。
(4)json斷言詳細(xì)說明
可以直接在查看結(jié)果樹中進(jìn)行JSON語法的測試。測試ok了再直接放在JSON斷言中。
$ 表示跟節(jié)點(diǎn)。
[] 表示數(shù)組,0表示第一個(gè);$[0] 表示跟節(jié)點(diǎn)后的第一個(gè)對象。
resultcode 即key,這里要獲取resultcode的值,所以填寫resultcode。
(5)舉例:
取第一個(gè)id的值,$.data[0].id
(1)json提取器
用法說明
此提取器用于提取請求返回結(jié)果中的某個(gè)值或者某一組值,用法比正則表達(dá)式要簡單,標(biāo)準(zhǔn)寫法為$.key,其中key為返回結(jié)果map中的一個(gè)鍵,如果是多層則繼續(xù)用.key進(jìn)行即可,如果遇到key的value值為一個(gè)List,則使用.key[n],其中n為list中元素的編號,
原文鏈接:https://blog.csdn.net/df0128/article/details/86535117
(2)Json提取器語法說明
地址:https://blog.csdn.net/df0128/article/details/86535117
9.文件上傳
(1)創(chuàng)建線程組,添加各類組件
這個(gè)就不用說了。由于需要登錄,所以我加了一個(gè)信息頭管理器,把token寫在里面。
(2)文件上傳
有接口文檔的話,那就對著文檔寫,沒api文檔,就自己抓包看了。(注意:我在線程組下面加了http信息頭管理器是因?yàn)槲蚁旅娴摹昂藢?shù)據(jù)”和“預(yù)覽發(fā)送”兩個(gè)步驟需要這個(gè)Content-Type,單單的上傳文件是不需要這個(gè)組件的,加了反而可能會(huì)報(bào)錯(cuò))
然后點(diǎn)擊高級設(shè)置,客戶端實(shí)現(xiàn)類型選擇JAVA
(3)查看結(jié)果樹
運(yùn)行一下看一下結(jié)果樹的反饋(下面兩個(gè)報(bào)錯(cuò)可以忽略,與本主題無關(guān),純粹是懶所以沒改)。
10.文件下載
(1)jmeter文件下載步驟:
首先文件下載接口請求信息填寫完全
然后①右鍵點(diǎn)擊線程組->添加->Sampler->Bean Shell Sampler,②或者右鍵點(diǎn)擊線程組->添加->后置處理器>Bean Shell Post Processor。本次以Bean Shell Sampler為例,如下圖
輸入腳本:
import java.io.*;
byte[] result = prev.getResponseData(); //這個(gè)是獲取到請求返回的數(shù)據(jù),prev是獲取上個(gè)請求的返回
String file_name = “e:/BaiDuTuPian.jpg”; //代表存放文件的位置和文件名
File file = new File(file_name);
FileOutputStream out = new FileOutputStream(file);
out.write(result);
out.close();
————————————————
原文鏈接:https://blog.csdn.net/sinat_28317385/article/details/108359217
11.函數(shù)的使用
(1)加密函數(shù)
①使用內(nèi)置函數(shù)__MD5進(jìn)行加密
使用 ${__MD5(w12345678,)} 進(jìn)行MD5加密(32位小寫)
使用KaTeX parse error: Expected group after '_' at position 2: {_?_uppercase(,)} …{__uppercase(${__MD5(w12345678,)},)}
②使用內(nèi)置函數(shù)__digest進(jìn)行加密
使用${__digest(MD5,w12345678,true,)} 進(jìn)行MD5加密(默認(rèn)為小寫,第四個(gè)參數(shù)傳true可直接返回大寫)
參數(shù)說明:
Digest algorithm(必填):加密算法,支持:MD2、MD5、SHA-1、SHA-224、SHA-256、SHA-384、SHA-512(其它jmeter自身不支持的加密算法可使用“7.引用外部文件的方式解決”)。
String to be hashed(必填):需要加密的字符串。
Salt to be used for hashing (optional):用于加密的鹽。
Upper case result, defaults to false (optional):大寫結(jié)果,默認(rèn)為false。
Name of variable in which to store the result (optional):存儲(chǔ)結(jié)果的變量的名稱。
③使用內(nèi)置方法加密
Jmeter 4.0 以上版本已有自帶的MD5加密方法
1)添加 BeanShell Sampler,代碼如下:
import org.apache.commons.codec.digest.DigestUtils;
String str = “w12345678”;
String sign = DigestUtils.md5Hex(str);
vars.put(“pw”,sign.toUpperCase());
(2)字符串拼接
字符串拼接步驟:
1.打開jmeter上的函數(shù)助手,選擇—V功能,如下圖:
2.把要拼接的值寫進(jìn)去:固定字符串+取出來的參數(shù)(這里的空格為固定字符串內(nèi)的空格,不需要空格的可以去掉)
3.點(diǎn)擊生成,就把生成的字符串放到請求頭中去就行了,只有這些參數(shù)沒有其他的話,需要把后面的逗號去掉,這樣再運(yùn)行就可以了
(3)設(shè)置全局變量(跨線程組傳遞變量)
①打開函數(shù)助手
輸入需要的值然后點(diǎn)擊生成按鈕,或者直接使用KaTeX parse error: Expected group after '_' at position 2: {_?_setProperty(ne…{userid},)}的格式
②添加BeanShell 取樣器或者BeanShell PostProcessor后置處理器,設(shè)置局部變量userid和token為全局變量newuserid和newtoken
③調(diào)用方式 ${__property(變量名)}
(4)時(shí)間戳
在使用jmeter做接口測試的時(shí)候,經(jīng)常會(huì)要用到日期這種函數(shù),讓系統(tǒng)自動(dòng)生成一些格式化的數(shù)據(jù),方便接口測試,jmeter自身就帶有時(shí)間戳的函數(shù)
1、__time:獲取時(shí)間戳、格式化時(shí)間
(1)、KaTeX parse error: Expected group after '_' at position 2: {_?_time(yyyy-MM-d…{__time(,)}:默認(rèn)該公式精確到毫秒級別, 13位數(shù) 1527822855323
(3)、KaTeX parse error: Expected group after '_' at position 2: {_?_time(/1000,)}:…{__time(yyyy-MM-dd,)}:該公式格式化生成的時(shí)間為:2018-10-26
(5)、${__time(yyMMdd,)}:該公式格式化生成的時(shí)間為:181026
2、__timeShift(格式,日期,移位,語言環(huán)境,變量)函數(shù),可以將時(shí)間進(jìn)行移位,對當(dāng)前時(shí)間增加或者減少對應(yīng)的時(shí)間
(1)、格式 - 將顯示創(chuàng)建日期的格式。如果該值未被傳遞,則以毫秒為單位創(chuàng)建日期。
(2)、日期 - 這是日期值。用于如果要通過添加或減去特定天數(shù),小時(shí)或分鐘來創(chuàng)建特定日期的情況。如果參數(shù)值未通過,則使用當(dāng)前日期。
(3)、移位 - 表示要從日期參數(shù)的值中添加或減去多少天,幾小時(shí)或幾分鐘。如果該值未被傳遞,則不會(huì)將任何值減去或添加到日期參數(shù)的值中。
“P1DT2H4M5S” 解析為“添加1天2小時(shí)4分鐘5秒”
“P-6H3M”解析為“-6小時(shí)+3分鐘”
“-P6H3M”解析為“-6小時(shí)-3分鐘”
“-P-6H + 3M”解析為“+6小時(shí)和-3分鐘”
(4)、區(qū)域設(shè)置 - 設(shè)置創(chuàng)建日期的顯示語言。不是必填項(xiàng)
(5)、變量 - 創(chuàng)建日期的值將被分配給的變量的名稱。不是必填項(xiàng)
e.g.:${__timeShift(yy-MM-dd,2018-10-26,P2D,,)}這種返回的時(shí)間就是2018-10-28
3、__randomDate(格式,開始時(shí)間,結(jié)束時(shí)間):時(shí)間段內(nèi)隨機(jī)獲取時(shí)間
(1)格式默認(rèn)為yyyy-MM-dd
e.g.😒{__randomDate(yyyy-MM-dd,2018-10-01,2018-10-30)},這種函數(shù)就會(huì)自動(dòng)返回20181001-20181030之間的一個(gè)日期
(5)jmeter隨機(jī)取用戶自定義變量的值
${__RandomFromMultipleVars(用戶自定義的變量1|用戶自定義的變量2)}
用法一:可以在beanshell中將取到的隨機(jī)值賦給變量s,在引用時(shí)直接引用ss即可
s=${__RandomFromMultipleVars(P1|P2,)};
vars.put(“ss”,s.toString());
用法二:在請求體或其他直接為變量賦值的地方,直接使用${__RandomFromMultipleVars(用戶自定義的變量1|用戶自定義的變量2)}
轉(zhuǎn)載于:https://www.cnblogs.com/applezxy/p/11124184.html
(6)自增函數(shù)和計(jì)數(shù)器
"_counter"函數(shù)
功能:這個(gè)函數(shù)是一個(gè)計(jì)數(shù)器,用于統(tǒng)計(jì)函數(shù)的使用次數(shù),它從1開始,每調(diào)用這個(gè)函數(shù)一次它就會(huì)自動(dòng)加1,它有兩個(gè)參數(shù),第一個(gè)參數(shù)是布爾型的, 只能設(shè)置成“TRUE”或者“FALSE”,如果是TRUE,那么每個(gè)用戶有自己的計(jì)數(shù)器,可以用于統(tǒng)計(jì)每個(gè)線程歌執(zhí)行了多少次。如果是FALSE,那就 使用全局計(jì)數(shù)器,可以統(tǒng)計(jì)出這次測試共運(yùn)行了多少次。第二個(gè)參數(shù)是“函數(shù)名稱”
格式:${__counter(FALSE,test)}
使用:我們將“_counter”函數(shù)生成的參數(shù)復(fù)制到某個(gè)參數(shù)下面,如果為TRUE格式,則每個(gè)線程各自統(tǒng)計(jì),最大數(shù)為循環(huán)數(shù),如果為FALSE,則所有線程一起統(tǒng)計(jì),最大數(shù)為線程數(shù)乘以循環(huán)數(shù)
計(jì)數(shù)器
Jmeter計(jì)數(shù)器實(shí)現(xiàn)自增功能
如果需要引用的數(shù)據(jù)量較大,且要求不能重復(fù)或者需要自增,那么可以使用計(jì)數(shù)器來實(shí)現(xiàn)
如:新增功能,要求名稱不能重復(fù)
1.新增計(jì)數(shù)器
計(jì)數(shù)器:允許用戶創(chuàng)建一個(gè)在線程組之內(nèi)都可以被引用的計(jì)數(shù)器。
計(jì)數(shù)器允許用戶配置一個(gè)起點(diǎn),一個(gè)最大值,增量數(shù),循環(huán)到最大值,然后重新開始,繼續(xù)這樣,直到測試結(jié)束。
初始值(Starting value):給定計(jì)數(shù)器的起始值、初始值,第一次迭代時(shí),會(huì)把該值賦給計(jì)數(shù)器
遞增(Increment):每次迭代后,給計(jì)數(shù)器增加的值
最大值(Maximum value):計(jì)數(shù)器的最大值,如果超過最大值,重新設(shè)置為初始值(Starting value),默認(rèn)的最大值為Long.MAX_VALUE,2^63-1(如果持續(xù)壓測,建議最好不要設(shè)置最大值)
數(shù)字格式(Number format):可選格式,比如000,格式化為001,002;默認(rèn)格式為Long.toString(),但是默認(rèn)格式下,還是可以當(dāng)作數(shù)字使用
引用名稱(Reference Name):用于控制在其它元素中引用該值,形式:${reference_name}
與每用戶獨(dú)立的跟蹤計(jì)數(shù)器(Track Counter Independently for each User):全局的計(jì)數(shù)器,如果不勾選,即全局的,比如用戶#1 獲取值為1,用戶#2獲取值還是為1;
如果勾選,即獨(dú)立的,則每個(gè)用戶有自己的值:比如用戶#1 獲取值為1,用戶#2獲取值為2。
每次迭代復(fù)原計(jì)數(shù)器(Reset counter on each Thread Group Iteration):可選,僅勾選與每用戶獨(dú)立的跟蹤計(jì)數(shù)器時(shí)可用;
如果勾選,則每次線程組迭代,都會(huì)重置計(jì)數(shù)器的值,當(dāng)線程組是在一個(gè)循環(huán)控制器內(nèi)時(shí)比較有用。
2.引用計(jì)數(shù)器
12.控制器
https://www.cnblogs.com/Zfc-Cjk/p/8466136.html 詳解
①循環(huán)控制器
②ForEach控制器
這樣就再去執(zhí)行這個(gè)控制器就會(huì)執(zhí)行兩遍,也可以截取其他集合的變量作為參數(shù)來遍歷。
③僅一次控制器
④事務(wù)控制器
可以理解為一個(gè)流程場景,例如發(fā)布流程、交易等,需先新建、編輯、提交審核、發(fā)布,所有的接口都成功才能發(fā)布成功。將流程場景涉及到的所有接口放到一個(gè)事務(wù)里即可。
特別說明:添加事務(wù)后在聚合報(bào)告中請求按照事務(wù)進(jìn)行統(tǒng)計(jì),事務(wù)中某一個(gè)請求報(bào)錯(cuò)即整個(gè)事務(wù)報(bào)錯(cuò)。
⑤IF控制器
判斷填寫的條件是否成立,成立則執(zhí)行控制器下的組件
⑥Switch控制器 (這個(gè)理論上是不是也可以里面加其他控制器)
⑦吞吐量控制器
作用:控制其下的子節(jié)點(diǎn)的執(zhí)行次數(shù)與負(fù)載比例分配,別被名字迷惑了,跟吞吐量沒任何關(guān)系。也有兩種方式:
Total Executions:設(shè)置運(yùn)行次數(shù),整個(gè)測試計(jì)劃中總計(jì)執(zhí)行次數(shù)
Percent Executions:設(shè)置運(yùn)行比例(1~100之間),整個(gè)測試計(jì)劃中總計(jì)執(zhí)行百分比
Throughtput: 設(shè)計(jì)的數(shù)值
Per User: 依據(jù)網(wǎng)上的說明在選擇Total Executions時(shí),勾選時(shí)會(huì)在每個(gè)線程中執(zhí)行的次數(shù)。但在3.0版本中嘗試使用無效
⑧隨機(jī)控制器
⑨隨機(jī)順序控制器
其他控制器 先看頂部網(wǎng)址!!!
13.文件大小及文件md5值獲取
步驟:
①引用jar包(jar包在該文檔同級目錄)
jar包名稱: commons-codec-1.15.jar
②添加前置處理器→BeanShell PreProcessor
③引用
④查看運(yùn)行結(jié)果
14.jmeter調(diào)試工具(Debug Sampler)的使用
使用Jmeter開發(fā)腳本時(shí),難免需要調(diào)試,這時(shí)可以使用Jmeter的Debug Sampler,它有三個(gè)選項(xiàng):JMeter properties,JMeter variables,System properties:
1、JMeter properties和System properties:通常都選false,這兩個(gè)就是JMeter和系統(tǒng)的屬性,在Jmeter的bin的jmeter.properties中定義,一般都不會(huì)變。
2、JMeter variables:這個(gè)是我們自已定義的變量,定義的方式有如下這些:
a) 選中測試計(jì)劃(Test plan),在右邊的面板上添加User Defined Variables
b) 選中線程組,右鍵選擇 配置元件( config element)–>User Defined Variables
c) 通過后置處理器生成的變量
d)使用csv參數(shù)化的變量
15.jmeter-CSV參數(shù)化
①創(chuàng)建CSV文件
創(chuàng)建.csv文件,用戶名和密碼中間以逗號隔開
② 在線程組中添加并配置CSV Data Set Config
1.添加CSV Data Set Config
2.配置CSV Data Set Config(文件地址可以寫相對路徑,“./為bin目錄下”)
?Filename: 指保存信息的文件目錄,可以相對或者絕對路徑。否則會(huì)在jmeter日志文件(jmeter.log目錄位置D:/Program Files/apache-jmeter-2.13/bin)中提示:系統(tǒng)找不到指定文件,運(yùn)行腳本后,登錄失敗。
?File encoding: 保持默認(rèn)。默認(rèn)為ANSI
?Variable Names: 給csv文件中各列起個(gè)名字(有多列時(shí),用英文逗號隔開列名)便于后面引用
?Delimiter:與 .csv文件的分隔符保持一致。如文件中使用的是逗號分隔,則填寫逗號;如使用的是TAB,則填寫/t;
?Allow quoted data? :是否允許引用數(shù)據(jù),—這個(gè)目前還未弄明白,設(shè)置成True或者False都能正常引用數(shù)據(jù)。
?Recycle on EOF?:到了文件尾是否循環(huán),True—繼續(xù)從文件第一行開始讀取,False—不再循環(huán)
?Stop thread on EOF? :到了文件尾是否停止線程,True—停止,False—不停止,注:當(dāng)Recycle on EOF設(shè)置為True時(shí),此項(xiàng)設(shè)置無效。
?Sharing mode:共享模式,All threads –所有線程,Current thread group—當(dāng)前線程組,Current thread—當(dāng)前線程。
All threads:計(jì)劃中所有線程,假如說有線程1到線程n (n>1),線程1取了一次值后,線程2取值時(shí),取到的是csv文件中的下一行,即與線程1取的不是同一行。
2 Current thread group:當(dāng)前線程組,假設(shè)有線程組A、線程組B,A組內(nèi)有線程A1到線程An,線程組B內(nèi)有線程B1到線程Bn。取之情況是:線程A1取到了第1行,線程A2取第2行,現(xiàn)在B1取第1行,線程B2取第2行。
2 Current thread:當(dāng)前線程。假設(shè)測試計(jì)劃內(nèi)有線程1到線程n (n>1),則線程1取了第1行,線程2也取第1行。
③引用csv文件中的數(shù)據(jù)
1.找到需要傳遞參數(shù)的HTTP請求
2.將具體值改為變量引用,引用變量:${變量名}
④讀取的csv數(shù)據(jù)中文亂碼問題
將數(shù)據(jù)存儲(chǔ)到txt中,另存為帶有bom的utf-8格式,然后修改文件后綴為csv即可
16.jmeter-返回結(jié)果生成CSV文檔
(1)步驟
①本次為方便演示故添加csv數(shù)據(jù)文件設(shè)置組件,實(shí)際場景應(yīng)添加JSON提取器,存儲(chǔ)提取到的返回?cái)?shù)據(jù)。
CSV文件使用記事本或Notepad++打開,列之間實(shí)際是英文“,”表示,此處需要記住。
CSV參數(shù)設(shè)置參考“標(biāo)題15”
②添加http請求,在請求下添加BeanShell PostProcessor
代如下碼:
FileWriter fstream = new FileWriter("./test01/444.csv",true); //tuer為寫入,不填寫默認(rèn)false為清除
BufferedWriter out = new BufferedWriter(fstream);
//String logo = vars.get(“name”);
//logo = logo.replaceAll(",",""); 此處注釋內(nèi)容為參數(shù)中有多余的“,”時(shí),將逗號轉(zhuǎn)為空字符或其內(nèi)容,以免文件列錯(cuò)位
//vars.put(“l(fā)ogo”,logo);
out.write(vars.get(“name”)); //寫入name的值 注意此處通過get只能調(diào)取變量,且直接填寫變量名稱!
out.write(","); //寫入英文逗號,csv列之間用逗號分隔
out.write(" s e x " ) ; / / 直 接 寫 入 字 符 或 變 量 , 此 時(shí) 變 量 需 要 {sex}"); //直接寫入字符或變量,此時(shí)變量需要 sex");//直接寫入字符或變量,此時(shí)變量需要{}引用
out.write(",");
out.write(vars.get(“age”));
out.write(System.getProperty(“l(fā)ine.separator”)); //換行
//out.write("/n"); 寫入“/n”也可實(shí)現(xiàn)換行
out.close();
fstream.close();
③運(yùn)行結(jié)果
④思考1?
是否可先清除模式打開文件,寫入變量的標(biāo)題,在接口返回時(shí)再次用寫入模式打開文件錄入數(shù)據(jù),從而達(dá)到每次啟動(dòng)自動(dòng)清除文件內(nèi)容的目的。
結(jié)果:
思考2?
多個(gè)請求的返回參數(shù)寫入同一個(gè)文件
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/122994.html
摘要:為了最大限度的靈活性,允許使用正則表達(dá)式創(chuàng)建斷言。線程組理解一個(gè)虛擬用戶組,線程組內(nèi)線程數(shù)量在運(yùn)行過程中不會(huì)發(fā)生改變。測試執(zhí)行后操作,即線程組執(zhí)行完成后執(zhí)行的內(nèi)容。 Jmeter是Apache組織開發(fā)的基于Java的壓力測試工具,它最初被設(shè)計(jì)用于Web應(yīng)用測試,但后來擴(kuò)展到其他測試領(lǐng)域。 它可以用于測試靜態(tài)和動(dòng)態(tài)資源,例如靜態(tài)文件、Java 小服務(wù)程序、CGI 腳本、Java 對象、數(shù)...
摘要:安裝及配置下載解壓到盤根目錄配置環(huán)境變量把中的復(fù)制到中把附中內(nèi)容添加到文件中把需要測試的文件和見文章末尾放在同一文件夾中中使用了文件,點(diǎn)此下載后放到中測試一下看,打開命令行切換到文件夾下,輸入或執(zhí)行,正常運(yùn)行后 ANT安裝及JMeter配置 1.下載ANT 2.解壓到D盤根目錄 3.配置環(huán)境變量 CLASSPATH %JMETER_HOME%libextApacheJMeter_cor...
摘要:易于持續(xù)集成,可通過腳本命令執(zhí)行,實(shí)際壓測建議使用命令行模式。 目錄 命令參數(shù) 執(zhí)行示例 生成測試報(bào)告 利用已有.jtl文件生成報(bào)告 無.jtl文件生成測試報(bào)告 報(bào)告內(nèi)容解析 Dashboard Charts 所遇問題 JMeter可以運(yùn)行模式有兩種,一種是GUI圖形,另一種是命令模式運(yùn)行也...
摘要:將響應(yīng)斷言放入請求下,會(huì)對該請求調(diào)用的響應(yīng)結(jié)果進(jìn)行斷言。異步調(diào)用,等待一定時(shí)間后獲取調(diào)用結(jié)果數(shù)據(jù)某支持客戶進(jìn)行異步調(diào)用,先發(fā)送一個(gè)異步請求提交數(shù)據(jù)獲取一個(gè),然后隔一斷時(shí)間后再使用獲取到的請求上一個(gè)請求的返回結(jié)果需要用到定時(shí)器組件。 由于segmentfault編輯器上傳圖片錯(cuò)誤,小編試過多種方式試圖拯救,還是未能成功,所以如要看完整文章請至http://t.cn/R8njjaT mia...
摘要:吞吐量一般結(jié)合業(yè)務(wù)需求而定服務(wù)器資源占用占用率內(nèi)存使用率命中率篇是一種預(yù)測系統(tǒng)行為和性能的負(fù)載測試工具。負(fù)載測試與壓力測試都是性能測試。通過平臺(tái)接口可進(jìn)行合理的性能測試。有利于測試人員及時(shí)定位問題。 Part 1:性能測試 性能測試是通過自動(dòng)化的測試工具模擬多種正常、峰值以及異常負(fù)載條件來對系統(tǒng)的各項(xiàng)性能指標(biāo)進(jìn)行測試。 A. 類別 性能測試包括負(fù)載測試、壓力測試、基準(zhǔn)測試等。 i. 負(fù)...
閱讀 769·2023-04-25 19:43
閱讀 4022·2021-11-30 14:52
閱讀 3855·2021-11-30 14:52
閱讀 3909·2021-11-29 11:00
閱讀 3839·2021-11-29 11:00
閱讀 3949·2021-11-29 11:00
閱讀 3613·2021-11-29 11:00
閱讀 6310·2021-11-29 11:00