jmeter脚本语言
A. 技巧分享-12周-Jmeter和Gatling体验结果
以前公司压力测试都不使用Jmeter和Gatling工具测试,最近需要寻找更加好用压力测试工具。所以有了半天的体验结果
通过自己学习和实践来跟大家分享Jmeter和Gatling的使用体验
一天使用过程,可能很多地方没有涉及到。
但是Gatling花了好几个小时才成功发起压力测试,Jmeter只花不到1个小时就搞定。
所以最后还是主推Jmeter。
Jmeter
所有操作和配置都在UI界面上操作即可,不需要学习其他内容。而且支持中文。
Gatling
基本是通过gatling.sh/bat执行Scala脚本来完成压力测试。
压力测试所有设置都需要通过scala脚本设置
scala脚本如下
注意: 网络很多教程的语法都就旧版本,执行会报错。主要是以下几个点
1、baseURL 重新命名为 baseUrl
2、silentURI 重新命名为 silentUri
3、asJSON 重新命名为 asJson
3、over 重新命名为 ring
Jmeter
通过插件Jmeter可以支持以下最主要功能
结果分析
TPS
响应时间
硬件资源监控
报文响应结果
Gatling
Gatling跟Jmeter对比缺少TPS和硬件资源监控,提供如下数据
交易响应时间、平均每秒吞吐量、最大/最小/平均响应时间
响应时间分布图
百分比响应时间分布
每秒请求次数
每秒响应次数
总体来说
1、Jmeter分析结果会更加符合目前测试需求(查阅资料,TPS目前好像没有),而且不需要单独学习另外一份脚本语言
2、目前gatling中文资料还是比较少,主要去看官网的。
B. jmeter和Loadrunner 对比
jmeter和Loadrunner一样,都是通过中间代理,监控和收集从客户端发出的指令,生成脚本,发送到应用服务器,再监控服务器反馈结果的 一个过程。
Lr:商业工具,基于C语言,检查点通过 web_reg_find,关联web_reg_save_param,参数化每次迭代,每次更新,唯一,same line as ,date/time uniqnumber interator number ,vuser id,可以手动设置事务,支持IP欺骗,分布式把依赖包和文件放到脚本根目录,自动发送到agent
jmeter,开源工具,基于java语言,关联 后置处理器正则提取器,参数化 CSV jdbc request,用户自定义 ,random randomstring group counter timer,断言,不支持IP欺骗,分布式是把jmeter文件到agent上
C. JMeter 脚本技术(参数化)
前面我们已经学习过用 Badboy 录制 webtours 网站 的注册脚本,录制下来的脚本可以直接回放并注册成功一个新用户(前提是录制脚本时创建的用户要先清除,系统用户名有唯一性)。
如果我们想保留之前注册成功的用户,然后继续创建新的用户,这种情况应该如何操作呢?大家可能想到去改脚本,把之前注册用户时填写的用户信息改成新用户的信息。一个用户可以这样操作,但要注册10个,100个,1000个新用户呢?
大家想想都应该知道不可能每注册一个用户时都去修改一次脚本,这样牛都会累死的。
我们平时录制的脚本内容都是固定死在脚本里的,每次运行脚本时使用的是同样的数据。那我们有没有办法把这些“死”的脚本救“活”呢?这个就是我们接下来要学习的脚本参数化。
在操作之前我们先来看看提交用户注册信息的请求。
上图圈出来的内容就是用户注册时填写的信息,我们需要对这部分的内容进行参数化。参数化其实就是把脚本里具体的内容改成调用变量的方式。
既然我们知道了操作的方向,那如何调用变量呢?变量我们现在还没创建,创建变量有多种方式,可以在测试计划下创建全局变量,也可以在用户参数下创建用户变量,还可以在配置元件下创建数据 CSV 数据文件导入变量。
在这里,我们只学习平时用得比较多的一种方式,在配置元件下添加 CSV 数据文件导入变量。下面我们来看一下配置选项:
名称: 自定义,给该元件起个名字。
注释: 自定义,一般写改元件的作用。
文件名: 表示参数文件存放的路径,文件不一定是 CSV 格式文件,可以是 CSV 文件 ,也可以是 txt 文件,如 d: est.txt 。这个配置项在 JMeter 一些低的版本里面是没有右边的 浏览 按钮选择文件的,只能手写文件路径。
文件编码: 读取文件时的编码格式,如果为空的话则为本地系统默认的编码方式,Windows 默认是 GBK,Linux 默认是 UTF-8。
变量名称: 参数名字,如果有多个就用英文状态下的逗号分隔,如 name,password 。如果参数名称为空, JMeter 会默认将参数文件的第一行值作为参数名字,从第二行开始调用参数值 。
忽略首行: 忽略 CSV 文件的第一行,只在上一项变量名称不为空时使用,如果变量名为空,则第一行必须包含头信息。
分隔符: 一般标准的 CSV 文件都是采用的逗号作为列分隔符,这里只需要和参数文件的分割方式匹配即可。
是否允许带引号?: 是否允许参数中包含被引用的值。这个是什么意思呢?其实 JMeter 允许引用字段中包含 分隔符 ,如逗号,但引用的字段要用双引号括起来。举个栗子: 1,"2,3",4 ,这样表示1是一个整体,2,3是一个整体,4是一个整体。另外, JMeter 还允许引用字段中包含双引号,如果要包含双引号请使用 两个 双引号 。再举栗子: "5""6",7 ,这样表示5"6是一个整体,7是一个整体。
遇到文件结束符再次循环?: 当读取到参数文件的最后一个值时,是否允许循环取值?
遇到文件结束符停止线程?: 当读取到参数文件的最后一个值时,是否停止线程?这个配置项和上一个配置项只能有一个是 true。
线程共享模式: 共享模式,设置线程或者线程组对于参数文件的共享方式。有四种共享方式,默认是所有线程共享一个参数文件。
学习了上面的配置操作后,我们来创建一个 CSV 文件并且把脚本中要使用的数据都准备好。
接着,把 CSV 数据文件设置选项设置好。
设置完成后,接下来要做的是导入 CSV 文件并且调用数据到脚本中使用,在 JMeter 里面调用变量格式是 ${变量名称} 。
设置脚本循环运行4次,看看能否调用到 CSV 文件数据。
从上图可以看出,脚本居然能调用到 CSV 文件的数据,说明脚本已经实现了参数化。
D. jmeter 支持python语言吗
python可以调度运行,但不能直接开发jmeter脚本
E. 使用jmeter做接口测试,怎么验证,核对响应结果中json的内容
Json 作为一种数据交换格式在网络开发,特别是 Ajax 与 Restful 架构中应用的越来越广泛。而 Apache 的 JMeter 也是较受欢迎的压力测试工具之一,但是它本身没有提供对于 Json 数据的响应处理。本文中假设需要从 HTTP 的响应头中返回的 Json 格式的数据流中抽取某些特定的数据,数据格式如下:{"name":"Simpsons family","members":[{"firstName":"Homer", "lastName":"Simpson"},{"firstName":"Marge", "lastName":"Simpson"},{"firstName":"Bart", "lastName":"Simpson"},{"firstName":"Lisa", "lastName":"Simpson"},{"firstName":"Maggie", "lastName":"Simpson"}]}下面我们使用不同的方法来进行数据的抽取工作:正则表达式提取JMeter 安装了正则表达式插件之后,可以按照固定的格式从字符串中提取数据,而本例中正则表达式如下所示:"firstName":"(.+?)"使用了该表达式之后会返回所有服从表达式的字符串,但是只有一个表达式是我们所关注的。可以使用$1$ 来作为模板,而 3 则会返回第三个数据。当偶尔需要对Json数据进行处理时,正则表达式是一个合适的选择,它的一个优势在于JMeter本身就内置了Json处理模块。但是,阅读处理正则表达式却是比较复杂的,特别是对于某些复杂的Json数据。JMeter JSON 插件另一种处理 Json 数据的方法是使用 JMeter 的插件,该插件可以使用 JSONPath 来获取 JSON 数据中特定位置的数据。类似于 XML 文件中的 XPath , JSONPath 可以使用简单的表达式来操作 Json 对象。 JSON Path Extractor 是一个开源的增加了 post处理器的插件,可以将该插件的 Lib 文件拷贝到 JMeter 的 lib 目录下即可。而上文中提及的需要定位的数据可以使用如下的JSONPath 进行描述:$.members[2].firstName在 JMeter 中,只需要从 PostProcessor 菜单中打开 JSON Path Extractor 然后输入变量名与默认值即可,如下所示:JSONPath 表达式较短并且易于阅读,能够有效提高测试脚本的易维护性,该插件并不随着标准的 JMeter 一起安装。BeanShell Post Processor最后一种方法即是借用了 JMeter 的对于 BeanShell 支持的特性, BeanShell 是一个轻量级的面向 Java 的脚本语言。 BeanShell Post Processor 允许使用标准的 Java 语法来处理 Json 数据,使用方法如下图所示:总结本文列举出了三种可用的从 Json 格式的返回值中提取数据的方法,正则表达式对于简单的 Json 格式的数据的快速标准化非常占优势。而 JsonPath 插件可以用于创建能够被维护修改的脚本,但是需要额外的插件安装工作。而最后的带 JSON 库的BeanShell 确实非常详细并且依赖于 Java 语言的灵活性可以进行进一步的开发。
F. selenuim,qtp,loadrunner,jmeter有何区别,想学个脚本语言python和测试工具应该从哪里入门呢。
selenium和qtp是 功能的自动化测试,loadrunner和jmeter是性能的自动化测试
selenium要求代码能力比较高,适合用python,QTP一般用VBS,loadrunner一般用C,但是现在也可以用java等语言.
现在功能自动化用的工具最多的是QTP,但是selenium的趋势在增长,建议用这个工具
G. JMeter之代理服务器录制脚本
在JMeter中可以使用自身就带的HTTP代理服务器组件录制脚本,可以录制在WEB上的操作,也可以录制在手机App上的操作。
1、测试计划内包含的元件
添加元件操作步骤:
创建测试计划
创建线程组:选中“测试计划”右键 —> 添加 —> 线程(用户) —> 线程组。
在线程组中,添加配置原件“HTTP Cookie管理器”组件:选中“线程组”右键 —> 添加 —> 配置元件 —> HTTP Cookie管理器。
说明:如果录制的操作包括 用户登录操作 ,则需要添加“HTTP Cookie管理器”,添加之后不需要任何配置,录制后,脚本中便保存用户登录的相关信息。
在测试计划下,添加非测试元件“HTTP代理服务器”组件:选中“测试计划”右键 —> 添加 —> 非测试元件 —> HTTP代理服务器。
在HTTP代理服务器组件下,添加监听器“察看结果树”组件:选中“HTTP代理服务器”右键 —> 添加 —> 监听器 —> 察看结果树。
最终测试计划中的元件如下:
点击运行按钮,会提示你先保存该脚本,脚本保存完成后会直接自动运行该脚本。
2、HTTP代理服务器的设置内容
在HTTP代理服务器组件中,我们需要编辑:
端口: 默认8888,一般使用默认即可。主要不能与本地其他服务的端口号冲突,否则启动不了。
HTTPS Domains: 我的理解就是,设置代理服务器的主机IP地址或者域名。因为在我们本地使用,一般就是 localhost 或者127.0.0.1即可,当然不填写也是可以的。(此填写的地址一定要能够连接外网)
设置目标控制器: 也就是录制的组件存储到什么位置。这个一定要选,下图中选择了存储到目标线程组中。
配置完的界面内容,如上图所示。
3、设置浏览器的代理服务器
每个浏览器都可以设置服务器的代理,以Chrome浏览器为例。【设置需要区分是否为局域网】
点击右上角的设置 —> 高级 —> 系统 —> 最下面的‘’打开您计算机的代理设置‘’,点击右侧图标,就可以进入到代理服务器的设置页面了。
选要选中手动配置代理服务器,然后输入代理服务器的地址或者域名,还有端口号。
这里的配置,要和上面JMeter的HTTP代理服务器中的端口和HTTPS Domains的配置要对应上。
这样的话,浏览器中的操作,会先发送到JMeter中的HTTP代理服务器,在通过网络进行传输。这样JMeter中就可以录制下我们的操作,生成脚本了。
如下图所示:
4、录制脚本
以上内容设置完毕后,在浏览器地址栏中输入要录制脚本的地址。
然后在JMeter中的HTTP代理服务器界面,点击启动按钮。
提示:在HTTP代理服务器界面点击“启动”时,Meter将生成自己的证书。证书生成可能需要一些时间,在此期间,GUI将无响应。证书生成完成后,GUI将显示一个弹出对话框,其中包含根CA证书的详细信息,证书有效期为7天。该证书需要由浏览器安装,以便接受JMeter生成的主机证书。
如下图所示:
浏览器配置证书: 浏览器中导入证书 ,jmeter安装目录下的ApacheJMeterTemporaryRootCA.crt
之后开始在网站上进行操作,所有操作发出的请求,都会录制到JMeter脚本中。
操作完成之后,到JMeter的HTTP代理服务器中点击“停止”,然后将浏览器的代理设置恢复原样即可。
不恢复的话,会导致你无法使用浏览器访问外网。
如下图所示:【录制时弹出的控制器,不用进行设置,关闭时 点击 停止 即可】
5、查看录制的脚本
在JMeter中我们可以看到已经 记录 了许多请求对应的信息,包括PHP、js、.jpg、.png、.txt等请求。
如下图所示:
我们可以看到,我们只进行了简单的几步操作,却录制这么的请求。是因为JMeter录制很多非关键性的请求,这就需要我们进行一些优化。
录制脚本的优化有两个步骤:
在录制的时候,做一些过滤和排除操作。
在录制后的脚本中手动优化,删除不需要的组件,增加自己需要的组件。
1)服务器名称或IP与目标网站不同的、无关的,可以删除。
2)js/css/png/jpeg等这类请求删掉。
3)没有传递任何数据的请求可以屏蔽掉,等流程能回放成功了,这些再删除。如果回放不成功,再一个一个打开,进行检查。
6、HTTP代理服务器的排除模式
在测试脚本中有一些录制的信息是没有任何作用的,所以我们在录制脚本的时候,就可以通过HTTP代理服务器的排除模式,排除一些不需要的请求信息,如css、gif、png等请求。
例如:
在包含模式添加填上 .*\.jsp,只在请求JSP文件时录制脚本。
这里通常都是设置JSP或者HTML,可以根据具体情况进行填写。
在排除模式处填上.*\.js ,在请求js文件时不录制脚本。
这里通常都是设置js、jpg、png、gif、css等,这些类型文件请求都是不需要录制的。
当然我们也可以点击添加建议排除按钮,会自动生成一个过滤的正则表达式。
如下图所示:
添加上这些时候,录制出来的脚本,多余的累赘会减少很多。
7、保存脚本
脚本录制完成后,需要进行脚本的保存。
把脚本保存到本地,可以分享给其他成员,进行查看、编辑、回放等操作。
H. http返回的数据是json格式 jmeter怎么断言
如我们要断言返回值的json中
{"name":"Simpsons family","members":[{"firstName":"Homer", "lastName":"Simpson"},{"firstName":"Marge", "lastName":"Simpson"},{"firstName":"Bart", "lastName":"Simpson"},{"firstName":"Lisa", "lastName":"Simpson"},{"firstName":"Maggie", "lastName":"Simpson"}]}
中members的第三条firstName的值等于Bart
则添加一个jp@gc - JSON Path Assertion断言
JSON Path 输入框填写$.members[2].firstName
Expected Value 输入框填写 Bart
I. 如何用java代码实现一个类似,jmeter的beanshell脚本/postman运行脚本的功能(解析字符串运行代码)
beanshell是可以自由适用的脚本语言啊,你可以在你的项目中引入,具体方式请阅读
beanshell官方文档
