首页 > 数据库 > pytest + yaml 框架 -57.用例前置和后置操作执行sql

pytest + yaml 框架 -57.用例前置和后置操作执行sql

时间:2023-10-09 20:46:40浏览次数:43  
标签:yaml 步骤 57 用例 sql test 执行 com

前言

前面一篇已经介绍在用例中可以查询以及在断言中实现sql,本篇讲解在用例的前置和后置操作中执行sql
配置mysql环境,参考前面一篇https://www.cnblogs.com/yoyoketang/p/16977960.html
有 2 内置的函数可以使用

  • query_sql(sql) 查询 sql, 查询无结果返回[], 查询只有一个结果返回 dict, 查询多个结果返回 List[dict]
  • execute_sql(sql) 执行 sql, 操作新增,修改,删除的 sql

按步骤执行sql

方案一:可以对测试用例,加一个步骤,这样就可以实现在接口的请求前或请求后执行sql

请求前执行 sql, 执行sql的函数随便定义一个关键字,比如print,variables,extract 它都会去执行函数

config:
  name: 1.执行sql当成用例的步骤
  variables:
    sql1: update auth_user set email='[email protected]' where username like 'test';
test_x1:
-
  name: 步骤1-请求前执行sql
  print: '${execute_sql(sql1)}'
-
  name: 步骤2-执行用例
  request:
    url: http://example.com
    method: get

请求后执行 sql

config:
  name: 1.执行sql当成用例的步骤
  variables:
    sql1: update auth_user set email='[email protected]' where username like 'test';
test_x2:
-
  name: 步骤1-执行用例
  request:
    url: http://example.com
    method: get
-
  name: 步骤2-请求后执行sql
  print: '${execute_sql(sql1)}'

同一个步骤中实现

方案二:如果你不想分2个步骤,在一个用例步骤中也能实现

  • variables 关键字是在请求之前执行的,所以可以在variables中执行sql,实现前置操作
  • extract 关键字是在请求之后执行的,所以可以在extract中执行sql,实现后置操作

使用示例

config:
  name: 1.执行sql当成用例的步骤
  variables:
    sql1: update auth_user set email='[email protected]' where username like 'test';
    sql2: update auth_user set email='[email protected]' where username like 'test';
test_x3:
  name: 步骤1-执行用例
  variables:
    x1: '${execute_sql(sql1)}'
  request:
    url: http://example.com
    method: get
  extract:
    x2: '${execute_sql(sql2)}'

自定义fixture实现前置和后置操作

pytest 框架可以用fixture来实现用例的前置和后置操作,于是可以在conftest.py 中自定义fixture来完成
方案三:自定义fixture功能

# conftest.py
from pytest_yaml_yoyo.db import ConnectMysql
import pytest


@pytest.fixture(scope='session')
def db_instance(environ):
    # 连上数据库,读取环境配置
    db = ConnectMysql(**environ.DB_INFO)
    yield db
    db.close()


@pytest.fixture()
def run_sql(db_instance):
    sql1 = "update auth_user set email='[email protected]' where username like 'test';"
    res = db_instance.execute_sql(sql1)
    print(f'前置操作: {res}')
    yield
    sql2 = "update auth_user set email='[email protected]' where username like 'test';"
    res = db_instance.execute_sql(sql2)
    print(f'后置操作: {res}')

yaml 用例部分

config:
  name: 1.执行sql当成用例的步骤
  fixtures: run_sql
  variables:
    sql1: update auth_user set email='[email protected]' where username like 'test';
test_x2:
  name: 步骤1-执行用例
  request:
    url: http://example.com
    method: get

使用误区:能否用hooks钩子功能实现操作sql?

关于hooks钩子功能介绍参考这篇https://www.cnblogs.com/yoyoketang/p/16938512.html
hooks 功能的目的是请求预处理,一般接口的sign前面,接口参数加密可以用到,还有response的接口返回对象加密或其它预处理。
操作sql是用例的前置和后置操作,跟接口的预处理没啥关系,所以不能在hooks里面执行sql。

标签:yaml,步骤,57,用例,sql,test,执行,com
From: https://www.cnblogs.com/yoyoketang/p/17753094.html

相关文章

  • 题解 CF457F 【An easy problem about trees】
    尝试理解,感谢cz_xuyixuan的题解。算作是很多情况的补充说明。我们不妨先二分答案,将\(\gemid\)的设为\(1\),\(<mid\)的设为\(0\),于是问题转化为了权值均为\(0/1\)的版本。我们称一棵树的大小为其非叶节点数。我们称一棵大小为奇数的树为奇树,大小为偶数的树为偶树。对......
  • pyyaml 中文亂碼
    https://www.cnblogs.com/BlueSkyyj/p/12781752.html解决办法加入参数allow_unicode=Truefw=open(yamlFile,'a',encoding='utf-8')w=ryaml.dump(w,fw,allow_unicode=True)fw.close()......
  • (allure报告定制)动态显示模块名和用例标题
    场景:当自动化测试使用excel测试用例驱动时,动态显示模块名和用例标题就很有用。https://blog.csdn.net/lixiaomei0623/article/details/120273737一、allure报告动态参数化展示模块名和用例标题使用@pytest.mark.parametrize参数化完成数据驱动时,如果标题写死或者使用别名的方......
  • 【UVA 12657】Boxes in a Line 题解(静态双向链表)
    您在编号为1的表格上有n个方框。n从左到右。您的任务是模拟4命令类型:•1XY:将框X向左移动到Y(如果X已经是Y的左侧,则忽略此项)•2XY:将框X向右移动到Y(如果X已经是Y的右侧,则忽略此项)•3XY:交换盒X和Y•4:反转整条线路。命令保证有效,即X不等于Y。例如,如果n=6,在执行114之后,该行......
  • C# Dx截图初始化报错“SharpDX.SharpDXException: HRESULT: [0x80070057], Module: [G
    最近发现Dx截图创建输出设备时output.QueryInterface<Output1>().DuplicateOutput报错:“SharpDX.SharpDXException:HRESULT:[0x80070057],Module:[General],ApiCode:[E_INVALIDARG/InvalidArguments],Message:参数错误。经过验证,如果一个进程多次创建输出设备(多次调用o......
  • CF1857B Maximum Rounding
    题目大意给定一个自然数\(n\),可以对任意一位进行四舍五入,可以进行任意次,求能得到的最大数。\(n\)的长度不超过\(2\times10^5\),没有前导零。solution首先,选择四舍五入的数一定\(\ge5\),不然对答案没有贡献。其次,高位的数可能会受到低位的进位,这启发我们从低位向高位考虑......
  • YAML标记语言格式备忘
    简介YAML(/ˈjæməl/,尾音类似camel骆驼)是一个可读性高,用来表达数据序列化的格式。YAML参考了其他多种语言,包括:C语言、Python、Perl,并从XML、电子邮件的数据格式(RFC2822)中获得灵感。ClarkEvans在2001年首次发表了这种语言,另外IngydötNet与OrenBen-Kiki也是这语言的共同设计者......
  • AtCoder Grand Contest 057 E RowCol/ColRow Sort
    洛谷传送门AtCoder传送门首先考虑一个经典的套路:转\(01\)。具体而言,我们考虑若值域是\([0,1]\)怎么做。发现可以很容易地判定一个\(A\)是否合法。设矩阵第\(i\)行的和为\(r_i\),第\(j\)列的和为\(c_j\),那么合法当且仅当\(A\)的\(\{r_i\}\)和\(\{c_j\}\)(可重集......
  • 深入了解iPhone 15 Pro内部结构和技术组件338500537、TPS6565780、338500843、SN300
    TechInsights团队正在拆解iPhone15Pro,以揭示其中的创新,包括使用台积电3nm工艺的全新A17芯片,提供了深入了解iPhone15Pro内部结构和技术组件。NXPNFC控制器安全元件SN300:(SN300VUK)Apple/Cirrus逻辑音频放大器338500537TiAMOLED显示器电源TPS6565780KIOXIA256GBNAND闪存App......
  • vulnhub_phpmyadmin_CVE-2016-5734漏洞复现
    漏洞复现练习漏洞简介phpMyAdmin是一套开源的、基于Web的MySQL数据库管理工具。在其查找并替换字符串功能中,将用户输入的信息拼接进preg_replace函数第一个参数中。在PHP5.4.7以前,preg_replace的第一个参数可以利用\0进行截断,并将正则模式修改为e。众所周知,e模式的正则支持......