SpringBoot+TestNG+RESTAssured搭建测试框架(1)

为什么要把 Sprint Boot 和 TestNG 整合在一起?

Spring Boot和TestNG可以很好地整合在一起,以实现更好的测试。TestNG是一个基于Java的测试框架,提供了许多功能,如测试套件、测试用例、测试方法的分组、测试参数化等。Spring Boot是一个用于构建基于Spring框架的应用程序的框架,提供了许多功能,如自动配置、快速开发和部署等。

在使用Spring Boot和TestNG进行整合时,可以使用Spring Test框架提供的支持来进行测试。Spring Test框架提供了许多功能,如测试Spring应用程序上下文、测试Spring MVC控制器、测试Spring数据访问层等。

在什么场景下 整合Spring Boot和TestNG?

  1. 对Spring Boot应用程序进行单元测试和集成测试。
  2. 测试Spring MVC控制器和RESTful API。
  3. 测试Spring数据访问层。
  4. 对Spring Boot应用程序进行性能测试。
  5. 测试Spring Boot应用程序的安全性。

总的来说,Spring Boot和TestNG的整合可以帮助开发人员更好地测试和验证Spring Boot应用程序的功能和性能,从而提高应用程序的质量和可靠性。

创建IDEA Maven项目

说明:在Idea中创建项目时,"Create from archetype"选项是指从一个Maven archetype创建项目。Maven archetype是一个项目模板,它包含了一些默认的配置和结构,可以帮助我们更快地创建新项目。当我们选择"Create from archetype"选项时,我们需要选择一个archetype作为项目的模板,然后Idea会自动为我们创建项目,并使用选定的archetype来设置项目的初始结构和配置。这样可以使我们更快地创建新项目,并且可以避免重复设置相同的配置。

POM.xml

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.5.2</version>
    </dependency>
    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>7.4.0</version>
        <scope>test</scope>
    </dependency>
</dependencies>

Spring Boot + TestNG测试框架对于HTTP接口的测试,可以使用Spring Boot的内置测试工具,如MockMvc和RestTemplate。对于GRPC接口的测试,可以使用grpc-java-test工具包来编写测试用例。如果需要模拟外部服务的行为,可以使用桩或者埋点技术来进行测试。

创建一个简单的Spring Boot应用程序

可以创建一个简单的控制器,并在其中添加一个简单的GET请求处理方法。以下是一个示例控制器:

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello, World!";
    }
}

创建一个TestNG测试类。可以使用IDEA的TestNG插件来创建测试类。在测试类中,可以使用Spring Boot Test框架提供的支持来测试Spring Boot应用程序。以下是一个示例测试类:

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class HelloControllerTest {

    @Autowired
    private TestRestTemplate restTemplate;

    @Test
    public void testHello() {
        String response = restTemplate.getForObject("/hello", String.class);
        Assert.assertEquals(response, "Hello, World!");
    }

}

@SpringBootTest相当于SpringMvc中单元测试中的ApplicationContext,用于配置上下文环境
webEnvironment属性: 指定Web的应用环境

  • MOCK 指定的默认取值,提供一个模拟的Servlet环境(内置Servlet环境并没有启动) 并基于MOCKMvc来进行测试
  • RANDOM_PORT 提供随机的端口 提供一个真正的Servlet
  • DEFINE_PORT 提供默认端口 提供一个真正的Servlet
  • NONE 不提供Web环境(一般不用配置,SpringBoot自动配置好的)
  • classes属性:指定应用的启动类(不需要配置,一般都是SpringBoot自动去寻找)

TODO

REST-assured

<dependency>
    <groupId>io.rest-assured</groupId>
    <artifactId>rest-assured</artifactId>
    <version>4.2.0</version>
    <scope>test</scope>
</dependency>

语法格式

given().
    XXX
when().
    XXX
then().
    XXX
log().all()
  • given:设置测试预设,包括请求头、请求参数、请求体、cookie等
  • when:所要执行的操作,即发起请求的网址(GET / POST请求)
  • then:解析结果、断言
  • log 可以向控制台输出返回的信息
  • log().all() 可以返回所有响应中的数据

GET

方式一:在URL地址后面拼接参数

    public void test1() {
        given().
        when().
                get("http://httpbin.org/get?name=abc").
        then().
                log().body(); //返回响应体中的数据
    }

方式二:通过 queryParam 方法添加参数

    public void test2() {
        given().
                queryParam("name","abc").
                queryParam("age","18")
        when().
                get("http://httpbin.org/get").
        then().
                log().body(); //返回响应体中的数据
    }

POST

方式一:form表单参数类型

    public void test3() {
        given().
                formParam("name","abc").
                formParam("password","123").
        when().
                post("http://httpbin.org/post").
        then().
                log().body(); //返回响应体中的数据
    }

方式二:JSON参数类型

    public void test4() {
        String JsonData = "{\"name\":\"abc\",\"password\":\"123\"}";
        Response res = given().
                body(JsonData).
                contentType(ContentType.JSON).
        when().
                post("http://httpbin.org/post").
        then().
                log().body().
        extract().response(); //返回响应体中的数据
        System.out.println(res.time());
        System.out.println(res.getHeader("Content-Type"));
    }

Gpath用来提取响应中的某一个具体的数据:

  • 提取JSON:res.jsonPath().get(“XXX.XXX.XXX”);
  • 提取xml:res.xmlPath().get(“XXX.XXX.XXX”);
  • 提取HTML:res.htmlPath().get(“XXX.XXX.XXX”);

获取HTML响应时,通过 标签名.标签名 的方式获取标签中的值,通过 @属性名 的方式获取属性的值

举例说明:

System.out.println((String)res.htmlPath().get("html.head.meta[0].@content"));

参考:https://blog.csdn.net/wxsyj/article/details/127068752?ops_request_misc=&request_id=&biz_id=102&utm_term=Rest%20Assured&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-1-127068752.142v88koosearch_v1,239v2insert_chatgpt&spm=1018.2226.3001.4187

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值