测试平台经验分享--API Automation Test Platform

大家好,

今天给大家分享一下测试平台--接口测试平台。

先给大家分享一下我的心路历程:本人虽然毕业开始就一直从事自动化测试方面工作,但是之前的公司项目中并没有测试平台的使用,所以一直也是比较想搭建一个测试平台。由于本人自动化测试一直使用的python语言,所以搭建测试平台也是第一时间想选择Django框架。所以就去学习了一些django教学视频,学习到了django的一些基本使用,但是学完django基本使用之后,发现自己会搭建一些基本页面了。但是因为并没有使用过测试平台,所以遇到的第一个问题就是,我虽然会搭建一些页面了,但是如果让我搭一个测试平台,我不知道这个平台该实现哪些功能?或者说是这个平台页面该如何设计?最后也是请教了一些别的资深一点的同事给了我一些建议,跟着一些培训老师进行学习,最后搭建出来了这个接口自动化测试平台。其实这里面一些核心技术让本人独立搭建确实还有一些难度,现在只是跟着学习,目前依旧做不到这样全栈,还需要继续努力呀,哈哈。不过虽然....但是...毕竟本人也是从开始到最后部署上线这套项目全程参与的,目前已经全部完工部署到了服务器,所以也是给大家来做一个分享~~~ 如果有和我之前有一样困境的小伙伴,想学学测试平台可以看看我这里哦~

一、

本人这个测试平台是前后端分离的,前端代码暂不分享,后端是使用django  RF框架实现。

共分为5个模块:bugs & projects & report & testplans & users

二、

表设计如下:

tb_bug (bug表):

  1. create_time:DateTimeField,用于记录创建时间。
  2. project:ForeignKey字段,与projects.Project表关联,表示所属项目。
  3. interface:ForeignKey字段,与projects.Interface表关联,表示所属接口。
  4. desc:TextField,用于描述bug,最大长度为3000个字符。
  5. info:JSONField,存储bug的基本信息,包括请求头、请求体、请求方式和响应结果。默认为空字典。
  6. status:CharField,用于表示bug的状态,最大长度为40个字符。有以下选项:'未处理'、'处理中'、'处理完'、'无效bug'。默认为'未处理'。
  7. user:CharField,用于记录提交者的名称,最大长度为40个字符。默认为空字符串。

tb_bug_handle(bug操作记录表):

  1. create_time:DateTimeField,用于记录创建时间。
  2. bug:ForeignKey字段,与Bug表关联,表示所属的bug。
  3. handle:TextField,用于记录处理操作,可以是多行文本。可以为空。
  4. update_user:CharField,用于记录更新用户的名称,最大长度为32个字符。可以为空。

tb_project(项目表):

  1. name:CharField,用于存储项目名称,最大长度为50个字符。
  2. leader:CharField,用于存储负责人的名称,最大长度为50个字符。默认为空字符串。
  3. create_time:DateTimeField,用于记录创建时间。

此外,Project表还定义了两个方法:

  1. info():返回一个包含项目相关信息的列表。每个信息包括名称('name')和值('value')。这些信息包括执行环境数量、测试场景数量、测试计划数量、接口数量、定时任务数量(未开发)以及执行记录数量。
  2. bugs():返回一个包含项目中不同状态的bug数量的列表。每个bug状态包括名称('name')和对应的数量('value')。这些状态包括未处理的bug数量、处理中的bug数量、处理完的bug数量以及无效bug的数量。

tb_interface(接口表):

  1. project:ForeignKey字段,与Project表关联,表示所属的项目。使用on_delete=models.CASCADE指定级联删除。该字段还定义了一个related_name属性为interfaces,用于在Project模型中反向引用接口。
  2. name:CharField,用于存储接口名称,最大长度为50个字符。
  3. url:CharField,用于存储接口路径,最大长度为200个字符。
  4. method:CharField,用于存储请求方法,最大长度为50个字符。
  5. type:CharField,用于表示接口类型,最大长度为40个字符。有以下选项:'项目接口'和'外部接口'。默认为'项目接口'。

tb_test_env(测试环境表):

  1. name:CharField,用于存储测试环境的名称,最大长度为150个字符。
  2. project:ForeignKey字段,与Project表关联,表示所属的项目。使用on_delete=models.CASCADE指定级联删除。该字段还定义了一个related_name属性为test_envs,用于在Project模型中反向引用测试环境。
  3. global_variable:JSONField,用于存储全局变量的配置。默认为空字典。
  4. debug_global_variable:JSONField,用于存储在debug模式下的全局变量的配置。默认为空字典。
  5. db:JSONField,用于存储数据库配置。默认为空列表。
  6. host:CharField,用于存储base_url地址,最大长度为100个字符。可以为空。
  7. headers:JSONField,用于存储请求头的配置。默认为空字典。
  8. global_func:TextField,用于存储全局工具函数的代码。

tb_record(运行记录表):

  1. create_time:DateTimeField,用于记录创建时间。
  2. plan:ForeignKey字段,与TestPlan表关联,表示执行计划。使用on_delete=models.PROTECT指定保护级别的级联删除。该字段还定义了一个related_name属性为records,用于在TestPlan模型中反向引用运行记录。
  3. all:IntegerField,用于存储用例总数。可以为空。默认为0。
  4. success:IntegerField,用于存储成功的用例数量。可以为空。默认为0。
  5. fail:IntegerField,用于存储失败的用例数量。可以为空。默认为0。
  6. error:IntegerField,用于存储错误的用例数量。可以为空。默认为0。
  7. pass_rate:CharField,用于存储执行通过率,最大长度为100个字符。可以为空。默认为0。
  8. tester:CharField,用于存储执行者的名称,最大长度为100个字符。可以为空。
  9. test_env:ForeignKey字段,与TestEnv表关联,表示测试环境。使用on_delete=models.PROTECT指定保护级别的级联删除。
  10. status:CharField,用于存储执行状态,最大长度为100个字符。

tb_report(测试报告表):

  1. info:JSONField,用于存储测试报告的信息。默认为空字典。可以为空。
  2. record:OneToOneField字段,与Record表关联,表示测试记录。使用on_delete=models.PROTECT指定保护级别的级联删除。

tb_test_plan(测试计划表):

  1. create_time:DateTimeField,用于记录创建时间。
  2. name:CharField,用于存储测试计划的名称,最大长度为150个字符。
  3. project:ForeignKey字段,与Project表关联,表示所属的项目。使用on_delete=models.CASCADE指定级联删除。该字段还定义了一个related_name属性为test_plans,用于在Project模型中反向引用测试计划。
  4. scenes:ManyToManyField字段,与TestScene表关联,表示包含的测试场景。可以为空。

tb_test_scene(测试场景表):

  1. project:ForeignKey字段,与Project表关联,表示所属的项目。使用on_delete=models.PROTECT指定保护级别的级联删除。该字段还定义了一个related_name属性为test_scenes,用于在Project模型中反向引用测试场景。
  2. name:CharField,用于存储测试场景的名称,最大长度为50个字符。

tb_scene_data(场景步骤表):

  1. step:ForeignKey字段,与TestStep表关联,表示步骤。使用on_delete=models.PROTECT指定保护级别的级联删除。
  2. scene:ForeignKey字段,与TestScene表关联,表示场景。使用on_delete=models.PROTECT指定保护级别的级联删除。
  3. sort:IntegerField,用于指定执行顺序。可以为空。

tb_test_step(测试步骤表):

  1. title:CharField,用于存储用例的名称,最大长度为50个字符。
  2. interface:ForeignKey字段,与Interface表关联,表示接口。使用on_delete=models.CASCADE指定级联删除。
  3. headers:JSONField,用于存储请求头的信息。默认为空字典。可以为空。
  4. request:JSONField,用于存储请求信息。默认为空字典。可以为空。
  5. file:JSONField,用于存储上传的文件参数。默认为空列表。可以为空。
  6. setup_script:TextField,用于存储前置脚本的内容。默认为空字符串。可以为空。
  7. teardown_script:TextField,用于存储后置脚本的内容。默认为空字符串。可以为空。

upload_file(文件上传):

  1. file:FileField,用于存储上传的文件。该字段会在数据库中保存文件的路径。使用help_text属性指定帮助文本,使用verbose_name属性指定可读名称。
  2. info:JSONField,用于存储文件的相关数据。默认为空列表。可以为空。

tb_crontab_job(定时任务表):

  1. project:ForeignKey字段,与Project表关联,表示项目。使用on_delete=models.CASCADE指定级联删除。
  2. create_time:DateTimeField,用于存储创建时间。使用auto_now_add=True指定在对象创建时自动记录当前时间。
  3. name:CharField,用于存储定时任务的名称,最大长度为150个字符。该字段具有unique=True属性,确保名称的唯一性。
  4. plan:ForeignKey字段,与TestPlan表关联,表示执行任务。使用on_delete=models.PROTECT指定保护级别的级联删除。
  5. rule:CharField,用于存储定时任务的执行规则,最大长度为80个字符。默认值为'* * * * *'。
  6. status:BooleanField,用于表示定时任务的状态,是否开启。默认为False。
  7. env:ForeignKey字段,与TestEnv表关联,表示执行环境。使用on_delete=models.PROTECT指定保护级别的级联删除。
  8. tester:CharField,用于存储测试者的名称,最大长度为20个字符。可以为空。

tb_user(用户表):

  1. 继承自AbstractUser模型的字段,包括usernamepasswordfirst_namelast_nameemail等。这些字段在AbstractUser模型中已经定义了,包括一些验证和限制。
  2. mobile:CharField,用于存储用户的电话号码。最大长度为20个字符。该字段具有null=Trueblank=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

谢谢观看,

欢迎大家一起探讨学习,继续加油呀~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值