【问题标题】:How to load test a SOAP interface (are SOAP function calls atomic)?如何加载测试 SOAP 接口(SOAP 函数调用是原子的)?
【发布时间】:2010-09-15 23:42:16
【问题描述】:

服务器提供 SOAP 函数调用接口。
数百台,也许是几千台 PC 调用该函数。
我需要使用单台 PC 对此进行负载测试。

目前我只有一个 for 循环。这够好吗?如果不是,我怎样才能使测试更真实?

我曾考虑过线程,但如果 SOAP 函数调用是原子的,那么这不会带来任何好处。即使是这样,我的测试 PC 上仍然只能有一个活动线程(每个 CPU)。

我希望这很清楚,如果没有,请询​​问更多信息。

在一台电脑上模拟多台 PC 的最佳测试方法是什么?


更新,我使用的是 VB Express 2008。我不敢相信 .NET 的构造如此之好,以至于它会在 SOAP 远程过程调用期间阻塞 CPU……还是这样?

【问题讨论】:

    标签: .net visual-studio-2008 soap load-testing soap-client


    【解决方案1】:

    使用 for 循环,您可能只发出一个 同时 请求。运行循环的线程可能会被阻塞,等待响应。请注意,这会阻塞线程,但不会阻塞整个 CPU,它可以被许多线程共享。因此,通过使用多个线程,您可以同时发出多个请求。

    现在,服务器上的 SOAP 处理程序可以是单线程的 - 这意味着它只能同时处理 1 个请求。这不太可能 - 因为服务器框架专门设计为以这种方式工作。希望您不会发现这种情况。

    您是否确定需要处理多少同时请求?根据场景的不同,即使是 10,000 个活动客户端的集合也可能只会同时生成 10 个请求。这将取决于呼叫的频率以及响应持续时间。请求速率(请求数/秒)将决定您是否能够可靠/准确地模拟来自单台计算机的所需负载。

    【讨论】:

      【解决方案2】:

      SOAP 调用的原子性对线程的有用性影响不大。

      在降低测试机器的速度之前,您应该创建系统允许的尽可能多的线程。甚至比 CPU 更多的线程仍然会产生大量负载,因为 SOAP 调用可能不会立即返回。如果您有 4 个 CPU,前 4 个线程可能会同时进行 SOAP 调用,那么接下来的 4 个线程可以在原来的 4 个完成之前再进行 4 个调用。虽然这并不能完全模拟多个机器调用者,但如果没有一组测试机器和一组脚本来一次调用服务,您将无法准确模拟该场景。

      编辑:修正了上面的错字,单词应该是“可能”而不是“喜欢”

      【讨论】:

      • "SOAP 调用不会立即返回" 但它是原子的还是非原子的,或者应该问同步还是异步?当一个线程进行调用时,它是否会阻塞其 CPU 直到 SOAP 调用返回?
      • 这样不行。阻塞线程不会阻塞 CPU。事实上,它的作用正好相反——它允许不同的线程使用 CPU。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多