使用jMeter构造大量并发HTTP请求进行微服务性能测试

举报
Jerry Wang 发表于 2021/10/24 09:48:37 2021/10/24
【摘要】 比如我开发好了一个微服务,想测试其在大并发请求下的性能表现如何。比较方便的一个做法是使用工具jMeter来构造这些请求。创建一个新的工程:创建一个新的Thread Group,下图意思是这个工程会使用3个线程同时发请求,每个请求执行一次。在这个Thread Group里创建一个新的HTTP请求,维护如下属性。Protocol: httpsServer name:Http request me...

比如我开发好了一个微服务,想测试其在大并发请求下的性能表现如何。

比较方便的一个做法是使用工具jMeter来构造这些请求。

创建一个新的工程:

创建一个新的Thread Group,下图意思是这个工程会使用3个线程同时发请求,每个请求执行一次。

在这个Thread Group里创建一个新的HTTP请求,维护如下属性。

  • Protocol: https

  • Server name:

  • Http request method: GET

  • Http path: /sap/c4c/odata/v1/c4codata/AccountCollection/

  • Use KeepAlive: 不选择

在参数标签页,维护参数名称$search, 值为’Wang’。这个请求的意思是使用Odata请求查询账号名称为’Wang’的实例。

创建一个新的HTTP Header Manager,维护执行这个请求的Authorization信息。这里我使用Basic认证方式,即HTTP header名称为Authorization,值为用户名:密码经过base64编码之后的值。

维护完毕之后点执行按钮,

会观察到3个线程同时发出HTTP请求,并能看到每个请求的响应时间。

也可以用命令行 jmeter -n -t 的方式执行测试,看到的结果和在jMeter GUI上执行的一致。

使用jMeter构造大量并发的随机HTTP请求

在前一篇文章使用jMeter构造大量并发HTTP请求进行微服务性能测试里,我介绍了如何用jMeter构造并发HTTP请求。但是通过文中介绍的方式构造的并发请求,其请求参数都是硬编码的’Wang’.

有没有办法让每个并发请求查询的参数都不一样呢?比如让jMeter构造一些从1到100的随机数,作为查询请求的一部分?

JerryTestCustomer_<1~100>

解决方案

创建一个User Parameter:

Parameter的Name为uuid,值为${__Random(1,100)}

这个__Random(1,100)是jMeter提供的随机数发生器。

然后在HTTP Request的Parameters标签页里面,使用这个参数即可。

测试

随机数生成生效,每个并发请求发出的查询参数现在都不一样了。

如何使用jMeter发送两个逻辑上相关的HTTP请求

在前一篇文章使用jMeter构造大量并发的随机HTTP请求里我通过jMeter构造了大量的HTTP GET并发请求,对服务器产生了大量读操作。

现在我有另一个需求场景:假设我开发了一个创建Service Request的微服务,需要使用HTTP post调用。为了防止Cross Site Request Forgery(跨站域请求伪造),这个微服务调用时需要传一个XSRF token,这个XSRF token需要另一个HTTP get请求从服务器请求。

因此,这里存在两个逻辑上相关的HTTP请求:

1. 先调用HTTP get从服务器读取XSRF token

2. 将第一步获得的XSRF token作为HTTP post 请求头部的一个参数传至服务器。

用jMeter怎么实现这个场景呢?

总的思路就是使用Transaction Controller,将http get请求和http post请求包在一起,如下图所示。

在第一个http get请求里,使用HTTP头部参数x-csrf-token去读取token。

创建一个参数jerrycsrftoken,使用正则表达式将服务器通过HTTP响应头部返回的token解析出来并保存。

然后创建第二个HTTP post请求,在请求头部使用第一个请求创建的参数jerrycsrftoken即可。

这是我HTTP post请求的body内容,里面使用了jMeter自带的随机数发生器作为创建成功的Service Request的后缀。

最后使用jMeter成功创建的Service Request在系统显示如图:

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。