单元测试规约
需要单元测试的原因:
是否能够交付产品级别的项目
根据项目的不同需求,进行性能测试和稳定性测试
单元测试
保证接口能够正常使用
越早发现成本越低,单元测试的提早发现,对于软件的质量有显著的保障,也可以,提高软件质量优化代码,提高代码质量,找到潜在的问题,可以在重构的时候注意到更好的解决方案
同样的一个代码,晚一轮发现,所用的时间会翻倍
单元测试没有发现的bug,会导致集成测试时产生问题,需要返回啦单元测试
系统测试的时候找bug会非常困难
单元测试的air原则
单元测试的代码框架不会对其他部分产生影响,系统可以一个参数开启,关闭单元测试
Maven实现单元测试,系统可以一个参数开启,关闭单元测试
每个模块不能相互依赖,要保证独立性
没用新的代码加入,以前的单元测试可以重复使用
单元测试设计代码bcde原则
Border边界测试
区间测试eg:手机号11位,测试10位,12位置,如果是一个范围要测试上点、内点、离点
定义了一个listpage方法根据输入的车次号匹配输出车次信息,车次号先通过正则判断,成功输出信息
测试用例 “t31”、“A31”、“T333333”、“a2”…
JUnit4 实现了Hamcrest的断言
JUnit
还可以有断言和假设
Spring TestContext Framework
maven-surefire-plugin+Jacoco选择性统计代码覆盖率
sleep test 跳过测试
实例
Spring TestContext Framework的测试类,主要测试的是数据层面的userMapper,和数据元dateSource
测试是否能够被sql注入
数据源链接是否已经被用完,在数据库和mybaits配置的时候比如长链接10短链接3000,在docker、服务器、K8s的不同环境下,性能是不同的,可以通过这个测试,测试具体应该怎么配置
测试主键重复
测试分页信息
系统安全规约
前后端都要设置,不是前端不显示就完事了,后段也要控制,验证身份,加密数据,参数校验
相同权限的A和B都要只能访问自己的数据,部门级不处理会造成部门级别的数据泄漏
权限控制是实例
定义map查询权限
1)Execute:调度执行StatementHandler、ParmmeterHandler、ResultHandler执行相应的SQL语句;
2)StatementHandler:使用数据库中Statement(PrepareStatement)执行操作,即底层是封装好了的prepareStatement;
3)ParammeterHandler:处理SQL参数;
4)ResultHandler:结果集ResultSet封装处理返回。
使用JDBC 可以直接在JDBC层进行设置
加密的流程
sql拦截器
有注解就可以解密
拦截器实现数据层api的加密
加密之后 继续进行
sql注入
in后面的写法
XXS跨站点脚本攻击及其防御之术
重放攻击
调用短信服务产生bug一直调用短信接口,
避免使用$ 要尽量使用#
时间戳可以防范1分钟内的重放攻击
解决办法 时间戳+1次性的有效数字
使用Sentinel实现API接口防刷
在接口处就防刷
限流,超过系统可提供的请求,多余的请求加入队列,对于恶意用户ip加入黑名单
开启熔断器厚执行异常的操作,定时看熔断器是否开启或者关闭
流程分析
有些需要有后段的风控模块辅助进行