pytestx容器化执行引擎
本书作者:测试开发刚哥,文章版权归个人所有,未经授权请勿转载。 系统架构 前端、后端、pytest均以Docker容器运行服务,单独的容器化执行引擎,项目环境隔离,即用即取,用完即弃,简单,高效。 前端容器:页面交互,请求后端,展示HTML报告 后端容器:接收前端请求,启动任务,构建镜像,触发运行pytest,挂载HTML报告 pytest容器:拉取项目代码,指定目录执行,生成HTML报告 说明:构建镜像目前是在宿主机启动后端服务来执行docker命令的,暂未支持Kubernetes编排。宿主机安装了Docker,启动服务后,可以执行docker命令。如果采用容器部署后端,容器里面不包含Docker,无法构建,个人想法是可以借助K8S来编排,当前版本还未实现 系统流程 支持2种运行模式配置:容器和本地。 容器模式:判断是否支持docker,如果支持,构建pytest镜像,在构建时,通过git拉取项目代码,再运行容器,按照指定目录执行pytest,生成测试报告,并将报告文件挂载到后端。如果不支持,降级为本地运行。 本地模式:模拟容器行为,在本地目录拉取代码,执行pytest,生成测试报告。 效果展示 任务管理: 容器模式: 本地模式: 平台大改造 pytestx平台更轻、更薄,移除了用例管理、任务关联用例相关功能代码,只保留真正的任务调度功能,backend的requirements.txt解耦,只保留后端依赖,pytest相关依赖转移到tep-project。 那如何管理用例呢?约定大于配置,我们约定pytest项目已经通过目录维护好了一个稳定的自动化用例集,也就是说需要通过平台任务调度的用例,都统一存放在目录X下,这些用例基本不需要维护,可以每日稳定执行,然后将目录X配置到平台任务信息中,按指定目录执行用例集。对于那些不够稳定的用例,就不能放到目录X下,需要调试好以后再纳入。 为什么不用marker?pytest的marker确实可以给测试用例打标记,也有人是手动建立任务和用例进行映射,这些方式都不如维护一个稳定的自动化用例集方便,在我们公司平台上,也是维护用例集,作为基础用例集。使用pytest项目同理。 核心代码 一键部署 #!/bin/bash PkgName='backend' Dockerfile='./deploy/Dockerfile.backend' DockerContext=./ echo "Start build image..." docker build -f $Dockerfile -t $PkgName $DockerContext if [ $? -eq 0 ] then echo "Build docker image success" echo "Start run image..." docker run -p 8000:80 $PkgName else echo "Build docker image failed" fi FROM python:3.8 ENV LANG C.UTF-8 ENV TZ=Asia/Shanghai RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone WORKDIR /app COPY ./backend . RUN pip install -r ./requirements.txt -i \ https://pypi.tuna.tsinghua.edu.cn/simple \ --default-timeout=3000 CMD ["python", "./manage.py", "runserver", "0.0.0.0:80"] 数据库表 ...