代码之家  ›  专栏  ›  技术社区  ›  deadprogrammer

对Web应用程序执行压力测试?

  •  235
  • deadprogrammer  · 技术社区  · 16 年前

    仅仅是与几个开发人员使劲打主页,几乎总能找到一个主要问题。更多的可伸缩性问题会在第二阶段出现,甚至在发布之后会更严重。

    Microsoft Web Application Stress Tool )以及 Pylot .

    这些工具生成的报告对我来说意义不大,我会花很多时间试图弄清楚站点能够支持哪种并发负载。它总是值得的,因为最愚蠢的错误和瓶颈总是会出现(例如,web服务器配置错误)。

    你做了什么,使用了什么工具,你的方法取得了哪些成功?我最感兴趣的部分是想出了一个有意义的公式,从压力测试应用程序报告的数字中计算出一个应用程序可以支持的并发用户数。

    30 回复  |  直到 7 年前
        1
  •  112
  •   Peter Bernier    11 年前

    这是另一票 JMeter .

    在Java中,JMeter是一个开源的测试工具。它能够测试多种不同的服务器类型(例如,web、web服务、数据库,几乎所有基本上都使用请求的服务器)。

    然而,一旦你开始进行复杂的测试,它确实有一个陡峭的学习曲线,但它是值得的。你可以很快地开始工作,根据你想要做的压力测试,这可能没问题。

    赞成的意见:

    • 来自Apache项目的开源/免费工具(帮助购买)
    • 非常可扩展。我用11台机器运行了测试,在服务器上产生的负载几乎达到每小时100万次。是的 许多的 比我想象的要容易。
    • 有一个活跃的社区和良好的资源来帮助你建立和运行。先阅读教程,玩一会儿。

    欺骗:

    • JMeter通过解析服务器返回的响应文本来工作。因此,如果您希望验证任何类型的javascript行为,那么您就走运了。
    • 对于非程序员来说,学习曲线是陡峭的。如果您熟悉正则表达式,那么您已经领先了。
    • 插入咒骂 )支持论坛上的白痴们问了一些愚蠢的问题,如果他们粗略地看一下文档,这些问题很容易解决。(“How do I use JMeter to pressure test my Windows GUI”经常出现)。
    • 报告“开箱即用”还有很多不足之处,特别是对于更大的测试。在上面提到的测试中,我最终不得不编写一个快速控制台应用程序来完成一些从“xml日志文件”到“html”的转换。不过,那是几年前的事了,所以很可能不再需要这个了。
        2
  •  36
  •   Mike Stone    16 年前

    我用过 The Grinder . 它是开源的,非常容易使用,而且非常可配置。它基于Java,使用Jython编写脚本。我们在一个.NETWeb应用程序上运行它,所以不要认为它是一个纯Java的工具(就其本质而言,任何web压力工具都不应该与它所使用的平台相关联)。

    我们用它做了一些漂亮的事情。。。我们是一个基于网络的电信应用程序,所以我设置的一个很酷的用法是通过我们的网络应用程序模拟拨号,然后使用我们拥有的自动应答工具(这基本上是微软的一个教程应用程序,用于连接到他们的RTC LCS服务器。。。这是Microsoft Office Communicator在本地网络上连接到的。。。然后修改为只自动接听电话)。这样我们就可以用它来代替昂贵的电话工具锤子(或类似的东西)。

    总之,我们还使用了这个工具来了解我们的应用程序在高负载下是如何工作的,并且它在发现瓶颈方面非常有效。该工具内置了报告功能来显示请求需要多长时间,但我们从未使用过它。日志还可以存储所有响应和其他内容,或者自定义日志。

    我强烈推荐这个工具,非常实用的价格。。。但是希望用它做一些自定义设置(它有一个内置的代理来记录脚本,但是它可能需要定制来捕获会话之类的东西。。。我知道我必须对其进行定制,以利用每个线程的唯一会话)。

        3
  •  23
  •   J J B    8 年前

    派对有点晚了。我同意 Pylot 是最好的开源工具。这是简单的使用和积极的工作,由一个伟大的家伙( Corey Goldberg ). 作为 OpenQA ,我也很高兴Pylot现在出现在我们的主页上,并使用了我们的一些基础设施(即论坛)。

    external load testing service 使用 Selenium 在回放加载时控制真正的web浏览器。

    这种方法显然需要 比普通的负载测试技术更多的硬件,但是当你使用云计算时,硬件实际上相当便宜。一个很好的副作用是脚本是 许多的

    很抱歉公然宣传一个商业产品,但希望这个概念对一些人来说很有趣,至少让他们想到一些新的方法来处理负载测试,当你有权访问一堆额外的硬件时!

        4
  •  15
  •   djthoms    7 年前

    我用过 JMeter

        6
  •  10
  •   danriti    12 年前

    对于基于web的服务,请查看 loader.io .

    小结:

    加载程序.io是一个免费的负载测试服务,它允许您使用数千个并发连接对web应用程序/API进行压力测试。

    他们也有一个 API .

        7
  •  9
  •   Otiel user577803    13 年前

    为了简单的使用,我喜欢ab(apachebenchmark)和siege,后面需要一个,因为ab不支持cookie,会从动态站点创建无休止的会话。

    这两种方法都很简单:

    ab -c n -t 30 url
    
    siege -b -c n -t 30s url
    

    围攻可以用更多的网址。

    上一个围城版本在siegerc中打开冗长,这是恼人的。您只能通过编辑该文件来禁用它( /usr/local/etc/siegerc ).

        8
  •  9
  •   Ian Fleming    12 年前

    既然这个问题还没有解决,我还是考虑一下。

    好消息是,在过去的5年左右,开源工具已经真正成熟并在这个领域起飞了,坏消息是有太多这样的工具。

    这是我的想法:-

    Jmeter是由一个XML风格的规范驱动的,它是通过GUI构造的。

    Grinder在多线程Java框架中使用Jython脚本,因此更面向程序员。

    这两个工具都将处理HTTP和HTTPS,并有一个代理记录器来帮助您开始。

    是什么更好:-

    这两种工具的学习曲线都很陡峭,因为您需要更复杂的脚本编写要求,如url重写、关联、为每个虚拟用户提供唯一的数据以及模拟第一次或返回的用户(通过操纵HTTP头)。

    也就是说,我将从Jmeter开始,因为这个工具有大量的追随者,而且web上有许多使用这个工具的示例和教程。如果你遇到一个“路障”,这是你不能“轻松”做的事情,然后看看磨床。好消息是,这两种工具都有相同的Java需求,而且“混合匹配”解决方案也并非不可能。

    添加了一些新功能来添加运行多个Selenium WebDriver实例的无头浏览器。

    这是一种相对较新的方法,因为它依赖于现在可以从云端配置的资源的可用性。使用这种方法,可以在无头浏览器(即WebDriver=newhtmlUnitDriver())驱动程序中以多个线程执行Selenium(WebDriver)脚本。

    根据经验,在Amazon M1小实例中可以执行大约25个“无头浏览器”实例。

    这意味着,当您将功能测试脚本重新调整为性能测试脚本时,所有的相关性、url重写问题都会消失。

    与Grinder或Jmeter等HTTP驱动程序相比,需要更多的vm来驱动负载,因此可伸缩性受到了损害。也就是说,如果你想要驱动500个虚拟用户,那么用20个Amazon小实例(每小时6美分),每小时仅需1.20美元,你就可以获得非常接近真实用户体验的负载。

        9
  •  8
  •   Sunil Kapil    9 年前

    我们最近开始使用Gatling进行负载测试。我强烈建议在负载测试中试用这个工具。我们以前用过SOASTA和JMETER。我们考虑加特林的主要原因如下:

    • 记录场景的记录器
    • Jmeter线程模型
    • 与jmeterxml相比,DSL Scala非常易于维护
    • 报告

    让我给你一个简单的例子来用Gatling代码编写代码:

    // your code starts here  
    val scn = scenario("Scenario")  
         .exec(http("Page")
         .get("http://example.com")) 
    // injecting 100 user enter code here's on above scenario.   
    setUp(scn.inject(atOnceUsers(100)))       
    

    不过,你要尽可能复杂。加特林最突出的特点之一就是报道非常详细。

    以下是一些链接:
    Gatling
    Gatling Tutorial


    https://docs.google.com/viewer?url=http%3A%2F%2Ffiles.meetup.com%2F3872152%2FExploring-Load-Testing-with-Gatling.pdf

        10
  •  7
  •   alecxe    12 年前

    此外,还有一个很棒的开源纯python分布式和可伸缩性 locust 使用 greenlets . 它很擅长模拟大量同时使用的用户。

        11
  •  6
  •   Chris F    13 年前

    这是一个老问题,但我认为新的解决方案值得一提。签出负载影响: http://www.loadimpact.com .

        12
  •  4
  •   Yasei No Umi    11 年前

    我试过了 WebLoad 这是一个相当整洁的工具。它附带了一个测试脚本IDE,允许您在网站上记录用户操作。当它在您的web服务器上执行压力测试时,它还会绘制一个图形。试试看,我强烈推荐。

        13
  •  3
  •   DominiCane    14 年前

    curl-loader 为了我的目的。非常简单的界面,实时监控,有用的统计数据,从中我建立了性能图。包括libcurl的所有特性。

        14
  •  3
  •   Gerry    10 年前

    Blaze meter有一个chrome扩展,用于记录会话并将其导出到JMeter(当前需要登录)。您还可以选择付钱让他们在他们的JMeter服务器集群上运行它(他们的定价似乎比我刚刚停止使用的LoadImpact要好得多):

    我和他们没有任何联系,我只是喜欢他们的服务外观,虽然我还没有使用付费版本。

        15
  •  2
  •   merkuro    16 年前

    你问这个问题差不多一年前,我不知道你是否还在寻找另一种方法来衡量你的网站。然而,由于这个问题还没有被标记为已解决,我想建议免费的网络服务 LoadImpact (顺便说一句,不是附属公司)。刚通过twitter得到这个链接,想分享这个发现。他们创造了一个合理的良好的概述和几块多你得到“全面影响模式”。这听起来可能很奇怪,但祝你好运,推动和制动你的服务:)

        16
  •  1
  •   Michael Stum    16 年前

    我发现了 IBM Page Detailer 也是一个有趣的工具。

        17
  •  1
  •   rbrayb    16 年前

    我用过 openSTA .

    这允许录制与网站的会话,然后通过相对简单的脚本语言播放。

    您可以轻松地测试web服务并编写自己的脚本。

    它是开源和免费的。

    它生成许多可以保存到电子表格中的报告。然后我们使用一个透视表来方便地分析和绘制结果图。

        18
  •  1
  •   Jerry B    16 年前

    我们使用微软的工具-微软的网络应用压力工具。这是我用过的最简单的工具。它在许多方面受到限制,包括只能在手动创建的测试中命中端口80。但是,它的易用性意味着它实际上被使用了。

    我们用其他工具(包括OpenSTA和linkcheck spider)来补充这个工具的负载。

    从我最初的评估来看,JMeter看起来不错,我希望在以后的持续集成中包含它。但是,JMeter的推出非常复杂而且非常重要。

        19
  •  1
  •   Nat    14 年前

    VisualStudioTestEdition2010(2008也不错)。这是一个非常简单和强大的工具来创建web/负载测试。

    另一个好处是,通过visualstudio项目,您可以集成一个“性能会话”,该会话将分析网站的代码执行情况。

    如果您是从windows服务器提供网页,这是最好的工具。

    但是,使用多台机器对应用程序进行负载测试需要一个单独且昂贵的许可证。

        20
  •  1
  •   Neville Kuyt    12 年前

    我们已经开发了一个流程,将负载和性能度量视为头等大事—正如您所说,将其保留到项目的末尾往往会导致失望。。。

    因此,在开发过程中,我们包括了非常基本的多用户测试(使用selenium),它检查基本的疯狂性,如会话管理中断、明显的并发问题和明显的资源争用问题。非常重要的项目在持续集成过程中包含了这一点,因此我们得到非常定期的反馈。

    对于没有极端性能要求的项目,我们在测试中包括基本的性能测试;通常,我们使用BadBoy编写测试脚本,并将它们导入JMeter,替换登录详细信息和其他特定于线程的内容。如果我们每秒处理100个请求,那么这就足够了。我们开始并继续我们的生活。

    tool for analyzing Microsoft event logs 这对我们很有帮助。我们通常会发现意外的瓶颈,如果可能的话,我们会对其进行优化;这使我们的应用程序在“1web服务器、1databaseserver”上的速度尽可能快。然后,我们通常部署到目标基础设施,并使用“Jmeter in the cloud”服务来大规模地重新运行测试。

    同样,PAL报告有助于分析测试过程中发生的情况—您通常会在生产环境中看到非常不同的瓶颈。

    关键是要确保不仅仅运行压力测试,还要收集了解应用程序性能所需的信息。

        21
  •  1
  •   user1227037    12 年前

    这里提到了很多好的工具。我想知道工具是否能回答这样一个问题:“如何对web应用程序进行压力测试?”这些工具并没有真正提供给Web应用程序带来压力的方法。我知道的是:

    压力测试显示了一个Web应用程序如何在为日益增长的用户提供响应时失败。压力测试显示了Web应用程序在失败时如何工作。今天的大多数网络应用程序,尤其是社交/移动网络应用程序,都是服务的集成。例如,当Facebook在2011年5月宕机时,你无法登录百事可乐的Web应用程序。该应用程序并没有完全失败,只是其正常功能的很大一部分对用户不可用。

    性能测试显示了Web应用程序保持响应时间独立于有多少用户同时使用该应用程序的能力。例如,一个应用程序每秒处理10个事务,有10个并发用户,应该在20个用户的情况下每秒处理20个事务。如果应用程序每秒处理少于20个事务,那么响应时间会越来越长,并且应用程序无法实现线性可伸缩性。

    我在TestMaker用户指南中编写了PushToTest方法 http://www.pushtotest.com/pushtotest-testmaker-6-methodology . TestMaker有两种风格:开源(GPL)社区版和testmakerenterprise(具有强大专业支持的商业版)

        22
  •  1
  •   QingHai    8 年前

    看看LoadBooster( https://www.loadbooster.com ). 它利用无头脚本浏览器PhantomJS/CasperJs来测试网站。Phantomjs将解析并呈现每个页面,执行客户端脚本。headless browser方法更容易编写测试场景,以支持复杂的AJAX重Web 2.0 appbrowser导航、鼠标单击和击键进入浏览器或等待DOM中存在元素。LoadBooster也支持selenium HTML脚本。

    免责声明:我为LoadBooster工作。

        23
  •  1
  •   Vinit    8 年前
        24
  •  0
  •   Mike Stone    16 年前

    还有一点需要注意的是,对于我们的web应用程序,我发现由于线程之间对锁的争用,我们有很大的性能问题。。。所以我们的建议是仔细考虑锁定方案。我们最终让工作线程使用异步http处理程序来限制过多的请求,否则应用程序就会不堪重负,崩溃并烧掉。这意味着大量的积压工作可能会堆积起来,但至少网站会保持正常。

        25
  •  0
  •   Erick Sasse    16 年前
        26
  •  0
  •   tloach    16 年前

    我支持opensta的建议。我只想补充一下,它允许您使用SMTP来监视您正在测试的服务器。我们会跟踪处理器负载、内存使用情况、发送的字节数等。唯一的缺点是,如果你发现了boken的东西并想修复它,它依赖于几个开源库,这些库已经无法跟上了,因此获得源代码的编译版本比大多数操作系统都要复杂。

        27
  •  0
  •   Mathias F    16 年前

    我和杰米特一起玩。有人认为它无法测试ASP.NET网络表单。viewstate破坏了我的测试。我不是舒尔的原因,但有一些工具不能正确处理viewstate。我目前的项目是ASP.NETMVC和JMeter可以很好地使用它。

        28
  •  0
  •   yanjost    12 年前

    我在 FunkLoad :

    • 易于编写用户交互脚本
    • 报告很清楚
    • 可以监视服务器负载
        29
  •  0
  •   Steve Owens    12 年前

    冒着被指责为无耻的自我推销的风险,我想指出的是,在寻求免费负载测试工具的过程中,我选择了这篇文章: http://www.devcurry.com/2010/07/10-free-tools-to-loadstress-test-your.html

    要么我得不到我想要的吞吐量,要么我得不到我想要的灵活性。我想在测试后分析中轻松地聚合多个负载测试生成主机的结果。

    我试过清单上的每一种工具,但令我沮丧的是,它们都没有完全实现我想要的功能。所以我做了一个并分享了它。

    这里是: http://sourceforge.net/projects/loadmonger

    附言:熟悉城市俚语的人对这个名字没有任何刻薄的评论。我不是,但现在有点世俗化了。

        30
  •  0
  •   Alireza Fattahi    8 年前

    J计 我也要给@PeterBernier的答案加上一些引语。

    负载测试回答的主要问题是有多少并发的 用户可以支持我的web应用程序吗?为了得到正确的答案, 负载测试应该代表实际的应用程序使用情况,就像 .

    请记住, J计 有很多积木 逻辑控制器 , , 听众

    您可以使用jMeter模拟真实世界的情况,例如可以:

    1. 通过配置将jMeter配置为真正的浏览器( concurrent resource download browser cache , http headers , setting request time out cookie management , https support encoding , ajax support ,... )
    2. 配置jMeter以生成用户请求(通过定义 number of users per second , ramp-up time scheduling ,...)
    3. 配置许多带有jMeter的客户机,以进行分布式负载测试。
    4. 处理响应以查找服务器在测试期间是否正确响应。(例如 assert

    请考虑:

    这个 https://www.blazemeter.com/jmeter 有非常好的实用信息来帮助您配置测试环境。