[Spring Boot #17] 스프링 부트 HtmlUnit 써보기

2021. 3. 15. 03:57 Spring Framework/Spring boot #2

| HtmlUnit이란 

 

  • HtmlUnit은 프로그래밍적으로 HTML 사이트와 상호작용할 수 있게 하는 자바 오픈소스입니다.
  • 테스트 프레임워크로서 생각할 수 있지만 브라우져와 프로그래밍적으로 상호작용 할 수 있게 하는 확장된 개념으로 받아들이는 것이 좋습니다.
  • 스프링 4 이후로 스프링에 통합되어 MVC 테스트(특히 템플릿 뷰 테스트) 때 유용하게 쓰일 수 있습니다.
  • http://htmlunit.sourceforge.net/ 공식 사이트를 참고하시면 좋습니다.

 

| 샘플 코드

 

프로젝트 구조

|   pom.xml
|
+---src
|   +---main
|   |   +---java
|   |   |   \---com
|   |   |       \---tutorial
|   |   |           \---sptringbootmvc
|   |   |                   SampleController.java
|   |   |                   SpringBootMvcApplication.java
|   |   |
|   |   \---resources
|   |       |   application.properties
|   |       |
|   |       +---static
|   |       \---templates
|   |               hello.html
|   |
|   \---test
|       \---java
|           \---com
|               \---tutorial
|                   \---sptringbootmvc
|                       \---user
|                               SampleControllerTest.java

 

HTML 문서

1
2
3
4
5
6
7
8
9
10
11
<!-- hello.html -->
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Hello Saelobi</title>
</head>
<body>
    <h1 th:text="${name}">Name Power</h1>
</body>
</html>
cs

 

테스트 코드

@RunWith(SpringRunner.class)
@WebMvcTest(SampleController.class)
public class SampleControllerTest {

    @Autowired
    WebClient webClient;

    @Test
    public void hello() throws Exception {
        HtmlPage page = webClient.getPage("/hello");
        HtmlHeading1 h1 = page.getFirstByXPath("//h1");
        assertThat(h1.getTextContent()).isEqualToIgnoringCase("saelobi");
    }

    @Test
    public void titlePageIsOk() throws Exception{
        webClient.getOptions().setThrowExceptionOnScriptError(true);
        HtmlPage page = webClient.getPage("/hello");
        assertEquals("Hello Saelobi", page.getTitleText());
    }
}
  • HtmlPage 객체를 통해 Html 페이지와 자바 언어를 통해 상호작용할 수 있습니다.
  • xpath를 통해 h1 태그의 정보를 얻어서 그것을 테스트하는 코드입니다.
  • 웹 페이지의 타이틀이 무엇인지 테스트할 수 있는 등 여러가지 웹 클라이언트와 상호할 수 있는 API를 제공합니다.
  • 스프링 4이상에서 스프링 MVC와 통합되어 있기 때문에 @Autowired 어노테이션을 통한 의존성 추가만으로 손쉽게 사용할 수 있습니다.

 

소스 코드

@SpringBootApplication
public class SpringBootMvcApplication {

    public static void main(String[] args) {
        SpringApplication application = new SpringApplication(SpringBootMvcApplication.class);
        application.setWebApplicationType(WebApplicationType.SERVLET);
        application.run(args);
    }
}
@Controller
public class SampleController {

    @GetMapping("/hello")
    public String hello(Model model){
        model.addAttribute("name", "saelobi");
        return "hello";
    }
}

 

참고자료 : https://www.inflearn.com/course/스프링부트



출처: https://engkimbs.tistory.com/778?category=767865 [새로비]