我有一个web应用程序,我想在其上运行慢速。这些测试需要与詹金斯结合起来。应用程序有一个登录页面。如果我提供了应用程序的url,如果一个有效的用户没有登录,将显示登录页面。那么我如何使用YSLow测试性能呢?詹金斯吗?有可能自动化登录部分吗?
由于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:Downloadbrowsermob-proxy-2.1.0-beta-5binbrowsermob-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
是的,你可以,但是你仍然错过了这个自动化的部分。你需要的不仅仅是一个slow &詹金斯。它高度依赖于应用程序的网络架构——如果你在本地或远程运行测试。
Robotframework + Selenium Server
使用Robotframework的selenium2library可以使用Selenium Server绑定来操纵浏览器的DOM。换句话说,您可以创建非常简单的自动化登录测试和操作。之后,SSHLibrary或Terminal库可以运行YSlow命令,您只需要将输出文件提供给Jenkins可读位置。这是一个非常复杂的解决方案,适用于具有许多依赖关系的高级网络体系结构。
PhantomJS + CasperJs
如果你需要在本地运行你的性能测试,你可以利用无头浏览器PhantomJS的优势。结合CasperJS,您可以操作DOM来创建自动登录过程。PhantomJS也兼容YSlow,所以你只需要为Jenkins定义输出文件的位置。
对于这两个解决方案(或任何其他),您将需要额外的jenkins插件来读取由YSlow生成的输出文件。