qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          好的軟件測試人員簡歷是什么樣子的?

          文章很好,以前的簡歷果然很垃圾,有興趣的可以去看看大師級測試的簡歷

          http://www.linkedin.com/in/geordiekeitt

           


          這個博客也不錯

          http://www.testthisblog.com/
           英語很重要,每天看看想不會都難  

           


          我最近閱讀了大約15份簡歷,他們都在申請我的團隊的測試工程師職位。但是沒有一份表達清楚了他是如何進行測試的。

            下面我摘錄了一些 信息:

            幾乎所有的應聘者都羅列了成串兒的他們熟悉的“技術”(包括但不限于….Net, Unix, SQL, XML, MS Office)

            然后他們又羅列了大堆的看上去都有點過時的測試工具(包括但不限于…TestDirector, LoadRunner, QuickTest Pro, SilkTest, BugZilla)

            但是…我根本就不知道他們到底是如何進行測試的。

            所有的簡歷中都羅列著一串串的測試術語和名詞…例如,“了解白盒測試、灰盒測試、黑盒測試、壓力測試、性能測試功能測試、集成測試、可用性測試、冒煙測試、回歸測試、手工測試、自動化測試以及驗收測試。”

            每當看到這種調調兒的時候,我就想“好吧,你知道玻璃盒測試嗎?那才是我們真正需要的。”

            有些應聘者甚至會在簡歷中寫著“我編寫過50頁的測試報告”,或者“我測試的企業級項目擁有超過1000個用戶”。

            好吧,那你到底如何進行測試呢?公平起見,這個問題僅僅靠幾張簡歷是很難回答的,另一方面,也許我比較缺乏在這些字里行間挖掘信息的能力,所以我真的很難判斷到底應該選擇誰來參加面試。但是,如果他的簡歷中包含如下內容,那很可能會獲得我的青睞:

            我參與的項目的測試過程如下…

            可以訪問我的測試博客以進一步了解我對測試的理解…

            我最喜歡的測試書籍和博客如下…

            我喜歡測試是因為…

             唉,我想現代簡歷可能對于鑒別應試者的能力沒什么太大作用。這就能解釋為何面試問題如此重要。我為明天的面試準備了一串很好的問題來判斷他們是否是很好 的測試者。其中一個是:“如果要你完整的測試后面墻上的那個電燈開關,你要如何做?”(如果那些應聘者讀過我的博客,可能他們會有優勢)。

            你們最喜歡的面試測試工程師的問題是什么?

          ————————————————華麗的分割線————————————————

            有趣回復摘錄:

            Ken:好吧我同意你的愿景,你希望從簡歷中找到更多可用信息。但是在我工作的公司,在應聘簡歷被HR和招聘負責人篩選過之前,我根本連看都看不到他們。他們會用檢索工具尋找那些職位要求描述中的關鍵字/技術詞匯。所以,我只好在面試中靠問問題來做判斷了。

            路人:我最喜歡的面試問題是:你最喜歡的一個bug是什么?但是我從來沒有獲得一個好的回答。所有的回應都是在討論他們喜歡的bug的類型,或者他們找到這些好bug所用的方法。

             Geordie Keitt: 我的簡歷就是我的LinkedIn頁面,我想它足夠鶴立雞群了。http://bit.ly/6TnmeL 我最喜歡的面試問題則是:“告訴我你遺漏的最嚴重的bug,以及你是如何補救的。”對新手來說這個問題無效,所以對他們我會準備20個問題取代之。

            Marcin Zr?da: 好文章,我的建議是簡歷中應該包含你的項目歷史:項目名字,你的角色,測試過程等等。

            Alan: 回去我立刻著手更新自己的簡歷。

            Shaun: 精彩的文章,有些回復也同樣精彩。如果你要申請的職位屬于下列情況,你需要注意:

            1-如果你申請的職位屬于一個大公司,那么它們很可能在用自動掃描工具掃描簡歷,所以羅列技術詞匯是必要的;

            2-如果你申請的測試主管,那么你需要一個很好的求職信來推銷自己;

            3-如果申請的是一家大公司的測試主管,那你就需要同時滿足1和2。

            最后,你的簡歷可能就要20頁長,可讀性極差,而且求職信在google上一抓一大把(類似的求職信我算是看夠了)。

            Joe: 如果求職者在簡歷中寫著“哥測試過超過20個電燈開關”,或者“我天天讀Eric Jacobson的博客”,那他豈不是已經得到面試機會啦?

            Eric Jacobson: Joe,你說到點子上了…

          posted @ 2012-04-10 09:57 順其自然EVO 閱讀(3301) | 評論 (0)編輯 收藏

          漫談軟件性能測試技術

            1、引言

            隨著我國加入WTO,各行各業都面臨更多的機遇和挑戰。如何提高產品的質量,增 強市場競爭力,日益成為企業發展必須解決的迫切問題,對軟件企業來說尤為重要。軟件企業要直接參與國際軟件市場的競爭,首要問題就是要保證軟件的質量,同 時要加快軟件產品的發布與交付使用。因此,如何提高軟件質量,越來越成為當前軟件產業發展中一個迫在眉睫的問題。本文只針對軟件質量的性能方面,做一些探 討。

            2、軟件質量

            質量保證能力的強弱直接影響著軟件業的發展和生存。那么,到底 什么是軟件的質量呢?《GB/T 16260 信息技術 軟件產品評價 質量特性及其使用指南》明確定義:軟件質量是軟件產品具有滿足明確的或隱含需求能力的特征和特性總和。具體包括以下六個方面的質量特性:

            1)功能性

            與一組功能及其指定的性質有關的一組屬性。這里的功能是指滿足明確或隱含的需求的那些功能。

            2)易用性

            與一組規定或潛在的用戶為使用軟件所需作的努力和對這樣的使用所作的評價有關的一組屬性。

            3)可靠性

            與在規定的一段時間和條件下,軟件維持其性能水平的能力有關的一組屬性。

            4)效率

            與在規定的條件下,軟件的性能水平與所使用資源量之間關系有關的一組屬性。

            5)可維護性

            與進行指定的修改所需的努力有關的一組屬性。

            6)可移植性

            與軟件可從某一環境轉移到另一環境的能力有關的一組屬性。

            因此,為了評價軟件產品的質量,需要對軟件質量的每個特性實施和執行測試. 隨著現代軟件構架技術的發展,特別是WEB技術的發展,與軟件可靠性、效率質量特性相關的軟件性能問題越來越受到包括軟件從業人員、專家學者以及軟件使用者的重視,軟件的性能指標的好壞已直接影響到軟件的質量。

            3、軟件性能測試技術

            軟件性能的測試一般包括三個方面,即性能評測、負載測試和強度測試。每一方面的測試都有其不同的測試目標、測試技術、完成標準,具體如下:

            3.1 性能評測

            針對響應時間、事務處理速率和其他與時間相關的需求進行評測和評估。目標是驗證性能需求是否都已滿足。

            測試目標:

            驗證所指定的事務或業務功能在以下情況下的性能行為:

            (1)正常的預期工作

            (2)預期的最繁重工作量

            測試技術:

            使用為功能或業務周期測試制定的測試過程。

            (1)通過修改數據文件來增加事務數量,或通過修改腳本來增加每項事務的迭代數量。

            (2)腳本應該在一臺計算機上運行(最好是以單個用戶、單個事務為基準),并在多個客戶機(虛擬的或實際的客戶機)上重復。

            完成標準:

            (1)單個事務或單個用戶:在每個事務所預期或要求的時間范圍內成功地完成測試腳本,沒有發生任何故障。

            (2)多個事務或多個用戶:在可接受的時間范圍內成功地完成測試腳本,沒有發生任何故障。

            注意事項:

            綜合的性能測試還包括在服務器上添加后臺工作量。 可采用多種方法來執行此操作,其中包括:

            (1)直接將“事務強行分配到”服務器上,這通常以“結構化查詢語言”(SQL) 調用的形式來實現。

            (2)通過創建“虛擬的”用戶負載來模擬許多個(通常為數百個)客戶機。此負載可通過“遠程終端仿真”(Remote Terminal Emulation) 工具來實現。此技術還可用于在網絡中加載“流量”。

            (3)使用多臺實際客戶機在系統上添加負載。

            (4)性能測試應該在專用的計算機上或在專用的機時內執行,以便實現完全的控制和精確的評測。

            (5)性能測試所用的數據庫應該是實際大小或相同縮放比例的數據庫。

           3.2 負載測試

            負載測試通過使測試對象承擔不同的工作量,以評測和評估測試對象在不同工作量條件下的性能行為,以及持續正常運行的能力。目標是確定并確保系統在超出最大預期工作量的情況下仍能正常運行,以及軟件的性能特征,例如,響應時間、事務處理速率和其他與時間相關的方面。

            測試目標:

            驗證所指定的事務在不同的工作量條件下的性能行為時間。

            測試技術:

            使用為功能或業務周期測試制定的測試。通過修改數據文件來增加事務數量,或通過修改測試來增加每項事務發生的次數。

            完成標準:

            多個事務或多個用戶:在可接受的時間范圍內成功地完成測試,沒有發生任何故障。

            注意事項:

            (1)負載測試應該在專用的計算機上或在專用的機時內執行,以便實現完全的控制和精確的評測。

            (2)負載測試所用的數據庫應該是實際大小或相同縮放比例的數據庫。

            3.3 強度測試

            強度測試目的是找出因資源不足或資源爭用而導致的錯誤。如果內存或磁盤空間不足,測試對象就可能會表現出一些在正常條件下并不明顯的缺陷。而其他缺陷則可能由于爭用共享資源(如數據庫鎖或網絡帶寬)而造成的。強度測試還可用于確定測試對象能夠處理的最大工作量。

            測試目標:

            驗證測試對象能夠在以下強度條件下正常運行,不會出現任何錯誤:

            (1)服務器上幾乎沒有或根本沒有可用的內存(內存和磁盤空間)

            (2)連接或模擬了最大實際(實際允許)數量的客戶機

            (3)多個用戶對相同的數據或賬戶執行相同的事務

            (4)最繁重的事務量或最差的事務組合

            注:強度測試的目標可表述為確定和記錄那些使系統無法繼續正常運行的的情況或條件。

            測試技術:

            (1)使用為性能評測或負載測試制定的測試。要對有限的資源進行測試,就應該在一臺計算機上運行測試,而且應該減少或限制服務器上的內存和磁盤空間。

            (2)對于其他強度測試,應該使用多臺客戶機來運行相同的測試或互補的測試,以產生最繁重的事務量或最差的事務組合。

            完成標準:

            所計劃的測試已全部執行,并且在達到或超出指定的系統限制時沒有出現任何軟件故障,或者導致系統出現故障的條件并不在指定的條件范圍之內。

            注意事項:

            (1)如果要增加網絡工作強度,可能會需要使用網絡工具來給網絡加載消息或信息包。

            (2)應該暫時減少用于系統的磁盤空間,以限制數據庫可用空間的增長。

            (3)使多個客戶機對相同的記錄或數據賬戶同時進行的訪問達到同步。

            4、結束語

            軟件質量的保證,不僅需要科學的測試策略,更要處理好整個軟件生命周期中其他如需求、分析、設計、實現各階段中出現的問題。只有對軟件質量進行全面、全過程的質量控制,才能最終保證軟件產品的質量,提高企業的競爭力。


          posted @ 2012-04-10 09:38 順其自然EVO 閱讀(260) | 評論 (0)編輯 收藏

          用CentOS 6快速配置一臺企業級Web代理服務器

            Web代理服務器讓企業員工可以快速安全地瀏覽網絡。Web代理服務器可以緩存內存,讓用戶之后對相同網頁的請求由本地緩存來處理,這比多次返 回網站來得更快速。代理服務器還能掃描入站網絡流量,查找有無惡意內容,并且保護最終用戶遠離病毒;它們還可以控制哪些用戶訪問什么樣的網絡內容。為了充 分利用所有這些功能,本文逐步介紹安裝和配置一臺簡單Web代理服務器(帶病毒過濾功能)的整個過程。

            一個完美的安全Web代理服務器包括下列組件:

            ● Squid——主要的軟件和代理服務。

            ● ClamAV——檢查入站內容的反病毒軟件。

            ● C-icap——采用互聯網內容適配協議(ICAP)的服務,Squid需要該服務與其他服務進行聯系。

            ● SquidClamav——基于ClamAV的反病毒服務,Squid通過ICAP服務連接到該服務。

            安裝配置

            我們將在基本的CentOS 6平臺上運行代理服務器,該平臺上沒有預先安裝任何軟件包組。如果是最基本的安裝,你可以使用來自官方鏡像頁面的最小鏡像。一旦我們安裝了操作系統,就可以安裝代理服務器的各組件。

            鏡像下載:http://www.centos.org/modules/tinycontent/index.php?id=30

            Squid

            Squid可以從官方的CentOS 6軟件庫獲得。只要執行yum install squid,即可安裝它。確保Squid隨系統自動開啟和關閉,為此借助命令chkconfig squid on,把它添加到默認的系統啟動和關閉級別。

             默認情況下,Squid的主配置文件/etc/squid/squid.conf允許通過常見端口的來自本地網站的請求。去掉cache_dir ufs /var/spool/squid 100 16 256這一行的注釋,那樣代理服務器將文件緩存在磁盤上。這個命令的參數指示代理服務器使用默認的ufs存儲格式。緩存目錄是/var/spool /squid,它應該可以存儲最多100MB的內容,16個一級子目錄和256個次級子目錄。考慮將緩存大小從100MB增加到1000MB,因為 100MB太低了,滿足不了如今的瀏覽需求。

            在同一個文件中,在默認配置信息后面,添加下列幾個命令:

          icap_enable on
          icap_send_client_ip on
          icap_send_client_username on
          icap_client_username_encode off
          icap_client_username_header X-Authenticated-User
          icap_preview_enable on
          icap_preview_size 2048
          icap_service service_req reqmod_precache bypass=1 icap://127.0.0.1:1344/squidclamav
          adaptation_access service_req allow all
          icap_service service_resp respmod_precache bypass=1 icap://127.0.0.1:1344/squidclamav
          adaptation_access service_resp allow all

            這個基本配置指示Squid使用在本地主機上運行的SquidClamav ICAP服務,本地主機使用TCP端口1344。對非緩存內容而言,需要使用這項服務。你可以從官方的Squid說明文檔,找到關于所有配置命令的更多信息。

            ClamAV

            ClamAV并不存在于默認的CentOS 6軟件庫中,所以你要么從源代碼安裝,要么使用第三方軟件庫。我建議使用EPEL軟件庫,因為它讓用戶易于安裝和維護。

             要將EPEL軟件庫安裝到CentOS 6上,請運行命令rpm -ivh http://download.fedoraproject.org/pub/epel/6/i386/epel-release- 6-5.noarch.rpm。之后,要安裝ClamAV,請執行yum install clamav clamav-db clamd。由于這是從EPEL軟件庫首次安裝,你會看到關于其密鑰的提醒;確認密鑰正確后才能繼續下一步。

            執行chkconfig clamd on,確保ClamAV后臺守護進程clamd自動啟動和終止。

             你可以設置最基本的ClamAV配置,只需編輯文件/etc/clamd.conf。你得至少移除顯示Example的那一行,那樣該服務就能啟動。你 可能還考慮更改一些命令的默認值。比如說,可以定義使用ScanPE、ScanELF和ScanPDF來掃描哪些文件擴展名。為了提升性能,可以將待掃描 文件的默認最大值(MaxFileSize)由25MB改成其他值,或者更改每個文件的多少數據有待掃描(MaxScanSize)——100MB是默認 值。值越大,所需的資源就越多,代理服務器的速度也就越慢。

           ClamAV病毒特征數據庫由一個名為freshclam的獨立程序來更新。其配置文件是/etc/freshclam.conf。為了使用它,你同樣得至少移除文件開頭部分顯示Example的那一行。大多數設置不用管,保持默認值就可以了。

            如果你執行沒有參數的freshclam,病毒特征更新一次,程序退出。你可以將freshclam配置成一項計劃任務(cron job),定期檢查ClamAV更新版,或者可以在后臺守護模式下啟用它,只需運行freshclam -d -c 2,其中-d指明了后臺守護模式,-c 2指明了每天更新幾次——這個例子中每天兩次。把這個命令添加到/etc/rc.local文件中,就可以確保下一次服務器重啟時,它會啟用。

            在/etc/freshclam.conf中可能需要更改的一項值得關注的設置是SafeBrowsing,它在默認情況下被設置成關閉。這個 設置指定了你是不是想使用谷歌的Safe Browsing(安全瀏覽)數據庫,該數據庫里面含有一份更新后的列表,收錄了已知的惡意網站。你應該啟用它,對性能只有一點影響,除非貴企業的最終用 戶在使用已經采用該數據庫的瀏覽器,比如Mozilla Firefox和谷歌Chrome。你只要指定SafeBrowsing yes,就可以開啟它。

            C-icap

            C-icap并不存在于默認的軟件庫或EPEL中,所以你得從其網站的源代碼安裝,對其進行解壓縮,然后完成標準的配置、編譯和安裝這個過程。

            由于C-icap是從源代碼自定義安裝,并不得到chkconfig的支持。因而,為了讓C-icap服務器在系統啟動時自動開啟,就用新的一行,將其二進制可執行代碼/usr/local/bin/c-icap添加到底部的/etc/rc.local。

            你可以找到默認情況下在/usr/local/etc/c-icap.conf的C-icap配置文件。大多數默認選項不用管它。指定 ServerLog /var/log/icapserver.log,將服務器的活動記錄到文件/var/log/icapserver.log中;我們以后要用到服務器的 日志,確保一切都在正常運行。

            你在檢查配置時,要注意ModulesDir和ServicesDir這兩個命令。默認情況下,兩者都指向/usr/local/lib/c_icap。這個目錄是你安裝ICAP服務和模塊(如SquidClamav)的地方。

            SquidClamav

            你得從源代碼安裝SquidClamav,原因與C-icap一樣。一旦你從其SourceForge網頁下載它,對其進行解壓縮,然后完成標準的配置、編譯和安裝這個過程。

            為了確保SquidClamav正確安裝,要檢查目錄/usr/local/lib/c_icap。你應該會看到兩個文件:squidclamav.la(libtool 庫文件)和squidclamav.so(模塊本身)。

            SquidClamav并不作為一項獨立的服務來運行,所以沒必要把它添加到默認的運行級別來實現自動啟動。相反,它是通過C-icap服務器來訪問的。

            SquidClamav的配置文件位于/etc/squidclamav.conf。這里,默認配置的大部分選項直接可以拿來用。要更改的其中 一個選項是redirect。最終用戶試圖下載病毒時,他們會被重定向至你在這里指定的URL。創建詳細描述的一個頁面,否則你這個管理員會接到大量投 訴,反映下載的內容莫名其妙地無法運行。

            為了創建重定向頁面,可以使用腳本cgi-bin/clwarn.cgi,你可以在SqidClamav的源代碼歸檔文件中找到它。只要將它上傳至網站,指定redirect example.org/cgi-bin/clwarn.cgi即可。

            測試代理服務器

            至此,你的代理服務器應該已安裝完畢、合理配置。為了確保所有服務自動開啟,重啟服務器,然后開始測試。

            你開始測試時,確保可以通過TCP端口3128這個默認代理端口,連接到服務器的IP地址。你必須在默認的CentOS 6防火墻中允許連接到這個端口,除非按基本CentOS 6安裝中建議的那樣禁用了防火墻。

            一旦你確保了可以連接到這個端口,對瀏覽器進行同樣詳細的配置:至于HTTP代理地址,就使用服務器的IP地址;至于端口,使用端口3128。 然后開始瀏覽網絡,看看代理服務器與未使用代理的瀏覽相比結果怎樣。不妨模擬一下許多用戶通常瀏覽的場景。你可能會發現,隨著更多的用戶開始使用代理服務 器,服務器的資源必須隨之增加。

            在服務器端,監控下列日志:

            ● Squid的日志——默認情況下,它在文件/var/log/squid/access.log中。你會在那里看到哪些用戶的IP地址在提出什么樣的請求。

            ● C-icap服務器的日志——與/usr/local/etc/c-icap.conf中通過ServerLog之前配置的那樣,它應該在/var/log/icapserver.log中。

            對你的代理服務器來說最重要的測試就是,試著下載病毒,看看結果如何。網上有眾多資源介紹如何創建含有已知病毒特征的測試文件。一旦創建了這樣 一個文件,把它上傳至某個地方,試著使用新建的代理服務器,用瀏覽器來下載它。如果一切運行正常,在C-icap服務器的日志中應該會看到這樣的條目:

          Wed Feb 22 01:03:57 2012, general, DEBUG squidclamav_end_of_data_handler: received from Clamd: stream: Eicar-Test-Signature FOUND
          Wed Feb 22 01:03:57 2012, general, DEBUG squidclamav_end_of_data_handler: Virus redirection: http://example.org/cgi-bin/clwarn.cgi?url=http://the_url_of_your_test_virus_file: Eicar-Test-Signature FOUND.

            進一步的改進

            如果到目前為止你已經做好了本文介紹的各個步驟,應該有一個帶病毒防護功能的基本代理服務器了。你可以在此基礎上繼續改進、添加更多的功能。下面是針對你添加額外組件來加強用戶安全的幾個建議:

            ● 使用安全DNS。這種DNS不僅可以阻止擴散惡意軟件的域耗用資源,還能阻止成人網站,如果進行了相應配置的話。一項廣受歡迎的安全DNS服務是諾頓DNS。

            ● 使用URL過濾(重定向器)。URL過濾器可與分門類別的域列表協同運行,可以根據用戶擁有的許可權限,允許或禁止訪問網站。這類過濾器經常用于阻止員工 訪問與工作無關的網站。可與Squid協同運行的一種廣受歡迎的過濾器是SquidGuard。它是免費開源的,可以與隨處可見的黑名單結合使用。

            要是由于某個原因,這款開源代理解決方案無法完全滿足你的需要,可以研究一下主要的幾款商用產品,比如SmoothWall,以便最好地滿足貴企業的需要。


          posted @ 2012-04-10 09:36 順其自然EVO 閱讀(334) | 評論 (0)編輯 收藏

          利用JMeter進行Web測試(簡介適合初學者)

          利用JMeter進行Web測試
          JMeter介紹
          腳本錄制
          運行JMeter進行測試
          JMeter主要組件介紹
          參數化設置
          動態數據關聯
          使用命令行運行JMeter腳本
          利用XSLT分析JMeter結果文件

          JMeter介紹

          JMeter, 一個100%的純Java桌面應用,它是Apache組織的開放源代碼項目,它是功能和性能測試的工具。JMeter可以用于測試靜態或者動態資源的性能 (文件、Servlets、Perl腳本、Java對象、數據庫和查詢、ftp服務器或者其他資源)。原先Jmemer是為Web/HTTP測試而設計 的,但是它已經擴展以支持各種各樣的測試模塊。它和用于HTTP和SQL數據庫(使用JDBC)的模塊一起運送。它可以用來測試靜止資料庫或者活動資料庫 中的服務器的運行情況,可以用來模擬對服務器或者網絡系統加以重負荷以測試它的抵抗力,或者用來分析不同負荷類型下的所有運行情況。它也提供了一個可替換 的界面用來定制數據顯示,測試同步及測試的創建和執行。
            Jmeter的下載地址:http://jakarta.apache.org/jmeter/usermanual/index.html
            JMeter 的特性:
            a) 能夠對HTTP和FTP服務器進行壓力和性能測試, 也可以對任何數據庫進行同樣的測試(通過JDBC)。
            b) 完全的可移植性和100% 純Java。
            c) 完全 Swing 和輕量組件支持(預編譯的JAR使用 javax.swing.*)包。
            d) 完全多線程 框架允許通過多個線程并發取樣和 通過單獨的線程組對不同的功能同時取樣。
            e) 精心的GUI設計允許快速操作和更精確的計時。
            f) 緩存和離線分析/回放測試結果。
            g) 高可擴展性:
            h) 可鏈接的取樣器允許無限制的測試能力。
            i) 各種負載統計表和可鏈接的計時器可供選擇。
            j) 數據分析和可視化插件提供了很好的可擴展性以及 以及個性化。
            k) 具有提供動態輸入到測試的功能(包括Javascrīpt)。
            l) 支持腳本變成的取樣器(在1.9.2及以上版本支持BeanShell)。

          腳本錄制


          利用BadBoy進行腳本錄制
          利用BadBoy錄制JMeter腳本(1)
          通過Badboy的官方網站(http://www.badboy.com.au)下載Badboy的最新版本;
          安裝Badboy。安裝過程同一般的Windows 應用程序沒有什么區別,安裝完成后你可以在桌面和Windows開始菜單中看到相應的快捷方式——如果找不到,可以找一下Badboy安裝目錄下的Badboy.exe 文件,直接雙擊啟動Badboy;
          啟動Badboy,你可以看到下面的界面。
          利用BadBoy錄制JMeter腳本(2)
          在地址欄(圖中紅色方框標注的部分)中輸入你需要錄制的Web應用的URL——這里我們以http://www.baidu.com 為例 。
          點擊 開始錄制 按鈕(圖中藍色圓圈標注的部分)開始錄制。
          開 始錄制后,你可以直接在Badboy內嵌的瀏覽器(主界面的右側)中對被測應用進行操作,所有的操作都會被記錄在主界面左側的編輯窗口中(圖中黃色方框標 注的部分)——在這個試驗中,我們在baidu的搜索引擎中輸入 JMeter 進行搜索。不過錄制下來的腳本并不是一行行的代碼,而是一個個Web對象——這有點像LoadRunner的VuGen中的Tree View視圖;
          錄制完成后,點擊工具欄中的“停止錄制”按鈕(圖中紫色方框標注的部分),完成腳本的錄制
          利用BadBoy錄制JMeter腳本(3)
          選擇“File -> Export to JMeter”菜單,填寫文件名“baidu.jmx”,將錄制好腳本導出為JMeter腳本格式。也可以選擇“File -> Save”菜單保存為Badboy腳本;
          啟動JMeter并打開剛剛生成的測試腳本,就可以用JMeter進行測試了

          利用JMeter的代理服務器功能進行腳本錄制
          利用JMeter的代理服務器功能
          進行腳本錄制(1)
          在測試計劃中添加線程組,在線程組中添加邏輯控制器-錄制控制器。
          在工作臺中添加非測試元件-HTTP代理服務器。
          端口:即代理服務器的監聽端口,我們設為8080。
          目標控制器選擇:測試計劃>線程組;
          分組選擇:每個組放入一個新的控制器。
          在HTTP代理服務器中添加定時器-高斯隨機定時器(用于告知Jmeter來在其生成的HTTP請求中自動的增加一個定時器)。定時器將會使相 應的的取樣器被延遲。 延時的規則是,在上一個訪問請求被響應并延時了指定的時間后,下一個被定時器影響的取樣訪問請求才會被發送出去。

          如果在代理服務器元件里使用了高斯隨機定時器,就應該在其中的固定延遲偏移(Constant Delay Offset)設置項里添上${T}(用于自動引用紀錄的延遲時間)。
          代理服務器配置好以后,點擊啟動,代理服務器就會開始記錄所接受的HTTP 訪問請求。
          打開瀏覽器,打開Internet選項,將局域網(LAN)設置中的代理服務器設為:localhost,端口為在代理服務器中設的端口:8080。
          在瀏覽器地址欄中輸入地址并進行相關的操作進行錄制,錄制完成后, 停止HTTP 代理服務器; 在錄制控制器元件上單擊右鍵將記錄的元件保存為一個文件用于以后重用,另外,不要忘了恢復瀏覽器的代理服務器設置。

          運行Jmeter進行測試(1)


          腳本錄制完畢后,就可以運行JMeter來進行我們的測試了。
          到JMeter的網站http://jakarta.apache.org/site/downloads/downloads_jmeter.cgi
          下載JMeter的最新版本,將zip文件解壓縮到D:/JMeter,運行D:/JMeter/bin下的jmeter.bat即可。
          打開JMeter會有一個默認的測試計劃,點擊文件-打開,選中錄制的腳本文件如:WebXSample_addUser.jmx,打開腳本進行測試。
          在線程組上添加監聽器-聚合報告(用于分析測試結果)后,點擊運行-啟動,開始測試,測試完畢后在聚合報告中就可以看到測試結果。一個簡單的測試計劃就完成了。
          聚合報告顯示測試結果
          Label:每個 JMeter 的 element (例如 HTTP Request )都有一個 Name 屬性,這里顯示的就是 Name 屬性的值
          #Samples:表示你這次測試中一共發出了多少個請求,如果測試計劃模擬10個用戶,每個用戶迭代10次,這里就會顯示100
          Average:平均響應時間 — 默認情況下是單個 Request 的平均響應時間,當使用了事務控制器時,也可以以事務為單位顯示平均響應時間
          Median:中位數,也就是 50 %用戶的響應時間
          90% Line: 90 %用戶的響應時間
          Min:最小響應時間
          Max:最大響應時間
          Error%:錯誤率,本次測試中出現錯誤的請求的數量 / 請求的總數
          Throughput:吞吐量 —— 默認情況下表示每秒完成的請求數( Request per Second )
          KB/Sec:每秒從服務器端接收到的數據量
          測試計劃(Test Plan)是使用 JMeter 進行測試的起點,它是其它 JMeter 測試元件的容器。
          線程組(Thread Group)代表一定數量的并發用戶,它可以用來模擬并發用戶發送請求。
          取樣器(sampler)定義實際的請求內容,被線程組包含,我們主要用HTTP請求。
          監聽器(Listener)
          邏輯控制器(Logic Controller)
          斷言(Assertions)
          配置元件(Config Element)
          前置處理器(Pre Processors)和后置處理器(Post Processors)
          定時器(Timer)

          JMeter主要組件介紹-測試計劃


          測試計劃(Test Plan)是使用 JMeter 進行測試的起點,它是其它 JMeter 測試元件的容器。
          名稱:你可以為你的測試計劃取一個有意義的名字。
          注釋:對測試計劃的注釋。
          用戶定義的變量:用戶可以自己定義變量,在用到此變量的時候直接用${變量名}引用即可。例:變量名=url,值=http://www.baidu.com,在需要http://www.baidu.com時直接用${url}即可。
          Add directory or jar to classpath:向類路徑即%JMETER-HOME%\lib中添加目錄及jar包。
          JMeter主要組件介紹-線程組
          名稱:為線程組起名字。
          線程屬性-線程數:設置發送請求的用戶數目 ,即并發數。
          線程屬性-Ramp-Up Period(in second):線程間的時間間隔,單位是秒。即所有線程在多少時間內啟動。
          線程屬性-循環次數:請求的重復次數,如果選擇后面的forever(默認),那么 請求將一直繼續,如果不選擇forever,而在輸入框中輸入數字,那么請求將重復指定的次數,如果輸入1,那么請求將執行一次,如果是0,會出現問題。
          調度器配置-啟動時間:測試計劃什么時候啟動,啟動延遲會覆蓋它。
          調度器配置-結束時間:測試計劃什么時候結束,持續時間會覆蓋它。
          調度器配置-持續時間:測試計劃持續多長時間,會覆蓋結束時間。
          調度器配置-啟動延遲:測試計劃延遲多長時間啟動,會覆蓋啟動時間。
          JMeter主要組件介紹-取樣器(HTTP請求)
          名稱:HTTP請求的名字。
          Web服務器-服務器名稱或IP、端口號,腳本錄制時自動添加,也可以使用“用戶自定義變量”。
          HTTP請求:用默認值即可。
          同請求一起發送參數:請求中的參數、值可以在此設置,需要用到參數化及動態數據關聯,我們在后面專門介紹。
          同請求一起發送文件:我可以制定同請求一起發送哪個文件。
          其他任務包括:從HTML文件中獲取所有內含的資源、用作監視器、Embedded URLs must match
          監聽器(Listener)負責收集測試結果,同時也被告知了結果顯示的方式。我們常用的包括:聚合報告、查看結果樹、用表格查看結果,都支持將結果數據寫入文件。其他的添加上去看看就行。聚合報告前面我們介紹過,后面是查看結果樹和用表格查看結果的截圖。
          JMeter主要組件介紹-監聽器(用表格查看結果)

          JMeter主要組件介紹-邏輯控制器

          邏輯控制器(Logic Controller)可以自定義JMeter發送請求的行為邏輯,它與Sampler結合使用可以模擬復雜的請求序列。
          循環控制器可以設置請求的循環次數或永遠循環(如果選中永遠的話)。
          事務控制器可以將多個請求放在同一個事務中。如果選中Gegerate parent sample,則聚合報告中只顯示事務控制器的數據,而不會顯示其中的各個請求的數據,反之則全部顯示。

          JMeter主要組件介紹-斷言

          斷言(Assertions)可以用來判斷請求響應的結果是否如用戶所期望的。它可以用來隔離問題域,即在確保功能正確的前提下執行壓力測試。這個限制對于有效的測試是非常有用的。

          JMeter主要組件介紹-配置元件


          配置元件(Config Element)維護Sampler需要的配置信息,并根據實際的需要會修改請求的內容。我們主要在參數化中用到CSV Data Set Config


          JMeter主要組件介紹-前置處理器和后置處理器

          前置處理器(Pre Processors)和后置處理器(Post Processors)負責在生成請求之前和之后完成工作。前置處理器常常用來修改請求的設置,后置處理器則常常用來處理響應的數據。我們主要在動態關聯中用到后置處理器的正則表達式提取器。     

          JMeter主要組件介紹-定時器


          定時器(Timer)負責定義請求之間的延遲間隔。

          參數化設置


          在我們的測試計劃中我們使用的都是HTTP請求,在HTTP請求中常常會提交一些參數,我們為了不想在每一次請求中都使用相同的參數值,就要想辦法讓每一次請求的參數的值都是不一樣的,我們就需要進行參數化設置,這里我們介紹兩種參數化設置的方法。
          一種是利用函數助手中的_Random函數進行參數化設置;
          一種是利用配置元件中的CSV Data Set Config進行參數化設置。

          參數化設置-函數助手(1)

          JMeter中有一個函數助手的功能,里面內置了多個函數,我們可以利用其中的_Random函數來進行請求中的參數化設置。
          在JMeter中選擇“選項-函數助手對話框”打開函數助手對話框。
          選擇一個功能_Random。
          設定最小值為1。
          設定最大值為100。
          函數名稱設為func1。
          點擊生成將生成一個引用字符串${_Random(1,100,func1},在需要的請求參數中拷貝該字符串即可。
          其中函數名稱用來在引用中作區別,即我們可以設定不同的名稱在不同的地方引用同一個函數的功能
          例如:我們生成了兩個串${_Random(1,100,func1)}、 ${_Random(1,100,func2)},在添加圖書的請求中,我們在bookName的參數值中引 用${_Random(1,100,func1)},在bookConcern的參數值中應用${_Random(1,100,func2)},見截圖, 這樣測試運行時不同的線程將產生不同的bookName和bookConcern。

          參數化設置-CSV Data Set Config(1)


          在線程組上點擊右鍵選擇添加-配置元件-CSV Data Set Config,打開CSV Data Set Config。
          Filename文件名:即參數化要引用的文件名。這里是d:\number.txt
          File encoding文件編碼:可以不填。
          Variable Names(comma-delimited)變量名(用逗號分割):多個變量可以引用同一個文件,用逗號分割。這里是num1,num2
          Delimiter(use ‘\t’ for tab):參數文件中多個變量值的分隔符,\t表示用tab鍵分割,默認是逗號。
          Recycle on EOF?:結束后是否循環?默認是True.
          Number.txt文件內容見截圖。

          參數化設置-CSV Data Set Config(2)


          在添加圖書的請求中,我們在bookName的參數值中引用${num1},在bookConcern的參數值中應用${num2},見截圖,這樣測試運行時不同的線程將產生不同的bookName和bookConcern。

          動態數據關聯

          在HTTP請求的參數中經常會遇到一些參數的值是從服務器相應的動態數據,這些數據需要進行關聯才能使得每一次請求都能成功得被服務器接受,在JMeter中采用正則表達式提取器來獲取這些動態的數據。
          正則表達式允許用戶從服務器響應中獲取數據,作為一個后置處理器,正則表達式提取器會在每一個請求執行后再執行,正則表達式提取請求的參數值,產生模板字符串,并將結果保存到給出的變量中。

          動態數據關聯(1)-正則表達式提取器


          在HTTP請求的參數中經常會遇到一些參數的值是從服務器相應的動態數據,這些數據需要進行關聯才能 使得每一次請求都能成功得被服務器接受,在JMeter中采用正則表達式提取器來獲取這些動態的數據。比如我們想要獲得從服務器相應的TOKEN,就可以 使用下面的正則表達式提取器。
          使用時就可以使用${token_g1}來表示獲取到的TOKEN值。如下圖:

          使用命令行運行JMeter腳本


          JMeter -n -t my_test.jmx -l log.jtl
          -n告知JMeter采用非圖形化運行JMeter腳本
          -t指定要運行的腳本文件
          -l指定保存執行結果的文件名
          執行命令前要檢查當前目錄是否是%JMeter_Home%\bin 目錄;
          如果 JMeter 腳本不在當前目錄,需要指定完整的路徑;如果要把執行的結果保存在其他地方也要指定完整的路徑。

          利用XSLT分析JMeter結果文件(1)


          將結果文件的擴展名改為xml,例:將log.jtl改為log.xml。
          在log.xml的文件頭
          <?xml version="1.0" encoding="UTF-8"?>
          <testResults version="1.2">
          中添加
          <?xml-stylesheet type=“text/xsl” href=“jmeter-results-report.xsl” ?>
          使之變成
          <?xml version="1.0" encoding="UTF-8"?>
          <?xml-stylesheet type="text/xsl" href="jmeter-results-report.xsl" ?>
          <testResults version="1.2">
          其中href指定xsl文件的路徑,如果與xml文件在同一目錄,則只寫文件名即可,否則要寫明詳細路徑。
          利用XSLT分析JMeter結果文件(2)
          將修改后的xml文件用瀏覽器打開即可得到統計結果
          JMeter中進行分布式測試
          作為一個純 JAVA 的GUI應用,JMeter對于CPU和內存的消耗還是很驚人的,所以當需要模擬數以千計的并發用戶時,使用單臺機器模擬所有的并發用戶就有些力不從心, 甚至還會引起JAVA內存溢出的錯誤。不過,JMeter也可以像 LoadRunner 一樣通過使用多臺機器運行所謂的代理來分擔負載產生器自身的壓力,并借此來獲取更大的并發用戶數,我們只需手動配置一下即可。
          1、在所有期望運行 JMeter作為 負載產生器的機器上安裝JMeter,并確定其中一臺機器作為 控制器,其他的機器作為 代理。然后運行所有 代理 機器上的JMeter-server.bat文件—假定我們使用兩臺機器172.20.80.47和172.20.80.68作為 代理;
          2、在Controller 機器的JMeter安裝目錄下找到 bin 目錄,再找到 jmeter.properties 這個文件,使用記事本或者其他文字編輯工具打開它;
          3、 在打開的文件中查找“remote_hosts=”這個字符串,你可以找到這樣一行“remote_hosts=127.0.0.1”。其中的 127.0..0.1 表示運行JMeter代理的機器,這里需要修改為“remote_hosts=172.20.80.47,172.20.80.68”;
          4、保存文件,并重新啟動控制器機器上的JMeter,并進入啟動 ->遠程啟動菜單項。就會看到我們剛才添加的兩個代理的地址,選中即可運行,如果想同時啟動所有代理,選擇遠程全部啟動即可。
          要進行分布式測試代理機器上需要添加環境變量,即添加用戶變量JMETER_HOME=d:\jmeter,系統變量中的path中添加d:\jmeter\bin(假設jmeter放在d盤根目錄下)。

          OK  簡單的介紹到此  希望大家多動手練 才是王道~












          posted @ 2012-04-09 14:37 順其自然EVO 閱讀(43269) | 評論 (1)編輯 收藏

          Jmeter Linux資源監控器

          最近完成了jmeter linux資源監控器的開發,方法并不怎么高明,但相信可以幫助很多用jmeter來做性能測試的同仁解決jmeter缺少linux資源監控的問題
          附件中是編譯好的包以及linux上所用的腳本。基本的原理是利用shell腳本生成資源xml,讓jmeter利用http請求獲取該xml,解析展現數據。
          歡迎各位同仁測試使用,有問題也可以與我交流。

          監控器實現的是linux系統上的資源監控,要求:服務器上至少有一個web server(因需要通過http請求獲取資源xml),用于生成服務器資源xml的腳本中使用了sysstat包中的指令,所以需要安裝sysstat包。
          使用方法:
          下載:

          LinuxResourcesMonitor.rar
          (2008-08-01 20:56:32, Size: 756 kB, Downloads: 0)


          首先解開壓縮包,取出status腳本,登錄到被監控的服務器上,將status腳本放上去。該腳本執行時會在所在路徑生成status.xml文件,可以直接將status腳本放在web server的目錄下,也可以用軟鏈接來鏈到status.xml文件。下面介紹在基于apache的web server上的配置方法:
          在apache的配置文件httpd.conf中找到DocumentRoot,一般默認是apache目錄下的htdocs,將status腳本放到該目錄下;
          更改執行權限:
          chmod 744 status
          啟動該腳本:
          ./status start
          啟動起來之后就會在當前目錄下產生status.xml文件
          不需要監控時,停止該腳本:
          ./status stop




          然后到運行jmeter的機器上,解開壓縮包里的ext.rar包,將解壓得到的兩個jar包:ApacheJMeter_core.jar和ApacheJMeter_monitors.jar,復制到jmeter的lib/ext目錄下,覆蓋原來的jar包。
          之后就可以到jmeter上來監控了:打開jmeter,建立一個線程組,添加一個http請求,ip就是要監控的服務器地址,端口號就是apache偵聽的http端口,協議是“http”,路徑是“/status.xml”,勾選“用作監視器”;



          http request.JPG

          再為該http請求添加一個“固定定時器”組件和一個“監視器結果”組件,“固定定時器”的延時要設置為大于1秒的時間,即數據的采樣時間。



          timer.JPG

          在線程組中循環次數設置勾選“永遠”;



          thread group.JPG

          Run一下,就可以在監視器結果上看到剛剛添加的監控服務器了,目前已經監控了6個參數:cpu%user,cpu%iowait,load,mem%(used/total),swap in,swap out。


          monitor.JPG


          如果被監控的linux上沒有安裝sysstat包,是無法正常生成監控數據的,這里附上sysstat包的安裝方法:
          首先到http://perso.wanadoo.fr/sebastien.godard/下載最新的版本,最好是源碼包,比如sysstat-5.1.1.tar.gz

          1.解包:

          tar zxvf sysstat-5.1.1.tar.gz


          2.安裝:

          cd sysstat-5.1.1

          make config
          這步可以省略,有些發行版中會出錯;如果不用這個命令,可以直接安裝到其默認的/usr/local/lib目錄中

          make
          編譯

          make install
          安裝

          這樣就安裝好了。

          posted @ 2012-04-09 11:36 順其自然EVO 閱讀(1913) | 評論 (0)編輯 收藏

          jmeter利用http代理服務器組件錄制腳本

          by jack

          在“工作臺”添加“HTTP代理服務器”

          端口:

          代理服務器的端口,默認8080,可自行修改,但不要與其它應用端口沖突

          目標控制器:錄制的腳本存放的位置,可選擇項為測試計劃中的線程組

           

          分組:

          對請求進行分組。“分組”的概念是將一批請求匯總分組,可以把url請求理解為組。

                “不對樣本分組”:所有請求全部羅列

                “在組間添加分隔”:加入一個虛擬的以分割線命名的動作,運行同“不對樣本分組”,無實際意義

                “每個組放入一個新的控制器”:執行時按控制器給輸出結果

                “只存儲每個組的第一個樣本”:對于一次url請求,實際很多次http請求的情況,這個選項很好用,因為我們常常是不關心后面的那些請求的。

           

          記錄HTTP信息頭:

          錄制requesthead信息

          添加斷言:

          錄制時加入空的檢查點(需自行填寫內容)

          Regex matching

          錄制時加入空的正則匹配(需自行填寫內容)

           

          在瀏覽器中錄制

          啟動HTTP代理服務器后,打開瀏覽器(IEFirefoxOpera等),添加代理,地址填寫本機iphost name,端口填寫剛剛設置的代理端口(本例中8080),在瀏覽器中進行正常網頁瀏覽,即可錄制下對應的http請求。IE上的設置:


          在一些用到JS很多的網頁中,JS的動作也會被錄制進來,像其中的/complete/search是輸入提示框JS的動作,可以刪掉的。

          JMeter的腳本錄制就是這樣,另外還可以利用別的工具,例如Badboy,它的使用更加簡單,具體可以參考官方網站http://www.badboy.com.au/.

          最后,在設置HTTP代理服務器的時候,有兩個地方需要注意:

          1. 要確認8080端口是否有沖突,被別的程序,例如Web服務器占用。如果有沖突,可以更改為別的沒有沖突的端口
          2. JMeter HTTP代理服務器的端口和瀏覽器設置的端口要一致

          posted @ 2012-04-09 11:33 順其自然EVO 閱讀(3280) | 評論 (1)編輯 收藏

          ruby開學!

          至于怎么安裝ruby 我就不多說了  網上到處都是 人不能太懶 ,我在windows和linux下都安裝了  親  學習要靠自己哦

          http://blog.csdn.net/gumanren/article/details/4914586(Eclipse 集成ruby的環境插件)



          介紹

          這是一個短小的Ruby入門,完全讀完只需20分鐘。這里假設讀者已經安裝了Ruby,如果你沒有安裝的話,請在閱讀文前訪問Ruby官方網站進行下載并安裝。

          交互式的Ruby

          打開IRB(交互式Ruby外殼):
          如果你使用Mac OS X,那么請打開終端窗口輸入irb;
          如果你使用Linux,那么請打開shell輸入irb;
          如果你使用windows,那么請在開始菜單中找到Ruby->fxri,并執行它。

          image   

          Ok,在打開IRB之后,在其中輸入"Hello World"。

          image

          Ruby聽從你的安排!   

          發生了什么?我們剛才編寫了世界上最短小的“Hello World”程序嗎?這么說不太確切。第二行輸出是IRB告訴我們:上一個表達式的評估結果。如果我們希望打印出“Hello World”,那么就還需要一點努力:

          image

          puts在Ruby中是一個簡單的打印輸出命令。后面的“=> nil”表示什么?——那是表達式的結果。Puts總是返回nil,這是Ruby中表示“絕對無值”(absolutely-positively- nothing value)的方式,看上去有些類似Java中的null。

          你的免費計算器在這里!

          無需做什么,我們就能把IRB作為一個簡單的計算器使用:

          image

          這樣就能計算3+2。夠簡單的!那么3乘以2如何?你可以在下面繼續輸入3*2,也可以回到上面(3+2處)重新修改你剛剛輸入的計算公式。使用鍵盤上的向上鍵,使光標到達3+2那一行,再用左鍵移動光標到加號上,然后使用空格鍵進行修改。

          image   

          下面,讓我們嘗試計算3的平方:

          image  

          在Ruby語言中,**表示冪運算。那么如何計算平方根呢?

          image

          Ok,等一下,表達式中的sqrt(9)表示什么?你一定能猜到這是計算9的平方根。而Math表示什么?不要著急,下面就讓我們進一步了解像Math這樣的模塊。

          模塊——按照主題分組的代碼

          Math是Ruby內建的數學模塊。在Ruby中,模塊提供了兩種角色:一種角色是將類似的方法聚集在同一個“家 族”名下。因此,Math也包括sin、tan這樣的方法。第二種角色是一個圓點(dot),它標記了消息的接收者。什么是消息?在上面的例子 中,sqrt(9)便是消息,它意味著調用sqrt方法取出9的平方根。

          Sqrt方法調用的結果是3.0。你可能注意到它并不是3。這是因為多數情況下,數字的平方根并不是整數,所以這里返回了一個浮點數。

          那么我們如何記住這些計算結果呢?——將結果賦值給變量。

          image


          這是一個短小的Ruby入門,完全讀完只需20分鐘。讓我們從編寫世界上最簡單的“Hello,World”程序開始逐步深入了解Ruby的類、block、迭代器等特征,也許這對你來講還遠遠不過,但對于20分鐘的入門來講已經非常難得了。

          AD:

          如何定義方法?

          如何才能方便省事地隨意輸出字符串,而無需過多地勞煩我們的手指呢?——我們需要定義一個方法!

          image

          上面的代碼中第一行“def h”標志著方法定義的開始。它告訴Ruby我們正在定義一個名為h的方法。下面一行是方法體:puts "Hello World"。最后,也就是第三行“end”通知Ruby我們完成了方法定義。Ruby的回應“=> nil”告訴我們它已經知道我們定義了此方法。

          簡短、重復地調用方法

          現在,讓我們嘗試多次執行這個方法:

          image    

          哈,這太容易了。在Ruby中調用某個方法只需將方法名提交給Ruby。當然,這是在方法沒有參數的情況下。如果你愿意也可以添加一個空白的括號,但是這沒有必要。

          如果我們想對某個人說hello而不是整個“世界”(world),那該怎么做?——重定義h方法使它接收name參數。

          image

          嗯,現在看來工作正常。

          字符串中的奧秘 

          “#{name}”是什么意思?這是Ruby在某個字符串中插入其它字符的方式。在大括號之間放入的字符串(這里是指name)將被外部的字符串代替。你也可以使用字符串類內建的capitalize方法來確保某人名字的首字母大寫:

          image

          上面的代碼有兩個地方需要說明:

          第一,我們通過無括號的方式調用方法,因為括號是可選的;

          第二,這里的默認參數值為“World”。也就是說在調用方法時如果沒有提供name參數,則使用默認值“World”。

          進化為Greeter!

          我們是否需要一個真正的問候者(greeter),他能記住你的名字、問候你、總是尊重地向你示好?那么這就最好建立一個“Greeter”類:

          image

          在上面的類代碼中定義了一個稱為Greeter的類和一些類方法,其中出現了一些新的“關鍵詞”:請注意“@name”,它是類的實例變量,并對類中的所有方法(say_hi和say_bye方法)都有效。

          這是一個短小的Ruby入門,完全讀完只需20分鐘。讓我們從編寫世界上最簡單的“Hello,World”程序開始逐步深入了解Ruby的類、block、迭代器等特征,也許這對你來講還遠遠不過,但對于20分鐘的入門來講已經非常難得了。

          AD:

          如何讓Greeter類發揮作用?現在讓我們來建立一個Greeter對象并使用它!

          image

          Greeter類的實例對象g被建立后,它便接受了name參數(值為Pat)。那么我們能直接訪問name嗎?

          image

          看看上面的編譯錯誤來看,這樣直接訪問name是行不通的。 

          窺視對象的內部    

          對象中的實例變量總是隱藏于其中,但也并非毫無蹤跡可尋,通過審查(inspect)對象便會見到它們。當然還有其它的訪問方法,但是Ruby采用了良好的面向對象的方式來保持數據的隱藏性。

          image

          喔!這么多方法,可是我們只定義了兩個方法呀?其它的方法又出自何處?不要擔心,instance_methods方法列出了Greeter對象的 所有方法,其中包括父類中定義的方法。如果我們只想對Greeter類的方法進行列表的話,那么把false作為參數調用 instance_methods方法即可。false意味著我們不需要父類定義的方法。

          image

          哈哈,這才是我們想要的。下面讓我們看看Greeter對象能回應哪些方法:

          image

          它知道say_hi、to_s(此方法將對象轉換為字符串,是任何對象都必備的默認方法,很想Java中的toString方法),但它不知道name。

          隨時修改類定義

          如何才能查看或者修改name呢?Ruby提供了訪問對象變量的簡單方法:

          image

          在Ruby語言中,你能夠多次打開某個類并修改它。而修改所帶來的變化將應用在此后建立的任何新對象中、甚至現存的此類對象中。下面讓我們建立一個新對象并訪問它的@name屬性。

          image

          我們通過使用attr_accessor定義了兩個方法:

          “.name”用來獲取name屬性值;

          “.name=”用來設置namee屬性值。

          這很類似在Java類中訪問被Public修飾的成員變量。



          向每個人問候,MegaGreeter不會漏掉一個人

          Greeter并不完美,因為它只能一次服務一個人。所以我們在這里設計一個能夠一次向全世界、世界上每個人或者在名單中的人發送問候的MegaGreeter類。在這里,我們將放棄從前的IRB交互模式,轉而改為編寫Ruby程序文件。

          退出IRB的方法:輸入“quit”、“exit”或者按下Control+D的組合鍵。

          image

          保存上面的代碼到名為“ri20min.rb”的文件中,并使用“ruby ri20min.rb”的命令執行它。程序輸出如下:

          image

          下面我們將深入了解一下上面的代碼。

          請注意上面代碼中的起始行,它以#開頭。在Ruby語言中,任何以#開頭的行都被視為注釋,并被解釋程序忽略。

          我們的say_hi方法已經發生了變化:

          image

          它查找@names參數并按照其參數值作出決定:

          如果參數值為nil,它將打印三個圓點。

          那么@names.respond_to?("each")表示什么?

          循環——也叫迭代

          如果@names對象具有each方法,那么它是可以被迭代的,進而可以對其進行迭代,從而問候列表中每個人。如果@names不具備each方法,則將它自動轉換為字符串,并執行默認的問候。

          image

          each是一種方法,它接受一個代碼塊(block of code),然后針對列表中的每個成員執行這個代碼塊,而在do和end之間的部分便是這個非常類似匿名函數的代碼塊。在管道符之間的變量是代碼塊的參數 name,它作為代碼塊參數被綁定為列表成員,而代碼塊puts "Hello #{name}!"將使用這個參數進行輸出。

          大多數其它的編程語言使用循環遍歷列表,下面是C語言的循環示例:

          image

          上面的代碼顯然可以工作,但它不夠“優雅”!你不得不用i這個多余的循環變量,還需要指出列表的長度,然后再解釋如何遍歷列表。

          Ruby的迭代方式則更加優雅,所有的內部管理細節都隱藏在each方法中,你所需做的就是告訴它如何處理其中的每個成員。

          塊(block),Ruby邊緣的高亮點!

          塊(block)的真正優勢在于:能夠處理比列表更加復雜的對象。除了在方法中可以處理簡單的內部管理細節外,你還能處理setup、teardown和所有錯誤,而不讓用戶有所察覺。

          image

          say_bye方法沒有使用each,而是檢查@names是否具有join方法,如果具有join方法,則調用join方法。否則它將直接打印@names變量。

          此方法并不關心變量的實際類型,這依賴于它所支持的那些被稱為“Duck Typing” 的方法:duck typing是動態類型的一種形式:變量的值自身隱含地決定了了變量的行為。這暗示了某個對象與其它實現了相同接口的對象之間是可交換的,不管對象之間是 否具有繼承關系。鴨子測試(duck test)是對duck typing的一種形象比喻——“如果它走路像鴨子,那么也一定像鴨子一樣呷呷地叫,那么它必定是一只鴨子”。duck typing是某些編程語言的特性:如Smalltalk, Python, Ruby, ColdFusion。

          Duck Typing的益處是無需對變量的類型進行嚴格地限制,如果某人使用一種新類型的列表類,只要它實現了與其它列表相同語義的join方法,便可以拿來使用。

          啟動腳本

          文件上半部分是MegaGreeter類的代碼,而后面剩下的部分則是對這些類方法的調用。而這是我們最后值得注意的一點:

          image

          __FILE__是一個“具有魔力”的變量,它代表了當前文件名。$0是用于啟動程序的文件名。那么代碼“if __FILE__ == $0”便意味著檢查此文件是否為將被使用的主程序文件。這樣做可以使程序文件作為代碼庫使用,而不是可執行代碼;但當此文件被用作執行文件時,也可被執 行。

          如何進一步學習Ruby

          到此便是本入門的尾聲了。當然還有許多值得瀏覽的:Ruby提供的各種不同的控制結構;塊和yield的使用;模塊作為mixins使用等。希望這次Ruby初體驗能使你對Ruby更感興趣。

          注:mixin在面向對象編程語言中是一種提供某些功能給子類繼承的類,但mixin并不能實例化。從某個 mixin繼承并不是什么特殊的形式,而它更適于收集功能。某個子類甚至可以通過繼承一個或者多個mixin選擇繼承它的全部或者多數功能。一個 mixin能延期定義和綁定方法直到運行時,而屬性和實例參數也將在編譯時才被定義。這不同于多數常見的方式:定義所有的屬性、方法,并在編譯時進行初始 化。

          posted @ 2012-04-05 17:52 順其自然EVO 閱讀(1959) | 評論 (0)編輯 收藏

          測試的一些工具

          WEB前端的性能測試綜合的測試工具有pagespeed、yeslow,httpwatch,IE開發者工具,主要是通過工具訪問功能點,根據HTTP協議進行性能分析。
          js的性能要怎么測試

            JS的性能可以不通過并發就可以驗證,IE8、IE9的開發者工具就是一個非常不錯的驗證JS性能的分析器,主要分析調用時間跟調用次數。

          在日常的測試工作時如何進行性能測試

            日常的性能測試主要是從業務功能點中抽取具有并發特點的,高風險的、大數據量處理的業務,整理成測試用例,制定相應的指標,然后用工具或者手工進行性能測試并分析, 主要做單功能點的基準測試與組合場景的穩定性測試。

           (2)關于隊列的性能測試如何進行

            隊列由于有一個隊列的長度限制,一般不通過用LR等工具來進行性能測試,主要是通過準備大數據量的待調度事件來進行測試,比如工作流調度隊列,你可以準備1萬條待調度的流程。

            (3)測試過程中發現了性能問題,問題要如何進行定位

             如果發現性能問題,我想首先是響應時間不達標,然后就是定位分析了,定位分析需要一個過程了,一般程序是通過前端到后端進行分層分析,一般分為客戶機 層、應用服務器層、數據庫層,像WEB程序,客戶機層就是通過分析JS或者http交互過程或者是LR的頁面切割來分析,然后一層層的分析下去,知道定位 程序的某個功能點、數據庫的某條SQL語句,或者某些不適合的配置參數。

           3、如何成為一名性能架構師?

            成為性能架構師有兩條路可走,一條是從開發轉向架構,然后精力集中放在與性能相關的領域,如性能測試、性能分析、性能優化,從軟件架構層面把握軟件的性能問題,積累到一定程度就可稱得上一名合格的性能架構師。

            另一條路是從性能測試逐步積累經驗,當然這也需要較深的代碼功底,起碼你能定位問題、分析出問題的本質,能給開發人員提供優化的建議,經常與架 構團隊交流,從他們那里吸取寶貴的經驗然后自己消化掉,在性能測試方面要有很強的設計能力,如果對架構有很熟,反過來可以對架構設計產生影響,那就是實現 1+1>2了,隨著經驗的積累自然可以擔當性能架構師的角色。

            4、我比較關注Oracle性能優化的問題,下面是我想了解的幾個問題:

            Oracle性能監控需要注意哪些要點?有哪些Oracle性能監控工具可以用?

            Oracle平常監控主要用EM的性能監控視圖、主要關注TOP SQL以及SQL的執行計劃、阻塞與鎖等待分析,另外可用ASH、AWR報告分析top5 event分析重要事件,報告中主要關注那些邏輯讀、物理讀比較大的SQL,還有各緩存的命中率, 數據庫的報警日志文件也很重要,也要定期分析。

            5、金蝶ERP產品的性能測試是如何做的?采用什么工具進行測試?如何從性能測試指標結果定位性能瓶頸?

            金蝶的ERP性能測試主要是通過讓性能測試常態化,性能測試分為基準測試、穩定性測試、大數據量測試、窄帶寬測試、實驗室測試,平常在研發環節 主要是將ERP中重要的功能點整理成測試用例,通過基準測試對每個功能按約定的設計要求進行并發測試,以便驗證是否符合預期指標, 基準測試完后,按典型業務場景進行案例組合的穩定性測試,金蝶要求做7*24小時的穩定性測試,以此驗證產品的穩定性,產品的大版本一般跟IBM合作進行 實驗室測試。

            金蝶平常用自己開發的性能測試工具,在項目測試的時候用由客戶提供的LoadRunner進行測試定位性能瓶頸首先要從響應時間指標中檢測是否符合預期,然后驗證CPU,內存的消耗是否符合預期指標。

            6、J2EE平臺的性能監控一般監控哪些方面?數據庫、WEB服務器、應用服務器?還有什么?監控一般推薦用什么工具啊?

            J2EE平臺的性能監控一般監控響應時間、分析JS性能,分析HTTP交互、網絡流量、JVM線程、JVM內存,JVM垃圾回收、JDBC連接池、數據庫,數據庫與應用服務的流量,數據量的TOP SQL,服務器層面監控CPU、內存、IO等待、端口連接數等。

            監控工具要分類劃分,IE端有分析http交互的httpwatch, fiddler2,分析JS性能有IE8、IE9的開發者工具,如果是互聯網應用還可以用yeslow等工具進行綜合分析,應用服務器。

            如果分析少量并發性能可以用Jprofile,Jprob等工具,如果是并發大測試可以通過定期抓取jvm線程堆棧來分析性能瓶頸,同時將GC日志輸出進行分析,對于數據庫端,oracle有很多工具,如EM動態性能視圖,db2有db2top。

            7、LoadRunner的性能測試結果一般重點看哪些內容?如何分析測試結果?

            LoadRunner的性能測試結果一般重點看響應時間、TPS、吞吐量, STD、失敗率是否符合指標,不僅要看是否是否符合要求,還要看是否平穩。

            8、想了解一下云計算的性能壓力測試是怎么做的?與普通傳統應用的性能測試有什么區別?

            具體我還沒做過云計算項目的性能壓力測試,我想從技術角度分析一下,云技術肯定是由負載分發器、計算池、存儲分發器、存儲池構成的,上線的環境 我估計由于云池太大很難以測試,換個思路,我們通過換算或估算的方式,走小范圍性能測試+技術架構分析的路子,性能測試用來驗證任務的分發與少部分計算池 上的性能,再結合對技術架構的分析,重點驗證那些關鍵技術點,這樣應該是可行的。

          posted @ 2012-04-05 10:24 順其自然EVO 閱讀(321) | 評論 (0)編輯 收藏

          最近一些開源的自動化測試網站

          http://blog.csdn.net/zhangren07/article/details/5318821
          http://www.oschina.net/p/scriptcover
          http://www.qzonn.com/heikeruanjian/ruqin/AppScan.html
          http://www.oschina.net/p/watir

          http://wiki.openqa.org/display/WTR/Example+Test+Case

          posted @ 2012-03-30 16:29 順其自然EVO 閱讀(235) | 評論 (0)編輯 收藏

          http://www.testlink.org.cn/index.php

          http://www.testlink.org.cn/index.php

          posted @ 2012-03-23 17:55 順其自然EVO 閱讀(381) | 評論 (0)編輯 收藏

          僅列出標題
          共394頁: First 上一頁 338 339 340 341 342 343 344 345 346 下一頁 Last 
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 买车| 台北县| 新干县| 贵港市| 乌拉特后旗| 保靖县| 静乐县| 大新县| 富阳市| 岳普湖县| 滦平县| 清水河县| 滁州市| 宿迁市| 漳浦县| 婺源县| 咸阳市| 襄垣县| 深水埗区| 耿马| 长寿区| 谢通门县| 德钦县| 监利县| 霍林郭勒市| 清涧县| 昭苏县| 迭部县| 太康县| 卓资县| 格尔木市| 黎川县| 兰坪| 当涂县| 博客| 徐州市| 清远市| 喀喇| 娄烦县| 阿鲁科尔沁旗| 廉江市|