• 项目实战(五)


    # 接口自动化:
    1:解决接口依赖/用例依赖
    1)通过fixture实现前置条件和后置条件
    2)将依赖接口放到测试用例excel中第一条case_id 0,使用该用例返回的数据
    2:解决数据连接的问题
    1)充值接口数据校验---数据库数据校验
    数据库连接的坑,db封装有缺陷
    充值前,需要获取充值前的可用余额
    充值后,需要获取充值后的可用余额,
    然后才会进行数据校验,
    但是如果充值前和充值后都是用的同一个数据库连接,那充值后获取的可用余额会有问题,
    充值后获取的可用余额仍然等于充值前的可用余额,
    原因:用的同一个数据库连接conn,充值后,数据有更新,但是仍然是用的旧的连接去获取的余额,在旧的连接中数据依然是之前旧的
    需要使用commit,事物提交,相当于更新下数据,然后再去查询,获得的余额就是最新的。
    Connection为快照。
    优化后的数据库封装:
    class DatabaseHandler:
    """数据库增删改查的封装"""

    def __init__(self,
    host="",
    port=3306,
    user="",
    password="",
    charset="utf8", # charset在mysql中是utf8,不是utf-8
    database="",
    cursorclass=DictCursor
    ):
    """
    初始化方法,初始化实例属性,供数据库连接的相关参数
    :param host: 数据库连接的主机名
    :param port: 数据库连接的端口号
    :param user: 数据库连接的用户名
    :param password: 数据库连接的密码
    :param charset:打开数据库的字符编码
    :param database:需要操作的数据库
    :param cursorclass:指定游标的类型
    """
    self.conn = pymysql.Connection(host=host,
    port=port,
    user=user,
    password=password,
    database=database,
    charset=charset,
    cursorclass=cursorclass)

    def query(self, sql, one=True):
    """
    数据库查询操作
    :param sql: 查询sql语句
    :param one: bool,判断是否只查询一条数据,默认值为True
    :return: 查询后的结果集,字典为元素的列表类型
    """
    cursor = self.conn.cursor()
    # 在查询前,事物提交,更新数据库,以确保查询到的是最新的数据
    self.conn.commit()
    cursor.execute(sql)
    if one:
    result = cursor.fetchone()
    else:
    result = cursor.fetchall()
    cursor.close()
    return result

    def insert(self, sql):
    """
    新增一条数据
    :param sql: 插入sql语句
    :return: bool,插入的结果
    """
    cursor = self.conn.cursor()
    flag = cursor.execute(sql)
    cursor.close()
    # 判断是否插入成功
    if flag:
    # 新增、更新数据需要提交,否则不生效
    self.conn.commit()
    return True
    else:
    return False

    def delete(self, sql):
    """
    删除数据
    :param sql: 删除sql语句
    :return: bool,删除结果
    """
    cursor = self.conn.cursor()
    flag = cursor.execute(sql)
    cursor.close()
    if flag:
    # 新增、更新数据需要提交,否则不生效
    self.conn.commit()
    return True
    else:
    return False

    def update(self, sql):
    """
    更新操作
    :param sql: 更新sql语句
    :return: bool,更新结果
    """
    cursor = self.conn.cursor()
    flag = cursor.execute(sql)
    cursor.close()
    # 判断是否更新
    if flag:
    # 新增、更新数据需要提交,否则不生效
    self.conn.commit()
    return True
    else:
    return False

    def close(self):
    self.conn.close()

    2)一个游标最好只要执行一次sql。所以在每次执行sql语句前打开一个游标,执行之后关闭游标

    # middleware中间件
    1:使common更加通用
    2:使应用层使用起来更加简单方便,好用
    任务:中间层,连接底层common和应用层tests
    使用项目的配置数据,填充common模块

    本文来自博客园,作者:%女王%,转载请注明原文链接:https://www.cnblogs.com/lynne-wu/p/14367602.html

  • 相关阅读:
    Spring IoC 容器概述
    OpenSSL生成SSL证书
    吴恩达老师深度学习课程Course4卷积神经网络-第二周课后作业
    吴恩达老师深度学习课程Course4卷积神经网络-第一周课后作业
    PageHelper在SpringBoot的@PostConstruct中不生效
    一个关于List的IndexOutOfBoundsException异常记录
    Mysql中通过关联update将一张表的一个字段更新到另外一张表中
    logback 常用配置(详解)
    Insert into select语句引发的生产事故
    Redis为什么变慢了?常见延迟问题定位与分析
  • 原文地址:https://www.cnblogs.com/lynne-wu/p/14367602.html
Copyright © 2020-2023  润新知