工具WinRunner 及Bochs
2006年以前,Mercury Interactive公司的WinRunner是一種企業級的功能測試工具,用于檢測應用程序是否能夠達到預期的功能及正常運行。通過自動錄制、檢測和回放用戶的應用操作,WinRunner能夠有效地幫助測試人員對復雜的企業級應用的不同發布版進行測試,提高測試人員的工作效率和質量,確保跨平臺的、復雜的企業級應用無故障發布及長期穩定運行。
http://www.cnblogs.com/nckiki/articles/242876.html
可以用WinRunner為所測試應用程序的GUI,功能和回歸測試創建自動化腳本。
主要包括如下6個階段:
1).????創建GUI Map文件:WinRunner可以通過它來識別被測試應用程序中的GUI對象。
2).????創建測試腳本:通過錄制,編程,或兩者的組合創建。在錄制測試腳本時,在你想檢查被測試應用程序響應的地方插入驗證點。
3).????調試腳本:用調試(Debug)的模式運行測試腳本以確保它們可以平穩地運行。還可以使用WinRunner提供的Step, Step Into, Step out功能來調試腳本。
4).????運行測試:用驗證(Verify)的模式運行測試腳本來測試你的應用程序。當WinRunner在運行中碰到驗證點時,它會將被測應用程序中的當前數據和以前捕捉的期望數據進行比較,如果發現了任何不匹配,WinRunner將會把目前的情況捕捉下來作為真實的結果。
5).????檢查結果:確定測試腳本的成功或是失敗。在每次測試腳本運行結束之后,WinRunner會將結果顯示在報告中。它描述了所有在運行中碰到的重要的事件,例如驗證點,錯誤信息,系統信息或是用戶信息。如果發現在運行中有任何不匹配的驗證點,你可以在測試結果窗口中查看期望的和實際的結果。
6).????提交缺陷:如果一個測試腳本是由于所測試應用程序中的缺陷而導致失敗的,你可以直接從測試結果窗口中提取缺陷的相關信息。
WinRunner利用GUI Map文件來識別應用程序中的對象。它將學習到的窗口或對象信息儲存在GUI Map文件中。當WinRunner運行測試腳本時,它利用GUI Map來定位對象。它從GUI Map文件中讀取對象的描述并且在被測應用程序中尋找具有相同屬性的對象。
在GUI Map文件中的每一個對象都有一個邏輯名稱(logical name)和一個物理描述(physical description)。對象的邏輯名稱是由其類決定的。在大多數情況下,我們可以將邏輯名稱看成是顯示在對象上的標簽。你可以修改已分配的邏輯名稱當它不是十分具有描述性或太長的時候。當對象的屬性發生改變時,你必須要修改其物理描述。
GUI Map文件的擴展名是".gui"。
GUI Map文件分為兩種類型:
·??????????????全局GUI Map文件:一個為整個應用程序使用的GUI Map文件
·??????????????每個測試腳本的GUI Map文件:在每個測試腳本創建之后,WinRunner會自動為其創建一個GUI Map文件。
我們可以通過工具菜單中GUI Map Editor來查看當前載入的GUI Map文件及其內容。GUI Map Editor?顯示多個已創建的GUI Map文件和認識到的帶有邏輯名和物理描述的窗口和對象。
在錄制腳本時,WinRunner會自已學習對象和窗口,并將它們儲存在臨時的GUI Map文件中。我們可以在General選項中指定是否需要每次都載入這種臨時GUI Map。
當我們載入一個GUI Map文件時,關于窗口和對象的信息連同其邏輯名稱和物理描述都載入到內存中。因此當WinRunner在一個特定的窗口上運行腳本時,它可以用這些在內存中的信息識別對象。
WinRunner的腳本語言是Mercury Interactive’s Test Script Language?(TSL),這是一種類C的腳本語言。你可以通過增加另外的TSL函數和編程元素(例如Windows API)或WinRunner的虛擬編程工具(函數生成器(Function Generator))來增強你錄制的腳本。
在WinRunner中,有兩種不同的錄制模式:
·??????????????環境判斷錄制(Context Sensitive recording):通過識別GUI對象錄制你在被測應用程序中執行的操作。
·??????????????模擬錄制(Analog recording):錄制鍵盤的輸入,鼠標的點擊,和鼠標指針在屏幕上精確的x,y軸
在WinRunner中,有三種不同的運行模式:
·??????????????驗證Verify:使用這種方式來檢查你的應用程序
·??????????????調試Debug:使用這種方式來幫助你識別測試腳本中的bug
·??????????????更新Update:使用這種方式來更新測試腳本的期望結果或創建一個新的期望結果文件夾
載入Add-Ins實際上是將在Add-In中的特殊的函數裝載到內存中。當創建測試腳本時,只有這些選中的Add-In中的函數會列在函數生成器中,在運行腳本時,只有那些在載入的Add-In中的函數可以被執行,否則WinRunner將會給出一個不能識別函數的錯誤信息。
驗證點可以把被測應用程序的當前行為和早前版本的行為進行比較。
在WinRunner中有4種驗證點:
·??????????????GUI checkpoints:驗證GUI對象的信息。例如,你可以檢查一個按鈕是否可用或查看在一個列表中哪一個選項被選中。
·??????????????Bitmap checkpoints:給窗口或所測試應用程序的部分做快照,并把它和早先版本中捕捉的圖像做比較。
·??????????????Text checkpoints?:在GUI對象或位圖中讀取文字,使你可以驗證它們的內容。
·??????????????Database checkpoints:基于你創建在數據庫的查詢,檢查一個結果集的內容和列、行的數量
Checklist文件包含了我們正在驗證的對象的屬性和相關信息?。gui*.chk文件包含了期望的結果,并儲存在exp文件夾中。?
同步點使你可以解決預期的在測試腳本和你應用程序之間的時間問題。例如,如果你創建一個打開數據庫應用程序的測試腳本,你可以增加一個同步點以讓測試腳本等待直到數據庫中的記錄載入到屏幕上。
對于模擬測試(Analog testing),你也可以使用一個同步點來確保WinRunner在一個指定的位置重新放置窗口。當你運行一個測試腳本時,鼠標指針沿著準確的坐標行進。重新放置窗口使鼠標指針接觸到窗口中正確的元素。
編譯模塊實際上也是一種腳本,只不過它包含了一個可以被其它的測試腳本頻繁地調用,用戶自定義函數集的庫文件。當你載入一個編譯模塊時,它的函數將自動的被編譯并保存在內存中。其它的測試腳本可以直接調用它們。
編譯模塊可以改進腳本的組織和性能。由于你在使用它們之前已經調試過編譯模塊,因此你的測試腳本只需要少量的錯誤檢查。另外,調用一個已經編譯的函數明顯地比解釋測試腳本中的函數快得多。
當編譯模塊用來儲存可重用的函數時,測試腳本包含了在WinRunner中的可執行文件。編譯模塊是不可執行的。
在保存為編譯模塊時,WinRunner會自動執行一次預編譯。
默認情況下,包含TSL代碼的模塊的屬性是“main”。主模塊可以在其他的模塊中被調用執行。除了當WinRunner識別到一個“call”語句時,主模塊會被動態地被編譯為機器代碼。例如:
call cso_init();
call( "C:\\MyAppFolder\\" & "app_init" );
編譯模塊被載入到內存中以便其他模塊引用。
reload ("C:\\MyAppFolder\\" & "flt_lib")?或load ("C:\\MyAppFolder\\" & "flt_lib");
當你測試你的應用程序時,你或許想檢查它如何執行有著大量數據集的相同操作。你可以用一個運行10次的循環來創建一個數據驅動測試:每次循環運行時,它由不同的數據集驅動。為了使WinRunner?能夠使用數據來驅動測試,你必須將數據連接到所要驅動的測試腳本。這就叫參數化(parameterizing)你的測試。數據存儲在一個數據表格(data table)中。你可以手工執行這些操作,或使用DataDriver Wizard來參數化你的測試腳本并儲存數據在數據表格中。
數據驅動測試的步驟如下:
·??????????????創建一測試腳本
·??????????????轉換為數據驅動的測試腳本并準備一個數據庫
·??????????????運行測試腳本
·??????????????分析測試結果
?
? 12.??無法識別GUI對象的原因
WinRunner會由于以下多種原因導致不能識別GUI對象。
·???????????????不是標準的Windows對象
·???????????????沒有安裝所需的Add-In
·???????????????如果所使用的瀏覽器和WinRunner的版本不兼容,GUI Map編輯器將不能認識在瀏覽器窗口中顯示的任何對象
。。。
? 12.??無法識別GUI對象的原因
WinRunner會由于以下多種原因導致不能識別GUI對象。
·???????????????不是標準的Windows對象
·???????????????沒有安裝所需的Add-In
·???????????????如果所使用的瀏覽器和WinRunner的版本不兼容,GUI Map編輯器將不能認識在瀏覽器窗口中顯示的任何對象
。。。
? 13.??啟動文件(start up file)
在General Options?->Environment-> Startup文本框中,選擇或輸入你希望作為啟動文件的?測試腳本
? 14.??輸入測試腳本的相關信息
在創建一個測試腳本之前,你可以在Test Properties-> General和?Description中輸入和腳本相關的信息,如被測功能的類型,測試腳本的詳細描述,引用的相關功能說明書文檔??
? 15.??如何處理定制對象(custom objects)?
定制對象是不屬于WinRunner所使用的標準類之一的任何GUI?對象。WinRunner學習此類的對象為generic "object"類。WinRunner利用obj_mouse_語句來記錄在定制對象的操作。
如果定制對象和一個標準的對象很相似,你可以映射它為標準類別之一。你也可以在環境判斷測試(Context Sensitive testing)時配置WinRunner用于識別定制對象的屬性。??
? 16.??什么是虛擬對象(virtual object)并且如何使用它們?
應用程序可能會含有一些外觀和行為和GUI對象相似的位圖。WinRunner利用win_mouse_click語句來記錄操作。通過定義一個位圖對象為虛擬對象,當你錄制并運行測試時,你可以教WinRunner將它象一個GUI對象一樣對待。
Bochs是一個x86硬件平臺的開源模擬器。它可以模擬各種硬件的配置。Bochs模擬的是整個PC平臺,包括I/O設備、內存和BIOS。更為有趣的是,甚至可以不使用PC硬件來運行Bochs。事實上,它可以在任何編譯運行Bochs的平臺上模擬x86硬件。通過改變配置,可以指定使用的CPU(386、486或者586),以及內存大小等。一句話,Bochs是電腦里的“PC”。根據需要,Bochs還可以模擬多臺PC,此外,它甚至還有自己的電源按鈕。
Bochs是一個開源的虛擬機。它可以實現vpc和vmware的大部分功能。你也可以像使用vmware一樣的在Bochs里面安裝操作系統。但是,由于它是全模擬的。所以,速度要遠遠慢于vmware.這樣看來Bochs好像沒有什么優勢.是這樣嗎?在應用方面的確如此。?
但是,在其他一個方面它是處于絕對優勢的。那就是它具有調試功能!這是一個讓人振奮的功能。這個功能在你調試操作系統或者其他一些在裸機上運行的程序時候,會讓你有一種在寫windows下運行的應用程序的感覺。有時候它是我們的救命稻草。沒了它,也能活,但是肯定要糟糕的多。好了我們開始切入正題。?
http://hi.baidu.com/ywg728/item/d29a7d1599634b701109b56f
一、 配置Bochs?
實際上配置Bochs是很簡單的,為什么很多人不會配置呢?我覺的就是因為他使用和配置方式和普通程序不一樣——配置文件。實際上配置文件是和ini文件、bat文件類似的。Bochs沒有給我們提供圖形界面的配置工具。這就需要我們自己來修改配置文件。?
簡單的配置就可以讓你的操作系統在Bochs里面跑起來。用Bochs跑完整的linux和windows是不現實的。實在是太慢了。一般我們也只能把他當成調試器來使用。現在,我們先看一下如何讓dos在他里面跑起來。如果你細心的話你會發現在Bochs文件夾里面有一個Bochsrc-sample.txt的文本文件。里面包含了所有了Bochs參數的信息。這個是官方的教程。可惜是英文的,而且我也沒有找到有中文的教程(不然也沒有我這篇文章)。在這里我們僅僅介紹最簡單的配置選項。好了,廢話就不多說了。我們現在就開始。?
我們以一個例子來說明,這個例子是我用來跑dos以及我自己的小操作系統的。下面就是我們要用到的最基本的選項:?
# 在一行的最前面加上“#”表示這一行是注釋行。?
# 內存,以MB為單位,對于dos來說最大可以訪問16MB?
# 的內存,所以我就給了他16MB,你可以根據自己的機器來調整?
megs: 16?
# 下面兩句一般是不可以改的,至于干什么用的就不用我說?
# 了。從他們的文件名就可以看出來。?
romimage: file=../BIOS-Bochs-latest, address=0xf0000?
vgaromimage: file=../VGABIOS-lgpl-latest?
# 這個還用說嗎?當然是軟驅了,我想我們寫操作系統肯定是先?
# 把操作系統放在軟盤(或映像)里面吧?在Bochs里面是可?
# 以使用任意大小的軟驅映像的。可以是1.44或2.88,我一般使?
# 用2.88。還有就是Bochs里面可以使用兩個軟驅。不過好像?
# 我們并不經常這樣做。?
floppya: 2_88=test.img, status=inserted?
#floppyb: 1_44=floppyb.img, status=inserted?
# 下面是硬盤,很簡單,還有就是Bochs也是可以支持多個硬?
# 盤的。那么,硬盤文件是怎么生成的呢?我們可以發現硬盤是?
# img格式的。你注意沒有在Bochs文件夾里有一個工具叫?
# bximage.exe,我想你應該猜出來了。他就是用來生成這個硬盤?
# 文件的工具。我在這兒還想說的是硬盤分三種格式的,最好選?
#用growing類型。這種有一個好處就是節省硬盤空間,不過使用?
#這種類型的硬盤還需要在下面加上mode = growing這個選項。?
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14?
ata0-master: type=disk, path="dos.img", cylinders=306, heads=4, spt=17?
# 下面這個就是光驅,沒什么好說的。如果你想使用物理光驅,?
# 只要讓path=E:(我們假設E盤是光驅)?
ata0-slave: type=cdrom, path="dos.iso", status=inserted?
# 這個是啟動設備,可以使用cdrom(光驅)、c(硬盤)或floppy(軟?
# 驅)。?
#boot: cdrom?
boot: c?
#boot: floppy?
# 這一句可以不要,他只是指定用來保存日志的文件。如果不指定的?
# 話他就會輸出到命令控制臺上。?
log: Bochsout.txt?
# 這一句是設置在開機時是否激活鼠標,Bochs對于鼠標的控制不是# 很好。建議如果不是特別需要的話不要激活他。在運行期間也可以點窗口右上角的鼠標圖標來激活他。?
mouse: enabled=0?
以上這些設置就可以讓你的DOS或自己的小操作系統在Bochs里面跑起來了。至于其他的一些高級支持,你可以查看Bochsrc-sample.txt里面的說明。不要害怕他,其實很簡單。關鍵是拋棄恐懼。?
二、 啟動Bochs?
配置文件已經寫好了,硬盤文件等也都已經弄好了。那么我們如何來啟動Bochs呢?很簡單,你右擊一下上面寫的那個配置文件(例如myos.bxrc,注意:擴展名要是.bxrc。)選擇“運行”或雙擊即可。不過我一般都不這樣做,我一般是寫一個批處理文件。?
很簡單,如下所示:?
cd "d:\Bochs-2.2.1\dos"?
..\Bochs.exe -q -f Bochsrc.bxrc?
這樣做的好處就是無論這個啟動腳本放在哪兒都是可以使用的。那么,我們如何進入調試狀態呢?下面我們就來討論這個問題。?
三、 調試功能?
新建一個批處理文件,寫入一下內容:?
cd "d:\Bochs-2.2.1\dos"?
..\Bochsdbg.exe -q -f Bochsrc.bxrc?
運行這個批處理文件,你就可以進入調試狀態了。不過你會發現,程序卡住了。沒有想普通運行狀態一樣進入你的dos操作系統。為什么?因為調試在等待你的命令。你只有給他一個命令他才會繼續。我們輸入“c”,然后回車。是不是dos已經可是運行了??
如果沒有運行說明你輸入的窗口不對,你不會把c輸入到那個沒有光標的窗口了吧?如果真是那樣我真是服了你了。真的!但是,dos運行起來了,如何在返回調試狀態?很簡單,按ctrl+c。什么你正在運行的程序被結束了?誰讓你在操作系統窗口中按了,我是說在調試窗口按。至于哪個是調試窗口,哪個是操作系統窗口,我就不說了。如果你不知道你就干脆別使用Bochs了,也不要寫什么程序了,更不要開發什么操作系統了。為什么?因為你不可能成功。從這兒就可以看出來。最好是找塊豆腐撞死,這樣你會很幸福的死去,不然你就會成為教育后代的典范——看到了嗎XXX是怎么死的,笨死的。呵呵!開個玩笑。你真要不知道?
千萬不要來找我,找我我也不告訴你。不好意思,我也不知道。那么,在調試狀態下我們可以干哪些事呢?你用過debug嗎?它能做的Bochs都能做,它不能做的Bochs也可以做。下面就是一些常用的調試命令。?
help?
我最想告訴大家的是這個指令,因為他可以告訴我們一切。古語說:“授之以魚,不若授之以漁”。我覺的很有道理。但是,有些人就是不想學這種一勞永逸的方法。所以,我還要繼續寫下去。?
輸入help,回車。你會得到以下信息:?
help - show list of debugger commands?
help 'command'- show short command description?
-*- Debugger control -*-?
help, q|quit|exit, set, instrument, show, trace-on, trace-off,?
record, playback, load-symbols, slist?
-*- Execution control -*-?
c|cont, s|step|stepi, p|n|next, modebp?
-*- Breakpoint management -*-?
vb|vbreak, lb|lbreak, pb|pbreak|b|break, sb, sba, blist,?
bpe, bpd, d|del|delete?
-*- CPU and memory contents -*-?
x, xp, u|disas|disassemble, r|reg|registers, setpmem, crc, info, dump_cpu,?
set_cpu, ptime, print-stack, watch, unwatch, ?|calc?
需不需要我翻譯一下前兩句?那好吧。?
help - 現實調試命令列表?
help '命令' - 顯示某條命令的詳細用法。?
命令分為哪些?很明顯,四類:調試控制,運行控制,斷點管理,CPU和內存控制。我不想在這兒一一介紹了。沒有必要,我只介紹一下最常用的就可以了。?
c:繼續,前面我們已經用過了。?
s:單步執行。他還有一個擴展用法。?
s n :執行n步。?
b 0x7c00:在內存0x7c00處設置一個斷點.當程序執行到0x7c00處就自動進入到調試狀態.后面的這個數指的是內存的線性地址?
。也可以使用10進制的數,但是好像沒有人會這樣做。?
x /20 0x7c00: 以16進制的形式從內存的0x7c00開始顯示20個字的數據。這個是很常用的命令,但是需要注意的是他的顯示順序和16進制編輯器中的顯示順序有一點小的區別。他的顯示是以字為單位的,而且在字中是從低到高顯示的.不過也沒有什么大不了的。你只要稍微注意一下就可以了。?
dump_cpu:這個是我最長用的三個指令之一。他的功能是顯示現在的寄存器的狀態,詳細內容類似于:?
eax:0x00000000, ebx:0x00000000, ecx:0x00000000, edx:0x00000683?
ebp:0x00000000, esp:0x00000000, esi:0x00000000, edi:0x00000000?
eip:0x0000fff0, eflags:0x00000002, inhibit_mask:0?
cs:s=0xf000, dl=0x0000ffff, dh=0xff009bff, valid=1?
ss:s=0x0000, dl=0x0000ffff, dh=0x00009300, valid=1?
ds:s=0x0000, dl=0x0000ffff, dh=0x00009300, valid=1?
es:s=0x0000, dl=0x0000ffff, dh=0x00009300, valid=1?
fs:s=0x0000, dl=0x0000ffff, dh=0x00009300, valid=1?
gs:s=0x0000, dl=0x0000ffff, dh=0x00009300, valid=1?
ldtr:s=0x0000, dl=0x00000000, dh=0x00000000, valid=0?
tr:s=0x0000, dl=0x00000000, dh=0x00000000, valid=0?
gdtr:base=0x00000000, limit=0xffff?
idtr:base=0x00000000, limit=0xffff?
dr0:0x00000000, dr1:0x00000000, dr2:0x00000000?
dr3:0x00000000, dr6:0xffff0ff0, dr7:0x00000400?
cr0:0x00000010, cr1:0x00000000, cr2:0x00000000?
cr3:0x00000000, cr4:0x00000000?
u /20 0x7c00 :反匯編內存0x7c00處,反匯編的長度是20。你想不想知道dos的引導程序是什么樣子的?執行一下這個命令就可以了。你還可以使用這樣的命令 u /20 cs:0x120a,至于什么意思,我也不說了。?
現在,我們已經介紹了6條命令了。夠了。對于日常應用已經完全夠用了。如果你想了解其他命令的用法只要執行一下help “命令名”就可以了(注意,命令上要帶有引號)。好了。現在已經把Bochs的基本功能介紹完了。你是不是感覺Bochs很簡單?對于簡單的應用來說,確實如此。但是,想讓他支持一些高級功能就有點麻煩了。畢竟它是全模擬的虛擬機,所以在有些方面實現起來并不容易。但是,向網絡之類的功能還是可以支持的。你只要看一下Bochsrc-sample.txt就知道了。我在這兒就不說了。我還要說的是Bochs不僅僅可以調試操作系統,還可以調試dos下的程序。我們知道dos沒有多少好的調試器。那么我們完全可以使用Bochs來調試。你知道在程序的開頭輸出一下程序的段地址和偏移地址,然后暫定一下,在虛擬機里面設置一下斷點就可以了。我一般都是在在程序里面潛入一句匯編:?
jmp $?
這樣在程序死循環的時候在調試窗口按下ctrl+c就可以看到他的段地址和偏移地址了。然后,在去掉這一句,設置一下斷點,運行這個程序。是不是在指定位置中斷了?
總結
以上是生活随笔為你收集整理的工具WinRunner 及Bochs的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 光遇测试服怎么显示服务器错误,光遇服务器
- 下一篇: 短信java_Java发送手机短信(附代