Несколько запросов POST с уверенностью получили 500 ошибок в секунду - PullRequest
1 голос
/ 29 апреля 2019

Мне нужно отправить много запросов по одному.У меня есть код:

   public void sendRestRequest(String xmlFile){

        try{
            String myRequest = generateStringFromResource(xmlFile);
            given().auth().basic(prop.getProperty("restLogin"), prop.getProperty("restPassword"))
                    .contentType("application/xml")
                    .body(myRequest.getBytes(StandardCharsets.UTF_8))
                    .when()
                    .post(prop.getProperty("restURL"))
                    .then().
                    assertThat().statusCode(200).and().
                    assertThat().body("status", equalTo("UPLOADED"));
            }
        catch (Exception e){ LOG.error(String.valueOf(e)); }
    }

public static String generateStringFromResource(String path) throws IOException {
        return new String(Files.readAllBytes(Paths.get(path)));
    }

Я могу успешно создать первый запрос.Но во втором у меня 500 кодов состояния вместо 200. И такое сообщение об ошибке:

at io.restassured.internal.ResponseSpecificationImpl$HamcrestAssertionClosure.validate(ResponseSpecificationImpl.groovy:483)
        at io.restassured.internal.ResponseSpecificationImpl$HamcrestAssertionClosure$validate$1.call(Unknown Source)
        at io.restassured.internal.ResponseSpecificationImpl.validateResponseIfRequired(ResponseSpecificationImpl.groovy:655)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:210)
        at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:59)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166)
        at io.restassured.internal.ResponseSpecificationImpl.statusCode(ResponseSpecificationImpl.groovy:123)
        at io.restassured.specification.ResponseSpecification$statusCode$0.callCurrent(Unknown Source)
        at io.restassured.internal.ResponseSpecificationImpl.statusCode(ResponseSpecificationImpl.groovy:131)
        at io.restassured.internal.ValidatableResponseOptionsImpl.statusCode(ValidatableResponseOptionsImpl.java:119)

Может быть, у кого-нибудь есть идеи?Я предполагаю, что это должно быть какое-то соединение ближе или что-то вроде этого.

1 Ответ

0 голосов
/ 02 мая 2019

На стороне сервера проблема была с XML-файлом, но это странно, потому что нет проблем с тем же файлом, если я отправляю его в первый раз.После некоторых попыток я решил использовать другой подход, который прекрасно работает:

public void sendRestRequest(String xmlFile) throws IOException {
        FileInputStream fis = new FileInputStream("configuration.properties");
        prop.load(fis);
        try {
            URL url = new URL(prop.getProperty("restURL"));
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setDoOutput(true);
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "application/xml");
            conn.setRequestProperty("Authorization", prop.getProperty("basic"));

            String input = generateStringFromResource(xmlFile);

            OutputStream os = conn.getOutputStream();
            os.write(input.getBytes());
            os.flush();

            if (conn.getResponseCode() != 200) {
                throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
            }

            BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
            StringBuilder responseStrBuilder = new StringBuilder();

            String output;
            while ((output = br.readLine()) != null) {responseStrBuilder.append(output);}

            conn.disconnect();

            JSONObject result = new JSONObject(responseStrBuilder.toString());
            Assert.assertEquals(result.getString("status"), "UPLOADED");

        } catch (IOException e) {
            LOG.error(String.valueOf(e));
        }
    }
...