java多用户并发_JMeter java模拟多用户高并发请求测试(json,form表单)

本文介绍了如何使用JMeter进行Java多用户并发测试,详细讲解了模拟json和form表单高并发请求的步骤,包括线程组配置、请求头设置、监听器的使用,以及数据源的动态配置和内存参数调整。
摘要由CSDN通过智能技术生成

1.情景展示

在实际开发过程中,需要进行测试的时候,往往需要进行压力测试,或者高并发情况下,同时对一张表数据进行修改、读取操作,程序会不会出现多个用户取出的数据一致,或者修改次数与实际请求数不一致等问题。

2.分析

如果在项目中写多线程模拟并发请求,并不是很好,还需要自己写代码,来回修修改改;

有一个工具就可以很好的模拟出高并发请求,供我们直接使用:JMeter,开源、免费;

使用前提:JAVA运行环境

3.JMeter下载及安装

下载

下载地址见文末推荐。

44133a132c17b20a023e50a1c1a10036.png

这里需要注意的是:

点击“Download Releases” ,出现的当前永远最新版本,红框里会标注:当前版本运行的java最低版本;

Linux系统下载*.tgz文件,windows系统下载*.zip文件;

至于想要下载历史版本,不知道在哪里藏着。

安装

下载成功后,解压到想要存放的位置,比如:D盘

和tomcat一样,只要你配置了JAVA_HOME环境变量,它就能运行(只要java版本号>=JMeter的最低要求,启动就不存在闪退的情况)。

如何查看当前环境下配置的jdk版本?见文末推荐。

d3e3cbbc6db446d3e988c8973215af4b.png

双击运行jmeter.bat文件即可。

此时,会启动两个程序;

ca98abd3ebbe3a932d719ae3b01e2261.png

使用java编写的图形界面

83cdac3a0e6573046a3b1a348138a305.png

这俩是同一个程序,关闭其中任何一个,另一个也会跟着关闭。

下面,切入正题。

4.模拟多用户高并发请求(json请求)

第一步:创建线程组;

选中TestPlan,右键,Add,添加线程组。

39c9b5d097a05cfbeec0c89c69be2497.png

设置线程组参数。

这里配置为:10个线程,同时启动,循环1次。

0386aaa38529a6b840acf71ebee9f52a.png

第二步:新增http请求默认值;

新增http请求默认值,所有的请求都会使用设置的默认值;

f8d1e133f6c3c2cf2399c6c330486c3c.png

设置协议为http,IP为localhost,端口为8080,项目访问路径(请求上下文)设置为/,请求字符集设置为UTF-8;

大家根据自己的实际需要进行配置,嫌费事的可以是不添加http默认请求配置,在请求单独配置也是没有问题的。

61239936175b4c7fdf594878fab7058c.png

第三步:配置请求头

设置请求头为application/json,目的是:告诉服务器,我发送的json数据。

10abbcd0441fcece23d5dead54aab6c8.png

Content-Type:application/json

以上信息复制到剪贴板,选择:Add From Clipboard,即可自动将以上内容填充进去。

也可以自己手动配置,点击底部“Add”,会增加一栏,双击进去,输入内容即可。

66ebb43205278407d5c25aea7040dbf5.png

需要说明的是:如果想要发送JSON请求

309cc2c9b8de1f1fbefebf318e04a302.png

这一步不能省略,否则,服务器会将请求数据当做"text/plain"来识别。

第四步:添加Http请求

必须选中“Thread Group”,才能添加“HTTP Request”

3bf83072e85cc540ba0a4e0d8dbadc8a.png

我这里需要将请求方式改为POST,请求地址,字符集;

选择“Body Data”,添加即将请求的JSON数据。

d99ec11f496500583fa23302e3c08050.png

第五步:添加监听器;

这里添加三种:聚合报告、图形结果、用表格查看结果,区别在于结果展现形式不同。

5ad0e4261a83af91015f9d1df3b44779.png

第六步:执行,并查看结果;

红框里,是我们所建立的所有配置;

cf1647c0393787b1c04d4ff3e334f777.png

点击菜单栏的绿三角,就会立刻发送请求;

29a6ffe955b817a66300d138f05a9ac5.png

这个提示的意思是:在执行(发送请求)之前,是否进行保存的友好提示;

选择No,是不影响请求的执行哒。

执行结束后,看三个监听器的返回结果。

8b9a02a3192e327894eb51cfa0498a17.png

一般情况下,我们还会查看服务器的返回结果,所以,再添加一个监听器:结果树。

934c9fde80e52925c65cec42498e3a8c.png

切换到结果树视图,选中返回类型为JSON,选中其中一个请求,Response Body里面将会是格式化后的JSON数据(当然了,这是要取决于服务器返回给咱的是什么格式的数据)

这里接收到的中文是乱码,也不知道是什么情况。

16572fdd64606c34c086abff17b18134.png

第七步:清空监听记录,重新请求;

再次请求时,这些监听器的记录是一直叠加的;

如果想要清空这些监听器的记录的话,点击“clear”,只清空当前选中的监听器;点击“Clear All”会清空所有添加的监听记录。

157dbed3d4c1c54e10a3a8f7882ca4a1.png

这种方式更快捷

d5ee88ef82bc4b8570140e24c61fe75b.png

注意:

到此为止,我们只是模拟了一个用户,而不是多个用户,换言之,其实是同一个用户的并发请求。

第八步:多用户并发JSON请求;

同样地,选中“Thread Group”,新建一个http请求

bd0efd83d4a375a60ecf20a886827cc4.png

红框里,可以换个名字,方便区分;

其它配置基本一样,除了请求的json数据改一下就可以啦。

清空记录,发送请求,查看结果

e157d260ca1b8a79294ff9501663f248.png

此时,每个请求都并发了10次,相当于每个用户同时发送了10条请求。

如果想要模拟10个不同的用户并发,我们可以创建10个HttpRequest,确保每个请求里面的数据都不一样,线程修改成:1

a4fc30e0165e711863d51d11c838c707.png

这样,就确保了10个用户并发请求,且每个用户只请求1次。

第九步:保存当前配置文件。

按快捷键:Ctrl+S

d495b85db444052abf94ff30b8287640.png

4.模拟多用户高并发请求(form表单请求)

第一步:创建线程组;

同上

第二步:新增http请求默认值;

同上

第三步:添加数据源;

新建一个文本文件,名字随意,比如:config.txt;

目的:该文件用于配置用户信息(其实就是请求参数);

里面数据每行有两个值,userId和userToken,中间用逗号隔开,我这里设置了两个用户的信息。

41b42caf3b669d29e4b53f180cb1add4.png

第三步:新建Csv Data Set Config设置;

目的:引用上面的数据源文件。

6149b1b68ab60fd27ead25c79bc37eaf.png

Csv Data Set Config中引用配置文件config.txt,并定义变量名为userId和userToken(名称随意,只要一会和下面保持一致就可以啦);

af23006eaa4d79c7186046328902c727.png

第四步:选中“Thread Group”,新建一个http请求;

同上

在请求中引用配置文件中的变量:

在填写参数Value的地方不要将值写死,而是写为${变量名}这种格式,我这里想要引用配置文件中userToken的值,所以写为${userToken}。

45d6a948ab8a3dd65de28def06851db0.png

至此,配置完毕,我们不用再像并发json那样配置多个请求,才能模拟出不同用户的并发。因为我们在配置文件config.txt,几行记录就代表几个用户。

第五步:测试

方法同上。

2020-12-10

5.多用户并发JSON请求(动态配置多个用户)

今天又研究了一下,其实,json请求参数也可以配置成类似于form表单请求那样;

与form请求不一致的地方在于:我们需要确定好发请求的框架,

比如,请求入参长这个样子:

9d69d7cfd01e8e08d0eb74a899e11dae.png

我们不改key(key的名称固定),只把对应的value改成动态获取就可以啦。

下面,一起来看下吧:

第一步:配置数据源

新建一个文本文件,名称随意,比如:还叫config.txt。

9a57bd787acaba06972b6368e3c1fa07.png

确定好,设置几个动态变量的值,我只需要“PartyCode”和“Code”这两个key对应的值是变化的,从这个文本文件取值;

第一行,可以设置参数名称,让JMeter获取变量名字时,从第一行取(可以不加);

一行代表一个用户所对应的参数,多个用户需要配置多个请求数据源,行末不要有多余字符;

同一行数据,多个参数之间使用逗号隔开,不要有多余字符;

如果key所对应的value是字符串的话,需要我们在配置数据的时候手动加上英文状态下的双引号(字符串,必须加);

如果不加,在发送数据的时候也是不会加的,换句话说,通过变量取参数值的方式,数据会保持完全一致,并不会进行参数值格式检验;

举个例子:

明明是字符串,却不主动加双引号;

b415a9a2587479a64cef8e892ef8dbe4.png

字符串加上了双引号

139386b388366055b92ef4319f0248bd.png

第二步:创建csv数据配置

fb19b8c0dcba71650173652903d2ce46.png

1.导入文件:点击浏览,选择刚才的数据源配置文件;

2.文件字符集:设置成UTF-8;

3.变量名称:定义参数名称,会通过该名字获取对应的数据,多个变量之间使用逗号隔开;

需要注意的是:变量的数量需要与每一行的实际的value数量保持一致(有几个逗号,就配几个变量名称)

4.忽略第一行:这个默认值是false,意思是,把第一行也当成数据源。

注意:其实,第三和第四项设置是结合使用的。

5.1 假如,我们在配置文件(数据源文件)里的第一行添加了变量名,那么,我可以第三项不填,第四项设为false(实际上我这里也加上了);

如果不想用数据源文件,那我需要在第三项重新配置变量名称,第四项改为true;

5.2 当我们没有在配置文件添加变量名称时,换句话说就是:第一行就是数据源,那我们就在第三项配置变量名,再把第四项改为true;

48faaf79665428e05e556999608ec6a9.png

第三步:新建请求配置

如果,你是按照我的操作步骤来的,那么线程组下面就会多出两个请求配置

c589b40fef4f1a092817654b279ad6a2.png

首先,禁用之前的请求配置;

选中请求,右键,禁用

f9553be36e5cf174120d6bbbf5874b76.png

之所以禁用,是因为:方便查看运行结果。

其次,新建请求(方法,上面有)

50569bc243690f7731aa2a87780a7806.png

在需要动态引用数据的地方,通过el表达式${变量名},此时就不能再加双引号啦,加上就被当成字符串啦!

第四步:运行并检验执行结果。

模拟两个用户的并发请求(共10次)

ffabdb7057eaede05810eecdc6aa24fb.png

我们会发现:

通过这种动态配置数据的方式,从配置文件取出来的数据并不是按保存时的顺序取的,换句话说,就是随机的,这样,更加接近真是请求。

6.修改内存配置

2020-12-14

今天应实际需求,有7738条数据完成远程调用,所以我就想到了使用JMeter来完成,后台开启多线程异步请求,mysql数据库表创建索引,避免锁表情况的发生。

然鹅,当我开启7738个线程的时候,报错:内存溢出;

所以,只能修改原有的内存参数配置:

JMeter_HOME/bin/jmeter.bat文件,选中,右键编辑,Ctrl+"F搜索:HEAP,找到:

if not defined HEAP,在它的上面添加参数:

::在这里添加/修改内存

set HEAP=-Xms512m -Xmx1024m

ea185d5a5fa7f1f27a488e5edbed1c85.png

事实证明,虽然可以同时开启7000多个线程,但是执行起来,内存还是不够,所以,我把-Xmx的值改成了2048m,在很短的时间内就执行完毕了,真爽!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值