数据工厂系列(25)用例衍生操作-上篇

大家好~我是小方,欢迎大家关注笋货测试笔记 体完记得俾个like呀

回顾

在上篇中项目相关的接口已经开发完毕了(后面还有个配置git webhooks同步项目),还有一些细节需要小修小补...接着后面的内容,就围绕脚本来讲,后面脚本统一称呼为用例(case)

case衍生操作

本来一开始想着先设计case列表接口,但是后来想了想,先把case衍生操作(点赞和收藏)先设计,因为在前端展示本人是否已点赞/已收藏,该case的点赞数和收藏数,整个列表效果图可具体看下图:

case点赞功能

case 点赞比较简单,无非就是点赞的时候插入一条记录,取消点赞时,删除数据,比较简单的crud功能

  • 表设计
python 复制代码
from sqlalchemy import Column,INT
from app.models.base import FunBaseModel

class DataFactoryCasesLike(FunBaseModel):
    """点赞表"""
    __tablename__ = 'data_factory_cases_like'

    cases_id = Column(INT, nullable=False, comment="造数场景id")

    def __init__(self, cases_id, user, del_flag=0, id=None):
        super().__init__(create_id=user['id'], create_name=user['username'], del_flag=del_flag, id=id)
        self.cases_id = cases_id
  • crud逻辑设计

点赞时,如果没有点赞记录,直接新增点赞记录,如果有点赞记录,但是是删除状态,直接将删除状态置为未删除;取消点赞,直接将点赞记录置为删除

python 复制代码
class LikeOperationDao(BaseCrud):

    model = DataFactoryCasesLike

    @classmethod
    def like(cls, cases_id: int, user: dict) -> bool:
        case = cls.get_with_first(not_del = True, cases_id = cases_id, create_id = user['id'])
        # 已存在点赞记录
        if case:
            # 但是已经点赞了的
            if case.del_flag == DeleteEnum.no.value:
                # 将点赞记录置为删除 == 取消点赞
                cls.delete_by_id(id = case.id, user = user, not_del = True)
                return False
            else:
                # 删除状态的,置为未删除 == 点赞
                cls.update_by_id(model = dict(id = case.id, del_flag = DeleteEnum.no.value), user = user, not_del = True)
                return True
        # 不存在点赞记录,新增点赞记录 == 点赞
        else:
            cases = DataFactoryCasesLike(cases_id, user)
            cls.insert_by_model(model_obj = cases)
            return True

逻辑比较简单,注释都已经写好了,这里basecrud有个小改动,查询数据时,需要加上忽略已删除数据的

写好crud逻辑之后,之后编写like_logic 比较简单 ,接着放进路由函数中

绑定路由

最后测试一下

case收藏功能

这里的收藏逻辑和点赞逻辑一致,直接复用好了,表设计、crud逻辑设计跟点赞一样,这里就先略过了~

测试一下收藏功能

初始化项目

在main.py中,startup时我加了个步骤-初始化项目,其实逻辑很简单,就是循环拉取项目,为什么要这样子做呢?因为后面如果用docker部署的话,容器化部署,脚本项目和后端服务都是解耦的,部署完之后,脚本项目就不存在了,如果没有启动时自动初始化项目,每次部署完之后都得去平台手动初始化项目,比较麻烦

但是这里有个问题!这段逻辑如果抛出异常了,会阻塞主线程,导致无法启动,这个我们再要研究一下怎么填坑...

总结

今天已经完成了用例的点赞和收藏功能开发,比较简单,还有其他地方小修小补,后面我们继续围绕case相关的功能开发

相关推荐
MoRanzhi12032 小时前
第3篇 · 使用 PyQt5 实现 2048 桌面版游戏:MVC 架构与撤销和重做
python·mvc·pyqt5·桌面应用开发·gui开发·2048游戏·撤销与重做
蚰蜒螟2 小时前
从 Java SocketChannel 到 TCP 挥手:一次 close() 的完整调用链与引用计数解析
java·python·tcp/ip
Smoothcloud润云3 小时前
GPU算力平台跑知识库问答,模型回答总跑偏?先排查检索链路
人工智能·python·深度学习·gpu算力·gpu
mklpo1473 小时前
python3:如何按照实际执行需求导入模块,而不是启动时统一导入?(Python3.15)。2026-10-20
开发语言·人工智能·python
夜晚回家4 小时前
Python 赋值运算符详解 | 从 = 到 +=,一张记账单讲清复合赋值
开发语言·python
Maya动画技术4 小时前
pptx批量转png图片工具
python
MoRanzhi12034 小时前
第4篇 · 使用 PyQt5 实现 2048:平滑动画与性能优化
python·性能优化·qtimer·pyqt5·qpainter·gui动画·2048游戏
海姐软件测试4 小时前
Python 自动化与 AI 结合:基于 Jenkins 的回归验证实践
人工智能·python·自动化
Haoyunyi5 小时前
2026年做期货量化,和三年前已经不是一回事了
大数据·人工智能·python·金融·区块链
再__努力1点5 小时前
一个开源的AI边缘计算平台:一个项目把算能、瑞芯微、x86的NPU全打通了
人工智能·python·课程设计·媒体·流媒体