我正在用Spring开发一个REST API(HTTPS),现在需要对1000个并发用户进行负载测试。问题是我使用了siege来进行负载测试,但它不能在jwt令牌头上进行测试。在我的场景中执行负载测试的最佳方法是哪种?
wgxvkvu91#
您可以使用Jmeter测试JWT Secured Rest API。您可以将jwt令牌与请求沿着包含在“HTTP头管理器”中。参考: www.example.com
nbysray52#
我建议使用以下配置:1.将jjwt jar沿着依赖项(jackson-databind)放在JMeter Classpath下(只需将jar文件放到JMeter安装的“lib”文件夹中,然后重新启动JMeter来拾取它们)1.添加HTTP请求采样器并配置它以发送API请求。1.添加HTTP头管理器作为HTTP请求采样器的子项。1.添加JSR223预处理器作为HTTP请求采样器的子项。1.将以下代码放入JSR223预处理器“脚本”区域:
import io.jsonwebtoken.Jwts import io.jsonwebtoken.SignatureAlgorithm import io.jsonwebtoken.impl.crypto.MacProvider import org.apache.jmeter.protocol.http.control.Header import java.security.Key def key = MacProvider.generateKey(); def compactJws = Jwts.builder() .setSubject('Joe') .signWith(SignatureAlgorithm.HS512, key) .compact() sampler.getHeaderManager().add(new Header('Authorization', 'Bearer ' + compactJws))
上面的代码将生成一个JSON Web Token,它将注册的声明子(主题)设置为Joe,并将值为Bearer %generated token string%的Authorization头添加到HTTP请求中。您需要根据需要修改代码,但概念应该相同。如果需要,请联系您的应用程序开发人员寻求帮助。参考文献:
Joe
Bearer %generated token string%
Authorization
uklbhaso3#
我建议使用gopayloader https://github.com/domsolutions/gopayloader,这是一个用Go语言编写的HTTP负载测试器,可以通过JWTS实现大约50 k的RPS。它通过提供一个私钥来签名JWT i,从而生成定制的JWT。e.
./gopayloader run http://localhost:8081 -c 150 -r 1000000 --jwt-header "my-jwt" --jwt-key ./private-key.pem --jwt-kid 3434645743124 --jwt-sub "my-subject" --jwt-aud "some-audience" --jwt-iss "some-issuer"
会生成一个JWT体,如下所示:
{ "aud": "some-audience", "exp": 1714130039, "iss": "some-issuer", "jti": "05181473-bbd6-4d21-8942-d86c2e972b2b", "sub": "my-subject" }
带表头;
{ "alg": "ES256", "kid": "3434645743124", "typ": "JWT" }
它预先生成JWT并在运行测试之前将其保存到磁盘,以保持低内存占用并实现高RPS,因为CPU周期专用于发送请求而不是生成JWTS。每个JWT都是唯一的,因为它有自己的jti i。e."jti" : "8f2d1472-084c-4662-ae74-04e0f1de4993"这可能很有用,因为某些JWT身份验证的服务不允许重用相同的JWT,因为它只应该被使用一次以防止重放攻击,请参见 www.example.com
jti
"jti" : "8f2d1472-084c-4662-ae74-04e0f1de4993"
3条答案
按热度按时间wgxvkvu91#
您可以使用Jmeter测试JWT Secured Rest API。
您可以将jwt令牌与请求沿着包含在“HTTP头管理器”中。
参考: www.example.com
nbysray52#
我建议使用以下配置:
1.将jjwt jar沿着依赖项(jackson-databind)放在JMeter Classpath下(只需将jar文件放到JMeter安装的“lib”文件夹中,然后重新启动JMeter来拾取它们)
1.添加HTTP请求采样器并配置它以发送API请求。
1.添加HTTP头管理器作为HTTP请求采样器的子项。
1.添加JSR223预处理器作为HTTP请求采样器的子项。
1.将以下代码放入JSR223预处理器“脚本”区域:
上面的代码将生成一个JSON Web Token,它将注册的声明子(主题)设置为
Joe
,并将值为Bearer %generated token string%
的Authorization
头添加到HTTP请求中。您需要根据需要修改代码,但概念应该相同。如果需要,请联系您的应用程序开发人员寻求帮助。
参考文献:
uklbhaso3#
我建议使用gopayloader https://github.com/domsolutions/gopayloader,这是一个用Go语言编写的HTTP负载测试器,可以通过JWTS实现大约50 k的RPS。
它通过提供一个私钥来签名JWT i,从而生成定制的JWT。e.
会生成一个JWT体,如下所示:
带表头;
它预先生成JWT并在运行测试之前将其保存到磁盘,以保持低内存占用并实现高RPS,因为CPU周期专用于发送请求而不是生成JWTS。每个JWT都是唯一的,因为它有自己的
jti
i。e."jti" : "8f2d1472-084c-4662-ae74-04e0f1de4993"
这可能很有用,因为某些JWT身份验证的服务不允许重用相同的JWT,因为它只应该被使用一次以防止重放攻击,请参见 www.example.com