WebService測試方案
1.WebService簡介
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回應消息,解析得到返回值。
2.WebService測試說明
WebService的測試主要圍繞功能測試、性能測試和安全性測試展開,下面主要描述WebService三大測試的要點。
2.1 WebService功能測試
測試目的:測試系統所實現WebService接口的功能。
進入條件:開發人員提供已實現功能的程序包,和待測試webservice的方法名、參數以及實現的功能描述。
測試要點:不同的參數組合,應按設計要求返回相應的信息。
2.2 WebService性能測試
測試目的:測試系統所實現WebService接口的性能。進入條件:WebService接口的功能測試已完畢。
測試要點:測試并發調用WebService接口,觀察其性能表現,主要是在不同的并發量、持續運行時間和數據庫不同容量下,事務的響應時間、總事務數、事務的成功率、點擊率等,同時監控硬件資源的消耗情況。
2.3 WebService安全性測試
測試目的:測試系統所實現WebService接口的安全性。
進入條件:WebService接口的功能測試已完畢。
測試要點:測試WebService接口的調用是否有用戶名、密碼驗證,惡意調用是否會導致系統崩潰等。
3.WebService功能測試
目前掌握的測試工具soapUI可以進行WebService的功能測試,下面以測試存儲服務的PIXManager接口詳細介紹使用soapUI進行WebService功能測試的操作步驟。
3.1 新建工程
1、單擊‘File’->‘ New soapUI Project’,如下圖:
2、在彈出的對話框中輸入待測試的ws信息,然后點擊 [OK] 到下一步
Project Name:PIXManager
Initial WSDL/WADL:http://192.168.2.51:8181/WEB-INF/services/PIXManager?wsdl
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已完成!
3.2 發送請求
1、創建項目的時候我們選擇了Create sample requests for all operations,所以每個接口方法都會自動創建一個請求,如下圖:
2、雙擊它就可以打開編輯面板,左邊是請求內容,右邊是響應內容。
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> |
4.WebService性能測試
目前掌握的是兩個測試工具soapUI和LoadRunner,其中soapUI可以進行WebService的功能和性能測試,而LoadRunner主要是性能測試。
下面分別介紹兩個工具進行WebService性能測試的步驟。
4.1 采用soapUI測試步驟
基于前面soapUI功能測試的步驟,若已成功,可將腳本參數化后用于性能測試,具體步驟如下:
4.1.1 數據生成器
1、右鍵單擊Test Steps,‘Add Step’->‘DataGen’,如下圖:
2、輸入步驟名稱
Type:選擇‘Number’型,
3) 設置為‘Randomize instead of step’

4.1.2 參數化
打開待參數化的請求,找到需參數化的內容,選中并右鍵單擊,如下圖:。
選擇‘Get Data’->‘Step 1:[DataGen]’->‘property [MEDICALSERVICE_NO]’
原來的數據被替換為:${DataGen#MEDICALSERVICE_NO}
4.1.3 場景執行和監控
1、打開‘TestSuite:PIXManager’->‘registerPatientInterface’->‘Load Tests’->‘registerPatientInterface’
2、設置并發線程,單擊 執行測試
4.1.4 結果分析
4.2 采用LoadRunner測試步驟
4.2.1 腳本準備
1.選擇協議
|
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)去掉默認的事務劃分;
4.2.2 場景執行和監控
1、腳本調試成功后,點擊‘Tools’->‘Create Controller Scenario’,如下圖:

4.2.3 結果分析
4.WebService安全性測試
暫無

浙公網安備 33010602011771號