JMeter可以模拟HTTP请求吗

hl0ma9xz  于 2023-10-20  发布在  其他
关注(0)|答案(3)|浏览(166)

我想模拟HTTP请求,意思是发送真实的请求真实的服务器,但是忽略(不是等待)并用一个虚拟的响应覆盖响应,
JMeter有很多工具,它们很接近,但还不够,
DummySampler插件已关闭,但没有真正发送请求,
old answer直接指向镜像服务器,这似乎与特定的API请求和响应无关。
JMeter不模拟服务器。
话虽如此,JMeter 2.3有一个内置的镜像服务器-它接受任何HTTP请求,并使用包含请求详细信息的页面进行响应。
如果服务器B不关心服务器C发回的内容,那么您可以使用它来“模拟”服务器C。
我的回答是通过在1秒内添加HTTP控制器并更新响应数据来忽略HTTP响应,这是一个有问题的解决方案,但可以工作。
有没有更好的选择可以在插件中使用,或者并行执行其他工具?
为JMeter开放一个增强功能是相关的吗?如果是的话,它应该改进HTTP请求还是作为一个新的采样器Mock HTTP请求?是否可以让控制器只支持发送并停止等待响应(例如使用0秒)?

gg58donl

gg58donl1#

最简单的选择是,即。WireMock非常强大和灵活。
您可以通过将WireMock jar(沿着依赖项)添加到JMeter类路径并从JSR223 Test Elements using Groovy language运行WireMockServer来将其与JMeter集成。
如果你不太熟悉Groovy,你可以使用OS Process Sampler将WireMock作为standalone Java application运行

import com.github.tomakehurst.wiremock.WireMockServer;
import com.github.tomakehurst.wiremock.stubbing.StubMapping;

import static com.github.tomakehurst.wiremock.client.WireMock.*;

public class WireMockTest {

    public static void main(String[] args) {
        WireMockServer wireMockServer = new WireMockServer();
        configureFor("0.0.0.0", 8080);
        wireMockServer.start();
        StubMapping foo = stubFor(get(urlEqualTo("/wiretest"))
                .willReturn(aResponse()
                        .withStatus(200)
                        .withBody("Hello World")));
        wireMockServer.addStubMapping(foo);
    }
}
ymdaylpp

ymdaylpp2#

据我所知,您可能希望模拟一个用于测试结果的请求,同时发送一个独立于测试结果的真实的请求。实现此目的的一种方法是以这种方式将JSR223 PostProcessor附加到Dummy Sampler

PostProcessor元素被添加到Dummy Sampler下,并在模拟请求之后执行。在JSR223后处理器的脚本中,我们可以添加几行脚本来执行一个满足您用例的“即发即忘”请求:

import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.HttpResponse;
HttpClient httpClient = HttpClientBuilder.create().build();
HttpPost request = new HttpPost("https://www.your-domain.com");
HttpResponse response = httpClient.execute(request);
log.info("HTTP Response: " + response);

这个脚本可以应用于任何您想要进行HTTP调用,但又不希望调用结果影响测试结果的地方。您可以简单地将以下行更改为您打算调用的实际URL:

包含log.info(...)的最后一行是可选的,但将在测试日志中输出请求的结果(* 即 ,状态代码200404 等 *),这可能对调试有用。

sczxawaw

sczxawaw3#

我manged做它使用以前的职位(https://stackoverflow.com/a/49130518/5210267),但成功后才把它放在“bzm -并行控制器”和设置超时定义时间WireMockServer的工作:image example

相关问题