首页 > 其他分享 >测试平台系列(98) 完善后置条件功能

测试平台系列(98) 完善后置条件功能

时间:2022-09-07 19:45:10浏览次数:94  
标签:case __ suffix 后置 self 98 测试 id

大家好~我是米洛!
我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的教程,希望大家多多支持下。为教程点个star,关爱博主,从你做起!
欢迎关注我的公众号米洛的测开日记,一起交流学习! 也可加入群聊一起讨论~

回顾

上一节我们完善了根据环境执行case功能,也差不多是有了在线调试的功能。随着我们的系统功能陆续完善,那数据清理器(后置条件)这个我们一直没解决的一个点,就不得不搞定之了。

由于前置条件/后置条件差异很小,并且模式也都接近,所以为了避免重复开发,我决定改造Constructor类,将后置条件并入之。

设计思路

在此,我决定不玩非主流,恢复前置/后置条件的叫法,方便大家理解。但已经定义好的类: Constructor我也不改名了。

前置条件表如何支持后置条件: 加个标志位

我们可以为constructor表定义一个suffix字段,这个字段是个bool值,默认为false。

这样原先有的数据,就都是false,也就代表都是前置条件(能不影响到之前case)。新加的条件,我们用suffix区分它是前置还是后置

说到数据库的变更,sqlalchemy没有提供特别方便的方式。我一般是用datagrip去修改:

  1. 选择表,进入编辑表功能

  1. 新增一个字段

点击+号,接着编辑字段信息。

  1. 编辑字段信息并选择execute

其实下面已经给出了具体的sql,直接执行也一样。

alter table pity_constructor
   add suffix boolean default false not null;

其他的包括索引啥的,都是可以这样编辑的。(如果对建表,加字段等sql不太熟悉的,可以用用这个工具,pycharm就集成了datagrip)

知道数据库连接信息即可

动手实战

说完了核心思路,但其实修改过程中发现不少变化,可能还有一些遗漏。本次修改我可能只展示一部分,更多修改请参考git本次commit:

https://github.com/wuranxu/pity/commit/743afc1c88c6e32d194800a5ef6861ed1bdf488e

  • 修改model
from sqlalchemy import Column, INT, String, BOOLEAN, UniqueConstraint, TEXT, select, desc

from app.models.basic import PityBase


class Constructor(PityBase):
    __tablename__ = 'pity_constructor'
    __table_args__ = (
        UniqueConstraint('case_id', 'suffix', 'name', 'deleted_at'),
    )

    type = Column(INT, default=0, comment="0: testcase 1: sql 2: redis 3: py脚本 4: 其它")
    name = Column(String(64), comment="数据初始化描述")
    enable = Column(BOOLEAN, default=True, nullable=False)
    constructor_json = Column(TEXT, nullable=False)
    value = Column(String(16), comment="返回值")
    case_id = Column(INT, nullable=False, comment="所属用例id")
    public = Column(BOOLEAN, default=False, comment="是否共享")
    index = Column(INT, comment="前置条件顺序")
    # 2021-12-18 是否是后置条件
    suffix = Column(BOOLEAN, default=False, comment="是否是后置条件,默认为否")

    def __init__(self, type, name, enable, constructor_json, case_id, public, user, value="", suffix=False, id=None):
        super().__init__(user, id)
        self.type = type
        self.name = name
        self.enable = enable
        self.constructor_json = constructor_json
        self.case_id = case_id
        self.public = public
        self.value = value
        self.suffix = suffix

    @staticmethod
    async def get_index(session, case_id, suffix=False):
        sql = select(Constructor).where(
            Constructor.deleted_at == 0, Constructor.case_id == case_id,
            Constructor.suffix == suffix,
        ).order_by(desc(Constructor.index))
        data = await session.execute(sql)
        query = data.scalars().first()
        # 如果没有查出来前/后置条件,那么给他0
        if query is None:
            return 0
        return query.index + 1

    def __str__(self):
        return f"[{'后置条件' if self.suffix else '前置条件'}: {self.name}]({self.id}))"

修改点在于:

  1. 唯一索引新增suffix字段
  2. 新增suffix字段
  3. 表继承自PityBase
  4. get_index中对删除的判断改为deleted_at == 0而不是None

这其中还引发了一个事情,数据库中deleted_at字段要从datetime类型改为bigint,因为历史原因,我们的deleted_at都是datetime,现在我们要一并调整。

可回顾第66节: 测试平台系列(66) 数据驱动之基础Model

https://mp.weixin.qq.com/s?__biz=MzIyMjUwOTk5Mw==&mid=2247485632&idx=2&sn=8f3f4e1f8098c3718ce7d9c4783476bb&chksm=e82d2606df5aaf10fc1426430f2dcb301f6923264ed2d2836c6aa5ecd8e8882b098aa39c1840&token=1149953909&lang=zh_CN#rd

需要调整的地方

可以看到引用的地方非常之多,大概就下面几个方向。

  1. 遇到Constructor.deleted_at == None的(判断条件是否被删除),要改为等于0

对应功能: 获取前后置条件,删除前后置条件等

  1. 执行case的日志,要能够区分前后置条件

对应功能: 用例执行前后置条件

  1. 接受ConstructorForm字段要加上suffix,并且必填

对应功能: 新增/编辑前后置条件

  1. 查询前后置条件的时候,要带上suffix

对应功能: 前后置条件的复制

这一波改动挺大,也可能出现一些问题。如果有问题可以及时留言反馈。

前端改动

前端改动相对较小,只是在切换tab的时候多了一个suffix字段的维护:

切换到后置条件,把suffix变为true,切换到前置条件则改为false。这样编辑前后置条件的时候,只需要读取那个suffix字段即可。

当然还有一点微调,这里由于篇幅问题就不展示了。参考commit:

https://github.com/wuranxu/pityWeb/commit/86af44531c500c7acb22f2fb7a386ab00598551c

看看最终的效果

标签:case,__,suffix,后置,self,98,测试,id
From: https://www.cnblogs.com/we8fans/p/16667044.html

相关文章

  • 第一周开学测试
    //学生类packageTest;publicclassStudent{privateStringname;privateintage;privateStringid;privateStringare;publicStringgetName......
  • 学习:Fiddler抓包在测试领域的四大应用
    抓包的意义:1、抓包用于定位前后端的BUG2、弱网测试3、接口测试或接口调试4、线上调试或网络挟持抓包的原理fiddler一打开自动打开计算机代理服务器抓包:数据报文。......
  • 一个无序到有序的测试代码
    看抖音里主播说到的一个无序变有序的测试,尝试按所说的条件写了一个javascript的测试 1<!DOCTYPEhtml>2<html>34<head>56<title>混沌到有......
  • 测试平台解决了什么问题?
    上周六和几个测试大佬吃饭,席间聊到了一个问题:很多公司在招测试开发,开发各种测试平台,目的是什么?测试平台解决了什么问题?顺着这个话题又聊了很多团队管理、向上管理的话题,......
  • Simulink集成模型测试太慢怎么办?
    Tips:现阶段模型开发大部分采用Simulink,为了验证模型实现了相关功能,需要对模型进行测试。模型测试(MiL)有单元测试和集成测试之分。单元测试中模型复杂度低,信号参数数量少,测......
  • EMC测试不合格如何整改?浅谈EMC整改措施
     关于EMC整改问题,其实能用三要素概括:干扰源、耦合电路、敏感器件;而EMC整改的常用方法也能用四要素概括:屏蔽、接地、滤波、去耦。     以下STS先浅谈3种常见的EM......
  • HTML页面修改辅助测试页面列表滑轮显示
    需求页面 如上图,我们在实际测试过程中,需要测试这个列表页在数据过多时,是否会有滑轮出现,依照我们常规操作,会需要我们操作业务流程,单条的走【申请】-【审批】等流程,会繁琐......
  • java---Collection接口中方法测试
    Collection接口中方法测试一,contains(Objectobj),containsAll(Collectioncoll1)@Testpublicvoidtest1(){Collectioncoll=newArrayList();......
  • 绫云系统--测试库与线上库 查询环境搭建
    一、测试环境数据库环境搭建1、测试环境数据库连接/usr/bin/ruby-e"$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/master/install)” 主机......
  • 98.validate-binary-search-tree 验证二叉搜索树
    二叉搜索树定义:节点左子树只包含小于当前节点的数;节点右子树只包含大于当前节点的数;所有左子树和右子树自身必须也是二叉搜索树。实际上,若中序遍历二叉搜索树,所得序列......