Jmeter (底層語言是Java) 單進程
Loadrunner (底層語言是C) 多進程 性能更好,更穩定
Tomcat 線程模式(與Java有關的都是單進程)
lr的支持最大並發 跟license的允許數量一致
並發用戶數與進程數無關 取決於線程數
那50線程為一進程 是默認值 可以調整
Jmeter 一個並發就是一個線程
Jmeter 錄制方法:1、代理錄制;2、badboy 工具錄制
Jmeter lib 目錄 放置依賴的jar 包 (以后工作中jar 放到該文件夾下)
保存Jmeter 腳本需選中測試計划進行保存,否則保存內容不全
Jmeter 有嚴格的 作用域,注意層級關系
線程組比http 請求多了邏輯控制器
作用域的關系,執行順序
執行順序:先看作用域
線程組
配置元件
邏輯控制器
前置處理器
定時器
取樣器
后置處理器
斷言
監聽器
循環套循環
從最里面的循環往外執行
思考:取樣器后面的步驟執行完畢后如果前置處理器或定時器還有未執行的,是執行前置處理器、定時器還是Break 跳到配置元件?
答案:Break 跳到配置元件
后置處理器、斷言、監聽器 屬於一個層級的東西,不會嵌套循環,執行完后不會回到取樣器 而是break跳到配置元件
取樣器前后的東西都是作用於取樣器;
從線程組往下層層執行,可以有多個同級,到監聽器后跳出到配置元件;
后置處理器、斷言和監聽器可以理解為同級別,都作用於取樣器
實踐經驗:用作用域控制執行順序
參數化:
Csv data set config: sharing mode - all thread – -- 唯一取值方式
所有線程;唯一+每次迭代,每次迭代的時候才會變值,循環控制器不改變值的
所有線程之間共享,只打開一次文件
當前線程;順序+每次迭代,線程(vu)與線程間是一樣的,只有迭代的時候才會變化值。線程組1 用戶1取1 ,用戶2取1,迭代用戶1取2,用戶2取2
(迭代的時候不同用戶之間拿到的數據是一樣的)
每個線程,文件分別打開一次(第一行讀取)
當前線程組 : 順序+唯一,線程(vu)與線程之間是順序,線程組間內是唯一。線程組1跟線程組2的取值數據來源一樣,線程組1取1,線程組2也是取1;線程內是唯一 。用戶1取1,用戶2取2,迭代用戶1取3,用戶2取4
(唯一的時候不同用戶之間拿到的數據是互斥的)(組外沒有關系,當只有一個線程組時取值方式同“所有線程”)
同一個線程組,只打開一次文件
關聯:
Jmeter中的關聯是后置操作
A+ a重復一個或多個,優先取多(沒有空)+ 作用於前面的字符串
A? a重復零次或一次,? 作用於前面的字符串
A* a重復零次或更多次,優先取多,* 作用於前面的字符串
“ . ” 取換行符以外的一個字符
“*” 取換行符以外的任意多個字符或0個字符,優先取多
“.*” 取換行符以外的任意一個或多個字符,優先取多
“.+” 同“.*”,但會剔除空字符串,優先取多
“.?” 0個或1個
“div.*div” 取換行符以外的任意一個或多個字符串,左邊包含div
“div(.*)div” 取換行符以外的任意多個字符串,左右兩邊包含div .會有兩個結果,一個包含左右邊界,一個刨掉了左右邊界
$1$ 取刨掉左右邊界以外的字符
關聯:建議用 .+ 或者 .* ,然后加上括號、左右邊界;
Sampler – debug sampler 可查看jmeter 中所有的參數化、關聯值
拓展:匹配18位身份證號 ^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$
參考網址:http://tool.oschina.net/regex/#
檢查點:
響應斷言
調試腳本時,響應斷言查看結果樹去看
跑腳本時 添加監聽器-斷言結果 去看
Think time :
固定定時器 、高斯隨機定時器 。。。。。。
集合點:
定時器-Synchronizing timer
事務:
Logic controller - Transaction controller
僅一次控制器:once only controller 類比lr 中init end