k8s发布应用后触发接口自动化测试

2020-10-20

背景:

针对测试环境,在应用发布到k8s集群启动成功后自动触发接口自动化测试,如果测试不通过,应用不允许显示正常运行
原计划放到平台当中去做,不过这要排期一段时间,目前短时间要投入应用

解决方案:

readinessProbe使用command方式,执行自定义的工具完成健康检测、调用中台api触发自动化测试一系列动作。

工具设计思路:

  1. 使用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状态码
  2. 如果deployment下有n个pod(n=replicas>=2),就会触发n次数api接口调用,可以在中台api中做逻辑判断,对于相同image,在一定时间间隔内的就不再触发接口自动化测试了
  3. 中台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

标题:k8s发布应用后触发接口自动化测试
作者:fish2018
地址:http://www.devopser.org/articles/2020/10/20/1603176155444.html