为什么要把 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?
- 对Spring Boot应用程序进行单元测试和集成测试。
- 测试Spring MVC控制器和RESTful API。
- 测试Spring数据访问层。
- 对Spring Boot应用程序进行性能测试。
- 测试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