当前位置: 首页 > 知识库问答 >
问题:

多用户在RESTAPI上异步POST请求,并等待它们在Jmeter中完成所有请求

马新觉
2023-03-14

我使用相同的输入Json在REST API上提交多个POST提交。这意味着多用户(例如:10000)使用相同的Json提交相同的POST来测量POST请求的性能,但是我需要使用GET方法捕获每次提交的完成结果,并且仍然测量GET的性能。这是一个如下的异步过程

  • 提交后

因此,我需要创建一个jmeter测试计划,该计划可以处理多用户提交的异步POST,并等待它们被处理,最后捕获每次提交的完成情况。我需要生成一个图表格式的报告,可以显示我的延迟和吞吐量。对不起,我的问题太长了。谢谢,桑塔纳。

共有1个答案

魏臻
2023-03-14

根据您在评论中的澄清,在我看来,您有一个相当直截了当的脚本,可以这样表达:

Thread Group
    HTTP Sampler 1 (POST)
        Post-processor: save ID1 as a variable ${ID1}

    Timer: wait for next step to be available

    HTTP Sampler 2 (GET, uses ${ID1})
        Post-processor: save ID2 as a variable ${ID2}

    Timer: wait for next step to be available

    HTTP Sampler 3 (GET, uses ${ID1} and ${ID2})
        Post-Processor: extract completion status
        (Optional) Assertion: check completion status

我不能说具体使用哪个定时器,或者哪个后处理器,它们取决于您的特定请求。

从JMeter的角度来看,你不需要担心多个用户(变量对用户来说总是独立的),但是从应用程序的角度来看,你当然需要确保多个初始POST不会相互冲突(即每个帖子都应该处理独立的数据)

延迟是用于将结果保存到文件中的标准接口的一部分。但正如JMeter自己的文档所述,延迟测量在JMeter中有点有限:

JMeter测量从发送请求前到接收到第一个响应后的延迟。因此,时间包括组装请求以及组装响应的第一部分所需的所有处理,这通常会超过一个字节。协议分析器(如Wireshark)测量通过接口实际发送/接收字节的时间。JMeter时间应该更接近浏览器或其他应用程序客户端所经历的时间。

吞吐量在某些UI侦听器中可用,但也可以按照与JMeter计算相同的方式进行计算:

吞吐量=(请求数)/(总时间)

使用文件中的原始数据。

如果您计划运行100-200个用户(或出于调试目的),请使用UI侦听器;对于更高的负载,请使用JMeter的非UI模式,并将结果保存在CSV中,以便稍后进行分析。我说,首先让您的测试在UI模式下通过100个用户,然后设置一个更健壮的多机10K用户测试。

 类似资料:
  • 我目前是Jmeter的新手,正在尝试创建一个Jmeter脚本来测试处理和完成请求所需的时间。 a)使用令牌进行身份验证-完成b)发送请求-完成-返回200 c)获取请求-部分完成 C:我正试图得到能够监控这个请求,以找出它什么时候完成,失败等等。 我从研究JSR223采样器开始,但想看看是否有更好更简单的方法来实现这一点。 列表sendGet(字符串url,map 正文){

  • 问题内容: 我有一个页面,根据变量的长度,它可以发出不同数量的请求,然后我只想在所有请求完成后才将数据发送到范围。对于这个项目,我不想使用jQuery,因此请不要在答案中包含jQuery。目前,随着每个请求的完成,数据被发送到作用域,这不是我想要的。 这是我到目前为止的部分代码。 这是我对此表示怀疑的部分,因为某些东西需要作为的参数,但是在Angular的文档中并未提及,我不确定它的含义。 谢谢你

  • 我需要把所有的结果推入一个数组,使异步超文本传输协议调用,但我需要等到所有的调用都完成。 这里只有等待这个选项吗?我害怕使用它,因为等待每个请求会减慢整个过程。

  • 问题内容: 我需要等到我所有的ajax函数都完成后,再继续执行。 我的特殊情况是,在提交表单之前,我需要翻译表单中的某些字段。我通过ajax调用将其转换为外部站点。根据表单中的某些值,我需要进行更多或更少的翻译。完成所有翻译后(如果有),我必须使用ajax验证表单,如果表单有效,则提交。 这是我的方法: 首先,我有一个函数发送ajax调用并对接收到的数据进行处理: 然后,当要提交表单时,我将执行以

  • 我有一个简单的Java程序,它使用SpringWebClient发送多个请求。每个都返回一个mono,我使用的是response。subscribe()以检查结果。 但是,我的主执行线程在处理所有请求之前完成,除非我添加一个长线程。睡眠()。 对于CompletableFutures,您可以使用:CompletableFuture。allOf(期货)。join(); 有没有办法等待所有单声道的完成

  • 我已经创建了一个简单的Jersey客户端,它能够成功地使用有效负载执行POST请求。但现在它正在等待来自httpendpoint的响应: 问:代码是否有可能不等待响应。 我试图阅读泽西客户端文档,以确定我的代码是否有可能不等待响应?我看到我们只能在读取响应后关闭连接,但在我的情况下没有用。我想在将有效负载发布到endpoint后立即关闭连接。 我只需要触发并忘记POST请求,因为我不关心响应。这是