Java教程

自动化复习巩固第五天封装数据库及断言方法

本文主要是介绍自动化复习巩固第五天封装数据库及断言方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 

方法1:处理数据库方法

说明:数据库配置文件,主要存放数据库连接信息

settings.py文件

mysql_info = {
    "host": "xxxxx",
    "user": "xxxxx",
    "password": "xxxxx",
    "port": 3306,
    "charset": "utf8mb4",
    "database": "xxxxx",
    "autocommit": True
}

方法2:处理数据库结果方法

作用:处理数据库查询行数以及查询结果

handle_mysql.py文件

import pymysql
from loguru import logger
​
class HandleMysql:
​
    #连接数据库,初始化
    def __init__(self,**kwargs):
        self.conn = pymysql.connect(**kwargs,cursorclass=pymysql.cursors.DictCursor)
​
        #创建游标
        self.cur = pymysql.conn.curcor()
​
    #获取影响行数
    def select_and_get_row_counts(self,query_sql):
        logger.info(f"执行的sql语句是{query_sql}")
        counts = self.cur.execute(query_sql)
        logger.info(f"影响的行数是{counts}")
        return counts
​
    #获取影响数据
    def select_and_get_datas(self,query_sql,many=1):
        """
        :param query_sql: 执行sql语句
        :param many: many = 1 代表fetchone,many > 1 代表fetchmany,many < 1 代表fetchall
        :return:
        """
        counts = self.select_and_get_row_counts(query_sql)
        if counts > 0:
            if many == 1:
                data = self.cur.fetchone()
            elif many > 1:
                data = self.cur.fetchmany()
            else:
                data = self.cur.fetchall()
            logger.info(f"影响行数是{many},获取到的数据是{data}")
            return data
​
    #关闭数据库
    def close_db(self):
        self.cur.close()
        self.conn.close()

方法3:excel中前置sql语句执行处理方法

作用:在测试数据中可能会需要在数据库中查询结果来使用,所以在excel中写sql语句执行出来的结果设置为全局变量

handle_pre_sql.py文件

from loguru import logger
from settings import mysql_info
from tools.handle_mysql import HandleMysql
from tools.handle_global_data import GlobalData
from tools.handle_replace import replace_mark_by_data
​
​
#执行sql语句,设置全局变量
def execute_presql_and_set_globaldata(pre_sql):
    #首先替换sql语句里面的数据
    new_pre_sql = replace_mark_by_data(pre_sql)
    logger.info(f"替换后的sql语句是{new_pre_sql}")
​
    #连接数据库
    hmysql = HandleMysql(**mysql_info)
​
    #执行sql语句
    dict_data = hmysql.select_and_get_datas(new_pre_sql)
    logger.info(f"查询出来的数据是{dict_data}")
​
    #设置全局变量
    for key,value in dict_data.items():
        setattr(GlobalData,"key","value")
        logger.info(f"设置的全局变量名为{key},值是{value}")
​
    #关闭数据库
    hmysql.close_db()

方法4:exce预期结果断言方法

作用:提前准备好断言字段,然后在执行用例的时候将结果与excel中的预期结果部分进行断言

from loguru import logger
from tools.handle_replace import replace_mark_by_data
​
def assert_resp_data(resp_text,expected_str):
    """
    :param resp_text: 响应数据
    :param expected_str: 期望断言数据
    :return:
    """
    logger.info("开始断言响应数据......")
    #替换
    expected_str = replace_mark_by_data(expected_str)
​
    #将数据转换成列表
    assert_data_list = eval(expected_str)
​
    for assert_str in assert_data_list:
        logger.info(f"断言响应结果预期是{assert_str}")
        try:
            assert assert_str in resp_text
            logger.info("断言成功")
        except:
            logger.info(f"断言失败")
            raise
        # 面临的问题:有多个断言条件,某一个断言失败了,那剩下的断言就不会执行了。。
        # pytest有一个第三方库:pytest-assume -- 某个断言失败了不影响下一个断言执行 -- 自行拓展

方法5:数据库断言方法

作用:提取数据库中的结果进行断言

这里的excel中的数据库断言语句格式是:

[ {"sql": 'select * from tz_user where user_mobile="#new_phone#"', "compare_type": "int", "check": 1}, {"sql": 'select level_type from tz_user where user_mobile="#new_phone#"', "compare_type": "dict", "check": {"level_type": 0}} ]

from loguru import logger
from settings import mysql_info
from tools.handle_mysql import HandleMysql
from tools.handle_replace import replace_mark_by_data
​
def assert_db(assert_db_str):
    """
    :param assert_db_str: excel中的数据库断言字段
    :return:
    """
    #先替换
    assert_db_str = replace_mark_by_data(assert_db_str)
​
    #再转换成列表
    assert_db_list = eval(assert_db_str)
​
    #连接数据库
    hmysql = HandleMysql(**mysql_info)
​
    for one_assert in assert_db_list:
        if one_assert.get("compare_type") == "int":
            logger.info("执行sql语句,获取执行结果行数")
            result = hmysql.select_and_get_row_counts(one_assert.get("sql"))
        else:
            logger.info("执行sql语句,获取数据")
            result = hmysql.select_and_get_datas(one_assert.get("sql"))
​
        #对比实际与期望是否相等
        logger.info(f"实际结果为{result}")
        logger.info(f'期望结果为{one_assert.get("check")}')
        try:
            assert result == one_assert.get("check")
            logger.info("断言成功")
        except:
            logger.info("断言失败")
            raise
​
    hmysql.close_db()
 

 

 

 

这篇关于自动化复习巩固第五天封装数据库及断言方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!