2017-03-01 3 views
0

Nachdem ich ein Token von einem Gesuch erhalten senden, wie unten dargestellt:das Token holen und als Wert für Authorization-Header für den Rest der Schritte

{ "access_token": "12345", "expires_in": 3600, "token_type": "Bearer" } 

ich dieses Token in verschiedenen Testschritte Headers verwenden möchten Werte.

Zum Beispiel muss ich eine GET-Anfrage machen, nachdem ich dieses Token erhalten habe und es in der Kopfzeile haben ->Authentification : Bearer + token_value.

Also kann ich ein GroovyScript oder etwas schreiben, um dies automatisch zu machen? Ich benutze ReadyApi.

Grüße, Adrian

+0

Ich habe eine Menge Testschritte zu tun, und ich will nicht das Token für jeden Testschritt in seinem Header einfügen kopieren. – Adrian

+0

Haben Sie tatsächlich versucht, ein GroovyScript zu erstellen, damit es funktioniert, was Sie wollen? Sie würden eine bessere Antwort erhalten, wenn Sie das Skript, das Sie ausprobiert haben, einfügen und es funktioniert nicht. – bashnesnos

+0

Können Sie Ihre rohe Antwort zeigen, die aus Token besteht? – Rao

Antwort

0

Script Assertion für den gleichen Schritt hinzufügen, wo Sie die erwähnte Antwort erhalten:

Script Assertion dies die Werte aus Antwort abruft und erstellt eine Projekteigenschaft und den abgerufenen Wert gesetzt.

//Check if the response is empty or null 
assert context.response, "Response is null or empty" 
def json = new groovy.json.JsonSlurper().parseText(context.response) 
def token = "${json.token_type} ${json.access_token}" as String 
log.info "Token will be: ${token}" 
//Assing the value at project level property TOKEN 
context.testCase.testSuite.project.setPropertyValue('TOKEN', token) 

Jetzt muss der Wert als Header für jede ausgehende Anfrage dynamisch gesetzt werden. h., Add Authorization header und dessen Wert für die Anforderungstyp-Schritte SOAP oder REST. Dafür wird Events Feature verwendet werden. Fügen Sie ein SubmitListener.beforeSubmit Ereignis hinzu und fügen Sie das folgende Skript hinzu. Bitte folgen Sie den Kommentaren inline.

import com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequestStep 
import com.eviware.soapui.impl.wsdl.teststeps.RestTestRequestStep 

//Please edit the header name as you wanted 
def headerName = 'Authorization' 


//a method which sets the headers 
def setHttpHeaders(def headers) { 
    def step = context.getProperty("wsdlRequest").testStep 
    if (step instanceof RestTestRequestStep || step instanceof WsdlTestRequestStep) { 
    def currentRequest = step.httpRequest 
    def existingHeaders = currentRequest.requestHeaders 
    headers.each { 
      existingHeaders[it.key] = it.value 
     } 
     currentRequest.requestHeaders = existingHeaders 
    } else { 
     log.info 'not adding headers to the current step as it is not request type step' 
    } 
} 

//read the token from project properties 
def token = context.expand('${#Project#TOKEN}') 
//assert the value of token 
assert token, "Token is null or empty" 

//UPDATE from the comment to add the header to next request 
if (token) { 
    def headerValue = [(token)] 
    def headers = [(headerName) : (headerValue)] 
    setHttpHeaders(headers) 
} 
+0

Also ich erstelle eine Script-Behauptung von Get.Authenttification TestStep und es funktioniert. Ich erstelle SubmitListener.beforeSubmit-Ereignis Ich habe diesen Code dort abgelegt. Ich muss den Kopfzeilennamen nicht ändern, weil es in meinen Schritten gleich ist (GetABC, PutABC usw.), aber es funktioniert nicht. Ich muss noch eine Änderung vornehmen? Zum Beispiel muss ich in: setHttpHeaders (nStepName, headers) die Namen von Schritten einführen, wo ich diesen Header hinzufügen möchte? Ich muss die "wsdlRequest" nicht ändern? – Adrian

+0

Ich habe 'setHttpHeaders (nStepName, headers)' auf 'setHttpHeaders (headers)' gesetzt. Der Schrittname wird nicht benötigt, da Sie ihn für jeden Schritt benötigen. Bitte nehmen Sie das aktualisierte Skript von oben zur Antwort. Übrigens konnte ich es nicht versuchen, bevor ich es dir gab. – Rao

+0

Und es ist eine Möglichkeit, das Token für einzelne Schritte zu verwenden? Warum, weil ich in derselben TestSuite Anfragen mit anderen Autorisierungen habe .... – Adrian

0
import groovy.json.JsonSlurper 
import groovy.json.* 

def tokens=testRunner.runStepByname("Token") 
def response = context.expand('${Token#Response}') 
def JsonSlurperjsonSlurper = newJsonSlurper() 
def Objectresult = jsonSlurper.parseText(response) 
def access_token= result.access_token 

def authorization = "Bearer "+access_token 
testRunner.testCase.setPropertyValue("access_token", authorization) 
Verwandte Themen