unittest(20)- 自动更新表格中数据(5)

# 1. get_data.py

from tools import project_path
import pandas as pd

class GetData:
    Cookie = None
    AddTel = pd.read_excel(project_path.test_case_path, sheet_name="phone").iloc[0, 0]

# df = pd.read_excel(project_path.test_case_path, sheet_name="phone")
# print(df.iloc[0, 0])  # 获取phone表单中的A1单元格的值
# 2. do_excel.py

# 从表格中获取手机号,进行值的传递
# 每次测试的手机号都不同,如果重复注册,可以使用手工测试,不必再单独写代码。
# 或者直接在表格用例中直接写死一个手机号,表格中只需要保留一个
from openpyxl import load_workbook
from tools.read_config import ReadConfig
from tools import project_path
from account_auto_incre_6.get_data import GetData

class DoExcel:
    @classmethod
    def get_data(cls, file):
        wb = load_workbook(file)
        # 读出来的配置项是字符串格式,需要转换成字典格式
        mode = eval(ReadConfig.get_config(project_path.case_config_path_auto_incre, "MODE", "mode"))

        tel = getattr(GetData, "AddTel")  # 从GetData中拿到数据
        # tel = cls.get_tel(project_path.test_case_path, "phone")  # 通过函数拿到数据
        test_data = []
        for key in mode:
            sheet = wb[key]  # 表单名
            if mode[key] == "all":
                for i in range(2, sheet.max_row+1):
                    row_data = {}
                    # 数值类型读出来还是数值,不用使用函数eval转换
                    row_data["case_id"] = sheet.cell(i, 1).value
                    row_data["url"] = sheet.cell(i, 2).value
                    row_data["method"] = sheet.cell(i, 3).value
                    # row_data["data"] = eval(sheet.cell(i, 4).value)
                    if sheet.cell(i, 4).value.find("${tel}") != -1:   # 表示在这个单元格的值中如果找到了${tel}字符串
                        row_data["data"] = sheet.cell(i, 4).value.replace("${tel}", str(tel))
                        tel = tel + 1
                    else:  # 如果没有找到匹配的字符串
                        row_data["data"] = sheet.cell(i, 4).value
                    row_data["title"] = sheet.cell(i, 5).value
                    row_data["expected"] = sheet.cell(i, 6).value
                    row_data["sheet_name"] = key  # 为了写回测试结果时定位表单
                    test_data.append(row_data)
                    cls.update_tel(file, "phone", tel)  # 写入新数据
            else:
                for case_id in mode[key]:
                    row_data = {}
                    row_data["case_id"] = sheet.cell(case_id+1, 1).value  # 注意行号和case_id的关系
                    row_data["url"] = sheet.cell(case_id+1, 2).value
                    row_data["method"] = sheet.cell(case_id+1, 3).value
                    # row_data["data"] = eval(sheet.cell(case_id+1, 4).value)
                    if sheet.cell(case_id+1, 4).value.find("${tel}") != -1:   # 表示在这个单元格的值中如果找到了${tel}字符串
                        row_data["data"] = sheet.cell(case_id+1, 4).value.replace("${tel}", str(tel))
                        tel = tel + 1
                    else:  # 如果没有找到匹配的字符串
                        row_data["data"] = sheet.cell(case_id+1, 4).value
                    row_data["title"] = sheet.cell(case_id+1, 5).value
                    row_data["expected"] = sheet.cell(case_id+1, 6).value
                    row_data["sheet_name"] = key  # 为了写回测试结果时定位表单
                    test_data.append(row_data)

            # 也可以不在上述的if else分支中都写一次row_data,而是取完数据后统一替换
            # for item in test_data:
            #     if item[‘data‘][‘loginName‘].find("${tel}") != -1:   # 表示在这个单元格的值中如果找到了${tel}字符串
            #             row_data["data"][‘loginName‘] = row_data["data"][‘loginName‘].replace("${tel}", str(tel))
            #             tel = tel + 1

        return test_data

    def write_back(self, file, sheet, i, response, test_result):
        wb = load_workbook(file)
        sheet = wb[sheet]
        # 写入测试结果, value必须是数据或者字符串类型才能被写回,写入数据前必须关闭工作簿
        sheet.cell(i, 7).value = response
        sheet.cell(i, 8).value = test_result
        # 保存工作簿
        wb.save(file)

    @classmethod
    def update_tel(cls, file, sheet_name, tel):
        wb = load_workbook(file)
        sheet = wb[sheet_name]
        sheet.cell(2, 1).value = tel
        wb.save(file)

    # 不使用函数,写一个获取手机号的函数
    # @classmethod
    # def get_tel(cls, file, sheet_name):
    #     wb = load_workbook(file)
    #     sheet = wb[sheet_name]
    #     tel = sheet.cell(2,  1).value
    #     return tel

if __name__ == ‘__main__‘:
    test_data = DoExcel().get_data(project_path.test_case_path)
    print(test_data)
    print(len(test_data))  # 获取列表元素个数

表格数据如图:

原文地址:https://www.cnblogs.com/come202011/p/12232072.html

时间: 2024-11-06 23:13:03

unittest(20)- 自动更新表格中数据(5)的相关文章

unittest(20)- 自动更新表格中的数据(3)

通过函数获取表格中的手机号 # 1. get_data.py from tools import project_path import pandas as pd class GetData: Cookie = None AddTel = pd.read_excel(project_path.test_case_path, sheet_name="phone").iloc[0, 0] # df = pd.read_excel(project_path.test_case_path, s

unittest(20)- 自动更新表格中的测试数据(1)

# 直接给出第一个手机号,而不是从excel中取数据 from openpyxl import load_workbook from tools.read_config import ReadConfig from tools import project_path class DoExcel: def get_data(self, file): wb = load_workbook(file) # 读出来的配置项是字符串格式,需要转换成字典格式 mode = eval(ReadConfig.g

odoo自动更新表中数据

这是追踪信息用的查询语句,__init__方法初始化作用 _order ="hpartner_id desc"def init(self,cr): tools.sql.drop_view_if_exists(cr, 'cust_product_info_report') cr.execute(""" create or replace view cust_product_info_report as ( select t0.id,t0.hpartner_i

mysql5.7基础 更新表格中某列为指定数据的 一行

镇场文:       学儒家经世致用,行佛家普度众生,修道家全生保真,悟易理象数通变.以科技光耀善法,成就一良心博客.______________________________________________________________________________________________________ Operating System:UbuntuKylin 16.04 LTS 64bitmysql: Ver 14.14 Distrib 5.7.17, for Linux (

自动更新开奖数据的excel文件,供大家下载

自动更新开奖数据的excel文件,供大家下载 2010-03-14 20:22 228492人阅读打印来源:乐彩网 作者:eren 很多人拥有自制excel电子表格,常要更新最基本的开奖信息.如有多期未更新,则费时更多.乐彩网为大家提供八种彩票的自动更新文件,供下载.您只需点击更新按钮,就能得到最及时全面的开奖信息,省时省力. 2011年10月12日修改说明:已更新全部开奖数据.福彩3Dexcel文件中,因描述更新范围的高度小了,导致更新后,最下面内容会右移.如此文件单独存在,请直接下载.如已将

MySQL必知应会-第20章-更新和删除数据

第20章-更新和删除数据 本章介绍如何利用UPDATE和DELETE语句进一步操纵表数据. 20.1 更新数据 为了更新(修改)表中的数据,可使用UPDATE语句.可采用两种方式使用UPDATE; 更新表中特定行; 更新表中所有行.下面分别对它们进行介绍.不要省略WHERE子句 在使用UPDATE时一定要注意细心.因为稍不注意,就会更新表中所有行.在使用这条语句前,请完整地阅读本节.UPDATE与安全 可以限制和控制UPDATE语句的使用,更多内容请参见第28章. UPDATE语句非常容易使用,

【HOW】如何对Reporting Services表格中数据按字段排序

Reporting Services中可以设置排序的地方非常多,有很多地方从其字面意思上好像是对表格数据的排序,但实际都不管用.在多次尝试后,得到如下的有效设置方式: 1. 鼠标右键单击要排序字段的内容单元格(不是标题单元格). 2. 在弹出菜单中选择:行组 > 组属性. 3. 在弹出窗口中选择"排序"选项卡,并在右侧界面中添加排序依据. 有时,在完成如上设置后仍未看到正确排序,这可能是因为对应数据集的排序规则(类似字符集)不正确,设置方法如下: 1. 在表格对应的数据集名称上右

JS实现动态生成表格并提交表格数据向后端 表格中数据转为json

原文地址 需求:在web页面上动态的生成表格,并可以对表格中的数据进行编辑,然后把表格中的数据提交至后端服务器保存. 首先动态生成表格. 1.首先我们需要导入JS库文件.jQuery 2.然后在页面div中事先创建一个空白表格,可以根据需求而定,我这里是一个带表头的表格 <table border="0" style="text-align: center;" width="100%" id="myTable">

Extjs更新表格中的数据

通过Extjs的ajax框架从后台获取数据,然后填入表格的特定单元格 historyStore为含有属性Location的数据存储容器 Ext.getCmp("historyGrid")为获取id为historyGrid的Ext.grid.GridPanel数据表格 function getAjaxLocation(Lgt, Lat, Index) { Ext.Ajax.request({ method: "POST", timeout: 5 * 60 * 1000