jvm版本: 1.8.0_65javascript
sahi版本: Sahi Pro 6.1.0html
參考來源:java
Sahi官網node
Sahi官方文檔:壓力測試chrome
Sahi社區論壇:SAHI for performance testing數據庫
Sahi (1) —— 快速入門(101 Tutorial)macos
Sahi (2) —— https/SSL配置(102 Tutorial))瀏覽器
Sahi的壓力測試腳本包含了2個子腳本,一個是用來生成壓力的,這個腳本被稱爲「noise」,跑在一個無頭(headless)的瀏覽器上,在「noise」文件中的腳本會一直無限循環執行下去。另外一個腳本被稱爲「subject」,這個腳本是被用來定時執行,而後查看不一樣壓力下的性能指標的。cookie
因爲「noise」是經過PhantomJS在後臺運行的,因此咱們須要先安裝PhantomJS。若是有brew的童鞋能夠簡單運行下面命令行安裝:
brew install phantomjs
寫這篇文章的時候PhantomJS的最新穩定版本是2.0.0,可是咱們須要較低的1.9.8版本
$ phantomjs --version 2.0.0
緣由是Sahi6.1(也是當前最新穩定版)這個版本對於PhantomJS只支持到1.x,若是使用2.0會出現執行時卡死的狀況。
如下是Mac(Linux)環境下的安裝步驟:
下載PhantomJS到 /usr/local/share
解壓後執行如下命令(1.9如下版本須要)
sudo ln -s /usr/local/share/phantomjs-1.9.8-macosx/bin/phantomjs /usr/local/share/phantomjs sudo ln -s /usr/local/share/phantomjs-1.9.8-macosx/bin/phantomjs /usr/local/bin/phantomjs sudo ln -s /usr/local/share/phantomjs-1.9.8-macosx/bin/phantomjs /usr/bin/phantomjs
完成後能夠經過命令行查看當前PhantomJS的版本號
$ phantomjs --version
在Dashboard上點擊Configure加入如下配置
<browserType> <name>phantomjs</name> <displayName>PhantomJS</displayName> <icon>phantomjs.png</icon> <path>$sahiDir/ext/phantomjs/sahi_phantomjs.sh</path> <options>--proxy=localhost:9999 $sahiDir/ext/phantomjs/phantomsahi.js</options> <processName>phantomjs</processName> <capacity>100</capacity> <useSystemProxy>false</useSystemProxy> </browserType>
對於SSL錯誤,還須要修改配置爲(--ignore-ssl-errors=yes):
<browserType> <name>phantomjs</name> <displayName>PhantomJS</displayName> <icon>phantomjs.png</icon> <path>$sahiDir/ext/phantomjs/sahi_phantomjs.sh</path> <options>--ignore-ssl-errors=yes --debug=yes --proxy=localhost:9999 $sahiDir/ext/phantomjs/phantomsahi.js</options> <processName>phantomjs</processName> <capacity>100</capacity> <useSystemProxy>false</useSystemProxy> </browserType>
保存並重啓Sahi
命令行運行並測試
$ ./testrunner.sh demo/sahi_demo.sah http://sahitest.com/demo/ phantomjs
若是成功查看log:
Sahi6.1官方在安裝包下提供了壓力測試的示例,咱們嘗試運行該測試。
首先啓動Sahi Dashboard:
$ ./start_dashboard.sh
再運行:
$ ./dload.sh demo/load/noise.sah demo/load/subject.sah http://sahitest.com/demo/training/ firefox
若是完成沒有出錯Sahi的DLoadRunner會提示成功
查看log與報告
在Sahi的安裝目錄下
<?xml version="1.0" encoding="ISO-8859-1"?> <!-- /** * Copyright Tyto Software Pvt. Ltd. */ --> <project name="demo" default="dloadrun"> <taskdef name="sahiload" classname="in.co.sahi.ant.DAntLoadRunner" classpath="lib/ant-sahi.jar"/> <target name="dloadrun"> <sahiload scriptsPathMaster="scripts" subject="demo/load/subject.sah" baseurl="http://sahitest.com/demo/training/" sahihost="localhost" sahiport="9999" failureproperty="sahi.failed" haltonfailure="false" browsertype="chrome" noise="demo/load/noise.sah" noiseBrowserType="phantomjs" min="1" max="9" incrementBy="2" interval="5" subjectRepeatCount="3" ignorePattern=".*(svn|copied).*"> <node host="localhost" port="9999"/> <!-- <node host="machine2" port="9999"/> <node host="machine3" port="9999"/> --> </sahiload> <antcall target="failsahi"/> </target> <target name="failsahi" if="sahi.failed"> <fail message="Sahi tests failed!"/> </target> </project>
而後咱們經過命令行運行
ant -f dload.xml
沒有安裝好ant的也能夠經過brew安裝
$ brew install ant
在錄製腳本的時候,不知何緣由,沒法在經過https訪問本地搭建的sso環境https://sso.hoau.com:8433/cas 同時應用程序客戶端https://app1.hoau.com:8413/cas1 也沒法正常訪問。比較Sahi裏面的瀏覽器和正常的瀏覽器證書的設置發現(Firefox-> Preferences -> Advanced -> Certificates -> View Certificates)Sahi裏的代理瀏覽器缺乏證書,手工導入無果(沒有研究如何操做)
因而嘗試先用http錄製,而後在PhantomJS後臺經過--ignore-ssl-errors=yes模式嘗試https
首先錄製http://sso.hoau.com:8083/cas
_setValue(_textbox("username"), "test01"); _setValue(_password("password"), "psw01"); _click(_submit("登錄")); _assertExists(_div("msg")); _assertEqual("Log In Successful You, test01, have successfully logged into the Central Authentication Service. When you are finished, for security reasons, please Log Out and Exit your web browser.", _getText(_div("msg")));
而後更改目標的地址的startURL,而且命令行下運行:
$ ./testrunner.sh my/cas_sso.sah https://sso.hoau.com:8433/cas/ phantomjs
測試成功。
獲得相似腳本:
_setValue(_textbox("username"), "test01"); _setValue(_password("password"), "psw01"); _click(_submit("登錄")); _assertExists(_link("test01"));
但若是重複playback會出錯,由於瀏覽器會保持JSESSION的session cookie,記錄下曾經登錄的狀態,沒法重複playback。所以,咱們須要清除瀏覽器的cookie。
Sahi官網上介紹了如何清除瀏覽器cookie,但我嘗試過發現此方法無效:
// Shows all cookies for www.yahoo.com domain. _navigateTo("http://www.yahoo.com/_s_/dyn/Cookies_showAll"); // Click the checkbox to choose all cookies. _check(_checkbox("_sahi_chooseAll")); // Delete the cookies. _click(_button("Delete")); // Shows all cookies again so that you can verify that all cookies have been deleted. _navigateTo("http://www.yahoo.com/_s_/dyn/Cookies_showAll");
多是瀏覽器版本
我本地的Chrome版本爲:42.0.2311.152 (64-bit)
Firefox版本爲:43.0.2
多是路徑緣由Sahi清除cookie頁面裏的javascript腳本執行的目標路徑有問題
"_sendToServer(...)"
這個問題尚未研究出根本緣由在哪,不過有方法能夠繞過去。
我有另一片文章介紹過CAS SSO的時序圖,而且分析過http的request和Response消息頭消息體裏面的內容,咱們能夠經過將head Cookie置空達到清除cookie的目的,修改好之後的腳本以下:
_setHttpHeader("Cookie", ""); _navigateTo("https://app2.hoau.com:8423/cas2/"); _setValue(_textbox("username"), "test01"); _setValue(_password("password"), "psw01"); _click(_submit("登錄"));
這樣咱們就能重複playback,並且經測試發現數據庫中也會生成大量ticket
以上工做完成後,咱們如今正式開始對CAS SSO的登錄作壓力測試。
我以官網的樣例爲模板稍做修改:
<!-- /** * Copyright Tyto Software Pvt. Ltd. */ --> <project name="demo" default="dloadrun"> <taskdef name="sahiload" classname="in.co.sahi.ant.DAntLoadRunner" classpath="../lib/ant-sahi.jar"/> <target name="dloadrun"> <sahiload scriptsPathMaster="scripts" subject="my/load/subject.sah" baseurl="https://app2.hoau.com:8423/cas2/" sahihost="localhost" sahiport="9999" failureproperty="sahi.failed" haltonfailure="false" browsertype="chrome" noise="my/load/subject.sah" noiseBrowserType="phantomjs" min="1" max="999" incrementBy="20" interval="5" subjectRepeatCount="3" ignorePattern=".*(svn|copied).*"> <node host="localhost" port="9999"/> <!-- <node host="machine2" port="9999"/> <node host="machine3" port="9999"/> --> </sahiload> <antcall target="failsahi"/> </target> <target name="failsahi" if="sahi.failed"> <fail message="Sahi tests failed!"/> </target> </project>
咱們將baseurl指定爲測試的目標地址,「subject」瀏覽器爲Chrome,「noise」瀏覽器爲PhantomJS,同時咱們將增長線程數的爲20,線程從1增加至999最大,爲了專一與登錄的壓力,我同時將subject和noise都指向了登錄的腳本。有興趣的童鞋能夠嘗試如下其餘的方式,以及修改參數試試。
能夠經過ant運行
$ ant -f dload-sso.xml
而後居然被我遇到了一個core dev承認,4.1.3版本的major
測試結果:
Github上的答覆:
Sahi的壓力測試可否支持部署多個分佈式Sahi測試節點?
Sahi的壓力測試除了Subject和Noise這種模式,是否還有須要其餘支持,或者提供其餘支持?
還未對Sahi作全面評估,網上評論說Sahi比較適合Smoke Web UI,不過單純從我的角度就易上手程度來主管評價,Sahi相對於Selenium和JMeter較容易上手。