下面是针对SpringSecurity测试实战的完整攻略。
SpringSecurity测试实战
准备工作
在进行测试实战之前,我们需要对环境进行配置和项目依赖的添加。
配置文件
在 application.properties
文件中添加如下配置:
# 数据库配置
spring.datasource.url=jdbc:mysql://localhost:3306/security_demo_db?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# JPA 配置
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
# Spring Security 配置
spring.security.user.name=admin
spring.security.user.password=admin123
Maven配置
在 pom.xml
文件中添加以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
测试实战
实例一:测试登录
编写测试用例,模拟用户登录请求,并验证登录后的状态码和响应内容。
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class LoginTest {
@Autowired
private TestRestTemplate restTemplate;
@Test
public void testLogin() {
ResponseEntity<String> response = restTemplate.postForEntity("/login", new User("admin", "admin"), String.class);
assertThat(response.getStatusCodeValue()).isEqualTo(200);
assertThat(response.getBody()).contains("登录成功");
}
}
上述测试用例使用 TestRestTemplate
进行请求模拟,验证了程序登录的状态码和响应内容。
实例二:测试权限验证
编写测试用例,模拟管理员登录请求,并尝试通过接口创建新的用户,在此过程中验证管理员权限限制。
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@WithMockUser(username = "admin", roles = {"ADMIN"})
public class CreateUserTest {
@Autowired
private TestRestTemplate restTemplate;
@Autowired
private UserRepository userRepository;
@Test
public void testCreateUser() {
User user = new User("test", "test123");
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<User> request = new HttpEntity<>(user, headers);
ResponseEntity<String> responseEntity = restTemplate.exchange("/api/users", HttpMethod.POST, request, String.class);
assertThat(responseEntity.getStatusCodeValue()).isEqualTo(HttpStatus.CREATED.value());
Optional<User> optional = userRepository.findByUsername(user.getUsername());
assertThat(optional.isPresent()).isTrue();
User createdUser = optional.get();
assertThat(createdUser.getPassword()).isNotEqualTo(user.getPassword());
userRepository.delete(createdUser);
}
}
上述测试用例使用 WithMockUser
注解进行模拟管理员权限,并在测试用例中对创建新用户接口进行测试,验证了管理员权限对创建新用户接口的限制。
结语
本篇攻略讲解了如何使用SpringSecurity进行接口测试,并提供了两个具体的测试实例,希望对使用SpringSecurity进行测试实践的同学有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringSecurity 测试实战 - Python技术站