数据库中的预期结果写的是SQL语句

从表格中读取到SQL语句,再去数据库获取真正的预期结果

# -*- coding: utf-8 -*-
# @Time : 2020/2/18 9:50
# @File : excel_with_db_23.py
# @Author: Hero Liu
# 从数据库中获取预期结果

from openpyxl import load_workbook
from day_20200208_mooc.tools.do_json_13 import DoJson
import json
from day_20200208_mooc.tools.connect_db_22 import DoMysql

class DoExcel:
    def get_data(self, file, sheet):
        wb = load_workbook(file)
        sheet = wb[sheet]

        test_data = []
        for i in range(2, sheet.max_row+1):
            row_data = {}
            # 获取第i行第一列、第2列、第3列...的数据,即是获取第i行数据,并存到字典中
            row_data["case_id"] = sheet.cell(i, 1).value
            row_data["module_title"] = sheet.cell(i, 2).value
            row_data["url"] = sheet.cell(i, 3).value
            row_data["method"] = sheet.cell(i, 5).value
            row_data["header"] = sheet.cell(i, 6).value
            if row_data["header"] == "no":
                row_data["header"] = None
            row_data["case_depend"] = sheet.cell(i, 7).value
            row_data["case_depend_data"] = sheet.cell(i, 8).value
            row_data["depend_data_belong_new_key"] = sheet.cell(i, 9).value
            # 把关键字传入DoJson,拿到真正的请求数据
            row_data["data"] = DoJson("../config/user.json").get_data(sheet.cell(i, 10).value)

            # 表格中的预期数据写的是SQL语句
            # 通过SQL语句去查数据库,拿到真正的预期结果
            sql = sheet.cell(i, 11).value
            row_data["expected"] = DoMysql().search_one(sql)

            # 把每一行的数据加到整个测试数据的列表中去
            test_data.append(row_data)
        return test_data

    def case_data(self, file, sheet):
        # 选择性地获取测试用例
        case_data = []
        for row_data in self.get_data(file, sheet):
            case_row = {}
            case_row["case_id"] = row_data["case_id"]
            case_row["module_title"] = row_data["module_title"]
            case_row["url"] = row_data["url"]
            case_row["method"] = row_data["method"]
            # if row_data["header"]:
            #     case_row["header"] = row_data["header"]
            # else:
            #     row_data["header"] = None
            case_row["data"] = row_data["data"]
            case_row["expected"] = row_data["expected"]
            case_data.append(case_row)

        return case_data

    # # 根据SQL语句去查询数据库
    # def get_expect_from_sql(self, sql):
    #     do_mysql = DoMysql()
    #     res = do_mysql.search_one(sql)
    #     return res

    def write_back(self, file, sheet, i, j, value):
        # i代表行,j代表列
        # 每执行一个用例,都要写回一个结果,所以i代替用例的行数
        # 结果要写回到哪一列自己是清楚的,所以j可以传入固定值
        wb = load_workbook(file)
        sheet = wb[sheet]
        sheet.cell(i, j).value = value
        # 保存工作簿
        wb.save(file)

if __name__ == "__main__":
    # test_data = DoExcel().get_data("../data/test_data.xlsx", "case")
    # print(test_data)
    case_data = DoExcel().get_data("../data/test_data.xlsx", "case")
    print(json.dumps(case_data, indent=2, sort_keys=False, ensure_ascii=False))
    # print(type(case_data))
    # case1 = case_data[0]
    # case1 = eval(case_data)
    # print(case1)

MOOC(14)- 从数据库中获取预期结果的更多相关文章

  1. PostgreSQL数据库中获取表主键名称

    PostgreSQL数据库中获取表主键名称 一.如下表示,要获取teacher表的主键信息: select pg_constraint.conname as pk_name,pg_attribute. ...

  2. Django Form 实时从数据库中获取数据

    修改 models.py 添加 class UserType(models.Model): caption = models.CharField(max_length=32) 执行命令,生成数据库 p ...

  3. 使用python读取配置文件并从mysql数据库中获取数据进行传参(基于Httprunner)

    最近在使用httprunner进行接口测试,在传参时,用到了三种方法:(1)从csv文件中获取:(2)在config中声名然后进行引用:(3)从函数中获取.在测试过程中,往往有些参数是需要从数据库中获 ...

  4. 关于EntityFramework 更新数据记录时字段全部更新问题和不从数据库中获取直接更新记录

    一.一直对这个比较疑惑感觉只修改一条数据记录的一个字段结果更新Savechages后跟踪生成sql竟然是全部被修改,感觉微软怎么这么傻,总觉得会有其它方式可以只更新部分字段,但一直没有找到相关设置,最 ...

  5. Jmeter BeanShell 从数据库中获取数据并创建一个requesBody

    一.前言 在测试接口的时候常常会使用到数据库中的数据,当要使用大量的数据时,仅仅使用数据库查询是不够的.还需要使用自动化让操作更简便. 下面以一个简单的例子阐述一下如何使用beanShell让代码更简 ...

  6. Jmeter-从数据库中获取数据并作为变量传输

    再今天重新学习,从数据库中取数据,并作为变量传到下一个请求中. 首先第一步要导入mysql驱动包 一.添加JDBC Connection Configuration 设置链接 Database URL ...

  7. mysql 从数据库中获取多条记录,二维展示数据

    展示要求: 客户/日期 2017-10-16 1017-10-17 2017-10-18 客户1       客户2       数据库中数据: 解决办法: 1.新建一个实体类:客户名称.客户数据(A ...

  8. 关于oracle数据库中获取版本号类数据最大值的sql

    目前还在高度加班中,但是本次内容怕自己忘记,好不容易解决的,所以赶紧先随便抽点时间记录下,也没来得及考虑效率什么的优化问题,免得以后忘记了. 测试库结构如下: 表名为 testtab 字段名为test ...

  9. 从数据库中获取图片编号,然后通过request获取图片下载

    import pandas as pd from pandas.core.dtypes.dtypes import register_extension_dtype from sqlalchemy i ...

随机推荐

  1. C语言笔记 15_标准库&locale&math&setjmp&signal&stdarg&stddef

    <locale.h> 简介 locale.h 头文件定义了特定地域的设置,比如日期格式和货币符号.接下来我们将介绍一些宏,以及一个重要的结构 struct lconv 和两个重要的函数. ...

  2. bitcoin-cli

    == Blockchain ==getbestblockhashgetblock "blockhash" ( verbosity ) getblockchaininfogetblo ...

  3. html+css web storage课上笔记 2019.3.18

    存储 cookie cookie 使用文本来存储信息 使用时服务器发送cookie给客户端,下一次时,浏览器发送给服务器 web storage local storage 本地的硬件设备中,关闭后不 ...

  4. PAT Advanced 1086 Tree Traversals Again (25) [树的遍历]

    题目 An inorder binary tree traversal can be implemented in a non-recursive way with a stack. For exam ...

  5. vSphere 6.7 新特性 — 基于虚拟化的安全 (VBS)

    https://blogs.vmware.com/china/2018/07/27/vsphere-6-7-%E6%96%B0%E7%89%B9%E6%80%A7-%E5%9F%BA%E4%BA%8E ...

  6. gradle配置多个代码仓库repositories

    repositories { mavenCentral() maven { url "https://jitpack.io" } maven { url "http:// ...

  7. Python说文解字_杂谈03

    1. 我们从前面的知识得到,所有的类都要继承自object这个基类(超类),另外我们知道“继承”可以继承类的属性和方法.我们起始通过type创建类的时候,自然而然的也会从ojbect继承他的一些属性和 ...

  8. iOS中copy和=的区别

    copy是浅拷贝即指针拷贝,让对象的引用计数加一 在MRC环境下,=只是简单的指针指向,引用对象的引用计数并不会增加,在用局部变量赋值时很容易出现野指针 在ARC环境下,=的效果等同于copy和ret ...

  9. php错误和异常的重定向

    通过重定向错误或异常,我们可以更安全的显示错误信息,一般也用来记录错误和异常日志. 参数可以是全局函数名,也可以是类中的方法,非静态方法通过数组传递类名和方法名进去, 静态方法直接带命名空间和类名,看 ...

  10. l1 和l2范数的真实意义

    很长时间一直没有明白真实的含义,十一期间补充一下这方面的知识. l0 范数是 ||x||0 = xi (xi不等于0)代表非0数字的个数,[1,2,3,4,5]  非0个数为5,[0,1,2,0,3] ...