如何每小时运行一次负载测试场景?

Posted

技术标签:

【中文标题】如何每小时运行一次负载测试场景?【英文标题】:How to run load test Scenario once every hour? 【发布时间】:2020-06-08 14:43:20 【问题描述】:

我有几个场景的 loadTest,运行了 12 个小时。 我想添加另一个场景,每小时运行一次,由 10 个虚拟用户运行。

我正在使用的丑陋解决方案是增加 12 个场景,每个场景都有自己的“延迟启动”,间隔为 1 小时。 这是一个丑陋的解决方案。

如何告诉特定场景每小时运行一次。 注意:对于这种情况,我不需要它每小时运行一次。主要思想是让任务运行 +/- 每小时一次。

【问题讨论】:

【参考方案1】:

我建议对两种情况进行负载测试,一种用于主要用户负载,另一种用于每小时 10 用户的情况。然后安排在每小时开始时将 10 个用户的虚拟用户 (VU) 数量设置为 10,并酌情减少。该问题没有说明 10 用户测试每小时运行多长时间。

实现这一点的基本方法是在负载测试心跳插件中修改m_loadTest.Scenarios[N].CurrentLoad,以获得合适的N。顾名思义,在测试期间经常调用心跳。所以安排它检查测试的运行时间,并在每小时开始时分配m_loadTest.Scenarios[N].CurrentLoad = 10,稍后将其设置回0(即零)。我相信将该值设置为比之前的值更小的值可以让 VU 执行的各个测试运行到其自然结束,但 VU 不会开始超过该值的新测试。

插件代码可能类似于以下内容(未经测试):

public class TenUserLoadtPlugin : ILoadTestPlugin

    const int durationOf10UserTestInSeconds = ...; // Not specified in question.
    const int scenarioNumber = ...; // Experiment to determine this.

    public void Initialize(LoadTest loadTest)
    
        m_loadTest = loadTest;

        // Register to listen for the heartbeat event

         loadTest.Heartbeat += new EventHandler<HeartbeatEventArgs>(loadTest_Heartbeat);
    

    void loadTest_Heartbeat(object sender, HeartbeatEventArgs e)
    
        int secondsWithinCurrentHour = e.ElapsedSeconds % (60*60);
        int loadWanted = secondsWithinCurrentHour > durationOf10UserTestInSeconds ? 0 : 10;

        m_loadTest.Scenarios[scenarioNumber].CurrentLoad = loadWanted;
    

    LoadTest m_loadTest;

有几个关于这个主题的变体的网页。搜索诸如“Visual Studio 自定义加载模式”之类的术语。一个例子请参见this page。

【讨论】:

谢谢。这就是我一直在寻找的。​​span>

以上是关于如何每小时运行一次负载测试场景?的主要内容,如果未能解决你的问题,请参考以下文章

使用 powershell 安排 Visual Studio 负载测试给我 BSOD

如何使用 gatling 进行 10000 QPS 的负载测试

Web应用程序的负载测试

如何使用 JMeter 对网站进行负载测试

网站性能测试时负载并发数怎么计算?

如何在运行时更改JMeter的负载