k8s发布应用后触发接口自动化测试 置顶!
2020-10-20
背景:
针对测试环境,在应用发布到k8s集群启动成功后自动触发接口自动化测试,如果测试不通过,应用不允许显示正常运行
原计划放到平台当中去做,不过这要排期一段时间,目前短时间要投入应用
解决方案:
readinessProbe使用command方式,执行自定义的工具完成健康检测、调用中台api触发自动化测试一系列动作。
工具设计思路:
- 使用golang封装http client,调用127.0.0.1:8888/actuator/info判断是否启动成功,如果启动成功,调用中台api触发接口自动化测试,传入参数如{"env":"test","app":"demo","image":"harbor.com/demo:1.0"}。
需要注意的是readinessProbe是周期执行的,要避免重复触发自动化测试,可以在初次就绪性检测通过后创建个本地文件,每次调用中台api前先检测该文件是否存在,存在就不再调用api了。减少开销,只判断http状态码 - 如果deployment下有n个pod(n=replicas>=2),就会触发n次数api接口调用,可以在中台api中做逻辑判断,对于相同image,在一定时间间隔内的就不再触发接口自动化测试了
- 中台api根据自己情况实现,比如调用jenkins任务、测试平台。
我们是调用的jenkins job方式,jenkins job是不支持同一个Job并行的。所以不能同时调用同一个job,我们会先检测app对应的Job是否存在,不存在则根据xml模板和相关参数取测试平台的一些信息,再自动创建临时的job执行。
项目
https://github.com/fish2018/readyCheck.git
deployment的yaml配置
需要注意的是,如果之前有使用的其他方式检测,再直接kubectl apply会提示不能使用多个readinessProbe检测方式,可以先把之前的删掉
readinessProbe:
exec:
command:
- /im-svc/readyCheck
initialDelaySeconds: 20
periodSeconds: 10