Jmeter (底层语言是Java) 单进程并发
Loadrunner (底层语言是C) 多进程 性能更好,更稳定工具
Tomcat 线程模式(与Java有关的都是单进程)性能
lr的支持最大并发 跟license的容许数量一致测试
并发用户数与进程数无关 取决于线程数spa
Jmeter 一个并发就是一个线程.net
Jmeter 录制方法:一、代理录制;二、badboy 工具录制线程
Jmeter lib 目录 放置依赖的jar 包 (之后工做中jar 放到该文件夹下)debug
保存Jmeter 脚本需选中测试计划进行保存,不然保存内容不全3d
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