八、性能測試期間遇到的問題和心得:
1、錄制腳本碰到的疑惑:腳本中發表點評的內容顯示成“?????????, ?????????”—— 這個就是輸入的文字只是中文顯示不出來,這樣顯示沒有問題;
2、對性能測試的各個參數點及對應的標準需要非常熟悉,這樣好比有了一個預期結果和一個參照標準,執行測試過程中可以很快查出某個點的性能問題;
3、shell腳本中建議增加一項LOAD和CPU的平均值的計算功能。
最后,還是要感謝下性能測試小組的同學給予的幫助,謝謝悟石和元壯,在這個項目中給我耐心的講解和解釋,讓我了解很多性能測試知識。
感想二
最近有幸和云帥參與了新江湖的性能測試,這個項目中,由于測試時間緊,性能點多,我們從開發提交測試后就進行性能測試。提早介入測試導致我們后來遇到很多問題。我主要的工作是協助云帥,申請性能測試服務器,驗證搭建好的性能測試環境和功能,準備性能測試數據,后期我參與了好友最近更新的相冊這個性能點的執行,下面說下具體是怎么做上面的事情的:
1、申請性能測試服務器:
先找總的開發負責人給出本階段性能點所需要信息,包括性能點,服務名,Hsf版本號,數據源,data-pool設置,jdk版本號,apache版本號,jboss版本號,jvm設置,代碼庫路徑,壓測頁面鏈接,依賴系統和該性能點對應的開發負責人。收集完這些信息后我們可以向悟石他們申請機器啦。申請時除了上面最后三點,其他內容都需要提供。這樣做是為了之后讓scm參照上面的信息部署環境。
2、驗證搭建的環境/功能:
1)驗證jdk、apache、jboss的版本:可以通過拷貝文件valid-env,執行check.sh來快速驗證jdk、apache、jboss的版本;蛘咄ㄟ^如下的方法來依次驗證。
a、jdk版本查看 先通過jbosscle文件查找到使用的JAVA_HOME地址,然后根據目錄查找 /opt/taobao/java/bin/java -version 或者 /opt/taobao/java/bin/java1 -version;
b、apache版本查看 /opt/taobao/install/httpd/bin/httpd -version;
c、jboss版本查看 jboss啟動日志jboss_stdout.log中有,只要看前面幾行就能查找到。
2)證數據庫配置:數據庫的配置,一般存放在應用下的conf目錄下,orcle-***-ds.xml/mysql-***-ds.xml文件里。檢查它是否連接了正確的數據庫schema,連接數是否正確。
3)查看apache的訪問日志是否屏蔽掉。查看conf目錄下,httpd.conf文件里——CustomLog這個配置項。
4)驗證功能:需要確保所要測試的性能點的功能及相關功能正確。執行幾個主流程查看或者跑一下接口是否通。
3、準備測試數據:
1)向DBA討教了如何快速準備大量的性能測試數據。兩種方法。寫存儲或者設置autoincrement。我這次主要用的是后者。將表的主鍵設置 autoincrement,這樣可以通過insert into 表(字段1,字段2…) select value1,value2… from 表執行一次可以成倍增長當前的數據。這種方法簡單快捷,如果只是為了純粹增加表的數據流這個方法還是比較好的。當然除了數據庫的方法還可以通過接口去插數據,在lr中執行下也是不錯的選擇。
2)性能測試環境下什么數據也沒有,所以通過導入功能測試環境的數據來充當,mysql工具中有一個很好的功能:可以將功能測試數據庫庫的表結構和數據復制到性能測試數據庫,如果性能測試數據庫中已經存在該表,就drop掉該表,執行速度很快,大大方便我們準備數據。推薦大家用SQLyog Enterprise這個工具,真的不錯。方法如下:打開mysql的數據庫,連接到功能測試庫上,點擊File——New Conections,連接到性能測試庫上,選擇你要操作的表,右擊選擇第二項——Copy Table To Diffierent Host/Database,在界面中左邊是源數據庫,也就是我們的功能測試數據庫,選擇你要復制的表,支持多選,右邊選擇目標數據庫,也就是我們的性能測試數據庫及對應的用戶,如果表已經存在,勾選選項:Drop table if exists in target ,具體要拷貝表結構和數據或者只是表結構都可以自己選擇,最后點擊copy,數據庫表結構和數據很快可以復制完。
4、錄制腳本:
淘江湖二期很多頁面是采用了異步方式調用,所以錄制完一個頁面后,通過抽取每個請求作為一個腳本。接口測試這塊采用http的方式去模擬測試,這樣方式最大的好處是腳本準備比較方便。
5、測試執行:
1)一個頁面通過加載該頁面所有的異步請求,逐步增加各個腳本的并發用戶數,調整并發用戶數,查看是否滿足預期的tps。
2)測試過程中時刻關注lr的運行情況,曲線有沒有波動很大,幾個日志信息,debug日志,超時日志和velocity日志,是否有大量日志出現。監控 java虛擬內存是否正常釋放,曲線是否平穩,而不是往上的趨勢。一般如果有問題的話,剛開始運行腳本就會出現頻繁報錯,這時需要馬上停下來查看問題原因。排查原因有很多,由于我們介入較早,有一些是因為數據庫表結構沒有建索引,或者是應用的版本沒更新導致(初期bug比較多,版本經常更新),所以經過這次測試,深刻體會到性能測試的前提需要在sql審核通過,索引加好,功能比較穩定的前提下進行,也就是功能測試第二階段開始,此時功能相對穩定,表結構也不會怎么變化,會少走很多彎路。
3)由于這次頁面性能測試依賴的應用比較多,最多有用到13臺應用服務器,當測試某個性能點的時候,需要查看與該應用交互的應用的情況,可以用netstat -nal命令。查出來后,監控這些相關的服務器,cpu,load,日志情況等。
4)用lr監控cpu這些數據時發現有一臺服務器監控到的cpu有問題,空閑狀態cpu就已經達到60%了,具體原因也不清楚,所以換了方式采用我們這邊的一個監控cpu和load的shell腳本來做。
6、關于性能測試計劃:這次測試有11個性能點,6個接口和5個頁面,計劃中根據測試優先級高低分三個階段進行,分階段搭建測試環境和準備數據和腳本,先接口后頁面的順序執行。
7、關于性能測試日報:日報中主要記錄目前所處的測試階段,當天的測試工作,測試結果和結果分析,BugList,問題和風險,以及明天的計劃。
最后非常非常感謝云帥,像老師一樣,非常細心和耐心,教我很多很多,讓我受益很多很多,更讓我體會到了一個優秀的性能測工程師認真嚴謹的工作態度。
文章來源于領測軟件測試網 http://www.kjueaiud.com/