'腳本功能: webservice自動化測試,自動讀取測試用例,用例配置文件,最終將測試結果寫入用例中。
'******************************************************************webservice 測試開始*************************************************************
'請在使用前調試腳本確保腳本能正常工做
'請嚴格使用提供的模板編寫用例,不然腳本沒法正常工做
'***************************************************************** 收集相關信息************************************************************************
Dim SoapText,XmlHead,XmlLast,SoapQuest,MethodInput,XmlMethodString1,XmlMethodString2,WebserviceAddress,testResult,ResultPath
MethodInput=InputBox("方法名稱爲:")
Dim n,m,i,j,a,b,k,c 'n爲參數個數,也即用例須要取值的列數量,m爲用例數量即Excel行數,K爲方法數量(保留)
n=CInt(InputBox("參數個數爲:"))
k=CInt(inputbox("須要比較的返回值個?))
m=CInt(InputBox("Excel行數,即用例數:"))
WebserviceAddress=Inputbox("接口URL爲:")
TestPath=Inputbox("完整用例路徑:")
Dim ArrayInfo()
ReDim ArrayInfo(m,n)
'**************************************************************** 拼裝SOAP頭尾消息*****************************************************************
XmlHead="<?xml version=""1.0"" encoding=""utf-16""?>"&"<soap:Envelope xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">"&"<soap:Body>"
XmlLast="</soap:Body>"&"</soap:Envelope>"
XmlMethodString1="<"&MethodInput&" "&"xmlns=""http://tempuri.org/"">"'&"<model>"
'XmlMethodString2="</model>"&"</"&MethodInput&">"
XmlMethodString2="</"&MethodInput&">"
'***************************************************************** 建立Excel對象,準備讀取用例************************************************
Set Excel = CreateObject("Excel.Application")
oExcel.DisplayAlerts=FALSE
oExcel.Visible = false
oExcel.WorkBooks.Open(TestPath)
oExcel.WorkSheets(MethodInput).Activate
'***************************************************************** 將用例存入數組********************************************************************
For i=1 To m '行數3,b
For j=1 To n '列數2,a
ArrayInfo(i,j)= oExcel.Cells(i,j).Value
Next
Next
'**************************************************************** 開始組裝SOAP主體*****************************************************************
SoapText=""
For b=2 To m
For a=1 To n
SoapText=SoapText&"<"&ArrayInfo(1,a)&">"&ArrayInfo(b,a)&"</"&ArrayInfo(1,a)&">"
Next
SoapQuest=XmlHead&XmlMethodString1&SoapText&XmlMethodString2&XmlLast
'MsgBox(SoapQuest)
WriteToFile "c:\test.txt",SoapQuest
'**************************************************************** 開始循環發送消息*********************************************************************
'定義一XML的文檔對象
'初始化http對象
Set h = createobject( "Microsoft.XMLHTTP")
h.open "POST", WebserviceAddress, False
h.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
h.setRequestHeader "SOAPAction", "http://tempuri.org/"&MethodInput
h.send (SoapQuest)
While h.readyState <> 4
Wend
'***************************************************************循環處理返回結果並將結果寫入用例***********************************************
For c=n+1 to n+k
testResult=oExcel.Cells(1,c).Value
If oExcel.Cells(b,c).Value <>NodeData(h.responseText,testResult) then
oExcel.Cells(b,c+k).Value ="false"
oExcel.Cells(b,c+k).Font.Color = RGB(255, 0, 225)
oExcel.Cells(b,c+k).Interior.Color = RGB(0, 255, 0) 'Background color
oExcel.Cells(b,c+k).Font.Bold = True
else
oExcel.Cells(b,c+k).Value ="true"
oExcel.Cells(b,c+k).Font.Color = RGB(0, 0, 0)
oExcel.Cells(b,c+k).Interior.Color = RGB(255, 255, 255) '
end if
Next
SoapText=""
Next
'****************************************************************釋放Excel對象,並將結果寫到指定路徑***************************************
CheckFolder "C:\TestResult"
ResultPath="C:\TestResult\"&MethodInput&".xls"
oExcel.WorkSheets(MethodInput).SaveAs ResultPath
oExcel.WorkBooks.Close
oExcel.Quit
Set Excel=nothing
'*************************************************************** 如下是被調用的函數****************************************************************
'獲取結點值並輸出到txt文本
function NodeData(XmlString,Node)
Dim ResultArray,NodeString,NodeDateLen,No,i
ResultArray=Split(XmlString,Node,-1,1)
No=UBound(ResultArray) '獲取數組上界
'循環查找符合要求的字節
For i=1 To No Step 2
NodeString=ResultArray(i)
NodeDateLen=Len(NodeString)-3
NodeData=Mid(NodeString,2,NodeDateLen)
Next
End function
''將string寫入文本
Sub WriteToFile (filepath,text)
Dim fso, MyFile,txtFile
if IsFileExist(filepath)=true then
Set fso = CreateObject("Scripting.FileSystemObject")
Set txtFile = fso.GetFile(filepath)
Set MyFile = txtFile.OpenAsTextStream(8, 0)
MyFile.Write text&vbcrlf
MyFile.Close
else
CreatedFile(filepath)
Set fso = CreateObject("Scripting.FileSystemObject")
Set txtFile = fso.GetFile(filepath)
Set MyFile = txtFile.OpenAsTextStream(8, 0)
MyFile.Write text&vbcrlf
MyFile.Close
end if
End Sub
'建立文本文件
Sub CreatedFile(filepath)
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile(filepath, true)
MyFile.WriteLine(" Result -->")
MyFile.Close
End Sub
'判斷txt文件是否存在
Function IsFileExist(filepath)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
IsFileExist = fso.FileExists(filepath)
End Function
Sub CheckFolder(folderpath)
Dim fso,CreateFolderSuccess,f
Set fso=CreateObject("Scripting.FileSystemObject")
If fso.FolderExists(folderpath)=false Then
Set f = fso.CreateFolder(folderpath)
CreateFolderSuccess = f.Path
Else
Set fso=nothing
End If
End Sub
腳本使用步驟:
一、運行腳本,提示輸入方法名稱。
二、提示輸入參數個數:(參數個數爲方法須要傳入的參數個數,即用例中的輸入)
三、提示輸入須要比較的返回值的個數:(指的是輸出的結果的個數,用例中寫了幾列就輸入幾列(不帶單位))
四、提示輸入Excel行數,即用例個數(包括第一列非用例,即總行數):
五、提示輸入接口URL(即接口連接地址):
六、提示輸入完整用例路徑(即用例存放地址):
七、等待執行一段時間
八、查看C:\TestResult,能夠獲取測試結果以下:(出現與預期結果不一致的用例會使用綠色將結果標明)
九、測試完成。
注意事項:
(1)目前僅實現一個方法一個腳本,且一個Excel只能存放一個方法的測試用例(後期改進)
(2)未實現結果的統計(後期實現)
(3)前面要求輸入的內容必須準確可靠,不然腳本會執行出錯(後期改進容錯能力,會考慮加入腳本配置文件)
(4)腳本必須配合指定的用例模板
(5)建議腳本不要使用QTP執行,直接雙擊操做。在QTP上運行的話,腳本執行速度會很是慢。web