凯发真人娱乐

python 自动化测试的配置层实现方式对标与落地 -凯发真人娱乐

2023-08-17,,

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)组成。具体形式如下:

db.ini
[mysql]
host = 127.0.0.1
port = 3306
user = root
password = 123456
database = test

2.1.2 python读取ini文件

使用python内置的 configparser 标准库进行解析ini文件。

read() 读取文件内容 items() 获取指定节的所有键值对

# -*- coding: utf-8 -*-
'''
* @author : wxy
* @date : 2022-08-24 11:11:06
* @description : 读取ini文件
* @lastedittime : 2022-08-24 11:11:06
'''
from configparser import configparser
from pprint import pprint
import pymysql # ini文件路径
ini_file = './db.ini'
# 读取ini的节(section)
db_name = 'mysql' # configparser实例化
text = configparser() # 读取ini文件内容
text.read(ini_file) # text.items()返回list,元素为tuple,元组格式为 key,value
db_tuple = text.items(db_name)
print(db_tuple) # 将元组转换成dict
db_dict = dict(text.items(db_name))
print(db_dict)

2.2 json

json(javascript object notation,) 是一种轻量级的数据交换格式。

2.2.1 json文件的定义

简单的json示例

  {
"mysql": {
"host": "127.0.0.1",
"port": 3306,
"user": "root",
"password": "123456",
"database": "test"
}
}

2.2.2 python读取json文件

load() 从json文件中读取json格式数据

loads() 将字符串类型数据转化为json格式数据

dump() 将json格式数据保存到文件

dumps() 将json格式数据保存为字符串类型

# -*- coding: utf-8 -*-
'''
* @author : wxy
* @date : 2022-8-24 11:39:44
* @description : 读取json文件
* @lastedittime : 2022-8-24 11:39:44
''' import json
from pprint import pprint
import pymysql json_file = "./db.json"
db_name = "mysql"
web = "web" with open(json_file) as f:
cfg = json.load(f)[db_name]
print(cfg) with open(json_file) as f:
cfg = json.load(f)[web]
print(cfg['user'])

2.3 toml

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

2.3.1 定义toml文件

语法:

toml的语法广泛地由key = “value”、[节名]、#注释构成。

支持以下数据类型:字符串、整形、浮点型、布尔型、日期时间、数组和图表。

 # db.toml
[mysql]
[mysql.config]
host = "127.0.0.1"
user = "root"
port = 3306
password = "123456"
database = "test" [mysql.parameters]
pool_size = 5
charset = "utf8" [mysql.fields]
course_cols = ["cno", "cname", "ccredit", "cdept"]

2.3.2 python读取toml文件

使用外部库 toml 解析toml文件

# -*- coding: utf-8 -*-
'''
* @description : 读取toml文件
* @lastedittime : 2022-08-14 11:31:07
'''
import toml
from pprint import pprint
import pymysql toml_file = "./db.toml" cfg = toml.load(toml_file)['mysql'] pprint(cfg)

2.4 yaml

yaml(yaml ain’t a markup language”, yaml不是一种标记语言) 格式是目前较为流行的一种配置文件,它早在 2001 由一个名为 clark evans 的人提出;同时它也是目前被广泛使用的配置文件类型。

2.4.1 定义yaml文件

# db.yaml
mysql:
config:
host: "127.0.0.1"
port: 3306
user: "root"
password: ""
database: "stu_sys" parameters:
pool_size: 5
charset: "utf8" fileds:
course_cols:
- cno
- cname
- ccredit
- cdept

2.4.2 python读取yaml文件

使用外部库 pyyaml 解析toml文件。

# -*- coding: utf-8 -*-
'''
* @author : wxy
* @date : 2022-8-24 11:34:37
* @description : 读取yaml文件
* @lastedittime : 2022-8-24 11:34:37
'''
import yaml
from pprint import pprint
import pymysql yaml_file = "./db.yaml" with open(yaml_file, 'r') as f:
cfg = yaml.safe_load(f) 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.导入模块

import xlrd

3.打开excel文件读取数据

data = xlrd.open_workbook(filename)#文件名以及路径,如果路径或者文件名有中文给前面加一个 r

4.常用的函数

excel中最重要的方法就是book和sheet的操作

获取book(excel文件)中一个工作表

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

行的操作

nrows = table.nrows
# 获取该sheet中的行数,注,这里table.nrows后面不带().
table.row(rowx)
# 返回由该行中所有的单元格对象组成的列表,这与tabel.raw()方法并没有区别。
table.row_slice(rowx)
# 返回由该行中所有的单元格对象组成的列表
table.row_types(rowx, start_colx=0, end_colx=none)
# 返回由该行中所有单元格的数据类型组成的列表;
# 返回值为逻辑值列表,若类型为empy则为0,否则为1
table.row_values(rowx, start_colx=0, end_colx=none)
# 返回由该行中所有单元格的数据组成的列表
table.row_len(rowx)
# 返回该行的有效单元格长度,即这一行有多少个数据

列(colnum)的操作

ncols = table.ncols
# 获取列表的有效列数
table.col(colx, start_rowx=0, end_rowx=none)
# 返回由该列中所有的单元格对象组成的列表
table.col_slice(colx, start_rowx=0, end_rowx=none)
# 返回由该列中所有的单元格对象组成的列表
table.col_types(colx, start_rowx=0, end_rowx=none)
# 返回由该列中所有单元格的数据类型组成的列表
table.col_values(colx, start_rowx=0, end_rowx=none)
# 返回由该列中所有单元格的数据组成的列表

单元格的操作

table.cell(rowx,colx)
# 返回单元格对象
table.cell_type(rowx,colx)
# 返回对应位置单元格中的数据类型
table.cell_value(rowx,colx)
# 返回对应位置单元格中的数据

2.5.4 实战训练

使用xlrd模块进行读取:

import xlrd
xlsx = xlrd.open_workbook('./3_1 xlrd 读取 操作练习.xlsx')
# 通过sheet名查找:xlsx.sheet_by_name("sheet1")
# 通过索引查找:xlsx.sheet_by_index(3)
table = xlsx.sheet_by_index(0) # 获取单个表格值 (2,1)表示获取第3行第2列单元格的值
value = table.cell_value(2, 1)
print("第3行2列值为",value) # 获取表格行数
nrows = table.nrows
print("表格一共有",nrows,"行") # 获取第4列所有值(列表生成式)
name_list = [str(table.cell_value(i, 3)) for i in range(1, nrows)]
print("第4列所有的值:",name_list)

2.6 python xlwt 写入 操作excel(仅限xls格式!)

xlwt可以用于写入新的excel表格或者在原表格基础上进行修改,速度也很快,推荐使用!

官方文档:https://xlwt.readthedocs.io/en/latest/

2.6.1 pip安装xlwt

pip install xlwt

2.6.2 使用xlwt创建新表格并写入

编写xlwt新表格写入程序:

# 3.2.2 使用xlwt创建新表格并写入
def fun3_2_2():
# 创建新的workbook(其实就是创建新的excel)
workbook = xlwt.workbook(encoding= 'ascii') # 创建新的sheet表
worksheet = workbook.add_sheet("my new sheet") # 往表格写入内容
worksheet.write(0,0, "内容1")
worksheet.write(2,1, "内容2") # 保存
workbook.save("新创建的表格.xls")

2.6.3 xlwt 设置字体格式

程序示例:

# 3.2.3 xlwt设置字体格式
def fun3_2_3():
# 创建新的workbook(其实就是创建新的excel)
workbook = xlwt.workbook(encoding= 'ascii') # 创建新的sheet表
worksheet = workbook.add_sheet("my new sheet") # 初始化样式
style = xlwt.xfstyle() # 创建字体样式
font = xlwt.font()
font.name = 'times new roman' #字体
font.bold = true #加粗
font.underline = true #下划线
font.italic = true #斜体 # 设置样式
style.font = font
# 往表格写入内容
worksheet.write(0,0, "内容1")
worksheet.write(2,1, "内容2",style)
# 保存
workbook.save("新创建的表格.xls")
# 设置列宽
worksheet.col(0).width = 256*20
# 设置行高
style = xlwt.easyxf('font:height 360;') # 18pt,类型小初的字号
row = worksheet.row(0)
row.set_style(style)
# 合并 第1行到第2行 的 第0列到第3列
worksheet.write_merge(1, 2, 0, 3, 'merge test')
# 设置边框样式
borders = xlwt.borders() # create borders
borders.left = xlwt.borders.dashed
borders.right = xlwt.borders.dashed
borders.top = xlwt.borders.dashed
borders.bottom = xlwt.borders.dashed
borders.left_colour = 0x40
borders.right_colour = 0x40
borders.top_colour = 0x40
borders.bottom_colour = 0x40

2.7 python xlutils 修改 操作excel

xlutils可用于拷贝原excel或者在原excel基础上进行修改,并保存;

官方文档:https://xlutils.readthedocs.io/en/latest/

2.7.1 pip安装xlutils

pip install xlutils

2.7.2 xlutils拷贝源文件(需配合xlrd使用)

程序示例:

# 3.3.2 拷贝源文件
def fun3_3_2():
workbook = xlrd.open_workbook('3_3 xlutils 修改操作练习.xlsx') # 打开工作簿
new_workbook = copy(workbook) # 将xlrd对象拷贝转化为xlwt对象
new_workbook.save("new_test.xls") # 保存工作簿

2.7.3 xlutils 读取 写入 (也就是修改)excel 表格信息

程序示例:

# 3.3.3 xlutils读取 写入 excel 表格信息
def fun3_3_3():
# file_path:文件路径,包含文件的全名称
# formatting_info=true:保留excel的原格式(使用与xlsx文件)
workbook = xlrd.open_workbook('3_3 xlutils 修改操作练习.xlsx') new_workbook = copy(workbook) # 将xlrd对象拷贝转化为xlwt对象 # 读取表格信息
sheet = workbook.sheet_by_index(0)
col2 = sheet.col_values(1) # 取出第二列
cel_value = sheet.cell_value(1, 1)
print(col2)
print(cel_value) # 写入表格信息
write_save = new_workbook.get_sheet(0)
write_save.write(0, 0, "xlutils写入!") 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文档

# 导入xlwings模块
import xlwings as xw # 打开excel程序,默认设置:程序可见,只打开不新建工作薄,屏幕更新关闭
app=xw.app(visible=true,add_book=false)
app.display_alerts=false
app.screen_updating=false # 文件位置:filepath,打开test文档,然后保存,关闭,结束程序
filepath=r'g:\python scripts\test.xlsx'
wb=app.books.open(filepath)
wb.save()
wb.close()
app.quit()

(2)新建excel文档,命名为test.xlsx,并保存在d盘

import xlwings as xw
app=xw.app(visible=true,add_book=false)
wb=app.books.add()
wb.save(r'd:\test.xlsx')
wb.close()
app.quit()

(3) xlwings 读写 excel

新建test.xlsx,在sheet1的第一个单元格输入 “人生” ,然后保存关闭,退出excel程序。

def fun3_4_4():
# 新建excle 默认设置:程序可见,只打开不新建工作薄,屏幕更新关闭
app = xw.app(visible=true, add_book=false)
app.display_alerts = false
app.screen_updating = false # 打开已存在的excel文件
wb=app.books.open('./3_4 xlwings 修改操作练习.xlsx') # 获取sheet对象
print(wb.sheets)
sheet = wb.sheets[0]
# sheet = wb.sheets["sheet1"] # 读取excel信息
cellb1_value = sheet.range('b1').value
print("单元格b1内容为:",cellb1_value) # 清除单元格内容和格式
sheet.range('a1').clear() # 写入单元格
sheet.range('a1').value = "xlwings写入" # 保存工作簿
wb.save('example_3.xlsx') # 退出工作簿
wb.close() # 退出excel
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)新建

from  openpyxl import  workbook
# 实例化
wb = workbook()
# 激活 worksheet
ws = wb.active

(2)打开已有

from openpyxl  import load_workbook
wb = load_workbook('文件名称.xlsx')

3.写入数据

# 方式一:数据可以直接分配到单元格中(可以输入公式)
ws['a1'] = 42
# 方式二:可以附加行,从第一列开始附加(从最下方空白处,最左开始)(可以输入多行)
ws.append([1, 2, 3])
# 方式三:python 类型会被自动转换
ws['a3'] = datetime.datetime.now().strftime("%y-%m-%d")

4.创建表(sheet)

# 方式一:插入到最后(default)
ws1 = wb.create_sheet("mysheet")
# 方式二:插入到最开始的位置
ws2 = wb.create_sheet("mysheet", 0)

5.选择表(sheet)

# sheet 名称可以作为 key 进行索引
>>> ws3 = wb["new title"]
>>> ws4 = wb.get_sheet_by_name("new title")
>>> ws is ws3 is ws4
true

6.查看表名(sheet)

# 显示所有表名
>>> print(wb.sheetnames)
['sheet2', 'new title', 'sheet1']
# 遍历所有表
>>> for sheet in wb:
... print(sheet.title)

7.保存数据

wb.save('文件名称.xlsx')

8.其它

(1)改变sheet标签按钮颜色

ws.sheet_properties.tabcolor = "1072ba" # 色值为rgb16进制值

(2)获取最大行,最大列

# 获得最大列和最大行
print(sheet.max_row)
print(sheet.max_column)

(3)获取每一行每一列

sheet.rows为生成器, 里面是每一行的数据,每一行又由一个tuple包裹。

sheet.columns类似,不过里面是每个tuple是每一列的单元格。

# 因为按行,所以返回a1, b1, c1这样的顺序
for row in sheet.rows:
for cell in row:
print(cell.value) # a1, a2, a3这样的顺序
for column in sheet.columns:
for cell in column:
print(cell.value)

(4)根据数字得到字母,根据字母得到数字

from openpyxl.utils import get_column_letter, column_index_from_string
# 根据列的数字返回字母
print(get_column_letter(2)) # b
# 根据字母返回列的数字
print(column_index_from_string('d')) # 4

(5)删除工作表

# 方式一
wb.remove(sheet)
# 方式二
del wb[sheet]

项目实操—-ui自动化中实践项目

需求:业务写入拣货容器,使用一次不可使用第二次,且脚本中固定读取固定位置

import openpyxl
from openpyxl.cell.cell import illegal_characters_re
from openpyxl.utils import get_column_letter, column_index_from_string # 向sheetobj中的columnname列从start_row开始写入listdata
def insert_listdata_to_column(sheetobj,listdata,column_name,start_row=3):
# 根据列名获取列索引
colindex = column_index_from_string(column_name)
print('colindex为{}'.format(colindex))
# 循环从开始行数到数据写入后最后一行
for rowindex in range(start_row, start_row len(listdata)):
# 写入list数值根据索引取值,从0开始
val = listdata[rowindex - start_row]
print('val{}'.format(val))
print('rowindex{}'.format(rowindex))
try:
sheetobj.cell(row = rowindex,column = colindex,value = val)
except:
# 出现非法字符时,可以将字符串的非法字符替换掉
val = illegal_characters_re.sub(r'',val)
sheetobj.cell(row = rowindex,column = colindex,value = val)
delrow = start_row len(listdata)
print('*********{}'.format(delrow))
sheetobj.delete_rows(delrow) def del_excel(): xlsx = xlrd.open_workbook(r'd:\pytest\inbound_data.xlsx')
table =xlsx.sheet_by_index(2)
# 获取第2列所有值
cel_value =table.col_values(1)
cel_value=cel_value[3::] wb = openpyxl.load_workbook(r'd:\pytest\inbound_data.xlsx')
sheet = wb["b2b出库"]
print(sheet)
insert_listdata_to_column(sheet,cel_value,'b',3)
wb.save(r'd:\pytest\inbound_data.xlsx') del_excel()

3 总结

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

作者:京东物流 王小云

来源:京东云开发者社区

python 自动化测试的配置层实现方式对标与的相关教程结束。

网站地图