做性能测试之前要对Jmeter有一定的了解,本文通过案例,帮大家快速上手Jmeter。如果你已经在用,那么可以忽略。
我用的是Jmeter 5.4.3版本
1、切换语言
打开Jmeter后默认英文,如果想切换成中文可以在
Options->Choose Language->Chinese(Simplified)设置成简体中文。
2、新建请求
首先,我们需要新建一个线程组
接下来的所有操作,都是在这个线程组下进行。
在线程组下新建请求以前,都需要新建三个元件:Cookie管理器,http默认请求、用户自定义变量。可能用不到,但是一般还是加上去。这三个元件都位于:配置元件的子目录下
说明:
HTTPCookie管理器,一般用于存储、修改cookie
HTTP请求默认值,用于默认请求地址、端口、协议等
用户定义的变量,用于存储在测试过程中我们需要设置的变量
这里我们仍然使用微信公众号提供的接口进行演示
https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html
这是接口文档
我们在HTTP请求默认值里写入
说明:https请求端口号为443,http请求端口默认80
然后我们在取样器(Sampler)下新建http请求
然后把我们要填写的接口变量填入:
3、添加查看结果树
填写好以后,我们就可以执行先看一下效果了。可是执行(那个绿色的侧三角)以后,看不到结果。所以我们需要添加一个「查看结果树」的监听器来查看执行结果
点击执行,然后点击查看结果树元件,就可以看到执行结果了
4、添加断言
可以看到,我们上面演示通过了。这就是一个正向的接口测试用例完成了。
添加个断言
我们就断言响应是200,表示通过,其他断言可以选择响应文本,进行业务断言。我们这里只举个例子。
紧接着我们写第二个接口创建标签
接口文档地址:
https://developers.weixin.qq.com/doc/offiaccount/User_Management/User_Tag_Management.html
5、添加JSON提取器/正则表达式提取器
可以看到,他需要传一个access_token,而这个值正是我们上面接口的返回值。也就是说我们要把上面返回值提取出来,所以我们就要在获取access_token接口添加正则表达式提取器或Json提取器(二选一使用)他们都在「后置处理器」中,毕竟是发送完请求以后的处理
我们先用JSON提取器演示
在获取access_token接口下添加JSON提取器
根据接口返回结果
我们这样写JSON提取器
解释:**$.access_token
**表示绝对路径,即取返回值中第一层的access_token的值,如果写相对路径,就写两个点$..access_token
。
6、取样器
写好以后,发现也不能确定能不能取到值,我们就在线程组->取样器中添加调试取样器「Debug Sampler」
添加上就行,什么都不用管。
然后执行获取access_token 接口。在查看结果数中查看取样器取值结果
可以看到这个值我们已经取到了
第二种方法
正则表达式提取器
说明:把你要取的字段使用**(.*)**替换,这样就能取到那段值了,关于为什么这样写,粗暴的说就是这样就能取到你就这么写就行了,委婉的说就是你可以去看一下正则表达式那部分知识。
然后回到创建标签接口,按文档写参数,利用**${变量名}
**引用变量。上面我们定义的变量名是access_token,所以这里接口这样写
通过消息体数据进行传参。执行以后发现通过是通过了,可是中文字符显示的都是问号。解决方式就是在请求内容编码添加utf-8编码
如果还不行,就去修改Jmeter的bin文件夹下的**jmeter.properties
文件内上sampleresult.default.encoding=utf-8**
然后重启Jmeter,就好了。
编码好了,可是又有个问题,就是城市名不能重复。最简单的解决方法就是城市名后面加个变量,比如:赤峰999
7、函数助手
这时候就用到了函数助手
点击以后
这里除了用RandomString,也可以用Random,或者其他你想用的都可以
把复制到的函数粘贴到消息体数据中(注意一下,函数也在双引号里面)
再执行,就看每次都能通过了
8、BeanShell
最后还要说一下BeanShell的应用,这个很重要,只要是软件做不到的,都可以通过BeanShell通过脚本来实现。BeanShell在取样器、前置处理器、后置处理器、断言、定时器、监听器中都有。
8.1)打印
打开选项->日志查看
**log.info("打印的内容")
**或
System.out.println("这个在控制台打印")
8.2)获取变量
vars.get("变量名")
8.3)设置变量
vars.put("变量名", "变量值")
这个变量只能在当前线程组使用
这里设置的mytest这个变量在用例或其他地方是可以调用的。
8.4)props用于存储Jmeter的全局静态变量
这个变量可以跨线程组使用
props.get("变量名")
props.put("变量名", "变量值")
比如
8.5)prev用于获取到前面一个取样器返回的信息
prev.getResponseCode()
8.6)ctx表示上下文
例如打印上下文所有变量**ctx.getProperties()
**
结果:
9、连接数据库,并从数据库取值
在配置元件中选择JDBC Connection Configuration
然后填写,注意要往Jmeter的lib目录里放一个jar包,叫
mysql-connector-java-5.1.7-bin.jar
网上就能下载
配置好以后,新建JDBC Request
填写
当我们数据库连接并查询成功后,数据库里的用户名密码就是我们接下来测试用例需要写入的数据,我们就需要从数据库取出这个值。
于是我们在取样器中再次新建一个BeanShell取样器
然后把数据库第一行用户名这个值赋值给username变量
vars.put("username", vars.getObject("result").get(0).get("username"))
说明:
1)result为JDBC Request元件里设置的那个变量名
2)get(0)表示获取数据库第一行
3)get(“username”)是因为数据库用户表第一行有username这个键
--------------综上--------------
把上面的内容自己写一遍,至少不会对Jmeter陌生了吧。
下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!
最后: 可以在公众号:程序员小濠! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。
如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!喜欢软件测试的小伙伴们,可以加入我们的测试技术交流扣扣群:779450660里面有各种软件测试资源和技术讨论)