单元测试拥有保证代码质量、尽早发现软件 Bug、简化调试过程、促进变化并简化集成、使流程更灵活等优势。单元测试是针对代码单元的独立测试,核心是“独立”,优势来源也是这种独立性,而所面临的不足也正是因为其独立性:既然是“独立”,就难以测试与其他代码和依赖环境的相互关系。单元测试与系统测试是互补而非代替关系。单元测试的优势,正是系统测试的不足,单元测试的不足,又恰是系统测试的优势。不能将单元测试当做解决所有问题的万金油,而需理解其优势与不足,扬长避短,与系统测试相辅相成,实现测试的最大效益。
OAuth2 系统单元测试困难接口测试依赖于 UPMS (用户权限管理),无法做到解耦独立
spring-security-test 模块未提供相关标准实现
场景复杂既要包含无状态 token 调用,又要保证上线文传递业务
解决方案参考 @WithMockUser ,在 Mock 拦截器中自动执行相关的增强(token 获取),并通过扩展 WithSecurityContextFactory 实现上下文 token 的传递。具体可以参考源码 pig-common-test[1]
引入依赖
com.pig4cloud
pig-common-test
${last.version}
test
单元测试 Controller 接口
指定认证中心接口
配置在 test/resources/application.yml
security:
oauth2:
client:
access-token-uri: http://pig-gateway:3000/oauth/token
模拟测试 controller 接口
@RunWith(SpringRunner.class)
@SpringBootTest
public class SysLogControllerTest {
private MockMvc mvc;
@Autowired
private WebApplicationContext applicationContext; // 注入WebApplicationContext
@Before
public void setUp() {
this.mvc = MockMvcBuilders.webAppContextSetup(applicationContext).build();
}
@Test
@SneakyThrows
@WithMockOAuth2User
public void testMvcToken() {
mvc.perform(delete("/log/1").with(token())).andExpect(status().isOk());
}
}
模拟测试 FeignClient 传递 token
直接注入 FeignClient 实现即可 使用 @WithMockOAuth2User 注解测试类即可
WithMockOAuth2User 属性说明
当前用例获取 token 使用的用户名
String username() default “admin”;
当前用例获取 token 使用的密码
String password() default “123456”;
目前仅在 pig 2.10 做了实现,理论支持低版本,直接 install 此模块即可。
技术行业,一定要提升技术功底,丰富自动化项目实战经验,这对于你未来几年职业规划,以及测试技术掌握的深度非常有帮助。
金九银十面试季,跳槽季,整理面试题已经成了我多年的习惯!下面有我近几年的收集和整理,整体是围绕着【软件测试】来进行整理的,主体内容包含:python自动化测试专属视频、Python自动化详细资料、全套面试题等知识内容。
对于软件测试的的朋友来说应该是最全面最完整的面试备战仓库,为了更好地整理每个模块,我也参考了很多网上的优质博文和项目,力求不漏掉每一个知识点,很多朋友靠着这些内容进行复习,拿到了BATJ等大厂的offer,这个仓库也已经帮助了很多的软件测试的学习者,希望也能帮助到你!
愿你我相遇,皆有所获! 欢迎关注微信公众号:【伤心的辣条】 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!