<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qileilove

    blog已經(jīng)轉(zhuǎn)移至github,大家請?jiān)L問 http://qaseven.github.io/

    LoadRunner中的IP欺騙的設(shè)置以及誤區(qū)

    最近在忙著部署web性能測試的環(huán)境后,對IP欺騙進(jìn)行設(shè)置,特地做個筆記,給自己的學(xué)習(xí)歷程留下點(diǎn)足跡。
      一. 什么是IP欺騙?
      做什么事首先要問個為什么,如果知道為什么了,即使不知道如何做,簡單,google it,答案總會找得到,google.cn不行,google.com總行,來自全球的搜索結(jié)果,總會有幫助。
      IP spoof即IP 電子欺騙,我們可以說是一臺主機(jī)設(shè)備冒充另外一臺主機(jī)的IP地址,與其它設(shè)備通信,從而達(dá)到某種目的技術(shù)。 IP是網(wǎng)絡(luò)層的一個非面向連接的協(xié)議, IP數(shù)據(jù)包的主要內(nèi)容由源IP地址,目地IP地址,所傳數(shù)據(jù)構(gòu)成,IP的任務(wù)就是根據(jù)每個數(shù)據(jù)報文的目的地址,路由完成報文從源地址到目的地址的傳送。至于報文在傳送過程中是否丟失或出現(xiàn)差錯,IP不會考慮,那是TCP的事。對IP來講,源設(shè)備與目的設(shè)備沒有什么關(guān)系,它們是相互獨(dú)立的。IP包只是根據(jù)數(shù)據(jù)報文中的目的地址發(fā)送,因此借助高層協(xié)議的應(yīng)用程序來偽造IP地址是比較容易實(shí)現(xiàn)的。
      二. 為什么要設(shè)置IP欺騙?
      對于某些服務(wù)器,是根據(jù)IP來分配資源,當(dāng)某個IP地址訪問頻繁或者訪問量過大時,服務(wù)器會拒絕訪問,或者讓你輸入驗(yàn)證碼,當(dāng)然也有可能是來避免搜索引擎robot的任意爬取。
      網(wǎng)上還有些言論是說使用更多的IP來模擬較真實(shí)的用戶使用環(huán)境,來測試負(fù)載均衡技術(shù)的處理能力,但是我始終想不明白這跟那個有什么關(guān)系,如果服務(wù)器可以接受同一IP大量訪問,負(fù)載均衡不照樣起作用,照樣可以被測試到嗎?(私人觀點(diǎn),意見可以保留)
      三. 設(shè)置前的準(zhǔn)備工作
      1. 要有局域網(wǎng)的環(huán)境,因?yàn)橹荒茉O(shè)置局域網(wǎng)內(nèi)的網(wǎng)段;
      2. 本地的IP設(shè)置不能為“自動獲取”,必須指定一個靜態(tài)IP。
      四. 如何設(shè)置
      第一步:
      運(yùn)行Mercury LoadRunner- Tools-IP Wizard
      第二步:
      選擇create new setting,點(diǎn)擊“下一步”
      此時出現(xiàn)的頁面是讓輸入服務(wù)器的IP地址,Loadrunner通過該地址更新路由表。
      客戶端計(jì)算機(jī)上添加新的IP地址后,服務(wù)器需要將該地址添加到路由表,以便能夠識別返回到客戶端的路由。如果服務(wù)器和客戶端具有相同的子網(wǎng)掩碼、IP 類和網(wǎng)絡(luò),則不需要修改服務(wù)器的路由表。如果客戶端和服務(wù)器計(jì)算機(jī)之間有一個路由器,則服務(wù)器需要識別經(jīng)過該路由器的路徑。確保將以下路由添加到服務(wù)器路由表:從 Web 服務(wù)器到路由器的路由,以及從路由器到負(fù)載生成器計(jì)算機(jī)上的所有 IP 地址的路由。
      第三步:
      在輸入web服務(wù)器地址的頁面中輸入地址后,直接點(diǎn)擊“下一步”
      進(jìn)入IP添加頁面,點(diǎn)擊“add”進(jìn)行添加
      第四步:
      在from ip 輸入框中輸入起始ip,在Number to輸入框中輸入ip地址的位數(shù),輸入正確的子網(wǎng)掩碼,選中“verify that new ip addresses are not already used”,點(diǎn)擊“ok”,此時IP Wizard會自動按照設(shè)置生成IP地址,并且將已經(jīng)占用的IP列出。
      第五步:
      確認(rèn)可用IP地址列表內(nèi)容后,點(diǎn)擊“ok”,此時IP Wizard提示需要重新啟動計(jì)算機(jī),點(diǎn)擊“save as”保存IP列表,點(diǎn)擊“ok”,重新啟動計(jì)算機(jī)。
      注:當(dāng)保存IP地址列表后,下次啟用IP欺騙時直接選擇load previous setting from.....
    第六步:
      啟用IP欺騙
      選中Tools下的Expert mode,啟動專家模式Expert mode,再點(diǎn)擊Tools下的options,在Genearl選項(xiàng)卡中設(shè)置以線程方式或進(jìn)程方式進(jìn)行性能測試,這個選項(xiàng)一定要與當(dāng)前場景的模式相匹配,也就是說使用本地虛擬IP測試時需要選中線程方式,使用負(fù)載生成器使用虛擬IP測試時需要選中進(jìn)程方式。
      在controller中,選擇 Scenario-〉Enable IP Spoofer,此項(xiàng)設(shè)置允許使用IP欺騙。
      第七步:
      驗(yàn)證IP欺騙是否有效
      方法一
      計(jì)算機(jī)重新啟動后,在運(yùn)行行中輸入:CMD,在DOS命令提示符窗口中輸入:IPCONFIG,此時便可看到虛擬的IP地址均已經(jīng)被啟用;
      方法二
      在腳本的Action()部分增加如下代碼:
      char * ip=lr_get_vuser_ip();
      if(ip)
      lr_vuser_status_message("The ip address is %s",ip);
      else
      lr_vuser_status_message("IP spoofing disabled");
      然后通過控制器設(shè)置并運(yùn)行場景,日志中可以看到IP地址。
      第八步:
      這一部很重要,如果不做這一步,很多IP地址就被占用了,可能你們網(wǎng)管跟你鬧上了呵呵。打開IP Wizard,選擇restore original settings釋放所有虛擬IP。
      五.誤區(qū)及答疑
      到現(xiàn)在為止,IP spoofer設(shè)置就告終了,但是最后有些疑問或者叫誤區(qū)需要分享一下。
      Q/A:
      1.自己本地的IP地址不在虛擬IP段內(nèi),有影響嗎?
      答:沒有
      2.是否需要配置多個load generator來對應(yīng)不同的虛擬IP呢?
      答:不用,這個過程是generator自己完成的。
      3.不同的generator是否都需要設(shè)置IP spoof呢?
      答:Definitely Yes,不然的話不設(shè)IP欺騙的那臺只會使用一個本地的IP執(zhí)行。
      4.虛擬用戶數(shù)和虛擬IP數(shù)量上有什么關(guān)系呢?
      答:如果虛擬用戶數(shù)大于IP數(shù)量時,每個用戶會得到不同的IP,否則,會有IP重復(fù)的現(xiàn)象。
      5. 還有別的辦法添加虛擬IP嗎?
      條條大路通羅馬,試試這個。
      在一臺機(jī)上虛擬的IP跨網(wǎng)段的處理,可通過在服務(wù)器端添加路由來實(shí)現(xiàn)。
      例:
      服務(wù)器IP:192.168.0.1
      測試機(jī)IP:192.168.0.206
      測試機(jī)上添加的虛擬IP: 192.168.10.1~128
      那么在服務(wù)器端執(zhí)行以下命令:
      route add 192.168.10.0 mask 255.255.255.0 192.168.0.206

    posted @ 2014-07-02 16:31 順其自然EVO 閱讀(540) | 評論 (0)編輯 收藏

    Python和Django在Windows上的環(huán)境搭建

     作為一個.NET程序員,真心不喜歡Python以及PHP這種松散的語法。有人說,程序員應(yīng)該多學(xué)幾門語言,本想學(xué)習(xí)Java,無奈感覺Java的語法太啰嗦了。很多人都推薦Python,說它的語法簡潔,執(zhí)行效率高。趁這兩天空閑,開始學(xué)習(xí)Python。
      先從搭建環(huán)境開始。作為一個Python初學(xué)者來說,一個趁手的編譯器是很重要的,本想用VS來開發(fā)Python,但是感覺實(shí)際開發(fā)中沒有幾家公司會用VS來開發(fā)Python,沒辦法就換成了MyEclipse。
      一、首先下載和安裝Myeclipse就略過了。
      二、安裝Python。一般的開發(fā)環(huán)境是在linux,網(wǎng)上很多教程和視頻也都是在linux下配置和開發(fā)的。我的開發(fā)環(huán)境是64位win8系統(tǒng),先從官網(wǎng)下載64位的Python安裝程序。
      可以從這里選擇要下載的版本 https://www.python.org/downloads/windows/ 一般比較常用的是2.x版本,因?yàn)橐獙W(xué)習(xí)Django,而Django只支持2.x版本,所以我安裝的是2.7.7。選擇一個版本后會跳轉(zhuǎn)到支持的系統(tǒng)選擇的頁面。可以根據(jù)系統(tǒng)選擇不同的版本。如果在64為系統(tǒng)是安裝的是32位的Python會出現(xiàn)很多亂七八糟的問題,尤其是后面安裝對MySQL的支持的時候,會提示沒有安裝Python。
      安裝完畢后,在環(huán)境變量中添加Python的安裝路徑。這樣才支持在命令行下執(zhí)行Python命令。如果你命令行下出現(xiàn)如下界面,就證明安裝成功:
      
      三、安裝插件。安裝完MyEclipse后,就要安裝Python開發(fā)插件,安裝PyDev有好兩種方法。
      1、離線安裝,下載PyDev離線包,然后解壓縮到dropins文件夾下。這種方法我沒試。
      2、在線安裝。help --> Install from site,在work with框中填入PyDev -http://update-production-pydev.s3.amazonaws.com/pydev/updates/site.xml 。等MyEclipse解析完后會自動安裝,這個過程有點(diǎn)長。
      一般安裝完畢后會提醒你重啟,重啟后,只要在window --> preferences 中能看到PyDev,就表示你安裝成功了。
      四、配置PyDev:
      在window --> preferences --> PyDev --> Interpreters - Python Interpreter 中點(diǎn)擊new,然后找到你的python安裝目錄即可。
      
    點(diǎn)擊New按鈕后彈出如下窗口:
      
      選擇你剛才安裝的Python路徑下的Python.exe文件。
      五,配置對MySQL的支持。
      如果你用的是sqlli的話,Python是默認(rèn)支持的。但是對MySQL需要安裝第三方的包。
      下載地址:http://pypi.python.org/pypi/setuptools ,在頁面的最底部會看到文件下載鏈接,下載的是Python源碼,如果你不先安裝SetupTools而是直接安裝MySQLdb,那么很有可能會提示如下錯誤:
      ImportError: No module named setuptools
      下載后解壓出來,在命令行下進(jìn)入解壓的目錄。執(zhí)行:
      python setup.py install
      按回車后會自動安裝。接下來需要下載MySQL-Python,下載地址:http://pypi.python.org/pypi/MySQL-python#downloads 選擇版本后會跳轉(zhuǎn)到下載頁面。官方提供的貌似只有32位的,不知道在64位系統(tǒng)下會不會出現(xiàn)不兼容現(xiàn)象,我是在 http://www.codegood.com/downloads 下載的64位安裝程序。下載后直接安裝就可以了。
      六、安裝Django。
      Django是Python下最流行的Web開發(fā)框架,集成了管理后臺和ORM框架,功能很強(qiáng)大。下載地址  https://www.djangoproject.com/ 目前版本是1.6.5。1.7是測試版。支持的Python是2.6.5.
      下載完解壓出來,在命令下進(jìn)入解壓后的目錄,找到 setup.py 文件,執(zhí)行:
      Python setup.py install
      會自動安裝。安裝后在Python的庫目錄會找到Django的安裝文件,在Lib\site-packages\Django-1.8-py2.7.egg\EGG-INFO\scripts 這個路徑下會看到一個django-admin.py文件,這個文件時創(chuàng)建Django項(xiàng)目的核心文件,創(chuàng)建一個Django的Web項(xiàng)目以及運(yùn)行Django都會用到它。
      安裝完成后,在MyEclipse里面創(chuàng)建項(xiàng)目時會出現(xiàn) PyDev Django Project項(xiàng)目。到此,Python和Django的環(huán)境就算配置完畢。

    posted @ 2014-07-02 16:31 順其自然EVO 閱讀(202) | 評論 (0)編輯 收藏

    常用軟件測試工具的分析

    工具名稱:WinRunner
      來源: Mercury公司
      類型:功能性測試
      費(fèi)用:收費(fèi)昂貴
      功能概要: Winrunner 最主要的功能是自動重復(fù)執(zhí)行某一固定的測試過程,它以腳本的形式記錄下手工測試的一系列操作,在環(huán)境相同的情況下重放,檢查其在相同的環(huán)境中有無異常的現(xiàn)象或與實(shí)際結(jié)果不符的地方。可以減少由于人為因素造成結(jié)果錯誤,同時也可以節(jié)省測試人員大量測試時間和精力來做別的事情。功能模塊主要包括:GUI map、檢查點(diǎn)、TSL 腳本編程、批量測試、數(shù)據(jù)驅(qū)動等幾部分
      工具名稱: LoadRunner 來源 : Mercury公司
      類型 :性能與負(fù)載壓力
      費(fèi)用 :收費(fèi)昂貴
      功能概要:LoadRunner? 是一種預(yù)測系統(tǒng)行為和性能的工業(yè)標(biāo)準(zhǔn)級負(fù)載測試工具。通過以模擬上千萬用戶實(shí)施并發(fā)負(fù)載及實(shí)時性能監(jiān)測的方式來確認(rèn)和查找問題,LoadRunner 能夠?qū)φ麄€企業(yè)架構(gòu)進(jìn)行測試。通過使用LoadRunner ,企業(yè)能最大限度地縮短測試時間,優(yōu)化性能和加速應(yīng)用系統(tǒng)的發(fā)布周期。LoadRunner 是一種適用于各種體系架構(gòu)的自動負(fù)載測試工具,它能預(yù)測系統(tǒng)行為并優(yōu)化系統(tǒng)性能。LoadRunner 的測試對象是整個企業(yè)的系統(tǒng),它通過模擬實(shí)際用戶的操作行為和實(shí)行實(shí)時性能監(jiān)測,來幫助您更快的查找和發(fā)現(xiàn)問題。此外,還能支持廣范的協(xié)議和技術(shù),為您的特殊環(huán)境提供特殊的解決方案。
      工具名稱:QuickTest Pro
      來源 :Mercury公司
      類型 :功能測試和回歸測試
      費(fèi)用 :收費(fèi)昂貴
      功能概要:QTP是一個B/S系統(tǒng)的自動化功能測試的利器,軟件程序測試工具。Mercury的自動化功能測試軟件QuickTest Professional ,可以覆蓋絕大多數(shù)的軟件開發(fā)技術(shù),簡單高效,并具備測試用例可重用的特點(diǎn)。Mercury QuickTest Pro 是一款先進(jìn)的自動化測試解決方案,用于創(chuàng)建功能和回歸測試。它自動捕獲、驗(yàn)證和重放用戶的交互行為。 Mercury QuickTest Pro為每一個重要軟件應(yīng)用和環(huán)境提供功能和回歸測試自動化的行業(yè)最佳解決方案。
      工具名稱:TestDirector
      來源 :Mercury公司
      類型 :測試管理
      費(fèi)用 :收費(fèi)昂貴
      功能概要 :基于WEB的測試管理工具,他能夠讓你系統(tǒng)地控制整個測試過程,并創(chuàng)建整個測試工作流的框架和基礎(chǔ),使整個測試管理過程變得更為簡單和有組織。他能夠幫助你維護(hù)一個測試工程數(shù)據(jù)庫,并且能夠覆蓋你的應(yīng)用程序功能性的各個方面。T并且還為你提供了直觀和有效的方式來計(jì)劃和執(zhí)行測試集、收集測試結(jié)果并分析數(shù)據(jù)。還專門提供了一個完善的缺陷跟蹤系統(tǒng)。并可以同Mercury公司的測試工具、第三方或者自主開發(fā)的測試工具、需求和配置管理工具、建模工具的整合功能。你可以通過他進(jìn)行需求定義、測試計(jì)劃、測試執(zhí)行和缺陷跟蹤,即整個測試過程的各個階段。
      工具名稱:SilkTest
      來源 : Segue公司
      類型 :功能測試和回歸測試
      費(fèi)用 :收費(fèi)昂貴
      功能概要:SilkTest 是面向Web應(yīng)用、Java應(yīng)用和傳統(tǒng)的C/S應(yīng)用,進(jìn)行自動化的功能測試和回歸測試的工具。它提供了用于測試的創(chuàng)建和定制的工作流設(shè)置、測試計(jì)劃和管理、直接的數(shù)據(jù)庫訪問及校驗(yàn)等功能,使用戶能夠高效率地進(jìn)行軟件自動化測試。為提高測試效率,SilkTest提供多種手段來提高測試的自動化程度,包括:從測試腳本的生成、測試數(shù)據(jù)的組織、測試過程的自動化、測試結(jié)果的分析等方面。在測試腳本的生成過程中,SilkTest通過動態(tài)錄制技術(shù),錄制用戶的操作過程,快速生成測試腳本。在測試過程中,SilkTest還提供了獨(dú)有的恢復(fù)系統(tǒng)(Recovery System),允許測試可在24×7×365全天候無人看管條件下運(yùn)行。在測試過程中一些錯誤導(dǎo)致被測應(yīng)用崩潰時,錯誤可被發(fā)現(xiàn)并記錄下來,之后,被測應(yīng)用可以被恢復(fù)到它原來的基本狀態(tài),以便進(jìn)行下一個測試用例的測試。
     工具名稱:SilkPlan Pro
      來源 : Segue公司
      類型 :測試管理
      費(fèi)用 :收費(fèi)昂貴
      功能概要:SilkPlan Pro 是一個完整的測試管理軟件,用于測試的計(jì)劃管理、文檔管理和各種測試行為的管理,能夠跨越應(yīng)用的全部生命周期,從早期的計(jì)劃階段直至測試設(shè)計(jì)都自動安排和執(zhí)行。它包括需求的檢查及確認(rèn),測試執(zhí)行的安排和產(chǎn)品是否具備發(fā)布條件的評估的報告功能。此外,還提供了基于Web的自動測試功能。在軟件開發(fā)的過程中,SilkPlan Pro可以使測試過程自動化。  SilkPlan Pro 為所有的自動化測試用例提供了基于Web的管理。
      工具名稱:SilkPerformer
      來源 : Segue公司
      類型 :負(fù)載壓力測試
      費(fèi)用 :收費(fèi)昂貴
      功能概要:SilkPerformer 是一種在工業(yè)領(lǐng)域最高級的企業(yè)級負(fù)載測試工具。它可以模仿成千上萬的用戶工作在多協(xié)議和多計(jì)算的環(huán)境下。利用SilkPerformer 可以在企業(yè)電子商務(wù)應(yīng)用部署前預(yù)測它的性能,不管它的大小和復(fù)雜性。可視的用戶化界面、實(shí)時的性能監(jiān)控和強(qiáng)大的管理報告可以幫助用戶迅速地解決問題。SilkPerformer 提供了在廣泛的、多樣的狀況下對電子商務(wù)應(yīng)用進(jìn)行彈性負(fù)載測試的能力,通過TrueScale 技術(shù),SilkPerformer 可以從一臺單獨(dú)的電腦上模擬成千上萬的并發(fā)用戶,在使用最小限度的硬件資源的情況下,提供所需的可視化結(jié)果確認(rèn)的功能。在獨(dú)立的負(fù)載測試中,SilkPerformer 允許用戶在多協(xié)議多計(jì)算環(huán)境下工作,并可以精確地模擬瀏覽器與Web應(yīng)用的交互作用。 SilkPerformer 的TrueLog 技術(shù)提供了完全可視化的原因分析技術(shù)。通過這種技術(shù)可以對測試過程中用戶產(chǎn)生和接收的數(shù)據(jù)進(jìn)行可視化處理,包括全部嵌入的對象和協(xié)議頭信息,從而進(jìn)行可視化分析,甚至在應(yīng)用出現(xiàn)錯誤時都可以進(jìn)行問題定位與分析。
      工具名稱:ClearQuest
      來源 : IBM公司
      類型 :缺陷管理
      費(fèi)用 :收費(fèi)昂貴
      功能概要:提供基于活動的變更和缺陷跟蹤。以靈活的工作流管理所有類型的變更要求,包括缺陷、改進(jìn)、問題和文檔變更。能夠方便地定制缺陷和變更請求的字段、流程、用戶界面、查詢、圖表和報告。開箱即用特性提供了預(yù)定義的配置和自動電子郵件通知和提交。 與 Rational ClearCase 一起提供完整的 SCM 解決方案。提供基于活動的變更和缺陷跟蹤。 以靈活的工作流管理所有類型的變更要求,包括缺陷、改進(jìn)、問題和文檔變更。 能夠方便地定制缺陷和變更請求的字段、流程、用戶界面、查詢、圖表和報告。 開箱即用特性提供了預(yù)定義的配置和自動電子郵件通知和提交。 與 Rational ClearCase 一起提供完整的 SCM 解決方案。 擁有“設(shè)計(jì)一次,到處部署”的能力,從而可以自動改變?nèi)魏慰蛻舳私缑妫╓indows、Linux、UNIX 和 Web)。 可與 IBM WebSphereStudio、Eclipse 和 Microsoft .NET IDE 進(jìn)行緊密集成,從而可以即時訪問變更信息。 支持統(tǒng)一變更管理,以提供經(jīng)過驗(yàn)證的變更管理過程支持。 易于擴(kuò)展,因此無論開發(fā)項(xiàng)目的團(tuán)隊(duì)規(guī)模、地點(diǎn)和平臺如何,均可提供良好支持。
      常用軟件測試工具的分析
      隨著軟件測試的地位逐步提高,測試的重要性逐步顯現(xiàn),測試工具的應(yīng)用已經(jīng)成為了普遍的趨勢。目前用于測試的工具已經(jīng)比較多了,測試工具的應(yīng)用可以提高測試的質(zhì)量、測試的效率、減少測試過程中的重復(fù)勞動、實(shí)現(xiàn)測試自動化,這些測試工具一般可分為白盒測試工具、黑盒測試工具、性能測試工具,另外還有用于測試管理的工具,本文對常用的測試工具作一個分析比較。
      1、 白盒測試工具
      白盒測試工具一般是針對代碼進(jìn)行測試,測試中發(fā)現(xiàn)的缺陷可以定位到代碼級,根據(jù)測試工具原理的不同,又可以分為靜態(tài)測試工具和動態(tài)測試工具。靜態(tài)測試工具直接對代碼進(jìn)行分析,不需要運(yùn)行代碼,也不需要對代碼編譯鏈接,生成可執(zhí)行文件。靜態(tài)測試工具一般是對代碼進(jìn)行語法掃描,找出不符合編碼規(guī)范的地方,根據(jù)某種質(zhì)量模型評價代碼的質(zhì)量,生成系統(tǒng)的調(diào)用關(guān)系圖等;動態(tài)測試工具與靜態(tài)測試工具不同,動態(tài)測試工具的一般采用“插樁”的方式,向代碼生成的可執(zhí)行文件中插入一些監(jiān)測代碼,用來統(tǒng)計(jì)程序運(yùn)行時的數(shù)據(jù)。其與靜態(tài)測試工具最大的不同就是動態(tài)測試工具要求被測系統(tǒng)實(shí)際運(yùn)行。
      (1) Jtest
      是一個代碼分析和動態(tài)類、組件測試工具,是一個集成的、易于使用和自動化的Java單元測試工具。它增強(qiáng)代碼的穩(wěn)定性,防止軟件錯誤。
      (2) Jcontract
      Jcontract在系統(tǒng)級驗(yàn)證類/部件是否正確工作并被正確使用。Jcontract 是個獨(dú)立工具,在功能上是Jtest 的補(bǔ)充。可以用Jcontract插裝按DbC注解的Java代碼。當(dāng)您將類/部件組裝成系統(tǒng)時,Jcontract 在運(yùn)行時監(jiān)視并報告錯用和功能性問題。Jcontract 幫助每個開發(fā)人員有效地考核類/部件的系統(tǒng)級行為。
      (3) C++ Test
      C++Test可以幫助開發(fā)人員防止軟件錯誤,保證代碼的健全性、可靠性、可維護(hù)性和可移植性。 C++Test自動測試C和C++類、函數(shù)或組件,而無需編寫單個測試實(shí)例、測試驅(qū)動程序或樁調(diào)用。 (4) CodeWizard
      CodeWizard 代碼靜態(tài)分析工具,先進(jìn)的C/C++源代碼分析工具,使用超過500 個編碼規(guī)范自動化地標(biāo)明危險的,但是編譯器不能檢查到的代碼結(jié)構(gòu)。
      (5) Insure++
      Insure++是一個基于C/C++的自動化的內(nèi)存錯誤、內(nèi)存泄漏的精確檢測工具。 Insure++能夠可視化實(shí)時內(nèi)存操作,準(zhǔn)確檢測出內(nèi)存泄漏產(chǎn)生的根源。Insure++還能執(zhí)行覆蓋性分析,清楚地指示那些代碼已經(jīng)測試過。
      (6) .test .TEST是專為.NET開發(fā)而推出的使用方便的自動化單元級測試與靜態(tài)分析工具。使用超過2002條的工業(yè)標(biāo)準(zhǔn)代碼規(guī)則對所寫代碼自動執(zhí)行靜態(tài)分析。這些規(guī)則立即應(yīng)用.NET 工業(yè)專家深入、全面的編程知識到你的代碼當(dāng)中,迅速、徹底地防止錯誤的出現(xiàn)。自動測試代碼構(gòu)造與功能。 .TEST非常智能。他能提取剛完成的代碼,對其進(jìn)行讀取,并提出如何對這些代碼進(jìn)行單元測試,不需要任何的人為干涉。所有由.TEST產(chǎn)生的單元測試都

      (7) BoundsChecker
      BoundsChecker Visual C++ Edition 是針對 Visual C++開發(fā)人員的首選的運(yùn)行時的錯誤檢測和調(diào)試工具。它通過駐留在 Visual C++ 開發(fā)環(huán)境內(nèi)部的自動調(diào)試處理程序來加速應(yīng)用程序的開發(fā),縮短產(chǎn)品發(fā)布的時間。BoundsChecker 對于編程中的錯誤,大多數(shù)是 C++中特有的提供了清晰的詳細(xì)的分析。它能夠檢測和診斷出在靜態(tài),堆棧內(nèi)存中的錯誤以及內(nèi)存和資源泄漏問題。在運(yùn)行狀態(tài)下,BoundsChecker 驗(yàn)證超過 8,700 APIs 和 OLE 方法,包括最新的 Windows APIs, ODBC, ActiveX,DirectX, COM 和 Internet APIs。
      (8) TrueTime
      代碼運(yùn)行緩慢是開發(fā)過程中一個重要問題。一個應(yīng)用程序運(yùn)行速度較慢,程序員不容易找到 到底是在哪里出現(xiàn)了問題,如果不能解決應(yīng)用程序的性能將降低并極大的影響應(yīng)用程序的質(zhì)量,于是查找和修改性能瓶頸是調(diào)整整個代碼性能的關(guān)鍵。如何快速的查找性能瓶頸呢?TrueTime 的出現(xiàn)就使這個問題變得很容易了。當(dāng)我們在測試程序時,每完成一次應(yīng)用話路,TrueTime 都能提供這次對話中函數(shù)的調(diào)用時間,提供詳細(xì)的應(yīng)用程序和組件性能的分析,并自動定位到運(yùn)行緩慢的代碼。這樣就能幫助程序員盡快地調(diào)整應(yīng)用程序的性能。TrueTime 支持C++, JAVA, Visual Basic語言環(huán)境。
      (9) FailSafe FailSafe
      是Visual Basic語言環(huán)境下的自動錯誤處理和恢復(fù)工具,F(xiàn)ailSafe將插入額外的代碼對你的程序進(jìn)行插裝,當(dāng)程序執(zhí)行時,FailSafe通過這些插裝的代碼捕獲、記錄錯誤信息。
      (10) Jcheck Jcheck
      是DevPartner Studio開發(fā)調(diào)試工具的一個組件,他使用事件調(diào)試技術(shù),可以收集Java程序運(yùn)行中準(zhǔn)確的實(shí)時信息。我們在Java程序中經(jīng)常要使用線程,而關(guān)于線程的常見錯誤有死鎖、系統(tǒng)崩潰、同步問題等。JCheck 通過監(jiān)視和分析當(dāng)前內(nèi)存中所有線程的運(yùn)行狀況,找到出錯的根源,并且可以定位到具體是程序中的哪個方法出錯,錯誤位于程序的哪一行。
      (11) TrueCoverage
      TrueCoverage是一個代碼覆蓋率統(tǒng)計(jì)工具,在開發(fā)過程中,對一個應(yīng)用程序通過手工測試,總會有一部分代碼功能沒有被檢測到,或者說逐個檢測每一個函數(shù)的調(diào)用是相當(dāng)費(fèi)時間的;未被檢測的代碼我們不能保證它的可靠性,以后程序的失敗可能往往就是由這部分未檢測的代碼造成的。 現(xiàn)在我們可以用TrueCoverage 來幫助我們解決這些問題,我們在測試程序時,每完成一次應(yīng)用話路,TrueCoverage 就能夠列出在這次對話中所有函數(shù)被調(diào)用次數(shù)、所占比率等,并可以直接定位到源代碼,當(dāng)然我們也可以合并多個應(yīng)用話路來進(jìn)行檢測。所以說TrueCoverage 能通過衡量和跟蹤代碼執(zhí)行及代碼穩(wěn)定性,幫助開發(fā)團(tuán)隊(duì)節(jié)省時間和改善代碼可靠性。TrueCoverage支持C++, JAVA,Visual Basic語言環(huán)境。
      (12) SmartCheck
      SmartCheck 是針對 Visual Basic的主要的自動錯誤檢測和調(diào)試工具。它能夠自動檢測和診斷 VB運(yùn)行時的錯誤,并將一些表達(dá)不清楚的錯誤信息轉(zhuǎn)換為確切的錯誤描述。它的EventDebugging 特性為 Visual Basic開發(fā)小組和獨(dú)立的開發(fā)人員解決最棘手的問題提供了簡便的方法。它可以進(jìn)行致命錯誤的分析、兼容性檢查、定位到源代碼。 不是 Visual Basic 中所有的問題都是運(yùn)行時或系統(tǒng)的錯誤。許多的問題來自于未預(yù)期的程序流程的結(jié)果。如果沒有 EventDebugging,將問題分離出來是相當(dāng)困難,甚至不可能的。當(dāng)簡單的動作比如設(shè)置控件的屬性發(fā)生時,會觸發(fā)一些編程人員想象不到的事件的發(fā)生,從而使的錯誤檢測和調(diào)試邊的更加復(fù)雜。SmartCheck 顯示使用時的屬性,方法和事件以便于將這些事件驅(qū)動的問題隔離出來。SmartCheck EventDebugging 跟蹤事件以簡化錯誤的定位。舉個例子,SmartCheck 在事件被設(shè)置或只讀時將其方法和屬性全部顯示,連同由這些事件觸發(fā)的形式。
      (13) CodeReview
      對于Visual Basic開發(fā)人員來說,CodeReview是最好的自動源代碼分析工具,它對應(yīng)用程序的組件、邏輯、Windows和Vb自身潛在的數(shù)百個問題進(jìn)行嚴(yán)格地源代碼檢查。CodeReview分析的類型包括Y2K 問題,邏輯錯誤,應(yīng)用程序性能和可用性問題,Windows API調(diào)用和標(biāo)準(zhǔn)一致性問題等。可以檢測整個的VB工程或指定的模塊,并能定制檢錯的種類;對檢測的結(jié)果有詳細(xì)的說明,提供幫助和推薦解決方案,而且能夠直接的鏈接到源代碼。CodeReview 系統(tǒng)還提供了兩個子模塊,一個是Metrics:通過對VB工程(vbp)的執(zhí)行,計(jì)算出代碼的長度、復(fù)雜度、理解度、語言的使用等級、出錯的可能性等數(shù)據(jù);另一個是Namer:它調(diào)用一個VB工程,自動并規(guī)則地對其中的對象重新命名,并備份原來沒有規(guī)則命名的工程文件,使開發(fā)人員對程序能夠有條理地管理。
      2、黑盒測試工具
      黑盒測試工具適用于黑盒測試的場合,黑盒測試工具包括功能測試工具和性能測試工具。黑盒測試工具的一般原理是利用腳本的錄制(Record)/回放(Playback),模擬用戶的操作,然后將被測系統(tǒng)的輸出記錄下來同預(yù)先給定的標(biāo)準(zhǔn)結(jié)果比較。黑盒測試工具可以大大減輕黑盒測試的工作量,在迭代開發(fā)的過程中,能夠很好地進(jìn)行回歸測試。
      (1) WinRunner
      Mercury Interactive 公司的WinRunner 是一種企業(yè)級的功能測試工具,用于檢測應(yīng)用程序是否能夠達(dá)到預(yù)期的功能及正常運(yùn)行。通過自動錄制、檢測和回放用戶的應(yīng)用操作,WinRunner能夠有效地幫助測試人員對復(fù)雜的企業(yè)級應(yīng)用的不同發(fā)布版進(jìn)行測試,提高測試人員的工作效率和質(zhì)量,確保跨平臺的、復(fù)雜的企業(yè)級應(yīng)用無故障發(fā)布及長期穩(wěn)定運(yùn)行。 企業(yè)級應(yīng)用可能包括Web 應(yīng)用系統(tǒng),ERP 系統(tǒng),CRM 系統(tǒng)等等。這些系統(tǒng)在發(fā)布之前,升級之后都要經(jīng)過測試,確保所有功能都能正常運(yùn)行,沒有任何錯誤。如何有效地測試不斷升級更新且不同環(huán)境的應(yīng)用系統(tǒng),是每個公司都會面臨的問題。如果時間或資源有限,這個問題會更加棘手。人工測試的工作量太大,還要額外的時間來培訓(xùn)新的測試人員等等。為了確保那些復(fù)雜的企業(yè)級應(yīng)用在不同環(huán)境下都能正常可靠地運(yùn)行,你需要一個能簡單操作的測試工具來自動完成應(yīng)用程序的功能性測試,WinRunner能夠做到這點(diǎn)。
      (2) Astra Quicktest 4
      (3) Robot Robot是IBM Rational公司的功能測試工具,通過Script 自動模擬輸入輸出。
      (4) QARun QARun
      Compuware 公司的軟件功能測試工具,為客戶/服務(wù)器、電子商務(wù)到企業(yè)資源_____計(jì)劃提供重要的商務(wù)功能測試。通過將耗時的測試腳本開發(fā)和執(zhí)行任務(wù)自動化,QARun 幫助測試人員和QA管理人員更有效地工作,以加速應(yīng)用開發(fā),它提供快速、有效地創(chuàng)建和執(zhí)行測試腳本,驗(yàn)證測試并分析測試結(jié)果的功能。它能夠通過加快運(yùn)行周期來保持測試同步,提高測試投資回報和質(zhì)量,該工具的功能有:創(chuàng)建測試和執(zhí)行測試、測試驗(yàn)證、測試結(jié)果分析、可改進(jìn)的數(shù)據(jù)函數(shù)、廣泛的支持、集中式知識庫、網(wǎng)站分析、智能化測試腳本、自動同步。
      (5) SilkTest SilkTest International
      Segue公司的標(biāo)準(zhǔn)的、面向多語種企業(yè)級應(yīng)用的功能和回歸測試工具。讓用戶能跨語種、跨平臺和跨Web瀏覽器,高效率地進(jìn)行各種類型的應(yīng)用可靠性測試。
      (6) e-Test e-Test 是Empirix公司的軟件功能測試工具,功能很強(qiáng)大,由于不是采用Post URL的方式回放腳本,所以可以支持多內(nèi)碼的測試數(shù)據(jù)(當(dāng)然要程序支持)。基本上可以應(yīng)付大部分的Web Site。
      (7) WAS Microsoft的Web Application Stress Tool(WAS,Web應(yīng)用負(fù)載測試工具)是Microsoft的可以免費(fèi)下載的軟件性能測試工具。WAS要求Windows NT 4.0 SP4或者更高,或者Windows 2000。 為了對網(wǎng)站進(jìn)行負(fù)載測試,WAS 可以通過一臺或者多臺客戶機(jī)模擬大量用戶的活動。WAS 支持身份驗(yàn)證、加密和Cookies,也能夠模擬各種瀏覽器類型和Modem速度,它的功能和性能可以與數(shù)萬美元的產(chǎn)品相媲美。WAS 只能用于B/S構(gòu)架的軟件性能測試。
      (8) LoadRunner
      LoadRunner是MI公司的預(yù)測系統(tǒng)行為和性能的負(fù)載測試工具,它通過以模擬上千萬用戶實(shí)施并發(fā)負(fù)載及實(shí)時性能監(jiān)測的方式來確認(rèn)和查找問題。LoadRunner 是一種適用于各種體系架構(gòu)的自動負(fù)載測試工具,它能預(yù)測系統(tǒng)行為并優(yōu)化系統(tǒng)性能。LoadRunner 的測試對象是整個企業(yè)的系統(tǒng),它通過模擬實(shí)際用戶的操作行為和實(shí)行實(shí)時性能監(jiān)測,來幫助您更快的查找和發(fā)現(xiàn)問題,LoadRunner 能支持廣范的協(xié)議和技術(shù)。
      (9) Qaload
      QALoad是Compuware公司開發(fā)的并發(fā)性能壓力測試工具。軟件針對各種測試目標(biāo)提供了MS SQLServer、 Oracle、ODBC、WWW、NetLoad、Winsock 等不同的測試接口(Session),應(yīng)用范圍相當(dāng)廣泛。例如在測試基于C/S運(yùn)行模式、客戶端通過DBLib訪問服務(wù)器端SQLServer數(shù)據(jù)庫的系統(tǒng)時,QALoad 通過模擬客戶端大數(shù)據(jù)量并發(fā)對服務(wù)器端進(jìn)行查詢、更新等操作,從而達(dá)到監(jiān)控系統(tǒng)并 發(fā)性能和服務(wù)器端性能指標(biāo)的目的。
      (10) Webload
      Webload 是RadView 公司推出的一個性能測試和分析工具,它讓web 應(yīng)用程序開發(fā)者自動執(zhí)行壓力測試;webload 通過模擬真實(shí)用戶的操作,生成壓力負(fù)載來測試web 的性能用戶創(chuàng)建的是基于javascript的測試腳本,稱為議程agenda,用它來模擬客戶的行為,通過執(zhí)行該腳本來衡量web應(yīng)用程序在真實(shí)環(huán)境下的性能。 5webload 提供巡航控制器cruise control的功能,利用巡航控制器,可以預(yù)定義web 應(yīng)用程序應(yīng)該滿足的性能指標(biāo),然后測試系統(tǒng)是否滿足這些需求指標(biāo);cruise control 能夠自動把負(fù)載加到web應(yīng)用程序,并將在此負(fù)荷下能夠訪問程序的客戶數(shù)量生成報告,webload能夠在測試會話執(zhí)行期間對監(jiān)測的系統(tǒng)性能生成實(shí)時的報告,這些測試結(jié)果通過一個易讀的圖形界面顯示出來,并可以導(dǎo)出到excel和其他文件里。
      (11) Silkperformer
      SilkPerformer 是業(yè)界最先進(jìn)的企業(yè)級負(fù)載測試工具,和Loadrunner 是同種類型的測試工具。它能夠模擬成千上萬的用戶在多協(xié)議和多種計(jì)算環(huán)境下工作。SilkPerformer 可以讓你在使用前,就能夠預(yù)測企業(yè)電子商務(wù)環(huán)境的行為—不受電子商務(wù)應(yīng)用規(guī)模和復(fù)雜性影響。可視化的用戶化、負(fù)載條件下可視化的內(nèi)容校驗(yàn)、實(shí)時的性能監(jiān)視和強(qiáng)大的管理報告可以幫助您迅速將問題隔離,這樣,通過最小化測試周期、優(yōu)化性能以及確保可伸縮性,加快了投入市場的時間,并保證了系統(tǒng)的可靠性。
      (12) OpenSTA
      OpenSTA 是專用于B/S 構(gòu)架的、免費(fèi)的性能測試工具。它的優(yōu)點(diǎn)除了免費(fèi)、源代碼開放的優(yōu)點(diǎn)外,還能對錄制的測試腳本進(jìn)行,按指定的語法進(jìn)行編輯。測試工程師在錄制完測試腳本后,只需要了解該腳本語言的特定語法知識,就可以對測試腳本進(jìn)行編輯,以便于再次執(zhí)行性能測試時獲得所需要的參數(shù),之后進(jìn)行特定的性能指標(biāo)分析。OpenSTA以最簡單的方式讓大家對性能測試的原理有較深的了解,其較為豐富的圖形化測試結(jié)果大大提高了測試報告的可閱讀性。
      3、其他測試工具
      除了上述的測試工具外,還有一些專用的測試工具,例如,針對數(shù)據(jù)庫測試的TestBytes,對應(yīng)用性能進(jìn)行優(yōu)化的EcoScope等工具。
      4、測試管理工具
      測試管理工具用于對測試進(jìn)行管理。一般而言,測試管理工具對測試計(jì)劃、測試用例、測試實(shí)施進(jìn)行管理,并且,測試管理工具還包括對缺陷的跟蹤管理。

    posted @ 2014-07-02 16:30 順其自然EVO 閱讀(189) | 評論 (0)編輯 收藏

    Android啟動過程深入解析

    當(dāng)按下Android設(shè)備電源鍵時究竟發(fā)生了什么?
      Android的啟動過程是怎么樣的?
      什么是Linux內(nèi)核?
      桌面系統(tǒng)linux內(nèi)核與Android系統(tǒng)linux內(nèi)核有什么區(qū)別?
      什么是引導(dǎo)裝載程序?
      什么是Zygote?
      什么是X86以及ARM linux?
      什么是init.rc?
      什么是系統(tǒng)服務(wù)?
      當(dāng)我們想到Android啟動過程時,腦海中總是冒出很多疑問。本文將介紹Android的啟動過程,希望能幫助你找到上面這些問題的答案。
      Android是一個基于Linux的開源操作系統(tǒng)。x86(x86是一系列的基于intel 8086 CPU的計(jì)算機(jī)微處理器指令集架構(gòu))是linux內(nèi)核部署最常見的系統(tǒng)。然而,所有的Android設(shè)備都是運(yùn)行在ARM處理器(ARM 源自進(jìn)階精簡指令集機(jī)器,源自ARM架構(gòu))上,除了英特爾的Xolo設(shè)備(http://xolo.in/xolo-x900-features)。Xolo來源自凌動1.6GHz x86處理器。Android設(shè)備或者嵌入設(shè)備或者基于linux的ARM設(shè)備的啟動過程與桌面版本相比稍微有些差別。這篇文章中,我將解釋Android設(shè)備的啟動過程。深入linux啟動過程是一篇講桌面linux啟動過程的好文。
      當(dāng)你按下電源開關(guān)后Android設(shè)備執(zhí)行了以下步驟。
      Android啟動流程/過程
      第一步:啟動電源以及系統(tǒng)啟動
      當(dāng)電源按下,引導(dǎo)芯片代碼開始從預(yù)定義的地方(固化在ROM)開始執(zhí)行。加載引導(dǎo)程序到RAM,然后執(zhí)行。
      第二步:引導(dǎo)程序
      引導(dǎo)程序是在Android操作系統(tǒng)開始運(yùn)行前的一個小程序。引導(dǎo)程序是運(yùn)行的第一個程序,因此它是針對特定的主板與芯片的。設(shè)備制造商要么使用很受歡迎的引導(dǎo)程序比如redboot、uboot、qi bootloader或者開發(fā)自己的引導(dǎo)程序,它不是Android操作系統(tǒng)的一部分。引導(dǎo)程序是OEM廠商或者運(yùn)營商加鎖和限制的地方。
      引導(dǎo)程序分兩個階段執(zhí)行。第一個階段,檢測外部的RAM以及加載對第二階段有用的程序;第二階段,引導(dǎo)程序設(shè)置網(wǎng)絡(luò)、內(nèi)存等等。這些對于運(yùn)行內(nèi)核是必要的,為了達(dá)到特殊的目標(biāo),引導(dǎo)程序可以根據(jù)配置參數(shù)或者輸入數(shù)據(jù)設(shè)置內(nèi)核。
      Android引導(dǎo)程序可以在\bootable\bootloader\legacy\usbloader找到。
      傳統(tǒng)的加載器包含的個文件,需要在這里說明:
      init.s初始化堆棧,清零BBS段,調(diào)用main.c的_main()函數(shù);
      main.c初始化硬件(鬧鐘、主板、鍵盤、控制臺),創(chuàng)建linux標(biāo)簽。
      更多關(guān)于Android引導(dǎo)程序的可以在這里了解。
      第三步:內(nèi)核
      Android內(nèi)核與桌面linux內(nèi)核啟動的方式差不多。內(nèi)核啟動時,設(shè)置緩存、被保護(hù)存儲器、計(jì)劃列表,加載驅(qū)動。當(dāng)內(nèi)核完成系統(tǒng)設(shè)置,它首先在系統(tǒng)文件中尋找”init”文件,然后啟動root進(jìn)程或者系統(tǒng)的第一個進(jìn)程。
      第四步:init進(jìn)程
      init是第一個進(jìn)程,我們可以說它是root進(jìn)程或者說有進(jìn)程的父進(jìn)程。init進(jìn)程有兩個責(zé)任,一是掛載目錄,比如/sys、/dev、/proc,二是運(yùn)行init.rc腳本。
      init進(jìn)程可以在/system/core/init找到。
      init.rc文件可以在/system/core/rootdir/init.rc找到。
      readme.txt可以在/system/core/init/readme.txt找到。
      對于init.rc文件,Android中有特定的格式以及規(guī)則。在Android中,我們叫做Android初始化語言。
      Android初始化語言由四大類型的聲明組成,即Actions(動作)、Commands(命令)、Services(服務(wù))、以及Options(選項(xiàng))。
      Action(動作):動作是以命令流程命名的,有一個觸發(fā)器決定動作是否發(fā)生。
     語法
    on <trigger>
    <command>
    <command>
    <command>
      Service(服務(wù)):服務(wù)是init進(jìn)程啟動的程序、當(dāng)服務(wù)退出時init進(jìn)程會視情況重啟服務(wù)。
      語法
    service <name> <pathname> [<argument>]*
    <option>
    <option>
    ...
    Options(選項(xiàng))
      選項(xiàng)是對服務(wù)的描述。它們影響init進(jìn)程如何以及何時啟動服務(wù)。
      咱們來看看默認(rèn)的init.rc文件。這里我只列出了主要的事件以及服務(wù)。
    Table
    Action/Service 描述
    on early-init 設(shè)置init進(jìn)程以及它創(chuàng)建的子進(jìn)程的優(yōu)先級,設(shè)置init進(jìn)程的安全環(huán)境
    on init 設(shè)置全局環(huán)境,為cpu accounting創(chuàng)建cgroup(資源控制)掛載點(diǎn)
    on fs 掛載mtd分區(qū)
    on post-fs 改變系統(tǒng)目錄的訪問權(quán)限
    on post-fs-data 改變/data目錄以及它的子目錄的訪問權(quán)限
    on boot 基本網(wǎng)絡(luò)的初始化,內(nèi)存管理等等
    service servicemanager 啟動系統(tǒng)管理器管理所有的本地服務(wù),比如位置、音頻、Shared preference等等…
    service zygote 啟動zygote作為應(yīng)用進(jìn)程
      在這個階段你可以在設(shè)備的屏幕上看到“Android”logo了。
      第五步
      在Java中,我們知道不同的虛擬機(jī)實(shí)例會為不同的應(yīng)用分配不同的內(nèi)存。假如Android應(yīng)用應(yīng)該盡可能快地啟動,但如果Android系統(tǒng)為每一個應(yīng)用啟動不同的Dalvik虛擬機(jī)實(shí)例,就會消耗大量的內(nèi)存以及時間。因此,為了克服這個問題,Android系統(tǒng)創(chuàng)造了”Zygote”。Zygote讓Dalvik虛擬機(jī)共享代碼、低內(nèi)存占用以及最小的啟動時間成為可能。Zygote是一個虛擬器進(jìn)程,正如我們在前一個步驟所說的在系統(tǒng)引導(dǎo)的時候啟動。Zygote預(yù)加載以及初始化核心庫類。通常,這些核心類一般是只讀的,也是Android SDK或者核心框架的一部分。在Java虛擬機(jī)中,每一個實(shí)例都有它自己的核心庫類文件和堆對象的拷貝。
      Zygote加載進(jìn)程
      加載ZygoteInit類,源代碼:/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
      registerZygoteSocket()為zygote命令連接注冊一個服務(wù)器套接字。
      preloadClassed “preloaded-classes”是一個簡單的包含一系列需要預(yù)加載類的文本文件,你可以在<Android Source>/frameworks/base找到“preloaded-classes”文件。
      preloadResources() preloadResources也意味著本地主題、布局以及android.R文件中包含的所有東西都會用這個方法加載。
      在這個階段,你可以看到啟動動畫。 第六步:系統(tǒng)服務(wù)或服務(wù)
      完成了上面幾步之后,運(yùn)行環(huán)境請求Zygote運(yùn)行系統(tǒng)服務(wù)。系統(tǒng)服務(wù)同時使用native以及java編寫,系統(tǒng)服務(wù)可以認(rèn)為是一個進(jìn)程。同一個系統(tǒng)服務(wù)在Android SDK可以以System Services形式獲得。系統(tǒng)服務(wù)包含了所有的System Services。
      Zygote創(chuàng)建新的進(jìn)程去啟動系統(tǒng)服務(wù)。你可以在ZygoteInit類的”startSystemServer”方法中找到源代碼。
      核心服務(wù):
      1.啟動電源管理器;
      2.創(chuàng)建Activity管理器;
      3.啟動電話注冊;
      4.啟動包管理器;
      5.設(shè)置Activity管理服務(wù)為系統(tǒng)進(jìn)程;
      6.啟動上下文管理器;
      7.啟動系統(tǒng)Context Providers;
      8.啟動電池服務(wù);
      9.啟動定時管理器;
      10.啟動傳感服務(wù);
      11.啟動窗口管理器;
      12.啟動藍(lán)牙服務(wù);
      13.啟動掛載服務(wù)。
      其他服務(wù):
      1.啟動狀態(tài)欄服務(wù);
      2.啟動硬件服務(wù);
      3.啟動網(wǎng)絡(luò)狀態(tài)服務(wù);
      4.啟動網(wǎng)絡(luò)連接服務(wù);
      5.啟動通知管理器;
      6.啟動設(shè)備存儲監(jiān)視服務(wù);
      7.啟動定位管理器;
      8.啟動搜索服務(wù);
      9.啟動剪切板服務(wù);
      10.啟動登記服務(wù);
      11.啟動壁紙服務(wù);
      12.啟動音頻服務(wù);
      13啟動耳機(jī)監(jiān)聽;
      14.啟動AdbSettingsObserver(處理adb命令)。
      第七步:引導(dǎo)完成
      一旦系統(tǒng)服務(wù)在內(nèi)存中跑起來了,Android就完成了引導(dǎo)過程。在這個時候“ACTION_BOOT_COMPLETED”開機(jī)啟動廣播就會發(fā)出去。

    posted @ 2014-06-30 18:49 順其自然EVO 閱讀(883) | 評論 (0)編輯 收藏

    使用Jazz Automation編寫自動化測試

      Jazz Automation是一個測試框架,構(gòu)建它的目的是為所有類型的Web系統(tǒng)或者靜態(tài)網(wǎng)站自動化同時加速驗(yàn)收/功能測試。它還能夠容易地實(shí)現(xiàn)自動化集成測試。以前的時候這種類型的測試需要人工完成,勞動強(qiáng)度大又不準(zhǔn)確。借助于自動化測試,公司能夠創(chuàng)造高質(zhì)量的應(yīng)用程序,創(chuàng)造的產(chǎn)品bug更少,同時又加快了投入市場的速度。Jazz Automation支持以下Web瀏覽器:IE、Firefox、Safari和Chrome。
      Jazz Automation和其他的自動化測試框架不同,它允許測試編寫者使用純英語描述軟件的工作原理。
      大多數(shù)自動化測試框架在執(zhí)行測試之前必須使用Java和Ruby這樣的語言編程,例如Selenium和Cucumber。Jazz Automation提供了一個抽象層,測試編寫者和配置人員不需要編程。
      編寫第一個測試腳本
      讓我們看看下面這個測試一個電子商務(wù)網(wǎng)站的規(guī)格。
    Feature: Go to the Amazon web site, search for Harry Porter in the book section. Find
    Harry Potter and the Chamber of Secrets (book2) and then add it to the cart.
    Background: Establish the test settings for the test
    Given the following settings:
    | url             | http://www.amazon.com |
    | platform        | Vista                 |
    | browser         | firefox               |
    | browser version | 23                    |
    Scenario: Verify that we have an empty cart on the amazon home page
    Given I am ON the "HomePage"
    Then I should EXPECT
    | cartCount       | 0                     |
    Scenario: Search for Harry Porter from the books category
    Given I am ON "HomePage"
    And I click "allButton"
    And I select
    | selectCategory  | Books                  |
    And I enter
    | searchField     | Harry Potter           |
    And I click "go"
    And I wait 5 seconds
    Then I should be ON the "SearchResultsPage"
    Scenario: From the Search Results Page, verify the first result Special
    Edition Harry Potter Paperback Box Set
    Given I am ON "SearchResultsPage"
    Then I should EXPECT
    | firstResult           | Special Edition Harry Potter Paperback Box Set |
    | chamberOfSecretsBook2 | visible
    |
    Scenario: Click on the Chamber Of Secrets Book2 to reveal the details
    Given I am ON "SearchResultsPage"
    And I CLICK "chamberOfSecretsBook2"
    Then I should be ON the "BookDetailPage"
    Scenario: Verify the details
    Given I am ON the "BookDetailPage"
    Then I should EXPECT
    | kindlePrice          | $7.99                    |
    | hardcoverPrice       | $13.94                   |
    | paperbackPrice       | $8.56                    |
    Scenario: Add the book to my cart
    Given I am ON the "BookDetailPage"
    And I click "hardcover"
    And I click "addToCart"
    Then I should be ON the "PreCheckoutPage"
    Scenario: On the pre-checkout page, verify the details
    Given I am ON the "PreCheckoutPage"
    Then I should EXPECT
    | orderSubtotal            | 13.94       |
    | cartCount                | 1           |
    Scenario: proceed to checkout
    Given I am ON the "PreCheckoutPage"
    And I click "proceedToCheckout"
    Then I should be ON the "SignInPage"
    The test script should be extremely easy to read and understand, right?
     上面顯示的測試用例所使用的語言是Gherkin。Gherkin是一種領(lǐng)域特定語言(DSL),它允許用戶使用純的、可理解的英語描述一個應(yīng)用程序應(yīng)該如何工作。在開發(fā)測試腳本的時候,腳本編寫者不需要理解或者描述實(shí)現(xiàn)。上面的規(guī)格大部分都是自由的文本,但是Gherkin也有一些關(guān)鍵詞:Feature、Scenario、Given、When、And和Then。Jazz Automation擴(kuò)展了這個關(guān)鍵詞列表,增加了Expect、On、Click、Hover、Wait、Refresh、Enter、Select、Forward、Backward、Visible和Invisible。
      與Gherkin相關(guān)的內(nèi)容有很多,本文只討論了其中的一部分;但是必須要清楚的一件事情是:它使用基于行的格式,必須保證完整性讓它能夠清楚如何為每一個功能執(zhí)行相關(guān)步驟。
      借助于Jazz Automation,執(zhí)行上面的測試我們不需要使用Java、Ruby等語言編寫任何代碼。使用Jazz Automation,每一個網(wǎng)站頁面都必須被定義為一個頁面(Page)。JSON和XML都可用于頁面配置。每一個頁面都包含了能夠讓Jazz Automation驗(yàn)證頁面是否被正確加載的高層屬性。同時,每一個頁面還應(yīng)該有一個或者多個元素的定義。仔細(xì)看看上面的這個規(guī)格,你將會注意到有一些單詞是用雙引號括起來的。雙引號中的對象對于Jazz Automation而言是非常重要的。它們代表了頁面對象或者頁面上的元素。對于每一個項(xiàng)目,這些元素定義在一個或者多個頁面文件中。
      讓我們看看測試文件夾的目錄結(jié)構(gòu)。
      首先我們注意一下/features目錄。我們應(yīng)該將所有的測試規(guī)格都保存在這里。文件是.feature類型的,Jazz Automation可以一次性執(zhí)行一個或者多個功能。功能和它們的執(zhí)行順序定義在jazz.properties文件中。其次,我們注意到在/pages目錄下有一些“頁面文件”。該目錄是測試配置程序(Test Configurator)定義每一個頁面和頁面元素的地方,定義的內(nèi)容將會在測試期間訪問。測試規(guī)格只能引用在這里定義的頁面和在頁面文件中定義的頁面元素。稍后我們將會介紹如何為頁面文件自定義位置。在文章的最后,我們將會介紹強(qiáng)制的jazz.properties文件,現(xiàn)在我們先跳過它。
      繼續(xù)頁面配置
      測試配置程序是正確配置一個Jazz Automation測試的關(guān)鍵。Jazz Automation支持使用JSON和XML進(jìn)行頁面配置。
      測試配置員需要對jQuery這樣的web技術(shù)有一定的經(jīng)驗(yàn)。測試配置員需要為要訪問的每一個Web頁面創(chuàng)建一個頁面(Page)。
      一個頁面有一些必須的屬性。每一個頁面必須有一個pageName屬性,同時至少有一個domElement。功能會頻繁地使用pageName,同時它應(yīng)該是有意義的,這樣測試員才能夠準(zhǔn)確地知道它所引用的Web頁面。DomElements是用于驗(yàn)證軟件的Web頁面元素。通常情況下它們指標(biāo)簽值、下拉框值、圖片、按鈕、顯示的數(shù)據(jù)(定價等)。這些元素的名稱應(yīng)該是有意義的,這樣測試編寫者才能夠理解每一個組件的目的。
      讓我們看看下面這個JSON頁面配置。
    {
    "pageName":"HomePage",
    "title": "Amazon.com: Online Shopping for Electronics, Apparel,
    Computers, Books, DVDs & more",
    "urlExtension": "www.amazon.com",
    "keyDomElementName": "searchField",
    "domElements" :
    {
    "cartCount" :
    {
    "jquery": "$('#nav-cart-count')"
    },
    "allButton" :
    {
    "jquery": "$('#nav-search-in')"
    },
    "selectCategory" :
    {
    "jquery": "$('#searchDropdownBox')"
    },
    "searchField" :
    {
    "jquery": "$('#twotabsearchtextbox')"
    },
    "go" :
    {
    "jquery": "$('.nav-submit-input')"
    }
    }
    }
    我們定義一個頁面配置文件的關(guān)鍵組件。
      就是這樣!
      一旦剩下的頁面被定義完,我們就能夠通過“完成”運(yùn)行場景了。測試配置員必須要清楚下面的內(nèi)容之一:jQuery、XPath或者CSS。我們使用它們“選擇”需要測試的Web元素。jQuery是Jazz Automation最喜歡的選擇器機(jī)制,同時對于大多數(shù)QA分析師而言他們要學(xué)會jQuery只需要幾天的時間,特別是有那么多的在線教程并且可以使用現(xiàn)代Web瀏覽器的開發(fā)者工具。
      普通配置
      要討論的最后一部分內(nèi)容是必須的jazz.properties文件。該配置文件包含一些普通的配置項(xiàng),例如項(xiàng)目名稱(用于報告)、一個表明測試應(yīng)該在遠(yuǎn)程運(yùn)行還是在本地系統(tǒng)上運(yùn)行的標(biāo)記、動作和頁面速度以及要執(zhí)行的功能。其他的可選配置屬性我們就不在此一一介紹了。
    #project name
    projectName: Amazon
    # turn on remote support. if useRemote true, you must specify the following
    remoteWebDriverUrl property.
    useRemote: false
    # remote web driver url - usually your sauceLabs url
    remoteWebDriverUrl: http://jazzautomation:****@ondemand.saucelabs.com:80/wd/hub
    # you can customize you folder name of pages. By default it is pages
    #pagesDirectoryName: pages
    # page pacing between two pages loading
    pagePace: 10
    #action pacing between two actions on the same page. The default value is "1 second".
    actionPace: 1
    # features: can be a list of features, separated by comma
    features:searchForHarryPotter
      報告
      對于每一個測試,Jazz Automation都會產(chǎn)生一個描述測試運(yùn)行詳細(xì)信息的報告。如果測試執(zhí)行成功了,那么會生成一個展示成功率為100%的簡單報告。如果測試執(zhí)行失敗了,那么會對錯誤發(fā)生的地方創(chuàng)建一個屏幕截圖并插入到報告中。除此之外,報告是根據(jù)測試運(yùn)行期間產(chǎn)生的數(shù)據(jù)文件生成的。該數(shù)據(jù)文件可用于歷史追蹤、圖表和趨勢分析。
      讓我們看看下面這個失敗的測試報告:
      
      結(jié)論
      到現(xiàn)在為止我們已經(jīng)結(jié)束了使用Jazz Automation編寫自動化測試的旅程。對于好奇的讀者,還有大量的內(nèi)容需要學(xué)習(xí)。例如,Jazz Automation還能夠通過Sauce Labs這樣的公司所提供的技術(shù)在遠(yuǎn)程使用,這樣的話你的組織就不需要維護(hù)進(jìn)行全范圍測試所必須的每一種瀏覽器和操作系統(tǒng)的可能組合。你還能夠深入探索Jazz Automation如何應(yīng)用于沒有使用jQuery的網(wǎng)站。提示:這需要使用動態(tài)插入。
      Jazz Automation還通過用戶界面測試和提供即時反饋完成了持續(xù)集成的循環(huán)。這比以往任何時候都要更加重要,因?yàn)楫a(chǎn)業(yè)已經(jīng)轉(zhuǎn)移到富HTML5和JavaScript用戶界面上了。組織需要立即知道應(yīng)用程序自上而下都在按照期望運(yùn)行。另外,使用Gherkin作為我們的領(lǐng)域特定語言還允許關(guān)鍵的利益相關(guān)方明確地表達(dá)出他們對系統(tǒng)應(yīng)該如何工作、如何與技術(shù)資源有效溝通的理解,讓開發(fā)團(tuán)隊(duì)能夠解放出來專心構(gòu)建產(chǎn)品。
      我們不能將Jazz Automation錯誤地理解為可以替代傳統(tǒng)的單元測試和集成測試框架,例如JUnit和TestNG。單元測試和集成測試在成功的軟件開發(fā)中依然非常重要,Jazz Automation只是更進(jìn)了一步,用戶能夠使用它編寫針對用戶界面的自動化測試。另外,Jazz Automation是DOM級別的測試,所以你能夠在一個Web頁面中到處移動條目,這樣并不會導(dǎo)致測試錯誤。
      自動化用戶界面測試并不是每一個組織優(yōu)先考慮的事情,但是如果首先考慮了它,那么前端測試和回歸測試就不會讓你再次慢下來。
      關(guān)于作者
      Dedrick Boyd 是一位老道的IT專家,他在完整軟件開發(fā)和產(chǎn)品生命周期等領(lǐng)域有豐富的經(jīng)驗(yàn)。他有技術(shù)技能,同時擁有管理各種產(chǎn)業(yè)中的大型和小型開發(fā)團(tuán)隊(duì)的經(jīng)驗(yàn),包括零售業(yè)、制藥業(yè)、媒體及娛樂、醫(yī)療保健和金融服務(wù)業(yè)。Dedrick現(xiàn)在就職于Statement,在那里他是一位技術(shù)創(chuàng)新者,同時也是一位關(guān)系經(jīng)理。他擁有佛羅里達(dá)州立大學(xué)管理信息系統(tǒng)(Management Information Systems)的學(xué)士學(xué)位。Dedrick的業(yè)余愛好包括:環(huán)游世界、讀書、烹飪、美式足球和與家人共度光陰。

    posted @ 2014-06-30 18:48 順其自然EVO 閱讀(204) | 評論 (0)編輯 收藏

    性能測試實(shí)用linux 命令netstat等

      Netstat 用于顯示與IP、TCP、UDP和ICMP協(xié)議相關(guān)的統(tǒng)計(jì)數(shù)據(jù),一般用于檢驗(yàn)本機(jī)各端口的網(wǎng)絡(luò)連接情況。 通過netstat可以查看網(wǎng)絡(luò)連接、端口號等占用情況
      查看進(jìn)程和端口號相關(guān):
      1.  查看TCP/UDP端口:
      netstat -tuoln
      2. 查看進(jìn)程名運(yùn)行的端口號:
      netstat -anp|grep 進(jìn)程名
      當(dāng)需要監(jiān)控某個服務(wù)的端口號時可以首先獲取該服務(wù)的監(jiān)聽端口號,如tomact進(jìn)程
      netstat -anp|grep tomcat
      3.  根據(jù)端口查看運(yùn)行的進(jìn)程:
      netstat -anp|grep 端口號
      或
      lsof -i:端口號
      通常用于查看某個端口號下建立的連接數(shù),如8083端口號下的連接數(shù)統(tǒng)計(jì):
      netstat -anp|grep:8083|wc -l
      4. netstat -tln 查看服務(wù)監(jiān)聽端口
      其它:
      1. 結(jié)束進(jìn)程
      kill -15 pid 立即釋放資源
      kill -9 pid 不會立即釋放資源
      2. 查看進(jìn)程
      ps aux
      查看指定服務(wù)的進(jìn)程號,如tomcat服務(wù)
      ps aux|grep tomcat
      3. 查看網(wǎng)卡信息:
      cat  /sbin/ifconfig
      4. 查看cpu配置
      cat /proc/cpuinfo
      5. 查看mem配置
      cat /proc/meminfo
      6. 修改hosts配置
      vim /etc/hosts
    Netstat 詳細(xì)參數(shù)列表
      NETSTAT [-a] [-b] [-e] [-n] [-o] [-p proto] [-r] [-s] [-v] [interval]
      -a 顯示所有連接和監(jiān)聽端口。
      -b 顯示包含于創(chuàng)建每個連接或監(jiān)聽端口的可執(zhí)行組件。在某些情況下已知可執(zhí)行組件 擁有多個獨(dú)立組件,并且在這些情況下包含于創(chuàng)建連接或監(jiān)聽端口的組件序列被顯示。 這種情況下,可執(zhí)行組件名在底部的 [] 中,頂部是其調(diào)用的組件,等等,直到 TCP/IP 部分。注意此選項(xiàng)可能需要很長時間,如果沒有足夠權(quán)限可能失敗。
      -e 顯示以太網(wǎng)統(tǒng)計(jì)信息。此選項(xiàng)可以與 -s 選項(xiàng)組合使用。
      -n 以數(shù)字形式顯示地址和端口號。
      -o 顯示與每個連接相關(guān)的所屬進(jìn)程 ID。
      -p proto 顯示 proto 指定的協(xié)議的連接;proto 可以是 下列協(xié)議之一: TCP、UDP、TCPv6 或 UDPv6。
      如果與 -s 選項(xiàng)一起使用以顯示按協(xié)議統(tǒng)計(jì)信息,proto 可以是下列協(xié)議之一: IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 或 UDPv6。
      -r 顯示路由表。
      -s 顯示按協(xié)議統(tǒng)計(jì)信息。默認(rèn)地,顯示 IP、 IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6 的統(tǒng)計(jì)信息;
      -p 選項(xiàng)用于指定默認(rèn)情況的子集。
      -v 與 -b 選項(xiàng)一起使用時將顯示包含于 為所有可執(zhí)行組件創(chuàng)建連接或監(jiān)聽端口的 組件。
      interval 重新顯示選定統(tǒng)計(jì)信息,每次顯示之間 暫停時間間隔(以秒計(jì))。按 CTRL+C 停止重新 顯示統(tǒng)計(jì)信息。如果省略,netstat 顯示當(dāng)前 配置信息(只顯示一次)
      Netstat的一些常用選項(xiàng)
      netstat -s——本選項(xiàng)能夠按照各個協(xié)議分別顯示其統(tǒng)計(jì)數(shù)據(jù)。如果你的應(yīng)用程序(如Web瀏覽器)運(yùn)行速度比較慢,或者不能顯示W(wǎng)eb頁之類的數(shù)據(jù),那么你就可以用本選項(xiàng)來查看一下所顯示的信息。你需要仔細(xì)查看統(tǒng)計(jì)數(shù)據(jù)的各行,找到出錯的關(guān)鍵字,進(jìn)而確定問題所在。
      netstat -e——本選項(xiàng)用于顯示關(guān)于以太網(wǎng)的統(tǒng)計(jì)數(shù)據(jù)。它列出的項(xiàng)目包括傳送的數(shù)據(jù)報的總字節(jié)數(shù)、錯誤數(shù)、刪除數(shù)、數(shù)據(jù)報的數(shù)量和廣播的數(shù)量。這些統(tǒng)計(jì)數(shù)據(jù)既有發(fā)送的數(shù)據(jù)報數(shù)量,也有接收的數(shù)據(jù)報數(shù)量。這個選項(xiàng)可以用來統(tǒng)計(jì)一些基本的網(wǎng)絡(luò)流量。
      netstat -r——本選項(xiàng)可以顯示關(guān)于路由表的信息,類似于后面所講使用route print命令時看到的 信息。除了顯示有效路由外,還顯示當(dāng)前有效的連接。
      netstat -a——本選項(xiàng)顯示一個所有的有效連接信息列表,包括已建立的連接(ESTABLISHED),也包括監(jiān)聽連接請求(LISTENING)的那些連接,斷開連接(CLOSE_WAIT)或者處于聯(lián)機(jī)等待狀態(tài)的(TIME_WAIT)等
      netstat -n——顯示所有已建立的有效連接。

    posted @ 2014-06-30 18:46 順其自然EVO 閱讀(290) | 評論 (0)編輯 收藏

    我怎么做性能測試

    今天和同事交流關(guān)于性能測試的東西,以前也做過性能測試,突然想寫點(diǎn)自己關(guān)于如何做性能測試的認(rèn)識。
      基于B/S架構(gòu)的系統(tǒng),利用loadrunner做性能測試,利用nmon監(jiān)控系統(tǒng)資源(用linux自帶的top,vmstat等命令也可以,寫一些簡單的shell腳本就行了)。
      那么到底該怎么去做性能測試呢?
      1、首先要了解被測系統(tǒng)的結(jié)構(gòu)和有關(guān)知識的儲備。
      了解了被測系統(tǒng),在后期性能出現(xiàn)異常的時候,定位就相對容易一些;而且知道在測試的過程中需要監(jiān)控什么。
      一個簡單B\S系統(tǒng)結(jié)構(gòu)圖:
      該系統(tǒng)有一下及部分組成:
      APP:一臺nginx,兼做web和應(yīng)用服務(wù)器
      Memcached:負(fù)責(zé)做數(shù)據(jù)緩存
      lucene:負(fù)責(zé)做搜索
      RabbitMQ:負(fù)責(zé)某些業(yè)務(wù)的隊(duì)列處理
      mysql:數(shù)據(jù)庫服務(wù)器,一個主庫,一個從庫
      從以上系統(tǒng)結(jié)構(gòu)來看,要搭建和維護(hù)性能測試環(huán)境,需要的一些必要的知識。
      對于APP:需要了解nginx的相關(guān)知識,怎么修改配置,在哪里看日志
      對于Memcached:怎么搭建Memcached,怎么查看命中率,Memcached的作用是什么
      lucene:這個lucene是干什么用的,要怎么配置
      RabbitMQ:MQ要如何配置,都那些業(yè)務(wù)用到了MQ。
      Mysql:如何配置主從,為什么要配置主從,主從如何同步等等
      在搭建環(huán)境的過程中肯定會遇到這樣或那樣的問題,要自己找資料,或者相關(guān)的開發(fā)人員一起解決,并注意做筆記,防止以后同樣的問題再出現(xiàn)。
      2、了解了系統(tǒng)結(jié)構(gòu),開始搭建測試環(huán)境,并準(zhǔn)備數(shù)據(jù)。
      測試環(huán)境盡量要和生產(chǎn)環(huán)境的結(jié)構(gòu)保持一致,還有配置文件等也要保持一致,這樣能保證性能測試的結(jié)果更加真實(shí)和接近生產(chǎn)環(huán)境。
      數(shù)據(jù)準(zhǔn)備一定要充足,而且數(shù)據(jù)量要大于等于生產(chǎn)環(huán)境,這樣能更真實(shí)的模擬生產(chǎn)環(huán)境。比如對一個select語句而言,10W的數(shù)據(jù),和1000W的數(shù)據(jù),查詢時間肯定有差別。如果數(shù)據(jù)量太小就不能反映真實(shí)情況下性能了。(可以把線上的數(shù)據(jù)導(dǎo)入到測試環(huán)境,但是要注意把用戶比較隱私的數(shù)據(jù)都替換掉)
      如果有可能的話,測試環(huán)境的數(shù)據(jù)要比生產(chǎn)環(huán)境多出20%,做一些性能上邊的冗余,防止發(fā)生突然的性能尖峰
     3、了解需求,找出測試點(diǎn)
      和產(chǎn)品、技術(shù)溝通需要做性能測試的業(yè)務(wù);并了解相應(yīng)的業(yè)務(wù)的性能指標(biāo),如頁面的響應(yīng)時間,TPS(事物處理)或者系統(tǒng)期望能承受多少并發(fā)等。
      4、設(shè)計(jì)性能能測試用例
      根據(jù)業(yè)務(wù)編寫相應(yīng)的性能測試用例。
      功能
      在線用戶達(dá)到高峰時,用戶可以正常發(fā)帖,保證200個以內(nèi)用戶可以同時發(fā)表帖子。
      目的
      測試系統(tǒng)200個以內(nèi)的用戶同時在線發(fā)帖。
      方法
      采用LoadRunner的錄制工具錄制一個郵件發(fā)送過程,然后對腳本進(jìn)行優(yōu)化,加上事物點(diǎn),檢查點(diǎn)等。過程中監(jiān)視B端的響應(yīng),還有網(wǎng)絡(luò)傳輸,web服務(wù)和數(shù)據(jù)庫服務(wù)器的性能,并觀察服務(wù)器相應(yīng)服務(wù)的日志,檢查MQ的狀態(tài),memcached服務(wù)器的狀態(tài)和性能
      預(yù)期結(jié)果
      符合業(yè)務(wù)的預(yù)期,日志木有異常等(不詳細(xì)列舉)
      5、編寫并優(yōu)化腳本
      根據(jù)測試用例錄制發(fā)帖的腳本,加入事物點(diǎn)、檢查點(diǎn)、參數(shù)化,并回放,確保腳本沒有問題,可以正常運(yùn)行。
      6、設(shè)計(jì)性能測試場景
      設(shè)置一個漸進(jìn)的場景10-30-60-100-150-200,這么做的目的防止一下子上去就是200個并發(fā),出了問題,不知道系統(tǒng)最佳的并發(fā)是多少。
      (上邊的漸進(jìn)場景不一定合理,只做示意)
      7、啟動監(jiān)控,并開始跑性能測試場景
      設(shè)置場景完畢后,開始在服務(wù)器端啟動監(jiān)控,然后開始啟動場景。
      8、監(jiān)控場景執(zhí)行,監(jiān)控服務(wù)器的資源
      loadrunner可以搜集一些性能測試數(shù)據(jù),事物的pass數(shù),fail數(shù),error數(shù),都要做統(tǒng)計(jì)。
      監(jiān)控服務(wù)器的資源,可以利用nmon,也可以是用linux自帶的命令top,vmstat等。
      也要監(jiān)控服務(wù)器的日志輸出,看是否有異常出現(xiàn)。例如:查看mysql的慢日志,nginx的日志等。
      9、搜集結(jié)果數(shù)據(jù),分析探討
      最后對性能測試搜集的數(shù)據(jù)進(jìn)行分析,找出性能測試的拐點(diǎn)。
      10、對系統(tǒng)進(jìn)行優(yōu)化,并重復(fù)7-9步,直至測試結(jié)束
      PS:性能測試不是一個人的事情,中間設(shè)計(jì)了,開發(fā),產(chǎn)品,運(yùn)維,QA,DBA,要大家共同協(xié)作,才能做好性能測試。
      限于水平有限,用疏漏之處,多多包涵。

    posted @ 2014-06-30 18:45 順其自然EVO 閱讀(774) | 評論 (0)編輯 收藏

    我眼中的測試工作

     從2011年畢業(yè)到現(xiàn)在,從事軟件測試工作已經(jīng)有將近三年了,隨著工作的經(jīng)驗(yàn)的積累,對測試的認(rèn)識也在不斷的提高。
      經(jīng)常會聽到身邊有人抱怨,我做測試天天就是點(diǎn)鼠標(biāo),做功能測試,累死了,煩死了;想學(xué)學(xué)做自動化,性能方面的測試。
      相信很多做測試工作的同學(xué)會有相同的感覺。
      最近換了工作,面試了兩家公司,又對測試有了更進(jìn)一步的認(rèn)識。
      首先,我覺得作為一名測試人員,有兩項(xiàng)很重要技能:測試點(diǎn)的發(fā)掘和豐富的測試手段,而測試點(diǎn)的發(fā)掘則是最重要的。下面就這兩個方面聊一聊我眼里邊的測試。
      測試點(diǎn)的發(fā)掘:如果作為一名測試人員,不能發(fā)掘一個需求或系統(tǒng)需要測試的點(diǎn),那么就不能算是一個合格的測試人員,那么該怎么去發(fā)掘出測試點(diǎn)呢?
      關(guān)于測試點(diǎn),業(yè)界有比較成熟的模型--軟件質(zhì)量模型,供大家從不同的方面去分析需求或這系統(tǒng)需要測試的測試點(diǎn)。
      從以上模型,基本可總結(jié)出需求或者系統(tǒng)需要測試的測試點(diǎn)。
      比如給你一個需求或系統(tǒng),首先要考慮的就是,這個需求或者系統(tǒng)是要做什么的(功能),是不是安全(功能),好不好用(易理解性)等。
      只有發(fā)掘了測試點(diǎn),測試工作才有依據(jù),所以大家一定不要舍本逐末。
      再者就是豐富的測試手段這個技能了。
      這個技能是建立在測試點(diǎn)的發(fā)掘的技能之上的,不然沒法開展測試工作。
      對于以上所說的,功能測試就是點(diǎn)擊鼠標(biāo),又累又煩躁,這點(diǎn)我認(rèn)同。所以想去做自動化或者性能測試
      什么是自動化?
      自動化就是用程序自動執(zhí)行的方式,替代人工去執(zhí)行測試用例,去除重復(fù)的勞動,節(jié)省一些回歸時候的人力成本。
      舉個列子來說吧。
      某個人認(rèn)為整天點(diǎn)鼠標(biāo)是在浪費(fèi)生命,不行去點(diǎn)擊鼠標(biāo)了,就想到了把點(diǎn)擊鼠標(biāo)的事情交給自動化來實(shí)現(xiàn),這個時候,同事大家所說的自動化,就是基于GUI的UI自動化,即用代碼去默認(rèn)鍵盤,鼠標(biāo)和系統(tǒng)的交互,通過這樣的方式來完成測試。
      接下來,大家會面臨一個問題,互聯(lián)網(wǎng)隨時都在變化,你的需求和系統(tǒng)也在隨時變更(我也討厭變更,哈哈),不停的改版,你會發(fā)現(xiàn)原來的UI自動化代碼也得跟著變化或者經(jīng)常找不到頁面元素(穩(wěn)定性令人抓狂),不停的去維護(hù)已經(jīng)寫好的代碼,甚至有時候要重構(gòu)你的UI自動化代碼,成本很高,投入產(chǎn)出比不理想,那這個時候該怎么辦呢?
      向后挖!
      GUI所展示的數(shù)據(jù)都是以后服務(wù)端的API接口返回的,經(jīng)過瀏覽器的渲染,以GUI(圖形用戶接口)的形式展現(xiàn)給用戶,那么我們?yōu)槭膊粚ο到y(tǒng)的API進(jìn)行測試呢,可以避免掉系統(tǒng)界面的頻繁變更和找不到頁面元素的問題,QA也能更早的介入測試,保證接口的質(zhì)量。所以可以對接口進(jìn)行自動化測試。
      再往后,我們就可以接觸到代碼,可以對代碼進(jìn)行自動化白盒測試。
      對性能測試來說也是一個道理。
      拿loadrunner做性能測試來說吧。
      其實(shí)loadrunner做性能測試,就是直接通過接口來做的性能測試。通過模擬API請求。然后開啟很多進(jìn)程或者線程,同時去模擬API調(diào)用,借此對服務(wù)器形成壓力。
      根據(jù)系統(tǒng)結(jié)構(gòu)圖,我們知道需要優(yōu)化各個組件的配置,設(shè)置一些合適的參數(shù),這就要求我們了解這些配置是干什么用的。
      對代碼來說,可以對服務(wù)進(jìn)行代碼級別的性能測試。
      對數(shù)據(jù)庫來說,可能要審查一下sql語句,數(shù)據(jù)表的字段,大小,索引是否合適等。以后會寫這方面的文章。
      在發(fā)掘測試點(diǎn)的基礎(chǔ)上,再去豐富自己的測試手段,再能在測試上走的更遠(yuǎn)。

    posted @ 2014-06-30 18:42 順其自然EVO 閱讀(217) | 評論 (0)編輯 收藏

    casperjs進(jìn)行web功能自動化測試demo

     通過一周多的學(xué)習(xí)和總結(jié),終于掌握了casperjs用于自動化的方法,填平了大大小小的各種坑。
      casperjs是一個新興的測試框架,網(wǎng)上資料很少,基本上靠翻譯英文資料。
      貢獻(xiàn)出來,供大家參考:
    //page.js,存放頁面元素
    //c表示通過css選擇元素,x表示通過xpath選擇元素
    var baseurl="http://www.cnblogs.com/reach296/";
    var base={
    //首頁
    url:baseurl,
    c:{
    登錄表單:'form#login',
    登錄按鈕:'.btn'
    }
    };
    var index={
    //登錄后成功后跳轉(zhuǎn)頁
    url:baseurl+"/seven/index"
    };
    var sidebar={
    //左邊框
    url:baseurl+"/seven/sidebar.jsp",
    x:{
    應(yīng)用庫:"http://span[contains(text(),應(yīng)用庫)]",
    應(yīng)用分類:"http://ul[@class='submenu']/li/a[1]"
    }
    };
    var category_list={
    //應(yīng)用分類page
    url:baseurl+"/seven/app/category-list",
    c:{
    名稱:'td.sorting_1'
    },
    x:{
    表格:'//*[@id="sample-table-2"]/tbody/tr',
    名稱:'//*[@id="sample-table-2"]/tbody/tr/td[1]',
    海報:'//*[@id="sample-table-2"]/tbody/tr/td[2]',
    編輯:'//*[@id="sample-table-2"]/tbody/tr/td[3]'
    }
    }
    //common.js,存放全局變量和方法
    var path={
    capture:'cms/capture/',
    lib:'cms/lib/'
    };
    var cap={
    clipRect:{top: 0,left: 0,width: 1024,height: 768},
    // clipRect:{width: 1024,height:768},
    imgOptions:{format: 'jpg',quality:100}
    };
    var account={'loginName':'reachwang','passwd':'test12345'};
    function get_menu_links(){
    //獲取一級模塊
    var links = window.frames[0].document.getElementsByTagName("frame")[0].contentDocument.getElementsByClassName("menu-text");
    return Array.prototype.map.call(links, function(e) {
    return e.innerText;
    });
    };
    function get_submenu_links(){
    //獲取二級模塊
    var links = window.frames[0].document.getElementsByTagName("frame")[0].contentDocument.querySelectorAll('.submenu a');
    return Array.prototype.map.call(links, function(e) {
    return (e.innerText).replace(/(^\s*)|(\s*$)/g, "");
    });
    };
    //應(yīng)用分類測試用例,檢查應(yīng)用分類頁面是否正常展示,分類數(shù)據(jù)是否存在
    casper.test.begin('應(yīng)用分類測試用例',function suite(test) {
    casper.options.verbose = true;
    casper.options.logLevel = "debug";
    casper.options.viewportSize={width: 1024, height: 768};
    casper.options.waitTimeout=20000;
    // casper.options.clientScripts=[
    // path.lib+'common.js'
    // ];
    casper.test.comment('檢查應(yīng)用分類頁面是否正常展示,分類數(shù)據(jù)是否存在');
    casper.start(base.url, function() {
    this.echo("1、打開登錄頁面");
    test.assertHttpStatus(200,"檢查http請求狀態(tài)");
    });
    casper.waitForSelector(base.c.登錄按鈕, function() {
    this.echo("2、登錄頁面截圖");
    this.capture(path.capture+"登錄頁面.jpg",cap.clipRect, cap.imgOptions);
    });
    casper.then(function() {
    this.echo("3、登錄頁面檢查");
    test.assertTitle("TCL CMS", "標(biāo)題正確");
    test.assertExists(base.c.登錄表單, "帳號登錄表單存在");
    this.echo("4、輸入帳號和密碼");
    this.fill(base.c.登錄表單, account, true);
    this.echo("5、點(diǎn)擊登錄按鈕");
    test.assertExists(base.c.登錄按鈕, "登錄按鈕存在");
    this.mouse.click(base.c.登錄按鈕);
    });
    casper.waitForUrl(index.url,function(){
    test.assertHttpStatus(200,"跳轉(zhuǎn)到登錄完成頁");
    this.capture(path.capture+'跳轉(zhuǎn)到登錄完成頁.jpg',cap.clipRect, cap.imgOptions);
    });
    casper.withFrame(0,function(){
    this.echo("切換到mian frame里");
    casper.withFrame(0,function(){
    this.echo("切換到mian frame下的sider frame里");
    this.echo("6、點(diǎn)擊應(yīng)用庫");
    this.click({type: 'xpath',path:sidebar.x.應(yīng)用庫});
    this.echo("7、點(diǎn)擊應(yīng)用分類");
    this.click({type: 'xpath',path:sidebar.x.應(yīng)用分類});
    });
    });
    casper.waitForUrl(index.url,function(){
    test.assertHttpStatus(200,"跳轉(zhuǎn)到應(yīng)用分類頁");
    this.capture(path.capture+'打開應(yīng)用分類.jpg',cap.clipRect, cap.imgOptions);
    });
    casper.withFrame(0,function(){
    this.echo("切換到mian frame里");
    casper.withFrame(1,function(){
    this.echo("應(yīng)用分類頁面")
    test.assertExists({type: 'xpath',path:category_list.x.表格},"表格檢查");
    test.assertExists(category_list.c.名稱,"名稱字段檢查");
    test.assertExists({type: 'xpath',path:category_list.x.海報},"海報字段檢查");
    test.assertExists({type: 'xpath',path:category_list.x.編輯},"編輯字段檢查");
    });
    });
    casper.run(function() {
    test.done();
    });
    });

    posted @ 2014-06-30 18:41 順其自然EVO 閱讀(332) | 評論 (0)編輯 收藏

    如何對待測試開發(fā)團(tuán)隊(duì)中那個拖后腿的人?

      每個開發(fā)團(tuán)隊(duì)中總有一個人是最差的,老跟不上整體水平。據(jù)我觀察,隊(duì)友們對待這個差生的態(tài)度是團(tuán)隊(duì)健康狀況的重要標(biāo)志。(注:原文用“貝爾曲線(bell curve)”,也就是“正態(tài)分布”來衡量團(tuán)隊(duì)的整體水平分布,這里意譯成“整體水平”。)
      我運(yùn)氣一直不錯,在過去的幾十年里,干過各種的行業(yè)和職業(yè),在不少團(tuán)隊(duì)中待過,都是氣氛融洽和技能嫻熟的開發(fā)團(tuán)隊(duì)。并不是說每個項(xiàng)目都是成功的,(外部因素?zé)o法控制),但是經(jīng)驗(yàn)永遠(yuǎn)有深刻的價值。
      在成功的開發(fā)團(tuán)隊(duì)里,最顯著的特點(diǎn)是隊(duì)員們互相尊重——“他擅長做這個,也喜歡做這個。好極了。因?yàn)槲也幌矚g做這個”)。每個人都明白人多力量大的道理,并懂得珍惜隊(duì)友的技能。如果你在這樣的團(tuán)隊(duì)中待過(或者你曾管理過這樣的一群家伙),你懂我的意思。
      不論這些黃金組合團(tuán)隊(duì)是網(wǎng)絡(luò)社區(qū)、公司部門還是志愿者組織,都有個共同特點(diǎn):每個團(tuán)隊(duì)中都有這樣的一個人——我們可以無惡意的稱之為笨蛋,但重點(diǎn)是,大家卻對這個人很好。
      在我待過的一個志愿軟件開發(fā)團(tuán)隊(duì)中,Elliot就是那個笨蛋。準(zhǔn)確形容的話,這家伙是個熱心但沒腦子的人。像一只大小狗一樣,他是個熱心腸,但往往好心辦壞事。他樂于助人,而且很羨慕別人做得比他好。(實(shí)際上所有人都做得比他好。)
      Elliot總把事情辦砸,哪怕他已非常的認(rèn)真和努力。沒人會把關(guān)乎項(xiàng)目成敗的關(guān)鍵任務(wù)交給他辦。他也從未意識到自己交付的活有問題,比方說我總是要幫他重寫文檔,而發(fā)布后的文檔與他的大意一致,以至于他根本都沒有意識到被人重寫了。Elliot常常對大伙做的事摸不著頭腦,但他依然興高采烈地跟在那些他認(rèn)為知道要做什么以及怎樣去做的人的屁股后面。
      但每個人都體諒他。運(yùn)作志愿者團(tuán)隊(duì)的人想方設(shè)法地幫助他,讓他能真正貢獻(xiàn)自己的一分力量,并把他高昂的工作熱情和樂于奉獻(xiàn)的精神看做他的優(yōu)點(diǎn)。就算是搞社區(qū)活動也需要人手去擺放折疊椅或者在前臺迎賓吧。我們把所有類似的活都交給他干。
      他是有點(diǎn)笨,但他是我們的笨笨。我們私下里也會抱怨,大家翻白眼,嘆氣或埋怨:“沒辦法,Elliot就是這樣的。” 可是如果有外人膽敢欺負(fù)他,我們會扭折他的脖子。我想說的是,Elliot幾年前去世了。組織里所有認(rèn)識他的人都參加了他的葬禮。生活并沒有像我們那般關(guān)懷他。對于我們每一個人,他都是值得懷念的。
      自從我認(rèn)識Elliot以后,我開始觀察這種現(xiàn)象。每個開發(fā)團(tuán)隊(duì),不管多么優(yōu)秀或者蹩腳,總有個在墊底的(不論是從智商,工作效率或其他的方面看)。團(tuán)隊(duì)的整體水平根據(jù)行業(yè)的種類而定–衡量一組科學(xué)家的工作價值和效率的標(biāo)準(zhǔn)跟衡量一組園林景觀設(shè)計(jì)師完全不同。
      你們團(tuán)隊(duì)里墊底的那個Elliot,換到另外一個場合,也許是個高手。但總是會有那么一個墊底的人。
      在不和諧的團(tuán)隊(duì)里,這個笨笨會被當(dāng)成白癡。人們欺負(fù)他,瞧不起他,對他不友好,你能猜想到這會產(chǎn)生多少不良影響。但對于懂得相互理解體諒能力差距的團(tuán)隊(duì)而言,情況就不一樣了。
      這種積極的特性在重于參與的團(tuán)隊(duì)中尤為明顯,比如用戶群,開源項(xiàng)目組,社區(qū)組織。這些情況下,你不可能因?yàn)槟硞€成員工作質(zhì)量有所欠缺而開除他,所以你必須積極地跟那些志愿者們打交道。商業(yè)組織也要以此為鑒,我們都看到過組織開除某個過能力稍微欠缺的人而不是幫助他們找到能夠勝任的工作崗位。
      問題是,你–作為項(xiàng)目經(jīng)理–是如何對待你手下的這個笨笨的?你的團(tuán)隊(duì)又是如何對待她的?
      我很想能為你提供一些以“怎樣才能…”打頭的建議…..但實(shí)際上這些都沒用。不是簡單地知道要做什么就行了,而要考慮到你團(tuán)隊(duì)的文化氛圍。團(tuán)隊(duì)和領(lǐng)導(dǎo)如何對待后進(jìn)員工代表了團(tuán)隊(duì)的文化,標(biāo)志了團(tuán)隊(duì)的和諧度。如果你對他們好,他們會報答你的,結(jié)果會在最終的產(chǎn)品里體現(xiàn)出來。
      如果你知道關(guān)于團(tuán)隊(duì)如何對待最差成員的例子,對公司文化的團(tuán)隊(duì)的功能產(chǎn)生了怎樣的影響,不管是好是壞,請告訴我。

    posted @ 2014-06-30 18:41 順其自然EVO 閱讀(196) | 評論 (0)編輯 收藏

    僅列出標(biāo)題
    共394頁: First 上一頁 91 92 93 94 95 96 97 98 99 下一頁 Last 
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日本免费中文字幕| 日韩少妇内射免费播放| 亚洲精品在线电影| 亚洲欧洲春色校园另类小说| 亚洲色av性色在线观无码| 亚洲影视自拍揄拍愉拍| 亚洲乱妇老熟女爽到高潮的片| 国产成人亚洲精品蜜芽影院| xvideos永久免费入口| 你懂的免费在线观看网站| 四虎影视永久免费观看网址| 国产精品V亚洲精品V日韩精品 | 搡女人免费免费视频观看| 日韩电影免费在线观看中文字幕| 国产在线观看免费视频播放器| 亚洲午夜无码AV毛片久久| 亚洲精品欧美综合四区| 一个人看的免费观看日本视频www 一个人看的免费视频www在线高清动漫 | 色视频色露露永久免费观看| 国产免费观看视频| 亚洲一区二区三区高清视频| 少妇亚洲免费精品| 日韩一级免费视频| 亚洲成a人片在线观看无码| 亚洲成a人片77777群色| 国产成人一区二区三区视频免费| 亚洲欧洲日本在线| 亚洲一级免费视频| 久久国产精品成人片免费| 成年人性生活免费视频| 亚洲乱码日产一区三区| 亚洲一区二区免费视频| 亚洲黄色片免费看| 亚洲真人日本在线| 直接进入免费看黄的网站| 日本免费人成视频播放| 亚洲国产精品无码中文lv| 最新仑乱免费视频| 亚洲AV无码无限在线观看不卡 | 成人免费无遮挡无码黄漫视频| 亚洲国产成人精品电影|