Jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,不像loadrunner那样体积大,是一个比较轻量级的测试工具,使用起来非常的简单,深受测试人员的喜爱,但是它的测试报告没有loadrunner的那么详细,看起来没有那么的直观。因为它是java开发的,所以运行的时候必须要安装jdk才可以,jmeter是免安装的,拿到安装包之后直接解压就可以使用了,它也是跨平台的在linux、windows、macos上都可以使用。
jmeter进行http接口测试的主要步骤(1.添加线程组 2.添加http请求 3.在http请求中写入接口的URL,路径,请求方式,参数 4.添加查看结果树 5.调用接口,查看返回值)
针对接口添加header在如下途径添加:
jmeter做http接口测试添加cookie:
进行webservice测试的一般步骤(1、在soapui中新建已经soap项目,导入wsdl地址,获取到请求报文、SOAPAction和请求url(在soapui的raw中能找到)2、打开jmeter新建一个线程组3、新建一个SOAP/XML-RPC Request4、把url、soapaction和请求报文写到soaprequest中5、调用接口、查看返回值)
参数化的作用:调用接口入参时。有时要求参数经常变化,如果每次去修改就会变得很繁琐,这时候就需要把经常变化的值改变为提前编辑好的文档或函数中,便于调用时使用不同的值。
Jmeter参数化的方式有三种:
1)用户定义的变量(这种就是为了方便管理参数,只能有一个值,比如说ip地址不经常变化的)。
在线程组中添加一个用户定义的变量,然后写key和value就可以了,key就是这个参数的名称,也就是你在脚本里面取的值,value就是具体值了。在取参数化的值的时候,使用${name}这样去取值,name就是你取的变量名称。
2)函数生成器(函数生成器可以参照一定的规则生成数据,这样的比如说生成一些随机数)。
函数助手的话,可以按照规则生成一些参数,比如说随机数取当前时间,最常用的就是这两种。
随机数__Random,可以在你指定的一个范围内取随机值
取当前时间__time,如果在有一些需要传时间的情况下可以使用,日期格式是:yyyy-MM-dd HH:mm:ss 年-月-日-小时:分钟:秒
取唯一id,__UUID,这个就是每次会生成一个随机的uuid,都是唯一的。
利用函数助手可以按照规则生成一些参数。
3)从文件中读取(文件读取就是事先写好一些数据,然后从文件中读取,这样的话,比如说登录接口,账号和密码都是我们事先注册好的)
从文件中读取的有3个步骤:1、读取文件2、取文件内容里面的参数,给它一个名字3、使用值(从文件读取的话,需要在线程组里面添加一个CSV Data Set Config,它就是做前面两步的操作的)。
5.jmeter断言
断言的作用是用来查看返回结果是否正确,如果正确就代表这个请求的返回值是正确的,如果没有的话就代表这个请求的结果和我们预期的不一致,这样我们就可以通断言来检查返回结果,测试是否通过。
关联作用是由于后面操作需要用到前面服务器返回的结果,所以将该值保存传递过来以便使用。
Jmeter中的关联一般通过正则表达式提取器来完成(如果有特殊的jar包也可)
关联的值在其他请求引用时,直接使用${name}即可,name就是你关联的时候设置的变量名。
操作数据库的步骤:1. 导入jdbc的jar包,因为jmeter本身不能直接连接mysql,所以需要导入第三方的jar包,来连接mysql。2、创建数据库连接配置,mysql的url、端口号、账号、密码3、写sql,执行sql 4、查看结果
Jmeter导入jdbcjar包
配置mysql连接
(1)添加一个JDBC Connection Configuration
(2)配置mysql连接池的名称,后面发sql请求的时候指定连接哪里
(3)数据库的url:jdbc:mysql://192.168.1.116:3307/bugfree?allowMultiQueries=true
(4)数据库驱动:这里就是指定连接什么类型的数据库,mysql、oracle、SqlServer等等
(5)账号密码
Jmeter数据库驱动列表
一般我们在做压力测试的时候,分单场景和混合场景,单场景也就是咱们压测单个接口的时候,多场景也就是有业务流程的情况下,比如说一个购物流程,那么这样的场景就是混合场景,就是有多个接口一起来做操作。1)单场景,一个请求就可以了2)混合场景,多个请求3)压测时间,一般场景都是运行10-15分钟,如果是做疲劳测试的话,可以压一天或者一周,根据具体的情况来定
压测数据准备:在做压测的时候,数据量少和数据量大的情况下,测试的结果是不一样的,所以,我们在设计场景的时候是要考虑到这种情况的,要测试数据库中数据量大和数据量小的情况,如果是要测试数据量大的情况下,就要造数据了,造数据可以使用jmeter,操作数据库来造数据,也可以使用python连接数据库,批量的造数据
压测结果查看:查看结果关注的几个指标1、tps是每秒钟处理的请求数,也就是指服务器的处理能力,tps越高说明服务器处理能力越好2、响应时间,也就是每个请求的处理时间3、并发用户数 也就是多少
我们在做测试的时候,有时候要运行很久,公司用的测试服务器一般都是linux,就可以运行在linux下面,linux下面不能像windows一样有图形化界面,那怎么运行脚本呢,就先在windows上把脚本做好,然后在linux下运行即可,linux下运行jmeter是在jmeter的bin目录下的jmeter.sh这个shell脚本。
sh jmeter.sh -n –t a.jmx -l res.jtl
-n代表以没有图形化界面启动,-t代表后面是测试脚本,a.jmx也就是我们做好的jmeter脚本,-l代表测试结果 res.jtl就是测试结果文件,查看结果的话,在查看结果树视图中导入这个res.jtl就可以查看到测试结果了
我们在压测的时候,可能并发比较大, 一台机子已经启动不了那么多并发了,这个时候我们就要使用多台机子一起来发压力,就要添加压力机,添加压力机怎么添加呢,首先要在做压力机的机子上启动jmeter的代理,然后做为控制机的机子上添加上压力机的ip即可。
Jmeter的bin目录下有一个jmeter-server,启动它即可,windows机子作为压力机的话,运行jmeter-sever.bat,linux作为压力机的话,运行jmeter-server。
然后在作为控制机的jmeter配置文件里添加压力机ip即可,jmeter的配置文件在bin目录下jmeter.properties,添加压力机的时候,在配置文件里面找到remote_hosts添加ip,然后重启jmeter就可以看到远程压力机了
(jmeter 添加压力机1、先在其他的负载机(另外的电脑)上启动jmeter-server(jmeter-server.bat windows) (jmeter-server.sh mac、linux)主控机和负载机2、修改主控机jmeter的配置文件,找到remot_hosts,然后把负载机的ip加入到里面就好了remot_hosts=127.0.0.1,192.168.1.2:1099,192.168.1.3:1099默认jmeter-server的端口号是1099,如果说负载机上的端口号改了,那么你在这里也得改3、启动时候要选择远程全部运行ps:如果有参数化文件,那么在负载机同样的位置上也得有一个参数化文件)
添加header
添加cookie
添加权限验证
上传文件
用户定义的变量
函数生成器
文件读取
Mysql
Mongodb
设置并发
查看结果
Linux下运行脚本
添加压力机