EXCEL
首先下载安装xlrd和xlwt这两个库。
1、打开excel
image.png
readbook = xlrd.open_workbook(r'\test\canying.xlsx')
2、获取读入的文件的sheet
sheet = readbook.sheet_by_index(1)#索引的方式,从0开始
sheet = readbook.sheet_by_name('sheet2')#名字的方式
3、获取sheet的最大行数和列数
nrows = sheet.nrows#行
ncols = sheet.ncols#列
4、获取某个单元格的值
lng = table.cell(i,3).value#获取i行3列的表格值
lat = table.cell(i,4).value#获取i行4列的表格值
5、打开将写的表并添加sheet
writebook = xlwt.Workbook()#打开一个excel
sheet = writebook.add_sheet('test')#在打开的excel中添加一个sheet
6、将数据写入excel
sheet.write(i,0,result[0])#写入excel,i行0列
sheet.write(i,1,result[1])
7、保存
writebook.save('answer.xls')#一定要记得保存
例如:
file_reader.py
class ExcelReader:
"""
读取excel文件中的内容。返回list。
如:
excel中内容为:
| A | B | C |
| A1 | B1 | C1 |
| A2 | B2 | C2 |
如果 print(ExcelReader(excel, title_line=True).data),输出结果:
[{A: A1, B: B1, C:C1}, {A:A2, B:B2, C:C2}]
如果 print(ExcelReader(excel, title_line=False).data),输出结果:
[[A,B,C], [A1,B1,C1], [A2,B2,C2]]
可以指定sheet,通过index或者name:
ExcelReader(excel, sheet=2)
ExcelReader(excel, sheet='BaiDuTest')
"""
def __init__(self, excel, sheet=0, title_line=True):
if os.path.exists(excel):
self.excel = excel
else:
raise FileNotFoundError('文件不存在!')
self.sheet = sheet
self.title_line = title_line
self._data = list()
@property
def data(self):
if not self._data:
workbook = open_workbook(self.excel)
if type(self.sheet) not in [int, str]:
raise SheetTypeError('Please pass in <type int> or <type str>, not {0}'.format(type(self.sheet)))
elif type(self.sheet) == int:
s = workbook.sheet_by_index(self.sheet)
else:
s = workbook.sheet_by_name(self.sheet)
if self.title_line:
title = s.row_values(0) # 首行为title
for col in range(1, s.nrows):
# 依次遍历其余行,与首行组成dict,拼到self._data中
# 以下实例展示了zip的使用方法:
# >> > a = [1, 2, 3]
# >> > b = [4, 5, 6]
# >> > c = [4, 5, 6, 7, 8]
# >> > zipped = zip(a, b) # 打包为元组的列表
# [(1, 4), (2, 5), (3, 6)]
# >> > zip(a, c) # 元素个数与最短的列表一致
# [(1, 4), (2, 5), (3, 6)]
self._data.append(dict(zip(title, s.row_values(col))))
else:
for col in range(0, s.nrows):
# 遍历所有行,拼到self._data中
self._data.append(s.row_values(col))
return self._data
test_baidu.py
from utils.file_reader import ExcelReader
class TestBaiDu(unittest.TestCase):
URL = Config().get('URL')
excelfile = DATA_PATH + '/baidu.xlsx'
def sub_setUp(self):
self.page = BaiDuMainPage(browser_type='chrome').get(self.URL, maximize_window=False)
def sub_tearDown(self):
self.page.quit()
def test_search(self):
datas = ExcelReader(self.excelfile).data
for d in datas:
with self.subTest(data=d): #在测试用例中使用subTest()重复测试某个用例,其没有setup和teardown,需手动添加
self.sub_setUp()
self.page.search(d['search'])
time.sleep(2)
self.page = BaiDuResultPage(self.page) # 页面跳转到result page
links = self.page.result_links
for link in links:
logger.info(link.text)
self.sub_tearDown()
YAML
导入yaml包
file_reader.py
import yaml
class YamlReader:
def __init__(self,yamlfile):
if os.path.exists(yamlfile):
self.yamlfile=yamlfile
else:
raise FileNotFoundError("文件不存在!")
self._data=None
@property
def data(self):
# 如果是第一次调用data,读取yaml文档,否则直接返回之前保存的数据
if not self._data:
with open(self.yamlfile, 'rb') as f:
self._data = list(yaml.safe_load_all(f)) # load后是个generator,用list组织成列表
return self._data
config.py读取配置
import os
from utils.file_reader import YamlReader
class Config:
def __init__(self, config=CONFIG_FILE):
self.config = YamlReader(config).data
def get(self, element, index=0):
"""
yaml是可以通过'---'分节的。用YamlReader读取返回的是一个list,第一项是默认的节,如果有多个节,可以传入index来获取。
这样我们其实可以把框架相关的配置放在默认节,其他的关于项目的配置放在其他节中。可以在框架中实现多个项目的测试。
"""
return self.config[index].get(element)
最后:
description = Config().get('DESCRIPTION') #DESCRIPTION是配置文件config.yml里的
调用就行。
网友评论