数据库中的预期结果写的是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. CodeForces 1000B Light It Up(贪心、思维)

    https://codeforces.com/problemset/problem/1000/B 题意: 一个模拟思维题.就是有一盏灯,0时刻开着.n次操作,你可以在其中加入一次操作(或者不加),操作 ...

  2. leetcode算法题121-123 --78 --python版本

    给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序. 实例输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明: 必须在原数组上操作,不能 ...

  3. Python—使用列表构造队列数据结构

    队列的概念 只允许在一端插入数据操作,在另一端进行删除数据操作的特殊线性表:进行插入操作的一端称为队尾(入队列),进行删除操作的一端称为队头(出队列):队列具有先进先出(FIFO)的特性. # _*_ ...

  4. dockerfile保留字指令

    FROM 基础镜像,当前新镜像是基于哪个镜像的 MAINTAINER 镜像维护者的姓名和邮箱地址 RUN 容器构建时运行的命令 EXPOSE 当前容器对外暴露的端口 WORKDIR 指定在创建容器后, ...

  5. PHP学习之-文件上传

    一.PHP文件上传 HTML部分 <form action="file_big.php" method="post" enctype="mult ...

  6. 201512-2 消除类游戏 Java

    思路: 用二维数组,对于每一个棋子,向右看三个,向下看三个,如果相等则置为负数,最后遍历输出. import java.util.Scanner; public class Main { public ...

  7. 提高WiFi上网速度

    https://jingyan.baidu.com/article/1876c852aa668c890b1376c4.html http://www.coozhi.com/youxishuma/you ...

  8. 吴裕雄--天生自然Linux操作系统:Linux 文件与目录管理

    Linux的目录结构为树状结构,最顶级的目录为根目录 /. 其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们. 绝对路径: 路径的写法,由根目录 / 写起,例如: /usr/share/ ...

  9. dfs+剪枝 poj1011

    Sticks Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 113547   Accepted: 26078 问题描述 Ge ...

  10. memcached redis 本质区别是功能多少

    功能: 1.memcached 数据类型比较单一,数据淘汰策略单一,功能简单 2.redis 数据类型比较全面, 数据淘汰策略比较多,功能较强 有持久化能力,可以持久存储少量数据(数据量不会大于本机内 ...