JMeter 中的时间戳断言

Timestamp assertions in JMeter

我在 JMeter 中有数千个请求和两个断言。

我的线程结构如下

主屏幕:

错误屏幕:

发生了什么:

请求通常完成了,我的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 个选项:

  1. 重试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");
    
  2. 执行数据库存储过程来处理等待。 IE。无论您是什么查询 运行 都会与等待和重试一起进入存储过程。这将允许您避免多次往返服务器。

  3. 引入其中一个计时器(例如Constant Timer)或Test Action(暂停)under ASSERT SQL SERVER INSERT是另一种可能性,但与所有延迟一样,它会迫使 ASSERT SQL SERVER INSERT 等待,即使它不需要等待。