大家好,
今天给大家分享一下测试平台--接口测试平台。
先给大家分享一下我的心路历程:本人虽然毕业开始就一直从事自动化测试方面工作,但是之前的公司项目中并没有测试平台的使用,所以一直也是比较想搭建一个测试平台。由于本人自动化测试一直使用的python语言,所以搭建测试平台也是第一时间想选择Django框架。所以就去学习了一些django教学视频,学习到了django的一些基本使用,但是学完django基本使用之后,发现自己会搭建一些基本页面了。但是因为并没有使用过测试平台,所以遇到的第一个问题就是,我虽然会搭建一些页面了,但是如果让我搭一个测试平台,我不知道这个平台该实现哪些功能?或者说是这个平台页面该如何设计?最后也是请教了一些别的资深一点的同事给了我一些建议,跟着一些培训老师进行学习,最后搭建出来了这个接口自动化测试平台。其实这里面一些核心技术让本人独立搭建确实还有一些难度,现在只是跟着学习,目前依旧做不到这样全栈,还需要继续努力呀,哈哈。不过虽然....但是...毕竟本人也是从开始到最后部署上线这套项目全程参与的,目前已经全部完工部署到了服务器,所以也是给大家来做一个分享~~~ 如果有和我之前有一样困境的小伙伴,想学学测试平台可以看看我这里哦~
一、
本人这个测试平台是前后端分离的,前端代码暂不分享,后端是使用django RF框架实现。
共分为5个模块:bugs & projects & report & testplans & users
二、
表设计如下:
tb_bug (bug表):
create_time
:DateTimeField,用于记录创建时间。project
:ForeignKey字段,与projects.Project
表关联,表示所属项目。interface
:ForeignKey字段,与projects.Interface
表关联,表示所属接口。desc
:TextField,用于描述bug,最大长度为3000个字符。info
:JSONField,存储bug的基本信息,包括请求头、请求体、请求方式和响应结果。默认为空字典。status
:CharField,用于表示bug的状态,最大长度为40个字符。有以下选项:'未处理'、'处理中'、'处理完'、'无效bug'。默认为'未处理'。user
:CharField,用于记录提交者的名称,最大长度为40个字符。默认为空字符串。
tb_bug_handle(bug操作记录表):
create_time
:DateTimeField,用于记录创建时间。bug
:ForeignKey字段,与Bug
表关联,表示所属的bug。handle
:TextField,用于记录处理操作,可以是多行文本。可以为空。update_user
:CharField,用于记录更新用户的名称,最大长度为32个字符。可以为空。
tb_project(项目表):
name
:CharField,用于存储项目名称,最大长度为50个字符。leader
:CharField,用于存储负责人的名称,最大长度为50个字符。默认为空字符串。create_time
:DateTimeField,用于记录创建时间。
此外,Project
表还定义了两个方法:
info()
:返回一个包含项目相关信息的列表。每个信息包括名称('name')和值('value')。这些信息包括执行环境数量、测试场景数量、测试计划数量、接口数量、定时任务数量(未开发)以及执行记录数量。bugs()
:返回一个包含项目中不同状态的bug数量的列表。每个bug状态包括名称('name')和对应的数量('value')。这些状态包括未处理的bug数量、处理中的bug数量、处理完的bug数量以及无效bug的数量。
tb_interface(接口表):
project
:ForeignKey字段,与Project
表关联,表示所属的项目。使用on_delete=models.CASCADE
指定级联删除。该字段还定义了一个related_name
属性为interfaces
,用于在Project
模型中反向引用接口。name
:CharField,用于存储接口名称,最大长度为50个字符。url
:CharField,用于存储接口路径,最大长度为200个字符。method
:CharField,用于存储请求方法,最大长度为50个字符。type
:CharField,用于表示接口类型,最大长度为40个字符。有以下选项:'项目接口'和'外部接口'。默认为'项目接口'。
tb_test_env(测试环境表):
name
:CharField,用于存储测试环境的名称,最大长度为150个字符。project
:ForeignKey字段,与Project
表关联,表示所属的项目。使用on_delete=models.CASCADE
指定级联删除。该字段还定义了一个related_name
属性为test_envs
,用于在Project
模型中反向引用测试环境。global_variable
:JSONField,用于存储全局变量的配置。默认为空字典。debug_global_variable
:JSONField,用于存储在debug模式下的全局变量的配置。默认为空字典。db
:JSONField,用于存储数据库配置。默认为空列表。host
:CharField,用于存储base_url地址,最大长度为100个字符。可以为空。headers
:JSONField,用于存储请求头的配置。默认为空字典。global_func
:TextField,用于存储全局工具函数的代码。
tb_record(运行记录表):
create_time
:DateTimeField,用于记录创建时间。plan
:ForeignKey字段,与TestPlan
表关联,表示执行计划。使用on_delete=models.PROTECT
指定保护级别的级联删除。该字段还定义了一个related_name
属性为records
,用于在TestPlan
模型中反向引用运行记录。all
:IntegerField,用于存储用例总数。可以为空。默认为0。success
:IntegerField,用于存储成功的用例数量。可以为空。默认为0。fail
:IntegerField,用于存储失败的用例数量。可以为空。默认为0。error
:IntegerField,用于存储错误的用例数量。可以为空。默认为0。pass_rate
:CharField,用于存储执行通过率,最大长度为100个字符。可以为空。默认为0。tester
:CharField,用于存储执行者的名称,最大长度为100个字符。可以为空。test_env
:ForeignKey字段,与TestEnv
表关联,表示测试环境。使用on_delete=models.PROTECT
指定保护级别的级联删除。status
:CharField,用于存储执行状态,最大长度为100个字符。
tb_report(测试报告表):
info
:JSONField,用于存储测试报告的信息。默认为空字典。可以为空。record
:OneToOneField字段,与Record
表关联,表示测试记录。使用on_delete=models.PROTECT
指定保护级别的级联删除。
tb_test_plan(测试计划表):
create_time
:DateTimeField,用于记录创建时间。name
:CharField,用于存储测试计划的名称,最大长度为150个字符。project
:ForeignKey字段,与Project
表关联,表示所属的项目。使用on_delete=models.CASCADE
指定级联删除。该字段还定义了一个related_name
属性为test_plans
,用于在Project
模型中反向引用测试计划。scenes
:ManyToManyField字段,与TestScene
表关联,表示包含的测试场景。可以为空。
tb_test_scene(测试场景表):
project
:ForeignKey字段,与Project
表关联,表示所属的项目。使用on_delete=models.PROTECT
指定保护级别的级联删除。该字段还定义了一个related_name
属性为test_scenes
,用于在Project
模型中反向引用测试场景。name
:CharField,用于存储测试场景的名称,最大长度为50个字符。
tb_scene_data(场景步骤表):
step
:ForeignKey字段,与TestStep
表关联,表示步骤。使用on_delete=models.PROTECT
指定保护级别的级联删除。scene
:ForeignKey字段,与TestScene
表关联,表示场景。使用on_delete=models.PROTECT
指定保护级别的级联删除。sort
:IntegerField,用于指定执行顺序。可以为空。
tb_test_step(测试步骤表):
title
:CharField,用于存储用例的名称,最大长度为50个字符。interface
:ForeignKey字段,与Interface
表关联,表示接口。使用on_delete=models.CASCADE
指定级联删除。headers
:JSONField,用于存储请求头的信息。默认为空字典。可以为空。request
:JSONField,用于存储请求信息。默认为空字典。可以为空。file
:JSONField,用于存储上传的文件参数。默认为空列表。可以为空。setup_script
:TextField,用于存储前置脚本的内容。默认为空字符串。可以为空。teardown_script
:TextField,用于存储后置脚本的内容。默认为空字符串。可以为空。
upload_file(文件上传):
file
:FileField,用于存储上传的文件。该字段会在数据库中保存文件的路径。使用help_text
属性指定帮助文本,使用verbose_name
属性指定可读名称。info
:JSONField,用于存储文件的相关数据。默认为空列表。可以为空。
tb_crontab_job(定时任务表):
project
:ForeignKey字段,与Project
表关联,表示项目。使用on_delete=models.CASCADE
指定级联删除。create_time
:DateTimeField,用于存储创建时间。使用auto_now_add=True
指定在对象创建时自动记录当前时间。name
:CharField,用于存储定时任务的名称,最大长度为150个字符。该字段具有unique=True
属性,确保名称的唯一性。plan
:ForeignKey字段,与TestPlan
表关联,表示执行任务。使用on_delete=models.PROTECT
指定保护级别的级联删除。rule
:CharField,用于存储定时任务的执行规则,最大长度为80个字符。默认值为'* * * * *'。status
:BooleanField,用于表示定时任务的状态,是否开启。默认为False。env
:ForeignKey字段,与TestEnv
表关联,表示执行环境。使用on_delete=models.PROTECT
指定保护级别的级联删除。tester
:CharField,用于存储测试者的名称,最大长度为20个字符。可以为空。
tb_user(用户表):
- 继承自
AbstractUser
模型的字段,包括username
、password
、first_name
、last_name
、email
等。这些字段在AbstractUser
模型中已经定义了,包括一些验证和限制。 mobile
:CharField,用于存储用户的电话号码。最大长度为20个字符。该字段具有null=True
和blank=True
属性,允许为空。并且具有unique=True
属性,确保电话号码的唯一性。
三、项目原型图:
话不多说,上个图~
登录页面:
首页--选择项目页面:
项目首页:
首页下方记录着每次的测试报告:
接口管理:
(这里分为外部接口和内部接口)
接口测试页面:
可以选择前置脚本:
可以选择后置脚本:
测试场景:
测试计划:
测试环境:
定时任务:
BUG管理:
测试报告:
四、部署
本人是在Linux服务器进行部署的 。
需要下载几个小工具:docker
MariaDB:11.2.2
Redis:7.0.2
nginx:alpine
python3.8:alpine
项目架构图
django只是一个web框架,开发时运行的服务只做开发时用,部署时会使用WSGI服务器。这里我们选用gunicorn
它是一个python语言实现的UNIX系统下的WSGI http服务器。
在本容器中还需要运行celery的worker服务和beat服务。我们使用supervisor 进行进程控制。
一个项目肯定包含多个容器,每个容器都手动单独部署肯定费时费力。docker-compose可以通过脚本来批量构建镜像和启动容器,快速的部署项目。
docker-compose -p *** up -d --build
谢谢观看,
欢迎大家一起探讨学习,继续加油呀~