JMeter 中的时间戳断言
Timestamp assertions in JMeter
我在 JMeter 中有数千个请求和两个断言。
我的线程结构如下
主屏幕:
错误屏幕:
- 我目前正在模拟 5,000 个用户。
- 我正在测试的 HTTP 服务是一个没有屏幕的端点。
我在BODY中发送了一个JSON,它在银行中写入记录,我只发送有效数据,固定值,除了每个请求都是动态的UUID .
{
"program": "001",
"level": "INFO",
"event": "REGISTER_ALUNO",
"message":{
"code": "$ {uuid}",
"operation": "Student register",
"Name": "John SQL SERVER10",
"enroll": "123"
}
}
发生了什么:
请求通常完成了,我的Bean Shell UUID_GENERATOR也完成了。
但是,我的 JDBC 请求 ASSERT SQL SERVER INSERT
开始出现错误,原因如下:如果输入了请求中传递的值,它会在数据库中进行验证,但由于大请求的数量,一些断言是验证值还没有被输入银行,因为请求之间有延迟,导致断言错误。
我需要某种形式的用户计时器,以便在完成在银行中进行记录的请求后进行断言。
由于 JMeter 异步运行调用,我无法执行类似这样的操作。
第一个 UUID,请求之后,之后,断言。
我试过使用一些固定和动态计时器,但有些断言仍然无法解决。
有没有人有任何控制器或计时器提示,我可以使用它来使断言在没有 "rushing" 的情况下成功完成?
注意:同样的错误出现在命令行上。
如果我理解正确,采样器 HTTP Request
将一些东西放在队列中以插入到数据库中,但插入可能需要一些时间。同时你的 HTTP Request
returns 因为它接受了工作(即使工作还没有完成),并继续到下一个采样器 ASSERT SQL SERVER INSERT
,它可能到达 SQL 服务器 之前 HTTP Request
提交的作品居然进入了DB
如果这是正确的,那么您可以使用 3 个选项:
重试ASSERT SQL SERVER INSERT
几次,不要失败,直到它真正执行验证,或者达到超时。这可以通过 While Controller 和一个告诉它何时退出的变量来完成(即当 ASSERT SQL SERVER INSERT
成功或达到最大重试次数时):
JSR223 Sampler; code:
vars.put("rerun", "true");
While Controller; condition: ${rerun}
ASSERT SQL SERVER INSERT
JSR223 Post-Processor; code:
if(SampleResult.isSuccessful() /* || add condition to limit number of retries here */)
vars.put("rerun", "false");
执行数据库存储过程来处理等待。 IE。无论您是什么查询 运行 都会与等待和重试一起进入存储过程。这将允许您避免多次往返服务器。
引入其中一个计时器(例如Constant Timer
)或Test Action
(暂停)under ASSERT SQL SERVER INSERT
是另一种可能性,但与所有延迟一样,它会迫使 ASSERT SQL SERVER INSERT
等待,即使它不需要等待。
我在 JMeter 中有数千个请求和两个断言。
我的线程结构如下
主屏幕:
错误屏幕:
- 我目前正在模拟 5,000 个用户。
- 我正在测试的 HTTP 服务是一个没有屏幕的端点。
我在BODY中发送了一个JSON,它在银行中写入记录,我只发送有效数据,固定值,除了每个请求都是动态的UUID .
{ "program": "001", "level": "INFO", "event": "REGISTER_ALUNO", "message":{ "code": "$ {uuid}", "operation": "Student register", "Name": "John SQL SERVER10", "enroll": "123" } }
发生了什么:
请求通常完成了,我的Bean Shell UUID_GENERATOR也完成了。
但是,我的 JDBC 请求 ASSERT SQL SERVER INSERT
开始出现错误,原因如下:如果输入了请求中传递的值,它会在数据库中进行验证,但由于大请求的数量,一些断言是验证值还没有被输入银行,因为请求之间有延迟,导致断言错误。
我需要某种形式的用户计时器,以便在完成在银行中进行记录的请求后进行断言。 由于 JMeter 异步运行调用,我无法执行类似这样的操作。
第一个 UUID,请求之后,之后,断言。
我试过使用一些固定和动态计时器,但有些断言仍然无法解决。
有没有人有任何控制器或计时器提示,我可以使用它来使断言在没有 "rushing" 的情况下成功完成?
注意:同样的错误出现在命令行上。
如果我理解正确,采样器 HTTP Request
将一些东西放在队列中以插入到数据库中,但插入可能需要一些时间。同时你的 HTTP Request
returns 因为它接受了工作(即使工作还没有完成),并继续到下一个采样器 ASSERT SQL SERVER INSERT
,它可能到达 SQL 服务器 之前 HTTP Request
提交的作品居然进入了DB
如果这是正确的,那么您可以使用 3 个选项:
重试
ASSERT SQL SERVER INSERT
几次,不要失败,直到它真正执行验证,或者达到超时。这可以通过 While Controller 和一个告诉它何时退出的变量来完成(即当ASSERT SQL SERVER INSERT
成功或达到最大重试次数时):JSR223 Sampler; code: vars.put("rerun", "true"); While Controller; condition: ${rerun} ASSERT SQL SERVER INSERT JSR223 Post-Processor; code: if(SampleResult.isSuccessful() /* || add condition to limit number of retries here */) vars.put("rerun", "false");
执行数据库存储过程来处理等待。 IE。无论您是什么查询 运行 都会与等待和重试一起进入存储过程。这将允许您避免多次往返服务器。
引入其中一个计时器(例如
Constant Timer
)或Test Action
(暂停)underASSERT SQL SERVER INSERT
是另一种可能性,但与所有延迟一样,它会迫使ASSERT SQL SERVER INSERT
等待,即使它不需要等待。