版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、STAX腳本編寫1. STAX 介紹STAF(Software Test Automation Framework是開源、跨平臺、支持多語言并且基于可重用的組件 來構建的自動化測試框架。它為自動化測試建立了基礎,并且提供了一種可插拔的機制支持不同的 語言平臺。STAF采用點對點的實現(xiàn)機制,被用來減輕自動化測試的工作負擔,加快自動化測試的進 程。在STAF環(huán)境中,所有的機器都是對等的,沒有客戶端和服務區(qū)的區(qū)分。STAX(Software Test Automation execution Engire是基于 STAF 的執(zhí)行引擎。它在 STAF基礎上, 幫助用戶實現(xiàn)測試用例的分發(fā)、部署、執(zhí)行以及
2、結構分析oSTAX使用了三種技術:STAF、XML和 Python。簡單來說,STAX在STAF之上提供了一些接口,方便用戶來操縱STAF進行自動化測試的 實現(xiàn)。STAF 和 STAX 的官方網(wǎng)站是: HYPERLINK /%e3%80%82 /。2. XML 簡單教程XML 是英文 Extensible markup language 的縮寫,中文意思是“可擴展標記語言”。 XML 的主要 功能是幫助系統(tǒng)信息通過互聯(lián)網(wǎng)共享結構化的數(shù)據(jù)。 XML 不是一個軟件,也不是編程語言, XML 只是一個標記語言的標準。用XML標準編寫的文件,我們稱為XML文件。下面是一個簡單的XML文件。books
3、ISBN =9787544238212The book thiefprice25/pricequantity10/quantity編寫 XML 必須遵循一些簡單的語法規(guī)則:(1)、每個開始標記必須有結束標記(2)、每個 XML 文檔只能有一個根元素(3)、所有 XML 元素必須正確嵌套(4)、屬性值必須加引號STAX腳本采用基于XML的腳本語言進行編寫,這是專門為STAX測試設計的一種語言。在STAX 腳本中,根元素是vstax。一個STAX腳本的基本格式是這樣的:v?xml version=1.0 encoding=UTF-8 standalone=no?vstaxv/stax腳本的頭兩行是
4、固定的,主要指名我們采用的 XML 版本和編碼規(guī)則,我們不進行詳細講解。 我們需要將自己的代碼寫在vstax 和v/stax 之間。XML 的官方網(wǎng)站是 。參考文獻 1 是 XML 的簡明教程。3. Python 簡單教程Python是一種腳本語言,STAX利用Python定義變量和表達式。變量命名規(guī)則:、變量由字母、數(shù)字和下劃線組成,第一個字符必須是字母或者下劃線。、變量區(qū)分大小寫。、Python中的關鍵字不能用作STAX的變量名、STAX的保留字也不能用作變量名oSTAX的保留字包括:RC、以”STAF開頭的單詞、以”STAX” 開頭的單詞。vscripttestName = CoolTe
5、stlv/scriptvscripttestName = CoolTest1v/script這兩條語句作用相同,都是將字符串CoolTest1賦值給變量testName。testName = CoolTest1v/script這條語句的作用是將變量CoolTest1的值賦給變量testName。如果變量CoolTest1在前面沒有定義, 腳本出錯。vtestcase name=Test1這條語句的作用是將字符串Test1賦值給變量name。注意這里是雙引號里面包含單引號。 :表示單引號“:表示雙引號:表示雙引號嵌套單引號vtestcase name=testName這條語句的作用是將變量tes
6、tName的值賦給變量name。由于XML中屬性值必須用引號引起來,因 此這里的testName不是字符串,而是變量。vscripttestName = CoolTestlv/script這樣, name 的值是字符串 CoolTestl。testName = “TestiMachineName = “l(fā)ocaltestcase name=%s Part A % testName我們可以用引用一個變量的值。上面這段腳本相當于vtestcase name=Testl part Atestcase name=Testl part A on machine localPython 的官方網(wǎng)站是 HY
7、PERLINK /%e3%80%82 /。參考文件 2 是 Python 的簡明教程。4. STAX 腳本教程有了前面的知識,我們來正式介紹stax腳本的編寫規(guī)則。一個stax腳本的基本模板是這樣的:!DOCTYPE stax SYSTEM “stax.dtdvdefaultcall function=FunctionA/vfunction name=FunctionAv/functionvfunction name=FunctionBvfunction name=FunctionCv/functionv/stax腳本開頭兩行是關于腳本的說明,stax是腳本的根標簽,除去腳本說明以外的所有標簽
8、必須包 含在根標簽中。defaultcall是腳本執(zhí)行時首先執(zhí)行的語句。這個標簽有個屬性fUnction=”FunctionA”, 表示默認執(zhí)行函數(shù)FunctionA,相當于C語言中的main函數(shù)。是函數(shù)FunctionA的定義,標簽function表示一個函數(shù),這個元素有一個屬性name指名了函數(shù)的名 字。函數(shù)體定義在和中間。我們看到,這個腳本中一共定義了三個函數(shù)FunctionA、FunctionB、FunctionC。我們可以通過 FunctionA 去調(diào)用函數(shù) FunctionB 和 FunctionC。下面是一個更加詳細的例子。?xml version=1.0 encoding=UT
9、F-8 standalone=no?v!DOCTYPE stax SYSTEM stax.dtdvdefaultcall function=FunctionA/localvcommandlsv/command-l /localvservicemiscv/servicevrequestversionv/requestv/stafcmdv/functionvfunction name=FunctionCvlogThis function logs this messagev/logFunctionA中包含一個process元素0process代表一個STAF進程,這個進程調(diào)用STAF PROCES
10、S 服務在指定的機器上執(zhí)行指定的命令。因此,F(xiàn)unctionA的作用是在本地執(zhí)行命令”ls -1 /”。FunctionB 中包含一個元素stafcmd。stafcmd表示要請用一個服務。因此,F(xiàn)unctionB相當于命令”staf local misc version”。Function包含一個元素log,產(chǎn)生日志信息。python 代碼vscripA 標簽說明:stax腳本中,標簽script中的語句是Python語句,我們可以在這里定義XML文件解析和執(zhí)行 時用到的一些變量。我們還可以在這里加載python模塊,執(zhí)行python函數(shù)。vstax中包含的vscript 在文件執(zhí)行前被初始化
11、,vstax中所有函數(shù)都可以用vscript中定義的變量,這些變量相當于其他語 言中的全局函數(shù)。其他標簽中包含的vscript 中定義的變量只能在特定范圍內(nèi)有效,相當于其他函數(shù) 中的局部變量。例子:vscripttestName = CoolTest1v/script這條語句的作用是將字符串CoolTestl賦給變量testName。vscriptmachName = STAFResultv/script這條語句的作用是將變量STARTResult的值賦給變量machName。vscriptfrom random import randomr = random。這條語句的作用是加載random
12、模塊,然后產(chǎn)生0-1之間的隨機數(shù)。服務調(diào)用vprocess 標簽作用:為了編寫STAX腳本方便,STAX定義了 process標簽用來調(diào)用STAF中的進程(process)服 務。vprocess標簽會向process服務提交start需求,然后等待process執(zhí)行。返回值: process 服務調(diào)用結束后會產(chǎn)生以下返回值。返回值說明RC本次執(zhí)行的錯誤碼,0表示正常,非0值表示執(zhí)行出錯。STAFResult本次執(zhí)行的錯誤信息,成功為None,不成功STAFResult中包含具體出錯信息。STAXResult本次執(zhí)行的返回信息,參見下面的例子。子標簽: process 包含以下子標簽子標簽名稱
13、屬性說明locationrequiredprocess執(zhí)行的機器。local表示本機2表示在IP地 址為2的機器上執(zhí)行。commandrequired執(zhí)行的命令parmsoptional執(zhí)行命令需要的參數(shù),其他參數(shù)不再介紹。returnstdoutoptional標準輸出例子:vprocess name=TestProcessvlocationlocalv/locationcommandls/commandvparms-lv/parmsSTAXResultv/message上面這段程序中,我們執(zhí)行了一條指令ls -l /,STAXResult將包含根目錄下所有目錄的列表。vstafcmd標簽作
14、用:標簽stafcmd用于調(diào)用STAF的命令。返回值:調(diào)用結束后有以下返回值供我們使用返回值說明RC本次執(zhí)行的錯誤碼,0表示正常,非0值表示執(zhí)行出錯。STAFResult本次執(zhí)行的錯誤信息,成功為None,不成功STAFResult中包含具體出錯信息。STAXResult本次執(zhí)行的返回信息。子標簽:stafcmd包含以下子標簽:子標簽屬性說明locationrequiredSTAF命令在哪臺機器上執(zhí)行servicerequired接收request的服務的名稱requestrequired我們提交的需求例子:vstafcmdvlocation2v/locationvservicePINGv/s
15、ervicevrequestPINGv/requestSTAF %s PING PING request failed with RC: %s, Result: %s % (RC, STAFResult)上面是 stafcmd 的一個例子,這個例子的作用是向機器2 的 PING 服務提交 PING 需 求,判斷機器2的STAF是否正常運行。當命令執(zhí)行結束后,if標簽檢測返回值,如果返 回值不是0表明192。168.0.42上STAF運行不正常,錯誤信息寫入日志中。vlocati on loca lprocessv/servicestart comma nd Is parms -l wait 標
16、簽作用:parallel標簽可以包含子標簽,這些子標簽將并行執(zhí)行。當所有的子標簽執(zhí)行結束后parallel 標簽執(zhí)行結束。例子:vstafcmdv/stafcmd在這個例子中,stafcmd、process、call三個操作同時執(zhí)行。vparalleliterate 標簽作用: paralleliterate 標簽是并行執(zhí)行的另一種方法。在使用 paralleliterate 前需要定義一個列表, paralleliterate 標簽中只包含一個執(zhí)行子標簽,列表中的每一個元素都要執(zhí)行子標簽中指定的任務, 而且是并行執(zhí)行的。當列表中所有的元素任務執(zhí)行完畢時, paralleliterate 結束
17、。屬性: paralleliterate 標簽含有以下幾個屬性:屬性說明var列表中的兀素in我們定義好的列表,列表中的兀素將進行并行操作例子:scrip tmachineLis t=2,3,4/scrip t vparalleliterate var=machineName in=machineListvstafcmdlocalv/locationvservicePINGv/servicePING MACHINE %s % machineName v/stafcmdv/paralleliterate在這個例子中,我們將會從本機同時ping 42、43、44三臺機器。函數(shù)創(chuàng)建和調(diào)用這一節(jié)中,我
18、們來談談STAX中如何創(chuàng)建函數(shù),如何調(diào)用函數(shù)。4.4.1vfunction 標簽作用:我們采用標簽創(chuàng)建函數(shù)。屬性:function有一個屬性name指名這個function的名字。屬性說明name函數(shù)的名字例子:vfunction name=FunctionA 標簽作用:我們用建帶有參數(shù)的函數(shù)。我們在4.4.1中創(chuàng)建的函數(shù)沒有參數(shù),若想 創(chuàng)建帶參數(shù)的函數(shù),需要在標簽中使用標簽。例子:vfunction-required-arg name=parms/vfunction-optional-arg name=machine default=local/vfunction-optional-arg
19、name=command default=ls/v/function我們將所有的參數(shù)放在標簽中,變量分為兩種類型: vfunction-required-arg:這種變量在函數(shù)調(diào)用時必須傳遞值。vfunction-optional-arg:這種變量有默認值,函數(shù)調(diào)用時可以傳值,可以不傳值。如果不傳遞值就使 用默認值。 標簽作用:vfunction-list-args標簽和標簽作用類似,也是用來創(chuàng)建帶有參數(shù)的函數(shù)。 這兩個標簽的主要區(qū)別時函數(shù)調(diào)用時參數(shù)的形式有差異。例子:vfUnction name=FunctionAvfunction-list-argsvfunction-required-a
20、rg name=parms/vfunction-optional-arg name=machine default=local/vfunction-optional-arg name=command default=ls/v/function-list-argsvcall 標簽作用:我們用vcall標簽調(diào)用前面定義的函數(shù)。例子:調(diào)用不帶參數(shù)的函數(shù)vfUnction name=FunctionAvfUnction name=FunctionBvcall fUnction=FunctionA/調(diào)用vfunction-map-args標簽定義的帶參數(shù)的函數(shù)vfUnction name=Functio
21、nBvcall function=FunctionAparms:aaa,machine:97v/callv/function調(diào)用標簽定義的才參數(shù)的函數(shù),我們需要將參數(shù)寫成字典的形式。鍵值就是 函數(shù)定義時的參數(shù)名稱。我們傳遞給parms的值是字符串a(chǎn)aa,我們傳遞給machine的值是字符串 2,參數(shù) command 沒有傳遞值就采用默認值 ls。調(diào)用vfunction-list-args標簽定義的帶參數(shù)的函數(shù)vfUnction name=FunctionBvcall function=FunctionA,aaa, 2v/call我們按照變量定義的順序進行賦值,第一個值aaa賦給第一個變量par
22、ms,第二個值賦給第二個 變量machine,第三個變量采用默認值ls。vcall-with-map標簽作用:vcall-with-map標簽是調(diào)用標簽定義的帶參函數(shù)的另一種方式。作用與采 用vcall 標簽調(diào)用vfunction-map-args標簽定義的帶參函數(shù)一樣。例子:vfUnction name=FunctionBvcall-with-map function=FunctionAvcall-map-arg name=parmsaaav/call-map-argvcall-map-arg name=machine2v/call-map-argv/call-with-mapv/funct
23、ionname屬性對應函數(shù)定義時指定的參數(shù)名稱,vcall-map-arg與v/call-map-arg中間的值就是參數(shù) 值。vdefaulteall 標簽作用:這個標簽指名腳本執(zhí)行時默認調(diào)用的函數(shù)。例子:vdefaultcall function=main/vfUnction name=mainv/function腳本啟動時默認調(diào)用main函數(shù)。vreturn標簽作用:我們可以用return標簽指定函數(shù)返回值。函數(shù)執(zhí)行到return語句就返回主調(diào)函數(shù),不再向下 執(zhí)行。如果函數(shù)中沒有return語句,那么執(zhí)行完所有的函數(shù)語句返回主調(diào)函數(shù)。在主調(diào)函數(shù)中,我 們可以用變量STAXResult獲取函
24、數(shù)返回值。這個變量可以表示任何類型,如整型、字符串、列表等 等。例子:v?xml version=1.0 encoding=UTF-8 standalone=no? v!DOCTYPE stax SYSTEM stax.dtd vdefaultcall function=main/vfunction name=FunctionA vfunction-list-argsvfunction-required-arg name=x/vfunction-required-arg name=y/v/function-list-argsvsequencevscripty.append(test3)v/sc
25、riptvreturnx,yv/returnv/sequencev/functionvfunction name=mainvsequencevscriptA = 1B =testl, test2vcall function=FunctionAA,Bv/callA, B = STAXResultA = %s, B = %s % (A, B) 這是一個完整的腳本,這個腳本中我們定義了兩個函數(shù) FunctionA 和 main,F(xiàn)unctionA 帶有兩個 參數(shù)x和y,在函數(shù)FunctionA內(nèi)部,我們讓x的值加2, y增加一個元素test3,然后返回x和y的 值。main是主調(diào)函數(shù),定義了兩個變量
26、A=1 B=testl,test2,然后調(diào)用函數(shù)FunctionA,調(diào)用結束 后查看返回值,最終結果應該是:A = 3, B = testl,test2,test3。vimport標簽作用:import標簽用于加載其他STAX腳本中定義的函數(shù),這個標簽有下面兩個屬性屬性說明machineSTAX 腳本在哪臺 機器上 machine=”2”表示STAX 腳本在2這臺機器上。file我們要引入的腳本file=”/usr/local/staf/samples/test1.xml表示我們要引入的 是testl.xml這個STAX腳本。例子:文件 test1.xml 中定義了如下函數(shù)vfunction
27、name=FunctionA vfunction-list-argsvfunction-required-arg name=x/vfunction-required-arg name=y/v/function-list-argsx = x + 2y.append(test3)vreturnx,yv/return我們在文件 test2.xml 中想調(diào)用函數(shù) FunctionAvfUnction name=mainA = 1B =testl, test2vimport machine=local file=/usr/local/staf/samples/testl.xmlvcall functio
28、n=FunctionAA,Bv/callA, B = STAXResultA = %s, B = %s % (A, B) 4.5流程控制STAX腳本中也有if、loop等標簽控制語句流程。vloop 標簽作用:vloop標簽表示語句循環(huán),被loop包含的語句將執(zhí)行若干次。屬性:vloop標簽有幾個屬性。屬性說明var循環(huán)過程中的變量from循環(huán)的起點to循環(huán)的終點Vloop var=”i” from=”0” to=”5”相當于 C 語言中的 for(i=0, iv=5, i+)。例子:vloop from=0 to=5vstafcmdvlocation2v/locationvservicePI
29、NGv/servicevrequestPING上面這段語句表示執(zhí)行6 次 PING 服務。viterate 標簽作用:這個標簽表示迭代,在迭代之前我們要先定義一個迭代的范圍machineList =2: 3: 4,。iterate會依次獲取列表中的每一個元 素執(zhí)行指定的操作。屬性:iterate標簽有三個屬性。屬性說明var表示正在迭代的變量in表示迭代范圍indexvar表示正在迭代的變量在迭代范圍中的編號例子:machineList = 2, 3, 4viterate var=machineName in=machineListvstafcmdlocationlocal/locationv
30、servicePINGv/servicevrequestPING MACHINE %s% machineNamev/request上面這段語句表示在本機依次PING 42、43、44三臺機器。 標簽作用:STAX中有三個標簽用于選擇流程:vif、velseif、,相當于C語言中的if、elseif、else 語句。例子:vscriptfrom random import randomv/scriptr=random()*100v/scriptvif expr=r 75vcall function=Function1/velseif expr=r 50vcall function=Functio
31、n2/v/elseifvelseif expr=r 25vcall function=Function3/v/elseifvelsevcall function=Function4/v/elsev/iffrom random import random 表示加載 random 模塊中的 random 函數(shù),第一個 random 是 Python 中的一個模塊名稱,第二個 random 是 random 模塊中的一個函數(shù)的名稱。 random 函數(shù)生成 0-1 之間 的隨機數(shù)。我們看到,上面這段程序?qū)Σ煌那闆r進行了不同的處理。如果r大于75執(zhí)行函數(shù)functionl. 如果r在50-75之間執(zhí)
32、行函數(shù)Function2,如果r在25-50之間執(zhí)行函數(shù)function3,如果r在0-25之 間執(zhí)行函數(shù) Function4。4.6 執(zhí)行測試用例4.6.1 vtestcase標簽作用:vtestcase是用來執(zhí)行測試用例的一個標簽,STAX就是執(zhí)行自動化測試的,因此vtestcase標 簽是非常重要的一個標簽。vtestcase有一個屬性name用于表明測試用例的名稱。vtestcase要和 標簽聯(lián)合使用。vtcstatus是用于標明本次測試狀態(tài)的一個標簽。vtcstatus有一個屬性 result, vtcstatus result=pass/表示測試通過,vtcstatus resul
33、t=fail/表示測試失敗。例子:腳本 testcase.xml 定義如下:v?xml version=1.0 encoding=UTF-8 standalone=no?v!DOCTYPE stax SYSTEM stax.dtdvstaxvfunction name=testvsequencevscriptfrom random import randintr = randint(1, 100)v/scriptvstafcmdvlocationlocalv/location vserviceDELAYv/service vrequestDELAY 2000v/request v/stafcm
34、drv/returnv/sequencev/functionv/stax腳本 test.xml 定義如下:v?xml version=1.0 encoding=UTF-8 standalone=no?v!DOCTYPE stax SYSTEM stax.dtdvdefaultcall function=begin_tests/ImportMachine = localImportDirectory = STAF/Config/STAFRoot/services/stax/samplesvfunction name=begin_testsvcall function=test/vif expr=STAXResult & lt;= 50vtcstatus result=pass/velsevtcstatus result=fail/v/elsev/ifv/sequencev/testcas
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廚房衛(wèi)生工具管理規(guī)定(3篇)
- 船舶側向推進器課程設計
- 物聯(lián)網(wǎng)煙霧報警課程設計
- 生物數(shù)學的基礎課程設計
- 2024幼兒園安全生產(chǎn)月活動工作總結范文(31篇)
- 藝術家作品課程設計
- 航空公司服務員工作總結
- 語言培訓前臺工作總結
- 糧油調(diào)味品行業(yè)銷售工作總結
- 酒店管理崗位關鍵能力
- 4s店管理的年度工作總結
- 中醫(yī)護理查房脅痛好
- 新概念英語第一冊1-72課測試
- 類風濕關節(jié)炎課件
- 2022版《義務教育教學新課程標準》解讀課件
- 寫字樓項目風險評估報告
- 庫存周轉率與庫存周轉天數(shù)
- 福州市晉安區(qū)2023-2024學年八年級上學期期末數(shù)學檢測卷(含答案)
- 二級公立醫(yī)院績效考核三級手術目錄(2020版)
- 司美格魯肽學習課件
- Zippo-2023(中國)產(chǎn)品年冊
評論
0/150
提交評論