翼度科技»论坛 编程开发 python 查看内容

Python 自动化测试的配置层实现方式对标与落地

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
Python中什么是配置文件,配置文件如何使用,有哪些支持的配置文件等内容,话不多说,让我们一起看看吧~
1 什么是配置文件?

配置文件是用于配置计算机程序的参数和初始化设置的文件,如果没有这些配置程序可能无法运行或是影响运行(运行速度、便捷性等),使用配置文件的好处在于,部分内容以及环境运行时只需要修改配置文件的参数内容,而无需去代码里查找并修改,提高便捷性、提高可维护性。
2 配置文件有哪几种?

配置主要有四种形式:

  • 第一种是YAML、JSON、XML、TOML、INI、Linux系统中的.bashrc一类,主要应用于软件测试领域,在软件测试的领域行业中,大多数公司采用最新的YAML形式来作为配置文件,例如数据库地址、用例数据等内容的存放,而少部分公司仍然采用旧的INI配置形式
  • 第二种是excel表格的形式,在excel表格中会有固定的title代表每个字段列的含义,有多列,以此来进行配置,多用于游戏领域中,在游戏行业大量使用excel表格的形式,已经是一个常态了。
  • 第三种是py文件,py文件对于一个纯Python项目而言是非常方便的,它不需要做数据的读取操作,只需要进行导入即可,不好的点在于,没有YAML这一类灵活,YAML配置文件无论是Python、Java等语言,都是支持的,且数据类型支持很多,而py的配置文件,就只能用作于python,有一定的局限性。
  • 第四种是txt文本格式,通过读取的方式来识别到txt文本内容,通常而言是测开或者测试工程师制作的简便工具,供给业务层面的测试人员进行使用,降低了YAML这种配置的理解难度,也避免了打开excel的缓慢,用轻量级txt来代替是一个不错的选择。
2.1 ini

python3自带的ini
.ini 文件是Initialization File的缩写,即初始化文件,是windows的系统配置文件所采用的存储格式,统管windows的各项配置
2.1.1 ini文件的定义

.ini 文件通常由节(Section)、键(key)和值(value)组成。具体形式如下:
  1. db.ini
  2. [mysql]
  3. host = 127.0.0.1
  4. port = 3306
  5. user = root
  6. password = 123456
  7. database = test
复制代码
2.1.2 python读取ini文件

使用python内置的 configparser 标准库进行解析ini文件。
read() 读取文件内容 items() 获取指定节的所有键值对
  1. # -*- coding: utf-8 -*-
  2. '''
  3. * @Author       : wxy
  4. * @Date         : 2022-08-24 11:11:06
  5. * @Description  : 读取ini文件
  6. * @LastEditTime : 2022-08-24 11:11:06
  7. '''
  8. from configparser import ConfigParser
  9. from pprint import pprint
  10. import pymysql
  11. # ini文件路径
  12. ini_file = './db.ini'
  13. # 读取ini的节(Section)
  14. db_name = 'mysql'
  15. # configparser实例化
  16. text = ConfigParser()
  17. # 读取ini文件内容
  18. text.read(ini_file)
  19. # text.items()返回list,元素为tuple,元组格式为 key,value
  20. db_tuple = text.items(db_name)
  21. print(db_tuple)
  22. # 将元组转换成dict
  23. db_dict = dict(text.items(db_name))
  24. print(db_dict)
复制代码
2.2 json

JSON(JavaScript Object Notation,) 是一种轻量级的数据交换格式。
2.2.1 json文件的定义

简单的json示例
  1.   {
  2.         "mysql": {
  3.             "host": "127.0.0.1",
  4.             "port": 3306,
  5.             "user": "root",
  6.             "password": "123456",
  7.             "database": "test"
  8.         }
  9.     }
复制代码
2.2.2 python读取json文件

load() 从json文件中读取json格式数据
loads() 将字符串类型数据转化为json格式数据
dump() 将json格式数据保存到文件
dumps() 将json格式数据保存为字符串类型
  1. # -*- coding: utf-8 -*-
  2. '''
  3. * @Author       : wxy
  4. * @Date         : 2022-8-24 11:39:44
  5. * @Description  : 读取json文件
  6. * @LastEditTime : 2022-8-24 11:39:44
  7. '''
  8. import json
  9. from pprint import pprint
  10. import pymysql
  11. json_file = "./db.json"
  12. db_name = "mysql"
  13. web = "web"
  14. with open(json_file) as f:
  15.     cfg = json.load(f)[db_name]
  16.     print(cfg)
  17. with open(json_file) as f:
  18.     cfg = json.load(f)[web]
  19.     print(cfg['user'])
复制代码
2.3 toml

TOML 是 Github 联合创始人 Tom Preston-Werner 所提出的一种配置文件格式,是一种旨在成为一个小规模、易于使用的语义化的配置文件格式,它被设计为可以无二义性的转换为一个哈希表。
2.3.1 定义toml文件

语法:
TOML的语法广泛地由key = “value”、[节名]、#注释构成。
支持以下数据类型:字符串、整形、浮点型、布尔型、日期时间、数组和图表。
  1. # db.toml
  2. [mysql]
  3.     [mysql.config]
  4.     host     = "127.0.0.1"
  5.     user     = "root"
  6.     port     = 3306
  7.     password = "123456"
  8.     database = "test"
  9.     [mysql.parameters]
  10.     pool_size = 5
  11.     charset   = "utf8"
  12.     [mysql.fields]
  13.     course_cols = ["cno", "cname", "ccredit", "cdept"]
复制代码
2.3.2 python读取toml文件

使用外部库 toml 解析toml文件
  1. # -*- coding: utf-8 -*-
  2. '''
  3. * @Description  : 读取toml文件
  4. * @LastEditTime : 2022-08-14 11:31:07
  5. '''
  6. import toml
  7. from pprint import pprint
  8. import pymysql
  9. toml_file = "./db.toml"
  10. cfg = toml.load(toml_file)['mysql']
  11. pprint(cfg)
复制代码
2.4 yaml

YAML(YAML Ain’t a Markup Language”, YAML不是一种标记语言) 格式是目前较为流行的一种配置文件,它早在 2001 由一个名为 Clark Evans 的人提出;同时它也是目前被广泛使用的配置文件类型。
2.4.1 定义yaml文件
  1. # db.yaml
  2. mysql:
  3.   config:
  4.     host: "127.0.0.1"
  5.     port: 3306
  6.     user: "root"
  7.     password: ""
  8.     database: "stu_sys"
  9.   parameters:
  10.     pool_size: 5
  11.     charset: "utf8"
  12.   fileds:
  13.     course_cols:
  14.       - cno
  15.       - cname
  16.       - ccredit
  17.       - cdept
复制代码
2.4.2 python读取yaml文件

使用外部库 pyyaml 解析toml文件。
  1. # -*- coding: utf-8 -*-
  2. '''
  3. * @Author       : wxy
  4. * @Date         : 2022-8-24 11:34:37
  5. * @Description  : 读取yaml文件
  6. * @LastEditTime : 2022-8-24 11:34:37
  7. '''
  8. import yaml
  9. from pprint import pprint
  10. import pymysql
  11. yaml_file = "./db.yaml"
  12. with open(yaml_file, 'r') as f:
  13.     cfg = yaml.safe_load(f)
  14. print(cfg)
复制代码
2.5 Python xlrd 读取 操作Excel

python Excel库对比

本次主要关注python xlrd读取 操作excel
2.5.1 xlrd模块介绍

1.什么是xlrd模块?
python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库。
2.为什么使用xlrd模块?
在UI自动化或者接口自动化中数据维护是一个核心,所以此模块非常实用。
xlrd模块可以用于读取Excel的数据,速度非常快,推荐使用!
官方文档:https://xlrd.readthedocs.io/en/latest/
2.5.2 安装xlrd模块

到python官网下载http://pypi.python.org/pypi/xlrd 模块安装,前提是已经安装了python 环境。
或者在cmd窗口 pip install xlrd
最新的xlrd不支持Excel xlsx文件的读取。所以需要安装旧版本 pip install xlrd==1.2.0
2.5.3 使用介绍

1.常用单元格的数据类型

  • empty(空的)
  • string(text)
  • number
  • date
  • boolean
  • error
  • blank(空白表格)
2.导入模块
  1. import xlrd
复制代码
3.打开Excel文件读取数据
  1. data = xlrd.open_workbook(filename)#文件名以及路径,如果路径或者文件名有中文给前面加一个 r
复制代码
4.常用的函数
excel中最重要的方法就是book和sheet的操作

  • 获取book(excel文件)中一个工作表
  1. table = data.sheets()[0]             #通过索引顺序获取
  2. table = data.sheet_by_index(sheet_indx)  #通过索引顺序获取
  3. table = data.sheet_by_name(sheet_name)  #通过名称获取
  4. # 以上三个函数都会返回一个xlrd.sheet.Sheet()对象
  5. names = data.sheet_names()        #返回book中所有工作表的名字
  6. data.sheet_loaded(sheet_name or indx)    # 检查某个sheet是否导入完毕
复制代码

  • 行的操作
  1. nrows = table.nrows
  2.     # 获取该sheet中的行数,注,这里table.nrows后面不带().
  3. table.row(rowx)
  4.     # 返回由该行中所有的单元格对象组成的列表,这与tabel.raw()方法并没有区别。
  5. table.row_slice(rowx)
  6.     # 返回由该行中所有的单元格对象组成的列表
  7. table.row_types(rowx, start_colx=0, end_colx=None)
  8.     # 返回由该行中所有单元格的数据类型组成的列表;   
  9.     # 返回值为逻辑值列表,若类型为empy则为0,否则为1
  10. table.row_values(rowx, start_colx=0, end_colx=None)
  11.     # 返回由该行中所有单元格的数据组成的列表
  12. table.row_len(rowx)
  13.     # 返回该行的有效单元格长度,即这一行有多少个数据
复制代码

  • 列(colnum)的操作
  1. ncols = table.ncols
  2.     # 获取列表的有效列数
  3. table.col(colx, start_rowx=0, end_rowx=None)
  4.     # 返回由该列中所有的单元格对象组成的列表
  5. table.col_slice(colx, start_rowx=0, end_rowx=None)
  6.     # 返回由该列中所有的单元格对象组成的列表
  7. table.col_types(colx, start_rowx=0, end_rowx=None)
  8.     # 返回由该列中所有单元格的数据类型组成的列表
  9. table.col_values(colx, start_rowx=0, end_rowx=None)
  10.     # 返回由该列中所有单元格的数据组成的列表
复制代码

  • 单元格的操作
  1. table.cell(rowx,colx)
  2.     # 返回单元格对象
  3. table.cell_type(rowx,colx)
  4.     # 返回对应位置单元格中的数据类型
  5. table.cell_value(rowx,colx)
  6.     # 返回对应位置单元格中的数据
复制代码
2.5.4 实战训练

使用xlrd模块进行读取:
  1. import xlrd
  2. xlsx = xlrd.open_workbook('./3_1 xlrd 读取 操作练习.xlsx')
  3. # 通过sheet名查找:xlsx.sheet_by_name("sheet1")
  4. # 通过索引查找:xlsx.sheet_by_index(3)
  5. table = xlsx.sheet_by_index(0)
  6. # 获取单个表格值 (2,1)表示获取第3行第2列单元格的值
  7. value = table.cell_value(2, 1)
  8. print("第3行2列值为",value)
  9. # 获取表格行数
  10. nrows = table.nrows
  11. print("表格一共有",nrows,"行")
  12. # 获取第4列所有值(列表生成式)
  13. name_list = [str(table.cell_value(i, 3)) for i in range(1, nrows)]
  14. print("第4列所有的值:",name_list)
复制代码
2.6 Python xlwt 写入 操作Excel(仅限xls格式!)

xlwt可以用于写入新的Excel表格或者在原表格基础上进行修改,速度也很快,推荐使用!
官方文档:https://xlwt.readthedocs.io/en/latest/
2.6.1 pip安装xlwt
  1. pip install xlwt
复制代码
2.6.2 使用xlwt创建新表格并写入

编写xlwt新表格写入程序:
  1. # 3.2.2 使用xlwt创建新表格并写入
  2. def fun3_2_2():
  3.     # 创建新的workbook(其实就是创建新的excel)
  4.     workbook = xlwt.Workbook(encoding= 'ascii')
  5.     # 创建新的sheet表
  6.     worksheet = workbook.add_sheet("My new Sheet")
  7.     # 往表格写入内容
  8.     worksheet.write(0,0, "内容1")
  9.     worksheet.write(2,1, "内容2")
  10.     # 保存
  11.     workbook.save("新创建的表格.xls")
复制代码
2.6.3 xlwt 设置字体格式

程序示例:
  1. # 3.2.3 xlwt设置字体格式
  2. def fun3_2_3():
  3.     # 创建新的workbook(其实就是创建新的excel)
  4.     workbook = xlwt.Workbook(encoding= 'ascii')
  5.     # 创建新的sheet表
  6.     worksheet = workbook.add_sheet("My new Sheet")
  7.     # 初始化样式
  8.     style = xlwt.XFStyle()
  9.     # 创建字体样式
  10.     font = xlwt.Font()
  11.     font.name = 'Times New Roman'   #字体
  12.     font.bold = True                #加粗
  13.     font.underline = True           #下划线
  14.     font.italic = True              #斜体
  15.     # 设置样式
  16.     style.font = font
  17.     # 往表格写入内容
  18.     worksheet.write(0,0, "内容1")
  19.     worksheet.write(2,1, "内容2",style)
  20.     # 保存
  21.     workbook.save("新创建的表格.xls")
  22.     # 设置列宽
  23.     worksheet.col(0).width = 256*20
  24.      # 设置行高
  25.     style = xlwt.easyxf('font:height 360;')  # 18pt,类型小初的字号
  26.     row = worksheet.row(0)
  27.     row.set_style(style)
  28.      # 合并 第1行到第2行 的 第0列到第3列
  29.     worksheet.write_merge(1, 2, 0, 3, 'Merge Test')
  30.       # 设置边框样式
  31.     borders = xlwt.Borders()  # Create Borders
  32.     borders.left = xlwt.Borders.DASHED
  33.     borders.right = xlwt.Borders.DASHED
  34.     borders.top = xlwt.Borders.DASHED
  35.     borders.bottom = xlwt.Borders.DASHED
  36.     borders.left_colour = 0x40
  37.     borders.right_colour = 0x40
  38.     borders.top_colour = 0x40
  39.   borders.bottom_colour = 0x40
复制代码
2.7 Python xlutils 修改 操作Excel

xlutils可用于拷贝原excel或者在原excel基础上进行修改,并保存;
官方文档:https://xlutils.readthedocs.io/en/latest/
2.7.1 pip安装xlutils
  1. pip install xlutils
复制代码
2.7.2 xlutils拷贝源文件(需配合xlrd使用)

程序示例:
  1. # 3.3.2 拷贝源文件
  2. def fun3_3_2():
  3.     workbook = xlrd.open_workbook('3_3 xlutils 修改操作练习.xlsx')  # 打开工作簿
  4.     new_workbook = copy(workbook)  # 将xlrd对象拷贝转化为xlwt对象
  5.     new_workbook.save("new_test.xls")  # 保存工作簿
复制代码
2.7.3 xlutils 读取 写入 (也就是修改)Excel 表格信息

程序示例:
  1. # 3.3.3 xlutils读取 写入 Excel 表格信息
  2. def fun3_3_3():
  3.     # file_path:文件路径,包含文件的全名称
  4.     # formatting_info=True:保留Excel的原格式(使用与xlsx文件)
  5.     workbook = xlrd.open_workbook('3_3 xlutils 修改操作练习.xlsx')
  6.     new_workbook = copy(workbook)  # 将xlrd对象拷贝转化为xlwt对象
  7.     # 读取表格信息
  8.     sheet = workbook.sheet_by_index(0)
  9.     col2 = sheet.col_values(1)  # 取出第二列
  10.     cel_value = sheet.cell_value(1, 1)
  11.     print(col2)
  12.     print(cel_value)
  13.     # 写入表格信息
  14.     write_save = new_workbook.get_sheet(0)
  15.     write_save.write(0, 0, "xlutils写入!")
  16.     new_workbook.save("new_test.xls")  # 保存工作簿
复制代码
2.8 Python xlwings 读取 写入 修改 操作Excel

2.8.1 pip安装xlwings

pip install xlwings
2.8.2 基本操作

引入库
import xlwings as xw
(1)打开已存在的Excel文档
  1. # 导入xlwings模块
  2. import xlwings as xw
  3. # 打开Excel程序,默认设置:程序可见,只打开不新建工作薄,屏幕更新关闭
  4. app=xw.App(visible=True,add_book=False)
  5. app.display_alerts=False
  6. app.screen_updating=False
  7. # 文件位置:filepath,打开test文档,然后保存,关闭,结束程序
  8. filepath=r'g:\Python Scripts\test.xlsx'
  9. wb=app.books.open(filepath)
  10. wb.save()
  11. wb.close()
  12. app.quit()
复制代码
(2)新建Excel文档,命名为test.xlsx,并保存在D盘
  1. import xlwings as xw
  2. app=xw.App(visible=True,add_book=False)
  3. wb=app.books.add()
  4. wb.save(r'd:\test.xlsx')
  5. wb.close()
  6. app.quit()
复制代码
(3) xlwings 读写 Excel
新建test.xlsx,在sheet1的第一个单元格输入 “人生” ,然后保存关闭,退出Excel程序。
  1. def fun3_4_4():
  2.     # 新建Excle 默认设置:程序可见,只打开不新建工作薄,屏幕更新关闭
  3.     app = xw.App(visible=True, add_book=False)
  4.     app.display_alerts = False
  5.     app.screen_updating = False
  6.     # 打开已存在的Excel文件
  7.     wb=app.books.open('./3_4 xlwings 修改操作练习.xlsx')
  8.     # 获取sheet对象
  9.     print(wb.sheets)
  10.     sheet = wb.sheets[0]
  11.     # sheet = wb.sheets["sheet1"]
  12.     # 读取Excel信息
  13.     cellB1_value = sheet.range('B1').value
  14.     print("单元格B1内容为:",cellB1_value)
  15.     # 清除单元格内容和格式
  16.     sheet.range('A1').clear()
  17.     # 写入单元格
  18.     sheet.range('A1').value = "xlwings写入"
  19.     # 保存工作簿
  20.     wb.save('example_3.xlsx')
  21.     # 退出工作簿
  22.     wb.close()
  23.     # 退出Excel
  24.     app.quit()l
复制代码
2.9 Python openpyxl 读取 写入 修改 操作Excel

在openpyxl中,主要用到三个概念:Workbooks,Sheets,Cells。
Workbook就是一个excel工作表;
Sheet是工作表中的一张表页;
Cell就是简单的一个格。
openpyxl就是围绕着这三个概念进行的,不管读写都是“三板斧”:打开Workbook,定位Sheet,操作Cell。
官方文档:https://openpyxl.readthedocs.io/en/stable/
1.安装
pip install openpyxl
2.打开文件
(1)新建
  1. from  openpyxl import  Workbook
  2. # 实例化
  3. wb = Workbook()
  4. # 激活 worksheet
  5. ws = wb.active
复制代码
(2)打开已有
  1. from openpyxl  import load_workbook
  2. wb = load_workbook('文件名称.xlsx')
复制代码
3.写入数据
  1. # 方式一:数据可以直接分配到单元格中(可以输入公式)
  2. ws['A1'] = 42
  3. # 方式二:可以附加行,从第一列开始附加(从最下方空白处,最左开始)(可以输入多行)
  4. ws.append([1, 2, 3])
  5. # 方式三:Python 类型会被自动转换
  6. ws['A3'] = datetime.datetime.now().strftime("%Y-%m-%d")
复制代码
4.创建表(sheet)
  1. # 方式一:插入到最后(default)
  2. ws1 = wb.create_sheet("Mysheet")
  3. # 方式二:插入到最开始的位置
  4. ws2 = wb.create_sheet("Mysheet", 0)
复制代码
5.选择表(sheet)
  1. # sheet 名称可以作为 key 进行索引
  2. >>> ws3 = wb["New Title"]
  3. >>> ws4 = wb.get_sheet_by_name("New Title")
  4. >>> ws is ws3 is ws4
  5. True
复制代码
6.查看表名(sheet)
  1. # 显示所有表名
  2. >>> print(wb.sheetnames)
  3. ['Sheet2', 'New Title',  'Sheet1']
  4. # 遍历所有表
  5. >>> for sheet in  wb:
  6. ...     print(sheet.title)
复制代码
7.保存数据
  1. wb.save('文件名称.xlsx')
复制代码
8.其它
(1)改变sheet标签按钮颜色
  1. ws.sheet_properties.tabColor = "1072BA" # 色值为RGB16进制值
复制代码
(2)获取最大行,最大列
  1. # 获得最大列和最大行
  2. print(sheet.max_row)
  3. print(sheet.max_column)
复制代码
(3)获取每一行每一列
sheet.rows为生成器, 里面是每一行的数据,每一行又由一个tuple包裹。
sheet.columns类似,不过里面是每个tuple是每一列的单元格。
  1. # 因为按行,所以返回A1, B1, C1这样的顺序
  2. for row in sheet.rows:
  3.     for cell in row:
  4.         print(cell.value)
  5. # A1, A2, A3这样的顺序
  6. for column in sheet.columns:
  7.     for cell in column:
  8.         print(cell.value)
复制代码
(4)根据数字得到字母,根据字母得到数字
  1. from openpyxl.utils import get_column_letter, column_index_from_string
  2. # 根据列的数字返回字母
  3. print(get_column_letter(2))  # B
  4. # 根据字母返回列的数字
  5. print(column_index_from_string('D'))  # 4
复制代码
(5)删除工作表
  1. # 方式一
  2. wb.remove(sheet)
  3. # 方式二
  4. del wb[sheet]
复制代码
项目实操—-UI自动化中实践项目
需求:业务写入拣货容器,使用一次不可使用第二次,且脚本中固定读取固定位置
  1. import openpyxl
  2. from openpyxl.cell.cell import ILLEGAL_CHARACTERS_RE
  3. from openpyxl.utils import get_column_letter, column_index_from_string
  4. # 向sheetobj中的columnname列从start_row开始写入listdata
  5. def insert_listdata_to_column(sheetobj,listdata,column_name,start_row=3):
  6.     # 根据列名获取列索引
  7.     colindex = column_index_from_string(column_name)
  8.     print('colindex为{}'.format(colindex))
  9.     # 循环从开始行数到数据写入后最后一行
  10.     for rowindex in range(start_row, start_row + len(listdata)):
  11.         # 写入list数值根据索引取值,从0开始
  12.         val = listdata[rowindex - start_row]
  13.         print('val{}'.format(val))
  14.         print('rowindex{}'.format(rowindex))
  15.         try:
  16.             sheetobj.cell(row = rowindex,column = colindex,value = val)
  17.         except:
  18.             # 出现非法字符时,可以将字符串的非法字符替换掉
  19.             val = ILLEGAL_CHARACTERS_RE.sub(r'',val)
  20.             sheetobj.cell(row = rowindex,column = colindex,value = val)
  21.     delrow = start_row + len(listdata)
  22.     print('*********{}'.format(delrow))
  23.     sheetobj.delete_rows(delrow)
  24. def del_excel():
  25.     xlsx = xlrd.open_workbook(r'D:\pytest\inbound_data.xlsx')
  26.     table =xlsx.sheet_by_index(2)
  27.     # 获取第2列所有值
  28.     cel_value =table.col_values(1)
  29.     cel_value=cel_value[3::]
  30.     wb = openpyxl.load_workbook(r'D:\pytest\inbound_data.xlsx')
  31.     sheet = wb["B2B出库"]
  32.     print(sheet)
  33.     insert_listdata_to_column(sheet,cel_value,'B',3)
  34.     wb.save(r'D:\pytest\inbound_data.xlsx')
  35. del_excel()
复制代码
3 总结

在本文中,简单介绍了几种配置文件和使用。根据不同的用例,复杂的工具/框架并不总是比简单的软件包更好。但无论选择哪一种,都应始终考虑可读性,可维护性以及如何尽早地发现错误。事实上,可以说配置文件只是另一种类型的代码。可以根据自己的项目框架来灵活运用啦~
作者:京东物流 王小云
来源:京东云开发者社区

来源:https://www.cnblogs.com/jingdongkeji/p/17485858.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具