jmeter实现WEB接口自动化及压测组件介绍软件测试大本营•jmeter简介•jmeter接口测试•Jmeter-接口自动化–逻辑控制器–接口间动态参数传递–接口参数预处理–参数化–数据库操作•利用Jmeter进行接口压测–性能参数–Prefmon-性能指标收集–分布式JMETER简介•开源,免费–Jmeter是apache组织的开源项目,免费•java软件,支持二次开发–100%纯java,可运行于windows,linux,MacOS–支持二次开发,以jar包的形式添加扩展组件•轻量,直接解压运行,可进行接口功能、性能测试。•支持分布式运行进行压测组件-线程组•ThreadGroup–一切测试计划的开始–所有的逻辑控制器和采样器都必须放在线程组之下(监听器除外)–几个参数:•线程数•Ramp—UpPeriod(初始值设定技巧)•循环次数•调度器–(启动时间,结束时间)VS(持续时间,启动延迟)线程组中的启动的每一个线程都会独立完整的执行测试计划,Jmeter就是利用这种多线程机制来模拟服务器应用的并发连接组件-HTTP请求•HTTPsampler–Web服务器信息(主机,端口)–HTTP请求•协议类型(http,https等)•路径–scheme://user:psw@host:port/path?params#flag•请求参数–可直接写在路径中–可填在表格中组件-HTTPCookieManager(1)•像浏览器一样存储和发送cookie,如果你要发送一个带cookie的http请求,cookiemanager会自动存储该请求的cookies,并且后面如果发送同源站点的http请求时,都可以用这个cookies•对于计划唯一性–一个测试计划只能有一个cookieManager•参考文档组件-HTTPCookieManager(2)•2种管理方式–自动收集(修改jmeter配置)•自动存储:CookieManager.save.cookies=true•跨域支持:CookieManager.check.cookies=false•前缀:CookieManager.name.prefix=(默认COOKIE_)这种方式收集到的cookie不会在manager中展示–手动设置•不建议手动填写,可以利用firefox,自动导入•具体导入方式可以参考如下博文–Cookie的引用•${COOKIE_KEY}组件-响应断言•对接口返回进行校验–断言对象•响应文本•URL样本•ReponseHeaders–匹配模式•包括•匹配(正则表达式)•相等•取反组件-监听器•用于展示测试报告•常用监听器类型–查看结果树–表格查看结果–聚合报告–ResponseTimeGraph请求的录制•非配置元件-HTTP代理服务器–指定代理服务器的端口:port–修改浏览器的代理,localhost,port–请求的筛选•包含,排除模式。。。高级-逻辑控制器•参考文档•控制器–Foreach控制器•输入变量前缀(注意自定义变量的index要从1开始)•Startindex:定义开始的索引位置(包括该位置)•Endindex:定义结束的索引位置(不包含该位置)•输出变量名name:可以在其他sampler中引用:${name}–If控制器–Include控制器—引入其他计划,用于计划组合–。。。还有很多,有兴趣的同学可以自己挖掘demo高级-接口间的参数传递接口间的参数传递•正则表达式提取器参考文档:–参数说明•引用名称-匹配值在其他接口中引用的name,${name}•正则表达式(注意特殊字符的转义)–捕获:(?:exp)(.*)(?:exp)–零宽断言:(?=exp)(.*)(?=exp)神器•模版-选择第几个模版的值,格式:$1$$2$等•匹配数字(0:随机,-1:全部,N:第几个匹配项)•缺省值-就是没匹配到任何东西的默认值高级-请求参数的预处理场景:有时当我们取到一些参数时,不能直接使用,需要进行一定的预处理,才能传给其他接口,例如,密码的MD5处理等高级-参数化•Csvdatasetconfig支持txt,csv格式的文件读取–Filename-路径+文件名–Fileencoding–VariableNames-引用变量名称,逗号隔开–RecycleonEOF-循环读取–StopThreadonEOF-读取到文件末尾的时候停止线程高级-参数化每个线程拥有独立的数据库连接!•JDBCConnectionConfiguration–VariableNameBoundtopool–标识对数据库的唯一连接–DatabaseConnectionConfiguration•JDBCrequest–JDBCConnectionConfiguration-选用哪个连接进行查询–QueryType-操作类型(select,update)接口压测-指标收集•PerfMonJmeter的插件,用来收集被压服务器的各种性能指标,例如:CPU,Memory,Swap,DisksI/OandNetworksI/O……下载地址:=JMeterPlugins-1.0.0.zip•安装方法:–解压zip包,将JMeterPlugins.jar放入jmeter的\lib\ext,重启jmeter–进入serveragent,启动Agent•Linux:./startAgent.sh--udp-port0--tcp-portport(agent起来之后所监听的端口)•Windows:进入serverAgent目录,直接双击startAgent.bat,启动agent注意:agent启动默认监听的端口是4444接口压测•Perfmon可以收集的性能指标•详细的指标说明,参考如下文档•其他参数可参考-聚合报告分布式压测作为一个纯JAVA的GUI应用,JMeter对于CPU和内存的消耗还是很惊人的,所以当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至还会引起JAVA内存溢出的错误。这个时候我们就需要分布式,把并发的压力分散到压测agent上•设置方法–在压测agent上安装jmeter,进入bin目录,启动Jmeter-server.bat–配置控制机•打开jmeter.properties,编辑“remote_hosts=”选项,添加压测agent的ip例如remote_hosts=10.24.144.31,多个用逗号隔开•部分启动和全部启动