我是Jmeter的新手;我只使用了两个星期,而我创建的测试却遇到了一些问题。
该测试旨在通过API调用敲击AWS中的lambda以生成预签名URL,这是将对象放入S3存储桶所必需的,要成功执行此操作,则需要签名。
以下是Jmeter测试:
Bzm-并发线程组:
User Defined Variables
HTTP Header Manager
Jp@gc- throughput shaping timer
HTTP请求:
JSR223 PreProcessor (Generate a random guid for the object)
JSR223 PreProcessor (Generates the required signature)
我正在使用上面的代码执行以下负载测试,首先以每秒1个请求为基准,然后每20分钟将每秒请求增加到30,持续2分钟,然后每秒返回1个请求,此循环重复在2小时内。
此测试运行在10个Fargate任务上,因此应该达到lambda的请求总数在基准时为每秒10个请求,在突发期间为每秒300个请求。
我的问题是,当我进入周期中的第三个突发时,我的测试返回了403错误,当检查Jmeter时,它报告403错误“签名过期现在早于”消息。
我不清楚为什么我的请求在成功运行一个小时后突然开始因该错误而失败的原因。我能够找到的唯一与之相关的信息是时钟偏斜问题。但是,由于测试成功运行了一个小时才发生,并且所有内容都托管在AWS中,所以我不认为这是一个时钟偏斜问题,而且我也不相信这是我如何解决此问题。
还有其他人遇到类似的问题吗?
答案 0 :(得分:0)
根据Authenticating Requests (AWS Signature Version 4)文章:
防止重复使用请求的签名部分 – 请求的签名部分(使用AWS签名)在请求时间戳的15分钟内有效。有权访问已签名请求的未授权方可以在15分钟内修改请求中未签名的部分,而不会影响请求的有效性。因此,我们建议您通过对请求标头和正文进行签名,向Amazon S3发出HTTPS请求以及使用s3:x-amz-content-sha256条件密钥(请参阅Amazon S3签名版本4身份验证特定策略密钥)来最大化保护。 ),要求用户签署S3请求正文。
因此,您需要检查请求的时间戳字段,并将其与计算机上的当前时间进行比较。
另外请注意,您可以使用__UUID() function创建GUID,因此无需编写自定义代码。
确保使用Groovy语言并在Cache compiled script if available
框打钩,并避免将JMeter函数或变量内联到脚本主体中。
您可以在How to Handle Dynamic AWS SigV4 in JMeter for API Testing文章中看到生成AWS签名的示例