测试开发-后端开发新增testcase测试用例逻辑(八)

新增测试用例后端逻辑

1. 新增do层的testcase_entity.py 实体类

from server import db


class TestcaseEntity(db.Model):

    # 表名字
    __tablename__ = "testcase"
    # 用例ID,主键
    id = db.Column(db.Integer, primary_key=True)
    # 用例标题,唯一
    title = db.Column(db.String(64), nullable=True, unique=True)
    # 用例等级,不为空
    level = db.Column(db.String(16), nullable=True)
    # 用例步骤,可以重复
    step = db.Column(db.String(128), nullable=True)
    # 预期结果
    expect = db.Column(db.String(64), nullable=True)

    # 返回结果为字段类型
    def as_testcase_entity_dict(self):
        return {"id": self.id, "title": self.title, "level": self.level, "step": self.step, "expect": self.expect}

2. 新增dao层的testcase_dao.py

(dao层class类继承do层类)

from server import db
from util.log_util import Log
from do import TestcaseEntity

"""继承testcaseEntity类"""

class TestcaseDAO(TestcaseEntity):
    log = Log()

    def get_testcase(self,id):
        """
        查询测试用例
        :return:
        """
        case_info = TestcaseDAO.query.filter_by(id=id).first()
        self.log.info(f"查询单个测试用例的结果:{case_info}")
        return case_info

    def get_all_testcase(self):
        """
        查询所有测试用例
        :return:
        """
        case_info = TestcaseDAO.query.all()
        self.log.info(f"查询所有测试用例的结果:{case_info}")
        return case_info

    def add_testcase(self,TestcaseEntity):
        """新增测试用例"""
        db.session.add(TestcaseEntity)
        db.session.commit()
        self.log.info(f"新增的测试用例为:{TestcaseEntity}")
        return TestcaseEntity.id


    def delete_testcase(self,id):
        """
        删除测试用例
        :param id:
        :return:
        """
        case_info = TestcaseDAO.query.filter_by(id=id).first()
        self.log.info(f"删除的测试用例为:{id}")
        db.session.delete(case_info)
        db.session.commit()

    def update_testcase(self,TestcaseEntity):
        """
        更新测试用例
        :param TestcaseEntity:
        :return:
        """
        case_info = TestcaseDAO.query.filter_by(id=TestcaseEntity.id).first()
        case_info.title = TestcaseEntity.title
        case_info.step = TestcaseEntity.step
        case_info.level = TestcaseEntity.level
        case_info.expect = TestcaseEntity.expect
        db.session.commit()
        self.log.info(f"更新的测试用例为:{TestcaseEntity}")
        return TestcaseEntity.id

3. 新增service层testcase_serivice.py 逻辑

from dao.testcase_dao import TestcaseDAO
from util.log_util import Log

class TestcaseService:

    def __init__(self):
        self.testcase_dao = TestcaseDAO()
        self.log = Log()


    def get_filter_testcase(self,id):
        """
        查询过滤的测试用例
        :param id:
        :return:
        """
        res = self.testcase_dao.get_testcase(id) # 调用DAO层
        if res:
            return res
        else:
            self.log.info("未查询到当前测试用例")
            return False


    def get_all_testcase(self):
        """
        查询所有测试用例
        :return:
        """
        res = self.testcase_dao.get_all_testcase()
        if res:
            return res
        else:
            self.log.info("未查询到所有测试用例")
            return False


    def create_testcase(self,TestcaseDAO):
        """
        创建测试用例
        :param TestcaseDAO:
        :return:
        """
        res = self.testcase_dao.get_testcase(TestcaseDAO.id)
        if res:
            self.log.info("测试用例已存在,无法新增")
            return False
        else:
            return self.testcase_dao.add_testcase(TestcaseDAO)


    def delete_testcase(self,id):
        """
        删除测试用例
        :param id:
        :return:
        """
        res = self.testcase_dao.get_testcase(id)
        if res:
            self.testcase_dao.delete_testcase(id)
            self.log.info(f"删除的用例为:{res}")
            return res
        else:
            self.log.info(f"测试用例不存在,无法删除")
            return False



    def update_testcase(self, TestcaseDAO):
        """
        更新测试用例
        :param TestcaseDAO:
        :return:
        """
        res = self.testcase_dao.get_testcase(TestcaseDAO.id)
        if res:
            return self.testcase_dao.update_testcase(TestcaseDAO)
        else:
            self.log.info("修改的测试用例不存在")
            return False

4. 新增controller层的testcase_controller.py 逻辑

from flask import request, jsonify
from flask_restx import Resource, Namespace

from dao.testcase_dao import TestcaseDAO
from util.log_util import Log
from server import api
from service.testcase_service import TestcaseService

log = Log()
testcase_service = TestcaseService()


testcase_ns = Namespace("testcase", description="测试用例管理")


@testcase_ns.route("")
class TestcaseController(Resource):



    get_parser = api.parser()
    get_parser.add_argument("id", type=int, location="args")

    @testcase_ns.doc(description='用例查询接口')
    @testcase_ns.expect(get_parser)
    def get(self):
        """
        查询单个/多个
        :return:
        """
        case_id = request.args.get("id")
        log.info(f"接受的前端参数为:<========={case_id}")
        # 传参数,查询单个
        if case_id:
            res = testcase_service.get_filter_testcase(case_id)
            # 查询存在的ID用例
            if res:
                datas = [testcase_service.get_filter_testcase(case_id).as_testcase_entity_dict()]
                log.info(f"debug=>>>>>>>>>>>>{datas}")
                return jsonify({"code":0, "msg":"search testcase success","data":datas})
            # 查询不存在的ID用例
            else:
                return jsonify({"code": 0, "msg": "search testcase success", "data": res})
        else:
            # 不传参数查询所有
            datas = testcase_service.get_all_testcase()
            all_datas = [data.as_testcase_entity_dict() for data in datas]
            return jsonify({"code":0, "msg":"search all testcase success","data":all_datas})



    put_parser = api.parser()  # 添加如下参数:参数以及类型和对象
    put_parser.add_argument("id", type=int, required=True, location="json")
    put_parser.add_argument("title", type=str, required=True, location="json")
    put_parser.add_argument("level", type=str, required=True, location="json")
    put_parser.add_argument("step", type=str, required=True, location="json")
    put_parser.add_argument("expect", type=str, required=True, location="json")

    @testcase_ns.doc(description='用例修改接口')
    @testcase_ns.expect(put_parser)
    def put(self):
        testcase_data = request.json
        log.info(f"接收更新测试用例的参数<========{testcase_data}")
        testcase_dao = TestcaseDAO(**testcase_data)
        res = testcase_service.update_testcase(testcase_dao)
        if res:
            return jsonify({"code":0, "msg":"update testcase success", "data":res})
        else:
            return jsonify({"code":40001, "msg":"update testcase fail", "data":res})



    post_parser = api.parser()  # 添加如下参数:参数以及类型和对象
    post_parser.add_argument("id", type=int, required=True, location="json")
    post_parser.add_argument("title", type=str, required=True, location="json")
    post_parser.add_argument("level", type=str, required=True, location="json")
    post_parser.add_argument("step", type=str, required=True, location="json")
    post_parser.add_argument("expect", type=str, required=True, location="json")

    @testcase_ns.doc(description='用例新增接口')
    @testcase_ns.expect(post_parser)
    def post(self):
        testcase_data = request.json
        log.info(f"接收新增测试用例的参数<========{testcase_data}")
        testcase_dao = TestcaseDAO(**testcase_data)
        res = testcase_service.create_testcase(testcase_dao)
        if res:
            return jsonify({"code":0, "msg":"create testcase success", "data":res})
        else:
            return jsonify({"code":40001, "msg":"create testcase fail", "data":res})



    delete_parser = api.parser()
    delete_parser.add_argument("id", type=int, required=True, location="json")

    @testcase_ns.doc(description='用例删除接口')
    @testcase_ns.expect(delete_parser)
    def delete(self):
        case_id = request.json.get("id")
        log.info(f"接收删除测试用例的参数<========{case_id}")
        if case_id:
            testcase_service.delete_testcase(case_id)
            return jsonify({"code":0, "msg":"delete testcase success","data":case_id})
        else:
            return jsonify({"code":40001, "msg":"delete testcase fail","data":case_id})

5. 新增server启动类的接口命名空间

def add_router():
    from controller.user_controller import user_ns
    from controller.login_controller import login_ns
    from controller.register_controller import register_ns
    from controller.testcase_controller import testcase_ns
    api.add_namespace(user_ns,"/user") # 添加api的命名空间,解决swagger不展示内容的问题
    api.add_namespace(login_ns, "/login")
    api.add_namespace(register_ns, "/register")
    api.add_namespace(testcase_ns, "/testcase")


if __name__ == "__main__":
    add_router()
    app.run(debug=True)

6. 在swagger接口进行接口测试

在这里插入图片描述

  • 新增接口测试
    在这里插入图片描述
    mysql数据已新增成功
    在这里插入图片描述

  • 查询结果测试

    • 查询单个

    在这里插入图片描述

    • 查询所有
      在这里插入图片描述

    • 查询不存在
      在这里插入图片描述

  • 更新测试用例
    在这里插入图片描述
    验证DB是否一致成功
    在这里插入图片描述

  • 删除测试用例
    在这里插入图片描述
    验证删除是否成功
    在这里插入图片描述

以上是testcase的后端增删改查逻辑

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值