WebService是一種革命性的分布式計算技術,本質上就是網絡上可用的API,可以直接在網絡環境調用的方法。
WebService常用的架構有axis、xfire、cxf等。
WebService釋出後,其服務是封裝在一個wsdl(Web Services Description Language,Web服務描述語言)檔案中,用戶端發請求主要是向釋出好的wsdl位址以SOAP方式發請求,調用過程如下:
Ø 服務端:
n 生成服務描述檔案,以供用戶端擷取。
n 接收用戶端發來的SOAP請求消息,解析其中的方法調用和參數格式。
n 根據wsdl和wsml的描述,調用相應的COM對象來完成指定功能,并把傳回值放入SOAP回應消息傳回給使用者。
Ø 用戶端:
n 取得服務端的服務描述檔案,解析該檔案進而獲得服務端的服務資訊以及調用方式。
n 指定調用方法和參數,生成恰當的SOAP請求消息,發往服務端。
n 等待服務端傳回的SOAP回應消息,解析得到傳回值。
WebService的測試主要圍繞功能測試、性能測試和安全性測試展開,下面主要描述WebService三大測試的要點。
測試目的:測試系統所實作WebService接口的功能。
進入條件:開發人員提供已實作功能的程式包,和待測試webservice的方法名、參數以及實作的功能描述。
測試要點:不同的參數組合,應按設計要求傳回相應的資訊。
測試目的:測試系統所實作WebService接口的性能。進入條件:WebService接口的功能測試已完畢。
測試要點:測試并發調用WebService接口,觀察其性能表現,主要是在不同的并發量、持續運作時間和資料庫不同容量下,事務的響應時間、總事務數、事務的成功率、點選率等,同時監控硬體資源的消耗情況。
測試目的:測試系統所實作WebService接口的安全性。
進入條件:WebService接口的功能測試已完畢。
測試要點:測試WebService接口的調用是否有使用者名、密碼驗證,惡意調用是否會導緻系統崩潰等。
目前掌握的測試工具soapUI可以進行WebService的功能測試,下面以測試存儲服務的PIXManager接口詳細介紹使用soapUI進行WebService功能測試的操作步驟。
1、單擊‘File’->‘ New soapUI Project’,如下圖:

2、在彈出的對話框中輸入待測試的ws資訊,然後點選 [OK] 到下一步
Project Name:PIXManager
Create Requests:選中
Create TestSuite:選中
Relative Paths:選中

3、儲存project

4、生成初始的測試用例
選擇One TestCase for each Operation:每個接口建立一個用例
選擇Create new empty requests:建立一個空的請求
Operations:選擇待測試的方法
選擇Generates a default LoadTest for each created TeseCase:每個用例生成一個負責測試(為後面性能測試做準備)

5、生成TestSuite

這裡可以根據習慣更改TestSuite的名稱,如TestSuite:PIXManager。
6、在soapUI的左側生成如下目錄

此時建立project已完成!
1、建立項目的時候我們選擇了Create sample requests for all operations,是以每個接口方法都會自動建立一個請求,如下圖:


3、在Form頁面輸入參數,單擊 按鈕執行,右側檢視結果。

根據回報的結果判斷請求是否發送成功。
輸入的xml内容如下:
<?xml version="1.0" encoding="GB2312"?> <V_PATIENTREGC99999999 xsi:noNamespaceSchemaLocation="PATIENTREGC99999999.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <MEDICALSERVICE_NO>01</MEDICALSERVICE_NO> <NAME>小花</NAME> <BIRTH_DATE>1988-02-01T00:00:00</BIRTH_DATE> <GENDER_CD>1</GENDER_CD> <GENDER_VALUE>男性</GENDER_VALUE> <MARITAL_ST_CD>10</MARITAL_ST_CD> <MARITAL_ST_VALUE>未婚</MARITAL_ST_VALUE> <ID_NO_CD>01</ID_NO_CD> <ID_NO_VALUE>居民身份證</ID_NO_VALUE> <ID_NO>12586</ID_NO> <MEDICARE_CD>01</MEDICARE_CD> <MEDICARE_VALUE>社會基本醫療保險</MEDICARE_VALUE> <MEDICAL_INSURANCE_NO>Y001</MEDICAL_INSURANCE_NO> <AR_CD>111</AR_CD> <AD_CD>01</AD_CD> <AD_VALUE>戶籍住址</AD_VALUE> <PROVINCE_NAME>上海</PROVINCE_NAME> <CITY_NAME>上海</CITY_NAME> <AREA_NAME>浦東區</AREA_NAME> <STREET_ID>霞飛路</STREET_ID> <VILLAGE_NAME>街</VILLAGE_NAME> <HOUSE_NO>門牌号</HOUSE_NO> <TEL_TYPE_CD>01</TEL_TYPE_CD> <TEL_TYPE_VALUE>本人電話</TEL_TYPE_VALUE> <TEL_NO>1232312</TEL_NO> <REGISTER_DATE>2010-09-27T14:31:00</REGISTER_DATE> <RECORDER_NAME>小芳</RECORDER_NAME> <REGISTER_PERSON_CODE>01</REGISTER_PERSON_CODE> <REGISTER_ORG_CODE>01</REGISTER_ORG_CODE> <REGISTER_ORG_NAME>中科</REGISTER_ORG_NAME> <SEND_TIME>2010-09-27T14:32:00</SEND_TIME> <SEND_ORG_CODE>798921772</SEND_ORG_CODE> <SEND_SYSTEM>222222222222</SEND_SYSTEM> </V_PATIENTREGC99999999>
目前掌握的是兩個測試工具soapUI和LoadRunner,其中soapUI可以進行WebService的功能和性能測試,而LoadRunner主要是性能測試。
下面分别介紹兩個工具進行WebService性能測試的步驟。
基于前面soapUI功能測試的步驟,若已成功,可将腳本參數化後用于性能測試,具體步驟如下:
1、右鍵單擊Test Steps,‘Add Step’->‘DataGen’,如下圖:

2、輸入步驟名稱

3、設定生成方法


2) 定義名稱和類型

Name:自定義,如MEDICALSERVICE_NO
Type:選擇‘Number’型,
3) 設定為‘Randomize instead of step’

打開待參數化的請求,找到需參數化的内容,選中并右鍵單擊,如下圖:。

選擇‘Get Data’->‘Step 1:[DataGen]’->‘property [MEDICALSERVICE_NO]’
原來的資料被替換為:${DataGen#MEDICALSERVICE_NO}
1、打開‘TestSuite:PIXManager’->‘registerPatientInterface’->‘Load Tests’->‘registerPatientInterface’

2、設定并發線程,單擊 執行測試

1.選擇協定

2、導入wsdl




3、Add Service Call


設定好後生成如下腳本:
web_service_call( "StepName=registerPatientInterface_101",
"SOAPMethod=PIXManager_Service|PIXManager_ServicePort|registerPatientInterface",
"ResponseParam=response",
"Service=PIXManager_Service",
"ExpectedResponse=SoapResult",
"Snapshot=t1294907356.inf",
BEGIN_ARGUMENTS,
"msgID=",
"sendMsgOrgID=",
"sendMsgPosID=",
"eventDateTime=",
"eventDateTimeSpecified=",
"xml=",
END_ARGUMENTS,
BEGIN_RESULT,
"return=Param_return",
END_RESULT,
LAST);
4、輸入參數
1)輸入msgID、sendMsgOrgID、sendMsgPosID、eventDateTime、eventDateTimeSpecified;
"msgID=11111",
"sendMsgOrgID=111111",
"sendMsgPosID=111111",
"eventDateTime=2011-01-12 10:10:10",
"eventDateTimeSpecified=true",
2)輸入Xml;
"xml=<?xml version="1.0" encoding="GB2312"?> "
"<V_PATIENTREGC99999999 xsi:noNamespaceSchemaLocation="PATIENTREGC99999999.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">"
" <MEDICALSERVICE_NO>01</MEDICALSERVICE_NO>"
" <NAME>小花</NAME>"
" <BIRTH_DATE>1988-02-01T00:00:00</BIRTH_DATE>"
" <GENDER_CD>1</GENDER_CD>"
" <GENDER_VALUE>男性</GENDER_VALUE>"
" <MARITAL_ST_CD>10</MARITAL_ST_CD>"
" <MARITAL_ST_VALUE>未婚</MARITAL_ST_VALUE>"
" <ID_NO_CD>01</ID_NO_CD>"
" <ID_NO_VALUE>居民身份證</ID_NO_VALUE>"
" <ID_NO>13504568756</ID_NO>"
" <MEDICARE_CD>01</MEDICARE_CD>"
" <MEDICARE_VALUE>社會基本醫療保險</MEDICARE_VALUE>"
" <MEDICAL_INSURANCE_NO>Y001</MEDICAL_INSURANCE_NO>"
" <AR_CD>111</AR_CD>"
" <AD_CD>01</AD_CD>"
" <AD_VALUE>戶籍住址</AD_VALUE>"
" <PROVINCE_NAME>上海</PROVINCE_NAME>"
" <CITY_NAME>上海</CITY_NAME>"
" <AREA_NAME>浦東區</AREA_NAME>"
" <STREET_ID>霞飛路</STREET_ID>"
" <VILLAGE_NAME>街</VILLAGE_NAME>"
" <HOUSE_NO>門牌号</HOUSE_NO>"
" <TEL_TYPE_CD>01</TEL_TYPE_CD>"
" <TEL_TYPE_VALUE>本人電話</TEL_TYPE_VALUE>"
" <TEL_NO>1232312</TEL_NO>"
" <REGISTER_DATE>2010-09-27T14:31:00</REGISTER_DATE>"
" <RECORDER_NAME>小芳</RECORDER_NAME>"
" <REGISTER_PERSON_CODE>01</REGISTER_PERSON_CODE>"
" <REGISTER_ORG_CODE>01</REGISTER_ORG_CODE>"
" <REGISTER_ORG_NAME>中科</REGISTER_ORG_NAME>"
" <SEND_TIME>2010-09-27T14:32:00</SEND_TIME>"
" <SEND_ORG_CODE>798921772</SEND_ORG_CODE>"
" <SEND_SYSTEM>222222222222</SEND_SYSTEM>"
" </V_PATIENTREGC99999999>",
5、腳本增強
1)參數化;




2)增加事務并列印傳回結果;
lr_start_transaction("registerPatientInterface");
if (strstr(lr_eval_string("{Param_return}"),"C99999999$")==NULL) {
if (strstr(lr_eval_string("{Param_return}"),"empty!")==NULL) {
lr_end_transaction("registerPatientInterface", LR_STOP);
lr_output_message(lr_eval_string("出錯了!傳回的資訊如下:{Param_return}"));
}
else{
lr_end_transaction("registerPatientInterface", LR_FAIL);
lr_output_message(lr_eval_string("請求成功,儲存失敗!傳回的資訊如下:{Param_return}"));
}
else{
lr_end_transaction("registerPatientInterface", LR_PASS);
lr_output_message(lr_eval_string("請求成功,儲存成功!傳回的資訊如下:{Param_return}"));
3)調試;
在run-time settings中設定增強日志類型,以便看到更詳細的資訊。

調試完成後調整為:Send messages only when an error occurs
4)去掉預設的事務劃分;

1、腳本調試成功後,點選‘Tools’->‘Create Controller Scenario’,如下圖:

2、設定虛拟使用者數,如下圖:

3、調整虛拟使用者的增長、下降方式

暫無
技術改變世界!
--狂詩絕劍