头条项目接口自动化测试(七)之数据库测试

项目中数据库应用:

  • 1、数据准备

  • 为什么在自动化测试中需要连接项目数据库?

    • 在特定场景下,需要从数据库获取相关记录来断言或判断相关接口是否执行成功。
  • 为什么准备数据?

    • 由于无管理员权限,无法直接连接黑马头条线上数据库,所以将黑马头条数据库恢复到本机来达到学习的目的
  • 如何在本机创建数据库及相关表

    • 打开localhost ->鼠标右键–>运行sql文件—>hmtt.sql
    • 验证:关闭数据库连接–>重新打开数据库连接—>查看到hmtt
  • 2、数据库相关操作方法封装

  • 主要方法

    • def get_sql_one(sql):
      • 定义变量 cursor 、data
      • 获取游标对象
      • 调用指定方法 sql
      • data= 获取结果
      • 关闭游标对象
      • 关闭连接对象
      • 返回结果数据
  • 辅助方法

    • 获取连接对象封装
    • 获取游标对象封装
    • 关闭游标对象
    • 关闭连接对象
  • 代码:

"""
    目标:完成数据库相关工具类封装
    分析:
        1. 主要方法
            假设: def get_sql_one(sql)
        2. 辅助方法
            1. 获取连接对象
            2. 获取游标对象
            3. 关闭游标对象方法
            4. 关闭连接对象方法
"""
import pymysql

class ReadDB:
    # 定义连接对象
    conn=None
    # 获取连对象方法封装
    def get_conn(self):
        if self.conn is None:
            self.conn=pymysql.connect("127.0.0.1","root","dpl1215","hmtt",charset="utf8")
        return self.conn

    # 获取游标对象方法封装
    def get_cursor(self):
        return self.get_conn().cursor()
    # 关闭游标对象方法封装
    def close_cursor(self,cursor):
        if cursor:
            cursor.close()
    # 关闭连接对象方法封装
    def close_conn(self):
        if self.conn:
            self.conn.close()
            # 注意:关闭连接对象后,对象还存在内存中,需要手工设置为None
            self.conn=None
    # 主要 执行方法 获取单条结果 -> 在外界调用次方法就可以完成数据相应的操作
    def get_sql_one(self,sql):
        # 定义游标对象及数据变量
        sursor=None
        data=None
        try:
            #获取游标对象
            sursor=self.get_cursor()
            #执行sql
            sursor.execute(sql)
            #获取结果
            data=sursor.fetchone()
        except Exception as e:
            print("get_sql_one error",e)
        finally:
            #关闭游标和连接
            self.close_cursor(sursor)
            self.close_conn()
            #返回执行结果
            return data
    # 获取 所有数据库结果集
    def get_sql_all(self, sql):
        # 定义游标对象及数据变量
        sursor = None
        data = None
        try:
            # 获取游标对象
            sursor = self.get_cursor()
            # 调用执行方法
            sursor.execute(sql)
            # 获取所有结果
            data = sursor.fetchall()
        except Exception as e:
            print("get_sql_one error:", e)
        finally:
            # 关闭游标对象
            self.close_cursor(sursor)
            # 关闭连接对象
            self.close_conn()
            # 返回执行结果
            return data

    # 修改、删除、新增
    def update_sql(self, sql):
        # 定义游标对象及数据变量
        sursor = None
        data = None
        try:
            # 获取游标对象
            sursor = self.get_cursor()
            # 调用执行方法
            sursor.execute(sql)
            # 提交事务
            self.conn.commit()
        except Exception as e:
            # 事务回滚
            self.conn.rollback()
            print("get_sql_one error:", e)
        finally:
            # 关闭游标对象
            self.close_cursor(sursor)
            # 关闭连接对象
            self.close_conn()

  • 结合unittest执行
    • 步骤
      • 导包 unittest 数据库工具类
      • 新建测试类 继承
      • 新建测试方法
      • 定义 sql语句
      • 调用执行 数据库主方法 (get_sql_one)
      • 断言
    • 代码:
"""
目标:1、自动化测试操作头条项目数据库
      2、在数据库的news_collection表中,判断用户id(1)是否收藏了id(2)的文章,1代表未收藏、0代表收藏
"""
import unittest
from tools.read_database import ReadDB

class TestDataBase(unittest.TestCase):
    def test_db(self):
        #sql语句
        sql = "select is_deleted from news_collection where user_id=1 and article_id=2"
        #调用工具类
        data=ReadDB().get_sql_one(sql)
        # print(data)
        #设置断言
        self.assertEquals(0,data[0])

if __name__ == '__main__':
    unittest.main()
  • 扩展
    • 获取所有结果集
    • 获取单条数据 fetchone() 修改成fetchall()
    • 新增、删除、修改
    • 提交事务
    • 回滚事务

你可能感兴趣的:(项目测试实战,#,接口自动化测试项目实战)