web自動化測試-HTTP層面的Web Service自動化測試(3)
配置文件的內(nèi)容主要分為五個部分。A、D、E部分保存的是case無關(guān)的元數(shù)據(jù),B和C保存的是通用的header數(shù)據(jù)。A部分的數(shù)據(jù)有:整個web service的url前綴(圖中的“drapi.serviceUrl”),公用的soap header代號(圖中的“drapi.headersGroup”),所有service的代號(圖中的“drapi.servicesGroup”)。B和C部分是兩個公用的header。Normal和editor是他們的代號,在A中給出。Dr-api用到的header信息主要有username/password/token/target,都在這里給出。這些header會被每個case引用。D和E部分是兩個service。它們的代號在A中給出。每個service有三個字段:name表示service的名稱;url表示service的url后綴。數(shù)據(jù)文件夾里保存的是每個case的數(shù)據(jù)。數(shù)據(jù)文件夾可以再進(jìn)行分層:每個子目錄的名字就是上面提到的service的名字,那么該子目錄下所有case訪問的url都是這個service的url。每個case有XXX.input.xml、XXX.output.xml和XXX.properties三個文件表示,XXX表示case的名稱(為了應(yīng)用到ficus中,XXX最好不帶空格,否則會被ficus分成數(shù)組)。ficus數(shù)據(jù)驅(qū)動數(shù)據(jù)驅(qū)動使用ficus的data_driven關(guān)鍵字。關(guān)于這個關(guān)鍵字可以參考FICUS_DataDriven。 這個關(guān)鍵字需要兩個主要的輸入:csv文件,執(zhí)行單個case的關(guān)鍵字。Csv文件的每一行都表示一個case,data_driven會針對csv文件的每一行循環(huán)調(diào)用執(zhí)行單個case的關(guān)鍵字。我們需要對此編寫兩個關(guān)鍵字。第一個是讀取配置文件和數(shù)據(jù)文件夾生成csv文件。這個關(guān)鍵字首先會讀取公共的配置文件,得到service列表和輸入header列表;然后創(chuàng)建一個csv文件,包含這幾列:url,使用的Header名稱,case名稱,XXX.input.xml路徑,XXX.output.xml路徑和properties中的字段。讀取數(shù)據(jù)文件夾的每個數(shù)據(jù)文件,根據(jù)XXX.input.xml/XXX.output.xml/XXX.properties的組合來添加case到csv文件中。第二個關(guān)鍵字是用來執(zhí)行單個case。輸入就是csv文件的一行。首先根據(jù)使用的Header和XXX.input.xml拼裝成輸入的XML包,使用HTTP方式向Web Service Server發(fā)送請求,接收HTTP相應(yīng),解析出Header和Body,將Header中個字段和XXX.properties中的個字段做對比,將Body和XXX.output.xml做對比。ficus調(diào)用java關(guān)鍵字我們寫關(guān)鍵字使用的是Java,這里簡單提一下如何用ficus調(diào)用java關(guān)鍵字(感謝朱雷同學(xué)的幫助)。在最新版的ficus程序里,有一個Java目錄,有一個ficus-java-stub.bat文件。將自己寫的java關(guān)鍵字打成jar包,放到這個目錄,然后啟動這個文件就可以啟動ficus的Java樁。在寫case的時候,首先要添加library,為了使用Java樁,需要添加FicusProxy.JavaProxy | XXX | YYY | localhost | 2345。XXX和YYY都是java關(guān)鍵字所在的public類的類名,這些類的public方法名稱都是ficus關(guān)鍵字。它的原理是:FicusProxy.JavaProxy是一個python關(guān)鍵字,當(dāng)ficus遇到一個關(guān)鍵字的時候,會通過JavaProxy來查詢。JavaProxy會通過socket發(fā)送請求到Java樁。Java樁加載了java關(guān)鍵字所在的jar包,因而可以通過反射找到以關(guān)鍵字為名字的方法,從而實(shí)現(xiàn)調(diào)用。提示一點(diǎn),如果自定義的java關(guān)鍵字(都是java方法)所在的類比較多,那么最好把FicusProxy.py的BaseProxy的_receive函數(shù)的length默認(rèn)值改大一點(diǎn)兒,這個值表示ficus和Java樁通信每次發(fā)送的數(shù)據(jù)長度。如果太小,發(fā)送的數(shù)據(jù)會被截?cái)?,包含關(guān)鍵字名稱和參數(shù)那部分會被截?cái)?,就會出錯??偨Y(jié)以上便是我們在HTTP層面進(jìn)行Web Service測試的總結(jié)。這種方法由于需要手動構(gòu)造輸入和輸出SOAP包的body,因而在數(shù)據(jù)量較小并且不關(guān)注輸出包body的場景使用起來很方便。由于使用的數(shù)據(jù)驅(qū)動,也很方便應(yīng)對接口的變動。后續(xù)考慮遷移到eFicus中,實(shí)現(xiàn)case的管理和執(zhí)行一體化。
頁:
[1]