it-roy-ru.com

тестирование весенней загрузки с приложением restAssured

Я боролся с этим в течение некоторого времени сейчас. Я хотел бы использовать restAssured для тестирования моего приложения SpringBoot REST.

В то время как похоже, что контейнер вращается правильно, будьте уверены (и все остальное, кажется, имеет проблемы с обращением к нему.

Все время получаю Connection отказано в исключении.

Java.net.ConnectException: Connection refused

at Java.net.PlainSocketImpl.socketConnect(Native Method)
at Java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.Java:350)
at Java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.Java:206)
at Java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.Java:188)
at Java.net.SocksSocketImpl.connect(SocksSocketImpl.Java:392)
at Java.net.Socket.connect(Socket.Java:589)
...

мой тестовый класс:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class SizesRestControllerIT {

    @Autowired
    private TestRestTemplate restTemplate;

    @Test
    public void test() {
        System.out.println(this.restTemplate.getForEntity("/clothes", List.class));
    }

    @Test
    public void test2() throws InterruptedException {
        given().basePath("/clothes").when().get("").then().statusCode(200);
    }

}

и теперь для странной части test передает и печатает то, что должен, но test2 получает исключение Connection отказано.

Есть идеи, что не так с этой настройкой?

16
klubi

Я сам отвечу на этот вопрос ..

Потратив на это дополнительное количество времени, оказалось, что TestRestTemplate уже знает и устанавливает правильный порт . RestAssured не ...

С этим я дошел до того, что тест ниже проходит без проблем.

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class SizesRestControllerIT {

    @LocalServerPort
    int port;

    @Before
    public void setUp() {
        RestAssured.port = port;
    }

    @Test
    public void test2() throws InterruptedException {
        given().basePath("/clothes").get("").then().statusCode(200);
    }

}

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

31
klubi

На основании https://stackoverflow.com/users/2838206/klubi ответа и не устанавливать порт для каждого запроса, который вы делаете:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = 
SpringBootTest.WebEnvironment.RANDOM_PORT)
public class SizesRestControllerIT {

    @LocalServerPort
    int port;

    @Before
    public void setUp() {
        RestAssured.port = port;
    }

    @Test
    public void test2() throws InterruptedException {
        given().basePath("/clothes").get("").then().statusCode(200);
    }
}
5
Mateus Costa

вы работаете на каком-то нестандартном порту, может быть? Вы пробовали это в своем 

@Before public static void init(){ RestAssured.baseURI = "http://localhost"; // replace as appropriate RestAssured.port = 8080; }

3
user3169330

Я бы порекомендовал использовать @WebMvcTest для этого случая, все, что вам нужно, это быть уверенным в том, что mock mvc зависимость:

<dependency>
            <groupId>com.jayway.restassured</groupId>
            <artifactId>spring-mock-mvc</artifactId>
            <version>${rest-assured.version}</version>
            <scope>test</scope>
</dependency>

Использование @SpringBootTest для проверки только контроллера является чрезмерной нагрузкой, будут созданы все избыточные компоненты, такие как @Component, @Service и т.д., И будет запущен полный сервер HTTP Для получения более подробной информации: https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-testing-spring-boot-applications-testing-autoconfigured- mvc-тесты ;

  @RunWith(SpringRunner.class)
  @WebMvcTest(value = SizesRestController.class)
  public class SizesRestControllerIT {

     @Autowired
     private MockMvc mvc;

     @Before
     public void setUp() {
        RestAssuredMockMvc.mockMvc(mvc);
     }

     @Test
     public void test() {
        RestAssuredMockMvc.given()
           .when()
           .get("/clothes")
           .then()
           .statusCode(200);
        // do some asserts
     }
 }
1
idmitriev

У меня была та же проблема, на сервере было запущено приложение через порт 34965 (не 8080).

Это решило мою проблему: 

@Autowired
ServerProperties serverProperties;

@Autowired
Environment environment;

public String getPath() {
    final int port = environment.getProperty("local.server.port", Integer.class);

    return "http://localhost:" + port;
}

@Before
public void setUp() throws Exception {
    RestAssured.baseURI = getPath();
}

@Test
public void testResponse(){
    response = get("/books");
}
0
Amine Soumiaa

Просто:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment= SpringBootTest.WebEnvironment.DEFINED_PORT)
public class CommonScenarioTest {

    @BeforeClass
    public static void setup() {
        RestAssured.baseURI = "http://localhost/foo";
        RestAssured.port = 8090;
    }
0
erik