Анализ файла JSON с использованием VBScript - QTP / UFT - PullRequest
0 голосов
/ 30 января 2020

Я использую QTP / UFT для автоматизации моего пользовательского интерфейса приложения. Я хотел бы сравнить значения пользовательского интерфейса со значениями из ответа REST API. Я новичок в VBScript, и я кодировал метод для вызова REST API и получения ответа, но я пытаюсь найти решение, как анализировать JSON с помощью VBScript.

Пожалуйста, помогите мне, как я могу разобрать ответ json? (Код ниже) ИЛИ, если вам проще принять ответ REST в xml и проанализировать его в VBS?

Благодарим вас за помощь и идеи. Спасибо!

userName    =   "abc@xyz.com"
password    =   "blah.123"
acctNumber  =   "01999994201"

URL1="https://CXaic-blah.blah.ocp.blah.com:243/ic/api/integration/v1/flows/rest/blah_ACCNTSEARCH/1.0/accountSearch?accountNumber=" 
URL=URL1&acctNumber
Set objXmlHttpMain = CreateObject("Msxml2.ServerXMLHTTP") 
on error resume next 
objXmlHttpMain.open "GET",URL, False , userName, password
objXmlHttpMain.setRequestHeader "Accept", "application/json"
objXmlHttpMain.setRequestHeader "charset", "UTF-8"
objXmlHttpMain.send

restjsonresp    =   objXmlHttpMain.responseText

Ниже приведен формат ответа json, который я получаю:

{ 
   "searchResponse":{ 
      "element":[ 
         { 
            "accType":"R",
            "accountNumber":"1111111",
            "accountStatus":"A",
            "taxId":""
         }
      ]
   }
}

1 Ответ

0 голосов
/ 04 февраля 2020

Хотя у меня нет QTP / UFT для тестирования или проверки следующего кода, я предлагаю эти JSON решения для анализа как есть для экспериментов ...

1) Inject блок JScript в объект «htmlfile»

Dim y, html : Set html = CreateObject("htmlfile")
Dim window : Set window = html.parentWindow
window.execScript "var json=" & restjsonresp & ";var e=new Enumerator(json.searchResponse.element);", "JScript"
While Not window.e.atEnd()
    Set y = window.e.item()
    Print "acctType: " & y.accType
    Print "accountNumber: " & y.accountNumber
    Print "accountStatus: " & y.accountStatus
    Print "taxId: " & y.taxId
    window.e.moveNext
Wend

2) Вызов кода JScript с использованием «MSScriptControl.ScriptControl» ( требует 32-разрядного )

Dim x, eng : Set eng = CreateObject("MSScriptControl.ScriptControl")
eng.Language = "JScript"
eng.AddCode "function json() { return " & restjsonresp & "; }"
Dim oResp : Set oResp = eng.Run("json")
For Each x In oResp.searchResponse.element
    Print "acctType: " & x.accType
    Print "accountNumber: " & x.accountNumber
    Print "accountStatus: " & x.accountStatus
    Print "taxId: " & x.taxId
Next

3) Внедрение блока JScript в «InternetExplorer.Application» ( overkill? Хит производительности )

Dim z, objIE : Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate2 "about:blank"
objIE.Toolbar = False
objIE.StatusBar = False
objIE.MenuBar = False
Do While objIE.Busy
    Wait 1
Loop
objIE.Visible = False
objIE.document.open "text/html"
objIE.document.write "<script type='text/javascript'>document.json=" & restjsonresp & ";document.jsonEnum = new Enumerator(document.json.searchResponse.element);</script>"
objIE.document.close
While Not objIE.document.jsonEnum.atEnd()
    Set z = objIE.document.jsonEnum.item()
    Print "acctType: " & z.accType
    Print "accountNumber: " & z.accountNumber
    Print "accountStatus: " & z.accountStatus
    Print "taxId: " & z.taxId
    objIE.document.jsonEnum.moveNext
Wend
objIE.Quit

4) Использование объекта VBS Json Демона ( - чистое решение VBScript; хотя и с дополнительным кодом )

https://github.com/eklam/VbsJson

5) Используйте регулярные выражения ( только для простых, четко определенных JSON ответов )

Dim re : Set re = New RegExp
re.IgnoreCase = True
re.Pattern = "\{\s*""searchResponse""\s*\:\s*\{\s*""element""\s*\:\s*\[\s*(\{\s*""accType""\s*\:\s*""(.*)""\s*,\s*""accountNumber""\s*\:\s*""(.*)""\s*,\s*""accountStatus""\s*\:\s*""(.*)""\s*,\s*""taxId""\s*\:\s*""(.*)""\s*\})\s*\]\s*\}\s*\}"
If re.Test(restjsonresp) Then
    Dim matches : Set matches = re.Execute(restjsonresp)
    Print "acctType: " & matches(0).SubMatches(1)
    Print "accountNumber: " & matches(0).SubMatches(2)
    Print "accountStatus: " & matches(0).SubMatches(3)
    Print "taxId: " & matches(0).SubMatches(4)
End If

6) Преобразовать JSON до XML, затем анализируйте XML ( много кода, возможное избыточное количество )

https://github.com/pravynandas/JSONToXML

Если вы можете контролировать ответ и поставить XML вместо JSON, то он может быть предпочтительнее придерживаться XML для VBScript в QTP / UFT. В любом случае, я надеюсь, что что-то здесь поможет.

Наслаждайтесь.

...