【问题标题】:Running Selenium WebDriver tests under the load在负载下运行 Selenium WebDriver 测试
【发布时间】:2016-04-20 11:53:46
【问题描述】:

我有一堆使用 Java、Selenium WebDriver 和 TestNG 编写的 Web 应用程序的功能测试。目前我的目标是在负载下测量这些测试中每种方法的时间(例如,10-15 个用户同时工作)。有没有人遇到过这样的问题,也许有一个想法怎么做?或者在负载测试的情况下无法使用WebDriver?

我正在寻找使用 jMeter + jUnit 作为 jUnitRequest 的解决方案(将我的测试从 TestNG 重写为 jUnit 并不困难),但据我所知,当一种方法依赖于其他方法时,jUnit 不支持此类测试(TestNG支持这一点),我必须将所有方法合并为一个(恕我直言是愚蠢的想法)。

任何提示如何处理此问题将不胜感激。

【问题讨论】:

    标签: java selenium junit load jmeter


    【解决方案1】:

    使用 TestNG 并不难。但是为了并行运行你的测试,你必须用你的线程来管理你的 WebDriver。为此,我将创建一个带有 ThreadLocal 的类。使用 TheadLocal 类,您可以轻松地管理每个线程的对象。有一个这样的类的例子:

    public class DriverManager {
    
        private static ThreadLocal<WebDriver> driver = new ThreadLocal<WebDriver>();
    
        public static WebDriver getDriver() {
            return driver.get();
        }
    
        public static void setWebDriver(WebDriver driver) {
            driver.set(driver);
        }
    }
    

    每当你必须使用你的驱动程序时,你只需要这样称呼它:

    DriverManager.getDriver().doSomething
    

    然后,使用 testNG,您可以在不同的线程中执行测试。

    【讨论】:

      【解决方案2】:

      我建议不要使用 selenium 进行负载测试。使用浏览器进行负载测试没有意义。测试客户端性能应该只测试作为客户端运行的 1/2 浏览器的性能,它将只运行 1/2 的应用程序实例。他们永远不会打开 10-15 个浏览器并针对您的应用程序运行。如果您想加载测试服务器端代码,您应该使用 Jmeter 并与用户并行访问 API,以确定在服务器无法响应之前您的服务器可以处理多少并行操作。

      【讨论】:

      • 我不同意这个答案。我同意您必须对服务器端代码进行负载测试。但是对整个应用程序进行负载测试很有趣。不仅是服务,等等。为此,在浏览器中测试应用程序确实很有意义。客户将在此环境中使用该应用程序。所以这完全有道理。
      • @NicolasG.Duvivier 我同意您应该在浏览器中进行性能测试,但是在浏览器端进行“负载测试”没有意义,因为它完全依赖于客户端机器并且它们只会永远在该机器上一次成为 1 个客户端。应该有基准来了解使用该应用程序的最低要求是什么。
      • 好吧,我的错……我误用了“负载测试”这个词。它更像是压力测试。那么我同意你的看法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-20
      • 1970-01-01
      • 2014-10-07
      • 1970-01-01
      • 1970-01-01
      • 2017-01-11
      • 2017-03-01
      相关资源
      最近更新 更多