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.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)的更多相关文章
- unittest(20)- 自动更新表格中的数据(3)
通过函数获取表格中的手机号 # 1. get_data.py from tools import project_path import pandas as pd class GetData: Coo ...
- unittest(20)- 自动更新表格中数据(5)
# 1. get_data.py from tools import project_path import pandas as pd class GetData: Cookie = None Add ...
- Jenkins和Gitlab CI/CD自动更新k8s中pod使用的镜像说明
Jenkins 使用Jenkins的话,完成的工作主要有如下步骤: 1.从Gogs或Gitlab仓库上拉取代码 2.使用Maven编译代码,打包成jar文件 3.根据jar文件使用相对应的Docker ...
- odoo自动更新表中数据
这是追踪信息用的查询语句,__init__方法初始化作用 _order = ctx = dict(context or {}, mail_create_nolog=True) new_id = sup ...
- 自动更新Aria2中的bt-trackers选项
#!/bin/bash /usr/sbin/service aria2 stop list=`wget -qO- https://raw.githubusercontent.com/ngosang/t ...
- android使用友盟第三方自动更新/手动更新
最近项目用到自动更新,发现一个方便快捷的第三方组件非常好用,只需要几行代码搞定,非常适合新手使用.分享给大家一起学习. 本文档帮助您以最快速最简洁的方式集成使用自动更新组件. 一.申请友盟开发者账号创 ...
- 安卓程序代写 网上程序代写[原]Android应用的自动更新模块
软件的自动更新一般都与Splash界面绑定在一起, 由于需要维护的软件界面很复杂, 一个Activity中嵌入ViewPager, 并且逻辑比较复杂, 索性重新写一个Activity, 现在的软件都很 ...
- [转]Android应用的自动更新
软件的自动更新一般都与Splash界面绑定在一起, 由于需要维护的软件界面很复杂, 一个Activity中嵌入ViewPager, 并且逻辑比较复杂, 索性重新写一个Activity, 现在的软件都很 ...
- 【Android 应用开发】Android应用的自动更新模块
. 作者 :万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/18964835 . 软件的自动更新一般都与Splash界 ...
随机推荐
- drf序列化单改-整改-局部改-群改接口的实现
整体单改 路由层.模型层.序列化层不需要做修改,只需要处理视图层:views.py """ 1) 单整体改,说明前台要提供修改的数据,那么数据就需要校验,校验的数据应该在 ...
- c指针(1)
#include<stdio.h> void swap(int *a,int *b); void dummy_swap(int *a,int *b); int main() { ,d=; ...
- SVN服务器的搭建(三)
接下来,试试用TortoiseSVN修改文件,添加文件,删除文件,以及如何解决冲突等. 添加文件 在检出的工作副本中添加一个Readme.txt文本文件,这时候这个文本文件会显示为没有版本控制的状态, ...
- windows Apache 配置支持HTTPS的SSL证书
在设置Apache + SSL之前, 需要做: 安装Apache, 下载安装Apache时请下载带有ssl版本的Apache安装程序. 并且ssl需要的文件在如下的位置: [Apache安装目录]/m ...
- 吴裕雄--天生自然 PYTHON3开发学习:条件控制
if condition_1: statement_block_1 elif condition_2: statement_block_2 else: statement_block_3 var1 = ...
- Andorid Studio 3.1 引入第三方jar包的方法
今天手痒,把android studio 从3.0升级到3.1.2 发现很多问题 1.发现编译会下载好多东西,等半天 2.之前的jar包导不进来了 针对jar包导入不成功,我查了一下说是不支撑comp ...
- metinfo_5.3变量覆盖引发的一系列问题
metinfo_5.3中存在一个很经典的$$型变量覆盖,这种变量覆盖在之前的博客中提到过,今天的博客围绕这个变量覆盖漏洞结合这款CMS的其他功能进行漏洞利用. 变量覆盖+文件包含 拿到这个CMS首先还 ...
- Python文件基本操作及上下文管理
文件基本操作 打开文件:f = open(fole_name,mode = 'r'),传入表示文件路径的字符串,会返回一个文件对象,mode是文件打开模式. 关闭文件:f.close(),调用给定文件 ...
- centos6.9防火墙设置
1.输入:cat /etc/issue 查看版本 2. service命令开启以及关闭防火墙为即时生效,下次重启机器的时候会自动复原. 查看防火墙状态:service iptables statu ...
- 2018 ACM-ICPC 宁夏 H.Fight Against Monsters(贪心)
It is my great honour to introduce myself to you here. My name is Aloysius Benjy Cobweb Dartagnan Eg ...