jmeter测试接口
Posted study!!!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jmeter测试接口相关的知识,希望对你有一定的参考价值。
jmeter可以做各种接口请求,还可以将所有接口流程化,写好测试脚本后,同时运行所有接口。
一、get请求
示例:首先,新建一个线程组
在线程组上,新建一个http请求(接口请求)
为了对接口请求结果观察,再添加一个监听器:查看结果树
对http请求进行编辑,填写对应的信息,运行
或者参数写在parameters中
点击运行,查看结果树,点击对应请求查看结果。
响应数据中有乱码,解决办法:将jmeter安装目下bin目录下的jmeter.properties打开,将sampleresult.default.encoding=ISO-8859-1替换为sampleresult.default.encoding=utf-8,同时将该行前的#去掉,重启jmeter即可
二、post请求
需要将请求方法改为post,参数按要求填写到parameters中,或者body data中(如果入参事json数据,填写到body data中)
填好后,点击运行--查看结果树。
如果body data中json数据写中文有乱码时,如下,解决办法:jmeter安装目录下bin\\jmeter.properties中修改默认字体:#jsyntaxtextarea.font.family=Hack 改 jsyntaxtextarea.font.family=宋体 去掉#,重启jmeter
三、添加cookie
有些接口的操作,前提必须是已经登录,这时就需要在接口中添加cookie。在上面登录接口测试中,响应结果中会包含一个cookie,将他添加到需要添加的接口中即可.可用正则表达式提取,也可用插件提取
用插件提取:
1、先从网上下载一个插件https://jmeter-plugins.org/wiki/JSONPathExtractor/,下载后解压以后将lib和lib/ext中的jar包放到安装目录的lib文件夹下重启jmeter,
在登录请求下添加后置处理器--json path extractor,然后将登陆响应数据中对应的cookie用该插件存起来,如下:
然后在 学生金币充值 请求中添加cookie管理器(在特定请求下添加,则cookie只作用于该请求,如果放到线程组下,则作用于该县城租下所有请求)
运行即可成功。
如果返回的json数据时多层嵌套的,则可以这样取:
比如返回数据这样想取到stu_info数组中的第一个id,怎在json path extarctor中$.stu_info[0].id取值
在其他地方用${id}调用即可
用正则表达式提取:在登录请求后,添加正则表达式提取器
学生金币充值仍需添加cookie。然后运行。成功。
四、添加header
在接口请求中需要添加请求头携带信息时,可添加信息头管理器,然后再信息头管理器中填写相应内容即可。
五、上传和下载文件
jmeter中请求需要上传文件
jmeter下载文件
下载文件链接为http://img4.duitang.com/uploads/item/201307/03/20130703195830_uwerd.thumb.700_0.jpeg
下载的话,有一步是要把文件保存到咱们本地的,这个jmeter没有现成的东西可以用,就得咱们自己写beanshell来实现,把文件保存到本地。
然后再添加Sampler-BeanShell Sampler,写上下载并保存文件代码
import java.io.*; byte[] result = prev.getResponseData(); //这个是获取到请求返回的数据,prev是获取上个请求的返回 String file_name = "C:\\\\Users\\\\Administrator\\\\Desktop\\\\下载.jpg"; //代表存放文件的位置和文件名 File file = new File(file_name); FileOutputStream out = new FileOutputStream(file); out.write(result); out.close();
之后点击运行,即可将对应url路径的图片下载到桌面
六、参数化
参数化可以让用户在脚本运行时,选取不同的数值进行代入,更接近实际。同时当某一数值在脚本中多次使用时,用参数化可以避免改动多处情况。只需要改动参数对应的取值,即可同步更新整个脚本中对应参数
1、文件参数化
例如:正常注册接口,一次只能注册一个用户,如果用上参数化,将需要注册的信息都放到文件里,在脚本运行的时候可以一个一个连续读取,那么就能同时注册多个用户。这里对应的参数都用一个变量代替,而变量的值来源于参数文件。
这里用csv文件对参数进行参数化: 首先需要准备好文件。对应参数填写数据。
准备好数据以后就可以使用了。在请求上添加一个csv data set config
这部分已经配好了,因为文件中有6条数据,如果想要6条数据都被执行的话,就要执行6次,所以还需要在线程组处进行配置
到此配置完成,点运行成功。
2、用户自定义变量参数化
例:将服务器ip地址进行参数化:
1、在线程上添加用户自定义变量
接下来所有用到服务器ip地址的地方,都可以用${host}代替
3、函数助手
jmeter提供了一些函数,可以帮助用户对进行参数化
比如在刚才的username后随机增加一个数字,就可以这样使用,直接复制即可取值
函数助手中提供了很多好用的函数,需要的话可以一一实验
七、关联
因为在测试过程过有些数据是经常发生变化的,要获取并使用这些数据,就要使用关联。
一般关联用于保存动态的数据。比如一个请求要用到登录的sessionid,但是因为每次登录sessionid都是会变化的。这时候就可以用关联的方法将sessionid提取出来。然后再在请求中引用。
上例写的添加cookie时,就是用到关联技术保存cookie。然后再引用。
八、断言
断言就是用来验证结果是否正确。可以对响应结果中做一些判断
比如登录的响应数据中包含sign关键字。我们就可以添加一个断言,验证结果是否含有sign
上面示例表示结果中包含 sign。如果结果中包含,则断言通过;如果结果中不包含,则会显示断言失败。可以更好地找到失败原因。
九、jmeter访问数据库
jmeter不能直接访问数据库,必须先添加对应的jar包。
打开测试计划页面,添加需要访问数据库对应的jar包,比如连接mysql数据库,先加上
在对应的线程组或线程上进行数据库配置
按照如下图示,对数据库进行配置
配置完成后,可对数据库进行操作。新建一个jdbc request
query type选择select,只能写select语句
选择callable 增删改查语句都可以写
连接mysql时出错:is not allowed to connect to this MySql server 不允许远程访问解决办法:
在mysql命令窗口执行命令GRANT ALL PRIVILEGES ON . TO ‘root’@’%’ IDENTIFIED BY ‘root’ WITH GRANT OPTION;,给所有的ip都赋予访问数据库权限
以上是关于jmeter测试接口的主要内容,如果未能解决你的问题,请参考以下文章