【问题标题】:Performance testing UI with YSlow and Jenkins使用 YSlow 和 Jenkins 进行性能测试 UI
【发布时间】:2015-09-24 14:47:19
【问题描述】:

我有一个 Web 应用程序,我想在其上运行 Yslow。测试需要与 Jenkins 集成。该应用程序有一个登录页面。如果我提供应用程序的 url,如果有效用户未登录,则会显示登录页面。那么如何使用 YSLow 和 Jenkins 测试性能呢?是否可以自动化登录部分?

【问题讨论】:

  • 在运行 Yslow 之前,您是否应该能够使用 phantomJS 脚本进行登录? Here 是一些关于如何进行身份验证的有趣提示。与this answer 一样,您可以尝试登录 以获取会话,然后继续启动 Yslow.js。

标签: jenkins phantomjs yslow


【解决方案1】:

是的,您可以,但您仍然会错过这个自动化部分。您需要的不仅仅是 YSlow 和 Jenkins。它高度依赖于应用程序的网络架构 - 如果您在本地或远程运行测试。

机器人框架 + Selenium 服务器

使用 Robotframework 的 selenium2library 可以使用 Selenium 服务器绑定来操作浏览器 DOM。换句话说,您可以创建非常简单的自动化登录测试和操作。之后 SSHLibrary 或终端库可以运行 YSlow 命令,您只需将输出文件提供到 Jenkins 可读位置。这是一个非常复杂的解决方案,适用于具有许多依赖项的高级网络架构。

PhantomJS + CasperJs

如果您需要在本地运行性能测试,您可以使用无头浏览器 PhantomJS 的优势。结合 CasperJS,您可以使用 DOM 来创建自动登录过程。 PhantomJS 也与 YSlow 兼容,所以再一次,您只需要为 Jenkins 定义输出文件的位置。

对于这两种解决方案(或任何其他解决方案),您都需要额外的 jenkins 插件来读取 YSlow 生成的输出文件。

【讨论】:

    【解决方案2】:

    由于 YSlow 可以从输入的 HAR 文件生成性能报告,我会在使用 Selenium 浏览网站时使用代理服务器来记录性能数据。 通过这种方式,您可以独立测量真实浏览器(Chrome、Firefox、Safari...)或 PhantomJS 等无头浏览器的性能。

    要继续,首先下载 browsermob 代理并解压缩:

    https://github.com/lightbody/browsermob-proxy/releases

    然后编写代码来启动代理服务器并使用 Selenium 客户端运行您的场景。此示例是用 Python 编写的,但您可以使用一些 Java、Ruby、Javascript 或 PHP 以相同的方式编写它。

    from browsermobproxy import Server
    from selenium import webdriver
    import json, sys
    
    # setup the proxy server
    server = Server(r"C:\Download\browsermob-proxy-2.1.0-beta-5\bin\browsermob-proxy")
    server.start()
    proxy = server.create_proxy()
    
    try:
      # setup the browser
      profile  = webdriver.FirefoxProfile()
      profile.set_proxy(proxy.selenium_proxy())
      driver = webdriver.Firefox(firefox_profile=profile)
    
      # start collecting the data
      proxy.new_har("google")
    
      # login to a twitter account
      driver.get("https://twitter.com/login?lang=en")
      driver.find_element_by_css_selector(".js-username-field").send_keys("my name")
      driver.find_element_by_css_selector(".js-password-field").send_keys("my password")
      driver.find_element_by_css_selector("button.submit").click()
    
      # save the collected data to a file
      with open(sys.argv[1], 'w') as file:
        file.write(json.dumps(proxy.har, indent=2))
    
    finally:
      driver.quit()
      server.stop()
    

    最后,运行脚本并使用命令行生成性能报告:

    python perf-login.py perf-login.har
    yslow perf-login.har
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-25
      • 2015-12-03
      • 2016-11-07
      相关资源
      最近更新 更多