通过函数获取表格中的手机号

# 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}") != -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)
                    cls.update_tel(file, "phone", tel+2)  # 加2是因为测试用例中已经使用了2个手机号了
            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)

    @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)- 自动更新表格中的数据(3)的更多相关文章

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

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

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

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

  3. 如何使用免费控件将Word表格中的数据导入到Excel中

    我通常使用MS Excel来存储和处理大量数据,但有时候经常会碰到一个问题—我需要的数据存储在word表格中,而不是在Excel中,这样处理起来非常麻烦,尤其是在数据比较庞大的时候, 这时我迫切地需要 ...

  4. jQuery Ajax遍历表格,填充数据,将表格中的数据一条一条拼成Jason数组

    $.ajax({ url: baseURL + "InvoiceSale/OnQuotaInvoiceSale", //点击核销单号时,点击核销时,交互的页面           ...

  5. 利用java反射机制实现读取excel表格中的数据

    如果直接把excel表格中的数据导入数据库,首先应该将excel中的数据读取出来. 为了实现代码重用,所以使用了Object,而最终的结果是要获取一个list如List<User>.Lis ...

  6. python读取excel表格中的数据

    使用python语言实现Excel 表格中的数据读取,需要用到xlrd.py模块,实现程序如下: import xlrd #导入xlrd模块 class ExcelData(): def __init ...

  7. java读取Excel表格中的数据

    1.需求 用java代码读取hello.xls表格中的数据 2.hello.xls表格 3.java代码 package com.test; import java.io.File; import j ...

  8. ajax异步获取数据后动态向表格中添加数据(行)

    因为某些原因,项目中突然需要做自己做个ajax异步获取数据后动态向表格中添加数据的页面,网上找了半天都没有 看到现成的,决定自己写个例子 1.HTML页面 <!doctype html> ...

  9. 在页面上绘制一张表格,使用 DOM 节点的动态添加和删除向表格中插入数据,点击表格每行后的“删除”超链接

    查看本章节 查看作业目录 需求说明: 在页面上绘制一张表格,使用 DOM 节点的动态添加和删除向表格中插入数据,点击表格每行后的"删除"超链接,使用 DOM 节点的删除操作将对应的 ...

随机推荐

  1. java EE应用概述

    1.javaEE应用的分层模型 不管是经典的Java EE架构,还是轻量级的Java EE架构,大致上都可以分为以下几层: Damain Object(领域对象)层:该层是由系列的POJO(普通的,传 ...

  2. [浅学]POST、GET、PUT、DELETE 请求

    HTTP定义了与服务器交互的不同的方法,最基本的是POST.GET.PUT.DELETE,与其比不可少的URL的全称是资源描述符,我们可以这样理解: url描述了一个网络上资源,而post.get.p ...

  3. JS—Function类型

    1.函数的声明方式有三种普通函数的声明方式function box(num1,num2){ return num1+num2;}alert(box(1,2)); 使用变量初始化函数var box = ...

  4. MySQL学习笔记——〇三 MySQL习题

    在前面讲了MySQL的初步使用方法以后,在这里放出来一些案例来看看怎么做. 先看看database的结构,一共5个表 外键关系: class的cid是student的class_id的外键,teach ...

  5. drf序列化和反序列化

    目录 drf序列化和反序列化 一.自定义序列化 1.1 设置国际化 二.通过视图类的序列化和反序列化 三.ModelSerializer类实现序列化和反序列化 drf序列化和反序列化 一.自定义序列化 ...

  6. goweb-go语言基础

    go语言基础 虽然这本书是讲goweb,但还是吧go语言基础过了一遍,由于我之前已经对go语言基础做了一遍系统的学习,这里就当简单回顾一下,不再写过多笔记了,之前的写的博客都有基础知识,O(∩_∩)O ...

  7. LeetCode——919.完全二叉树插入器

    完全二叉树是每一层(除最后一层外)都是完全填充(即,结点数达到最大)的,并且所有的结点都尽可能地集中在左侧. 设计一个用完全二叉树初始化的数据结构 CBTInserter,它支持以下几种操作: CBT ...

  8. E. Delete a Segment(删除一个区间,让并区间最多)

    题:https://codeforces.com/contest/1285/problem/E 题意:给定n个区间,最多删除一个区间,让最后的并区间个数最大 #include<bits/stdc ...

  9. random mating

    随机交配种群 孟德尔分离(基于diploid and sexual)和随机交配(1.不因突变而改变的规律2.可计算的)是群体遗传学的基础. 随机交配(random mating)指群体中每一个成员与另 ...

  10. 远程关机 (Windows shutdown Windows)

    在某些场景,可使用远程关机控制整个局域网中的所有电脑进行一键关机或重启,便于管理,以提高工作效率. 从远程系统强制关机,首先需要进行一些必要的设置. 1.使用 win + R 打开运行,输入gpedi ...