背景:公司用亚马逊云,接上文背景用亚马逊aws codebuild创建支持多环境运行的接口脚本_weixin_44043467的博客-CSDN博客_亚马逊脚本
1. 对于上文的执行,一次执行8个地区时间有点长,而且我们分国内国外,国外服务是美国、英国、新加坡三个主要地区,其他区域由对应的主服务区转发服务,海外流水线建了三条,以防止一次性执行时间过长,减少执行时间;其次,存在部分地区镜像更新成功,部分地区更新不成功的情况,如果一个流水线执行浪费时间。
2.针对以上情况,将国外流水线分成三个地区,美国、英国、新加坡,国内整两套,区分线上和dev环境的。国内可以提交到一个code commit仓库,国外需提交到国外的一个code commit仓库,国外也只需选定一个区域建流水线就行,不需要去分三个地方建。
3. 国内线上环境和测试环境执行时,依然用shell脚本去执行替换命令,如下所示:
change_env.sh如下:
构建的yaml文件定义如下:
国内安装包建议用清华源镜像,比较快,用国外的偶尔会报错,安装不上
如果用例比较多,执行时间比较长,codebuild默认超时是一个小时,如果超时没有执行完会报错,这时可以考虑加入多线程去执行,前提是用例之间没有相互依赖关系,我用了一个进程4个线程去执行,时间大大缩短。
没用多线程之前超时报错
启用多线程之后
4. 国外将之前的脚本分成三个,对应的写三个脚本,建三个codebuild project,分别挂在对应的流水线下执行就行;如果不想写shell脚本的话,就直接在Buildspec文件中直接写命令,我是写脚本替换的
test_eu.sh文件内容如下,我的用例中有中国区专有的用例,用@pytest.mark.China进行标注了,所以国外区执行需排除标注为中国区的用例,添加参数-m "not China"
执行的最多区的,新加坡的执行时间也就20分钟左右
如果想执行的更快,可以修改参数workers, 多加进程,或者 --test-per-workers 多加线程,这样执行速度会更快。
5. 如果codebuild用亚马逊服务器标准4.0,有可能python版本需要3.9以上,将Buildspec文件中python的版本由3.8改为3.9即可。
6. 如果用例中包含很多大文件,可能执行环境就需要改大一点,点击codebuild project——编辑——环境,将内存改大
7. 流水线只有部署的时候会执行,线上接口需要持续监控,以便出错了能及时修改,将codebuild project构建一个触发器,点进你的codebuild project,点击构建触发器——添加触发器,如下图,我的触发器是每周一到周六晚上十点执行(东八区),这里的时间设置是伦敦标准时间,如果要换算需要+8个小时
这样用例就可以定时执行了,出错了会发邮箱告诉我哪个用例有问题,这样可以对应去寻找问题解决,就很方便了。