【问题标题】:Kick off a line of code simultaneously in Selenium C# Visual Studio在 Selenium C# Visual Studio 中同时启动一行代码
【发布时间】:2016-02-11 15:42:49
【问题描述】:

我正在设置性能测试并测试上传功能的性能。我现在想测试 5 个用户同时单击上传按钮时的性能。我不知道如何实现一种方法来做到这一点。以下是我为一位用户设置的测试。

    [Test]
    [Category("PerfSingleUser")]
    public void PerfSingleUserUploadLargeDataSet()
    {
        driver.GoToHomePage();

        DateTime startDateTime = DateTime.Now;
        var sw = Stopwatch.StartNew();
        UploadFiles();
        sw.Stop();

        //Logging of performance results
        var testDesc = string.Format("Time for ALEX to upload a large data set (AC2Q15Files) in a {0} browser", Browser.GetType());
        StoreResultsInCSV(startDateTime, testDesc, elapsed);

        Assert.IsTrue(sw.Elapsed < TimeSpan.FromSeconds(20), "Uploading large data set, AC2Q15Files, in a {0} browser exceeded" +
             "20 seconds", browser.GetType());
    }

【问题讨论】:

  • 您要测试什么:用户界面、网络还是服务器?我可以在 UI 方面提供帮助,但通常会使用 curl(或 Windows 等价物)这样的低级 HTTP 工具来测试上传...
  • UploadFiles() 中的 C# 代码只是上传一个 CSV 文件,然后等待按钮启用。所以测试是在 UploadFiles() 中处理的。我只是在测量 UploadFiles() 完成所需的时间。该代码有效,我只需要一种方法来使用 UploadFiles() 方法一次测量 5 个用户的每个时间。我认为这可能更适合 JMeter,但我想知道 Selenium/VS 中是否有一种方法可以在多个测试中同时执行操作。
  • 是的,有多个浏览器/会话,我只是想检查一下您想要实现的目标。我同意 JMeter 可能更合适,假设您只想“驱动”上传而不是测试 UI 响应能力、用户体验等。5 可能是我想要运行的浏览器会话数的上限。
  • 其实现在,我正在做的就是测试 UI 响应性。我现在不需要收集其他指标。我等到上传完成后启用按钮,然后收集那些挂钟时间。
  • 我不确定您使用的是什么测试框架,但您可以明确创建 5 个您选择的 IWebDriver 实例,参数化 PerfSingleUserUploadLargeDataSet 以接受驱动程序参数而不是成员变量,并且只需通过单独的线程为每个驱动程序显式调用该方法即可。可能会很混乱,但它应该可以让您对上传进行并行测试。

标签: c# visual-studio selenium


【解决方案1】:

我只使用计划任务线程 - 我不使用 C#,但可能类似于 this

您可以一次性启动所有 WebDriver 实例(5 个可能是您真正希望一次运行的最多实例)。一旦它们都准备好,并且您正在测试的页面已在每个页面中完全加载,请为每个页面创建一个单独的任务线程,以执行实际上传。

然后简单地安排所有任务线程以固定偏移量(或在固定时间,例如未来一秒)运行。这应该会在几毫秒内启动它们,而且这可能与您使用真实浏览器所能达到的一样接近同步。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-05
    • 2017-05-17
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    相关资源
    最近更新 更多