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

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

时间:2024-01-19 20:11:28浏览次数:30  
标签:info 封装 复习 assert sql 第五天 data logger 断言

 

方法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()
 

 

 

 

标签:info,封装,复习,assert,sql,第五天,data,logger,断言
From: https://www.cnblogs.com/xuhaotest/p/17975497

相关文章

  • 封装的子组件,才fromitem中,子组件的变化,如何被form监听到。
    子组件,应该有个onChange事件。问题:在嵌入自定义组件时,需要将子组件的onChange方法暴露出去。原因:1.form会监听的onChange方法和value变量(form是的一个属性)2.其它基于封装的组件如:,自定义的方法名必须叫onChange,变量名必须叫value,否则自定义组件的状态变化不能被form表单的onCha......
  • 封装自带取消请求功能的fetch请求
    封装自带取消请求功能的fetch请求为了防止我们的同一个请求被多次请求多次,而我们往往只是想要最后一次的结果,这就导致我们前面的请求都是无效请求,所以我们需要一个方法来取消前面的请求,可以参考这篇文档如何取消我们的请求˝❓:这是我自己尝试的封装,还存在一些问题,下面会说明......
  • 《拓扑学》复习笔记
    是1.15写的,但仅存了草稿,1.18终于想起来发布,没想到发布时间变成今天了(?麻,一点不懂,记录一下习题课感觉对于数学课,敲公式对学的效果比较有限,还是回去手写一遍其实写了,但截图发博客很麻烦。考前复习到凌晨三点,把讲义全看完了,但看过≠我会。此外还和好同学们讨论了往年......
  • 正则表达式复习七——JavaScript 中使用
    JavaScript使用JavaScript的正则表达式是由RegExp对象表示的,同时也可以使用正则表达式字面量。1.使用RegExp对象letpattern=newRegExp("pattern","flags");pattern是字符串形式的正则表达式模式。flags是字符串形式的修饰符,可以包含i,g,m等。letpattern......
  • 22.多协议封装设计
    多协议封装应用场景 问题:响应值不统一jsonxml断言比较困难解决方案:获得的响应信息全部转换为结构化的数据进行处理解决方案 participant请求asreqparticipant响应asresparticipantxml_响应asxml_resparticipant其他格式的响应asjs......
  • 正则表达式复习六——常见案例
    常用案例1.匹配邮箱地址/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/2.匹配URL/^(https?|ftp):\/\/(-\.)?([^\s\/?\.#-]+\.?)+(\/[^\s]*)?$/3.匹配日期(YYYY-MM-DD)/^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/4.手机号码/^[0-9]{10}$/5.身份证......
  • Day51 封装详解
    封装详解最重要的一句话:属性私有get/set该露的露,该藏的藏我们程序设计要追求“高内聚,低耦合”。//如大电视机取钱的ATM机包住内部处理数据的负责区域仅仅暴露外面部分开关等让用户操作高内聚就是类的内部......
  • 封装
    属性私有,get/setpublicclassApplication{  publicstaticvoidmain(String[]args){    /*    *1.提高程序的安全性,保护数据    *2.隐藏代码的实现细节    *3.统一接口    *4.提高了系统的维护性    **/   ......
  • svg使用封装-vue
    我们在项目中经常会使用到svg,这里对svg进行封装,以方便后续的使用。1.安装svg插件npmivite-plugin-svg-icons2.在vite.config.ts中引入,用来指定svg存放位置import{createSvgIconsPlugin}from"vite-plugin-svg-icons";import{resolve}from"path";constplugin......
  • D20XB80-ASEMI带康铜丝封装桥堆D20XB80
    编辑:llD20XB80-ASEMI带康铜丝封装桥堆D20XB80型号:D20XB80品牌:ASEMI封装:GBJ-5(带康铜丝)特性:插件、整流桥平均正向整流电流(Id):20A最大反向击穿电压(VRM):800V恢复时间:>2000ns最大RMS电压:引脚数量:5芯片个数:4最大正向压降:1.05V芯片尺寸:110MIL安装扭矩:推荐使用0.6N.m正向浪涌电流(IFSM):300A漏电......