# 直接给出第一个手机号,而不是从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.get_config(project_path.case_config_path_auto_incre, "MODE", "mode"))

        tel = 15546355882  # 假设是从excel中拿到的手机号
        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}") != -1:   # 表示在这个单元格的值中如果找到了${tel_1}字符串
                        row_data["data"] = sheet.cell(i, 4).value.replace("${tel_1}", str(tel))
                    elif sheet.cell(i, 4).value.find("${tel}") != -1:   # 如果找到${tel}
                        row_data["data"] = sheet.cell(i, 4).value.replace("${tel}", str(tel+1))  # 加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)
            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)
                    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)
        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)

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

配置文件如图:

用例数据如图:

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

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

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

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

    # 1. get_data.py from tools import project_path import pandas as pd class GetData: Cookie = None Add ...

  3. Jenkins和Gitlab CI/CD自动更新k8s中pod使用的镜像说明

    Jenkins 使用Jenkins的话,完成的工作主要有如下步骤: 1.从Gogs或Gitlab仓库上拉取代码 2.使用Maven编译代码,打包成jar文件 3.根据jar文件使用相对应的Docker ...

  4. odoo自动更新表中数据

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

  5. 自动更新Aria2中的bt-trackers选项

    #!/bin/bash /usr/sbin/service aria2 stop list=`wget -qO- https://raw.githubusercontent.com/ngosang/t ...

  6. android使用友盟第三方自动更新/手动更新

    最近项目用到自动更新,发现一个方便快捷的第三方组件非常好用,只需要几行代码搞定,非常适合新手使用.分享给大家一起学习. 本文档帮助您以最快速最简洁的方式集成使用自动更新组件. 一.申请友盟开发者账号创 ...

  7. 安卓程序代写 网上程序代写[原]Android应用的自动更新模块

    软件的自动更新一般都与Splash界面绑定在一起, 由于需要维护的软件界面很复杂, 一个Activity中嵌入ViewPager, 并且逻辑比较复杂, 索性重新写一个Activity, 现在的软件都很 ...

  8. [转]Android应用的自动更新

    软件的自动更新一般都与Splash界面绑定在一起, 由于需要维护的软件界面很复杂, 一个Activity中嵌入ViewPager, 并且逻辑比较复杂, 索性重新写一个Activity, 现在的软件都很 ...

  9. 【Android 应用开发】Android应用的自动更新模块

    . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/18964835 . 软件的自动更新一般都与Splash界 ...

随机推荐

  1. ActiveMQ消息队列集群的搭建

    1.准备activemq apache-activemq-5.12.0-bin.tar 2.解压文件 3.并将文件cp一份命名为activemq1 进入conf文件进行修改 修改属性为brokerNa ...

  2. Spring Cloud服务间调用鉴权

    学习使用Spring Cloud 微服务间的调用都是RestFul风格,如何保证调用之间的安全性,这是一个很重要的问题. 通过查阅资料http://wiselyman.iteye.com/blog/2 ...

  3. 第3章 ZooKeeper基本数据模型

    第3章 ZooKeeper基本数据模型 3-1 zk数据模型介绍 3-2 zk客户端连接关闭服务端,查看znode ./zkCli.sh Ctrl + C 退出 =================== ...

  4. python学习笔记-面向对象设计

    前言 1.三大编程范式: 面向过程编程 函数式编程 面向对象编程 2.编程进化论 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 2.从上述的指令中提取重复的代码块或逻辑,组织到一起,便实现 ...

  5. ZJNU 1223 - 素数距离——高级

    因为最大可以达到int极限 明显直接筛选不可能完成 所以从其因子入手 因为任何不是素数的数都有除了1与其自身之外的因子 因此,我们筛出2^(31/2)≍46350之内的所有素数,以其作为因子再将题目给 ...

  6. JavaSE--Java 的基本程序设计结构

    Java 对大小写敏感 Java 中定义类名的规则很宽松.名字必须以字母开头,后面可以跟字母和数字的任意组合.长度基本上没有限制.但是不能使用 Java 保留字作为类名. 标准的命名规范为:类名是以大 ...

  7. linux安装nginx步骤

    转载自:https://blog.csdn.net/t8116189520/article/details/81909574,修改部分内容 本文已收录至博客专栏linux安装各种软件及配置环境教程中 ...

  8. linux笔记(一)——基本命令和快捷键

    linux笔记(一) 1.常用BASH快捷键 编辑命令 快捷键 作用 Ctrl + a 移到命令行首 Ctrl + e 移到命令行尾 Ctrl + xx 在命令行首和光标之间移动 Ctrl + u 从 ...

  9. dubbo的超时处理和配置覆盖

    提供者的设置方式 消费者的设置方式 配置原则 dubbo推荐在Provider上尽量多配置Consumer端属性: 1.作服务的提供者,比服务使用方更清楚服务性能参数,如调用的超时时间,合理的重试次数 ...

  10. 工作记录mysql主从复制

    环境ubuntu 16.04 主配置 1.编辑主MySQL配置文件vim /etc/mysql/mysql.conf.d/mysqld.cnf 更改server-id,它位于[mysqld]段.这个数 ...