# 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))  # 获取列表元素个数

表格数据如图:

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

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

    通过函数获取表格中的手机号 # 1. get_data.py from tools import project_path import pandas as pd class GetData: Coo ...

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

    # 直接给出第一个手机号,而不是从excel中取数据 from openpyxl import load_workbook from tools.read_config import ReadConf ...

  3. odoo自动更新表中数据

    这是追踪信息用的查询语句,__init__方法初始化作用 _order = ctx = dict(context or {}, mail_create_nolog=True) new_id = sup ...

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

    自动更新开奖数据的excel文件,供大家下载 2010-03-14 20:22 228492人阅读打印来源:乐彩网 作者:eren 很多人拥有自制excel电子表格,常要更新最基本的开奖信息.如有多期 ...

  5. 更新表中数据可以使用join

    1.在修改数据库的时候,每写完一条SQL语句都要加上一个分号,这样每句之间是有依赖关系的,上面执行不成功不会执行下面的语句. 2.在更新数据库中数据时可以使用join. 例如: update res ...

  6. [转载]JAVA获取word表格中数据的方案

    上一个项目的开发中需要实现从word中读取表格数据的功能,在JAVA社区搜索了很多资料,终于找到了两个相对最佳的方案,因为也得到了不少网友们的帮助,所以不敢独自享用,在此做一个分享. 两个方案分别是: ...

  7. [原创]JAVA获取word表格中数据的方案

    上一个项目的开发中需要实现从word中读取表格数据的功能,在JAVA社区搜索了很多资料,终于找到了两个相对最佳的方案,因为也得到了不少网友们的帮助,所以不敢独自享用,在此做一个分享. 两个方案分别是: ...

  8. C#读取Excel表格中数据并返回datatable

    在软件开发的过程中,经常用到从excel表格中读取数据作为数据源,以下整理了一个有效的读取excel表格的方法. DataTable GetDataTable(string tableName,str ...

  9. 读取Excel表格中数据原型

    写下这篇博客来记录自己的工作,这部分功能是读取Excel表格中的数据,并通过c#中的datagridview控件将读取的数据显示出来.为了方便用户,我设计了一个read按钮,用户点击这个按钮,会弹出打 ...

随机推荐

  1. 干货 | 调用AI api 实现网页文字朗读

    京东云上提供了足够多的人工智能api,并且都使用了http的方式进行了封装,用户可以方便在自己的系统中接入京东云的ai能力.今天就是介绍一下如何编写很少的代码就能使用京东云的语音合成api在网页中实现 ...

  2. Android自定义的弹窗

    package com.microduino.qoobot.view; import android.app.Activity; import android.app.Dialog; import a ...

  3. windows下查看rabbitmq服务是否启动

    1.命令行进入rabbitmq的安装目录下: 如下图1步骤 2.输入命令 rabbitmqctl1 status 如下图2步骤 3.有时会提示报错,如步骤3 解决办法: 我的电脑 ==> 右键 ...

  4. Python笔记_第三篇_面向对象_8.对象属性和类属性及其动态添加属性和方法

    1. 对象属性和类属性. 我们之前接触到,在类中,我们一般都是通过构造函数的方式去写一些类的相关属性.在第一次介绍类的时候我们把一些属性写到构造函数外面并没有用到构造函数,其实当时在写的时候,就是在给 ...

  5. 163邮箱报错: 535 Error: authentication failed

    今天更换新的异常信息发件邮箱,重新申请了一个新邮箱,SMTP功能已经开通,调用java代码报异常,错误信息为:535 Error: authentication failed.经过网上查证,原来新的1 ...

  6. 二、NOSQL之Memcached缓存服务实战精讲第一部

    1.Memcached是一套数据缓存系统或软件. 用于在动态应用系统中缓存数据库的数据,减少数据库的访问压力,达到提升网站系统性能的目的:Memcached在企业应用场景中一般是用来作为数据库的cac ...

  7. JavaScript中Promise 使用、原理以及实现过程

    1.什么是 Promise promise 是目前 JS 异步编程的主流解决方案,遵循 Promises/A+ 方案. 2.Promise 原理简析 (1)promise 本身相当于一个状态机,拥有三 ...

  8. C++ 传参的方式 值传递,指针传递,引用传递

    关于传参总是搞晕,这里总结下: 值传递: void func(int n) { } void main() { int x = 1; func(x); return; } 这种就是值传递,在func函 ...

  9. [CTS2019]氪金手游(容斥+树形背包DP)

    降智好题.本蒟蒻VP时没想到怎么做被题面迷惑了,只会20分的“好”成绩.简直自闭了. 首先显然度为0的点是白给的,根据等比数列求和公式即可求得.然后考虑这个树如果是一颗外向树,就是每个点先父亲再自己. ...

  10. PictureService

    package me.zhengjie.tools.service; import me.zhengjie.tools.domain.Picture; import org.springframewo ...