我用cucumber测试框架为Sping Boot Application编写了API功能测试用例。在具有测试用例专用配置的配置文件中启动spring Boot 应用程序后,使用以下命令执行测试:
mvn spring-boot:start -Dspring-boot.run.profiles=test -Dspring-boot.run.arguments="--spring.config.name=application-test --spring.config.location=./src/test/resources/application-test.yaml" test spring-boot:stop -DskipTests=false
字符串
一旦spring应用程序启动,并且在测试中验证了响应,API调用就从测试用例中进行。
我已经使用下面给出的自定义WebSecurityConfigurerAdapter在测试用例中禁用了安全性:
@TestConfiguration
@Order(1)
@Profile("test")
public class TestSecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.anyRequest()
.permitAll();
}
}
型
安全已禁用。但是有一些控制器的角色是用@PreAuthorize注解检查的。使用@PreAuthorize注解对控制器进行的调用失败,并出现以下错误:
{
"timestamp": 1689838624242,
"errorType": "UNKNOWN",
"errors": [
"Access is denied"
]
}
型
尝试了几个选项来禁用特定配置文件的预授权字段,但它们都不起作用。感谢任何关于如何禁用@PreAuthorize检查选定的配置文件或在Cucumber的测试用例中的想法。
已尝试的选项:
1.在测试中设置@EnableGlobalMethodSecurity(prePostEnabled = true)
。没有用
1.引用此SO answer。我的 Boot 应用程序是用Oauth2保护的,我在测试中禁用了它。所以发送基本的认证凭证将不起作用。
2条答案
按热度按时间des4xlb01#
在
@Given
步骤中设置测试安全上下文,而不是禁用安全性。示例取自this README,我写的(当时Keycloak for Spring的适配器没有被弃用):
小 cucumber 功能:
字符串
下面使用了一些来自
com.c4-soft.springaddons:spring-addons-oauth2-test
的代码,这是我在maven-central上发布的一个库,以简化定义OpenID声明。如果您对索赔详细信息不感兴趣,则可以跳过此依赖关系(如果授权机构和用户名足够):型
步骤:
型
cucumber JUnit 4适配器:
型
Spring“外胶”:
型
qxsslcnc2#
解决方案之一是使用Mock impl,即类级别或方法级别的以下注解:
第一个月
For more details read it