Получение ошибки 400 при выполнении groovy скрипта для POST через API VSTS в SoapUI - PullRequest
0 голосов
/ 15 января 2019

Я создаю отличный сценарий для запуска из SoapUI для создания планов тестирования в VSTS через API-интерфейсы VSTS, но при его выполнении я получаю ошибку HTTP400. Хотя тот же запрос успешно выполняется с теми же заголовками на этапе REST SoapUI.

Изначально я получал ошибку при авторизации, но теперь эта проблема была устранена .. Кажется, способ, которым я передаю тело запроса, неверен

import groovyx.net.http.HTTPBuilder
import static groovyx.net.http.ContentType.JSON
import org.apache.commons.codec.binary.Base64;
import com.eviware.soapui.support.types.StringToStringMap
import org.apache.http.client.methods.HttpPost;
import java.io.File;
import java.io.IOException; 
import groovy.json.JsonBuilder
import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.entity.mime.MultipartEntity; 
import org.apache.http.entity.mime.content.FileBody; 
import org.apache.http.entity.mime.content.StringBody; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.util.EntityUtils; 
import static groovyx.net.http.Method.*;
import groovyx.net.http.*
import static groovyx.net.http.ContentType.*
import static groovyx.net.http.Method.*
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.protocol.HTTP;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.http.entity.StringEntity;
import static groovy.json.JsonOutput.toJson;

HttpClient httpclient = new DefaultHttpClient();
def post = new HttpPost("https://dev.azure.com/xxx?api-version=1.0");

def jsonBody = [:]
// Test title
jsonBody.put("title", "Test title")

def http = new HTTPBuilder( 'https://dev.azure.com/xxx?api-version=1.0' )
post.addHeader("Authorization","Basic 
Onvdfdsfgsdgdfhgfhgfhgfhjgfhtrhtrhtrhtrbvdfb=");
post.addHeader("Accept","application/json");
post.setEntity(jsonBody)

HttpResponse response = httpclient.execute(post);

Ожидаемый результат: новый план тестирования должен быть создан в VSTS с предоставленным именем.

Фактический результат: Ошибка при получении: вт 15 января 17:03:14 IST 2019: INFO: неверный запрос HTTP / 1.1 400 [Cache-Control: no-cache, no-store, must-revalidate, Pragma: no-cache , Content-Length: 207, Content-Type: application / json; charset = utf-8, срок действия истекает: -1, P3P: CP = "CAO DSP COR ADMa DEV CONO TELO CUR PSA PSD TAI IVDo НАША САМИ АВТОБУСА DEM NAV STA UNI COM INT PHY ONL FIN PUR LOC CNT", набор файлов cookie: VstsSession =% 7B% 22PersistentSessionId% 22% 3A% 22b53ba5ae-5940-4bc4-b464-24b72350fd09% 22% 2C% 22PendingAuthenticationSessionId% 22% 3A% 2200000000-0000-0000-0000-000000000000% 22% 2C% 22CurrentAuthenticationSessionId% 22% 3A% 2200000000-0000-0000-0000-000000000000% 22% 7D; домен = .dev.azure.com; истекает = воскресенье, 14 января-2024 11:36:12 по Гринвичу; Путь = /; обеспечения; HttpOnly, X-TFS-ProcessId: ffde6ea4-0faa-4f90-b5d8-07ed687398f7, Strict-Transport-Security: max-age = 31536000; includeSubDomains, ActivityId: 3b96e21f-0539-4724-b31f-178b14072bb1, X-TFS-Session: 3b96e21f-0539-4724-b31f-178b14072bb1, X-VSS-E2EID: 3b96e21f-0539-47b1-b1 X1B1B1B1B1-B1-X-TF UserData: 3486938b-c20d-69ff-9eca-14d4011c8ebf: bmalviya@xxx.com, X-FRAME-OPTIONS: SAMEORIGIN, X-AspNet-Version: 4.0.30319, X-Powered-By: ASP.NET, X-Content- Опции типа: nosniff, X-MSEdge-Ref: Ref A: BD9BB78BC2814FFD94BEE99ECAE98955 Ref B: BY3EDGE0205 Ref C: 2019-01-15T11: 36: 12Z, Дата: Вт, 15 января 2019 11:36:11 GMT]

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Я создал 4 новых этапа тестирования в своем наборе: 1: Свойства 2: Groovy тестовый шаг 3: 2 шаги теста метода HTTP-запроса

В шаге проверки свойств я сохранил значение 2-х флагов, а именно PassFlag и FailFlag со значением «T» в зависимости от результата теста. На шаге теста groovy я извлек значение из шага теста свойств, и как только код находит значение PassFlag как «T», он переходит к шагу теста «HTTP-метод» с подробной информацией, чтобы передать тестовый пример в «HTTP-метод» с помощью детали провалить тестовый пример. ниже - отличный код:

import com.eviware.soapui.support.*; 
import com.jcraft.jsch.*

def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )
def myTestCase = testRunner.getTestCase()//myTestCase contains the test case 
propTestStep = myTestCase.getTestStepByName("PassFailStatus") // get the Property 
TestStep object
def testCase = testRunner.getTestCase() 
def propTestStep = testCase.getTestStepByName("PassFailStatus")
def Passvalue = propTestStep.getPropertyValue("PassFlag").toString()
def Failvalue = propTestStep.getPropertyValue("FailFlag").toString()

if(Passvalue == "T"){

Thread.sleep(30000)
testRunner.gotoStep(testRunner.testCase.getTestStepIndexByName('PassTestCase')) 

log.info("success")
}else{

testRunner.gotoStep(testRunner.testCase.getTestStepIndexByName('FailTestCase')) 

log.info("Failure") 
}
0 голосов
/ 16 января 2019

Если вы можете заставить его работать с обычным REST TestStep, я бы построил вашу функциональность вокруг этого.

  • Создание TestCase с этим REST TestStep.
  • Отключи это. SoapUI не должен запускать его. Ваш Groovy скрипт должен.
  • Добавьте свойства TestStep и добавьте переменные, которыми вы хотите управлять, в REST TestStep.
  • Добавьте переменные внутри вашего запроса REST. Если это GET, просто добавьте их в URI.
  • Затем измените ваш тестовый шаг Groovy Script. На самом деле он не должен выполнять REST-запрос, а должен активировать / запустить ваш REST-запрос TestStep, используя что-то вроде:

def result = testRunner.testCase.getTestStepByName("The Name Of Your Rest Request TestStep").run(testRunner, context)

Затем вы можете проверить, выполняется ли тестовый шаг, как ожидалось. Но это должно сделать это. Ваш Groovy Script TestStep будет единственным активированным TestCase Runner, но затем скрипт активирует ваш REST Request TestStep 0-N раз в зависимости от вашего кода. Убедитесь, что ваш Groovy Script изменяет значения вашего свойства TestStep по мере необходимости на лету.

...