android 自动读取ecxel_Android自动化测试26--Excel

本文介绍了如何在Android自动化测试中使用Excel作为数据源。通过xlrd和openpyxl库,读取和操作Excel文件,实现数据驱动测试。以测试Android计算器为例,详细展示了读取Excel数据定位Appium测试元素并记录测试结果的过程。
摘要由CSDN通过智能技术生成

Android自动化测试26

转帖请注明出处!谢谢

Excel

自动化测试过程中会经常用到Excel作为外部存储的数据源,数据驱动也好关键字数据驱动也好都会用到读取excel数据,同时写入excel类型的测试报告等等。python操作excel文件的第三方类库有xlrd(同族:xlwt负责写excel)和openpylx,xlsxwriter。其中xlrd可以实现跨平台读Microsoft Excel文件。它不是借助win2com类库的COM技术来访问Excel,而是直接分析Excel文件格式,从中解析数据。因此它支持python解析任何平台上的excel文件。它对unicode支持的很好,但是由于无法像微软公司那样熟悉excel文件格式的程度,所以不能处理图表,宏,图片等嵌入对象,VBA模块,公式,注释,链接等数据类型。现在它支持的Excel版本:2004, 2003, XP, 2000, 97, 95, 5.0, 4.0, 3.0, 2.1, 2.0。而2007版本Excel出现了xlsx文件类型,目的是使Excel能存入超过65535行数据。对于2007以后版本的excel文件用openpyxl库处理,支持Python3.x。还有一个库xlsxwriter 是python用来构造xlsx文件的模块,可以向excel2007+中写text,numbers,formulas 公式以及hyperlinks超链接,合并单元格,制作excel图表等功能。注意xlsxwriter只能创建新文件,不可以修改原有文件。如果创建新文件时与原有文件同名,则会覆盖原有文件

由于以上都是第三方库,要在使用前用python的pip命令安装,在命令符窗口中执行以下命令:

pip install xlrd

pip install xlwt

pip install openpyxl

xlrd和xlwt

测试使用excel文档名称为movie.xls,内容如下:

打开excel文件获取所有sheet

实例:

import xlrd

if __name__ == '__main__':

workbook = xlrd.open_workbook(r'movie.xls')

print(workbook.sheet_names())根据下标获取sheet名称

实例:

import xlrd

if __name__ == '__main__':

workbook = xlrd.open_workbook(r'movie.xls')

sheet_name = workbook.sheet_names()[0]

print(sheet_name)根据sheet索引(或名称)获取有数据的行和列数

实例:

import xlrd

if __name__ == '__main__':

workbook = xlrd.open_workbook(r' movie.xls ')

print("#$$$$$$$$$$$$$$$$$$$$$$$$$$$#")

sheet_name = workbook.sheet_by_index(0) #通过索引获取数据

print(sheet_name.name) #sheet名称

print('行数:'+ str(sheet_name.nrows)) #sheet已经写入的数据行数

print('列数:'+str(sheet_name.ncols)) #sheet已经写入的数据列数

print("#$$$$$$$$$$$$$$$$$$$$$$$$$$$#")

sheet_name = workbook.sheet_by_name('Sheet1') #通过名称获取数据

print(sheet_name.name) # sheet名称

print('行数:' + str(sheet_name.nrows)) # sheet已经写入的数据行数

print('列数:' + str(sheet_name.ncols)) # sheet已经写入的数据列数

print("#$$$$$$$$$$$$$$$$$$$$$$$$$$$#")根据sheet名称获取整行和整列的值

实例:

import xlrd

if __name__ == '__main__':

workbook = xlrd.open_workbook(r' movie.xls ')

sheet_name = workbook.sheet_by_index(0) #通过索引获取sheet

print(sheet_name.name) #sheet名称

rows = sheet_name.row_values(3)

cols = sheet_name.col_values(2)

print(rows) # 输出第三行所有的数据

print(cols) # 输出第二列所有的数据获取指定单元格的内容

实例:

import xlrd

if __name__ == '__main__':

workbook = xlrd.open_workbook(r' movie.xls ')

sheet_name = workbook.sheet_by_index(0) #通过索引获取数据

print(sheet_name.name) #sheet名称

rows1 = sheet_name.cell(1,0)

rows2 = sheet_name.cell(3,4)

print(rows1) # 输出1行0列的数据

print(rows2) # 输出3行4列所有的数据获取单元格内容的数据类型

实例:

import xlrd

if __name__ == '__main__':

workbook = xlrd.open_workbook(r'movie.xls')

sheet_name = workbook.sheet_by_index(0) #通过索引获取数据

print(sheet_name.name) #sheet名称

rows_type = sheet_name.cell(1,0).ctype

print(rows_type) # 输出1行0列的数据类型

说明:ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error

openpyxl

openpyxl主要用到三个概念:Workbooks,Sheets,Cells。Workbook就是一个excel工作表;Sheet是工作表中的一张表页;Cell就是简单的一个格。openpyxl就是围绕着这三个概念进行的,不管读写都是“三板斧”:打开Workbook,定位Sheet,操作Cell。操作movie.xlsx内容同上:打开excel文件获取所有sheet

实例:

from openpyxl import load_workbook

if __name__ == '__main__':

wb = load_workbook(r"movie.xlsx")

print(wb.sheetnames) # ['Sheet1', 'Sheet2', 'Sheet3']根据下标获取sheet名称

实例:

from openpyxl import load_workbook

if __name__ == '__main__':

wb = load_workbook(r" movie.xlsx")

print(wb.sheetnames[0]) # 获取sheet1根据sheet索引(或名称)获取写入数据的行数和列数

实例:

from openpyxl import load_workbook

if __name__ == '__main__':

wb = load_workbook(r"C:\ movie.xlsx")

sheetnames = wb.get_sheet_names()

ws = wb.get_sheet_by_name(sheetnames[0])

print(ws.max_row) #输出存在数据的行数

print(ws.max_column) #输出存在数据的列数获取指定单元格的内容

实例:

from openpyxl import load_workbook

if __name__ == '__main__':

wb = load_workbook(r"C:\ movie.xlsx")

sheetnames = wb.get_sheet_names()

ws = wb.get_sheet_by_name(sheetnames[0])

wvalue = ws.cell(row=2, column=1).value

print(wvalue) #输出制定cell表格的内容

综合实例

以测试Android为例,用excel文件为数据源,实现Appium数据驱动。

准备测试数据文档

准备测试android计算器的测试数据,请使用MS Office软件或其他类似软件打开一个Excel文件,输入下面内容并保存为“test_data.xlsx”:

通过读取刚刚完成的“test_data.xlsx”表格中的定位器来定位Android手机自带的计算器中对应的按钮,定位成功后点击该按钮,并且将每一条的执行结果记录在这份表格中的最后一列测试结果。

编写测试代码

testCal.py代码如下:

#coding=utf-8

import xlrd,xlwt

from xlutils.copy import copy

import time

from appium import webdriver

desired_caps = {}

desired_caps['platformName'] = 'Android' # 设备系统

desired_caps['platformVersion'] = '6.0' # 设备系统版本

desired_caps['deviceName'] = 'emulator-5554' # 设备名称

desired_caps['appPackage'] = 'com.android.calculator2'

desired_caps['appActivity'] = '.Calculator'

driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps)

time.sleep(3)

#写入数据

def writeData(j,r,rvValue=None):

mybook = xlrd.open_workbook("C:\\Users\\pcl\\Desktop\\MyTestData.xlsx")

wrbook = copy(mybook)

wsheet = wrbook.get_sheet(0)

wsheet.write(j, r, rvValue)

wrbook.save("C:\\Users\\pcl\\Desktop\\MyTestData.xlsx")

#读取测试数据

def readTestData():

fname = "C:\\Users\\pcl\\Desktop\\MyTestData.xlsx"

bk = xlrd.open_workbook(fname)

sh = bk.sheet_by_name("myData")

#获取行数

nrows = sh.nrows

# 获取列数

ncols = sh.ncols

print("nrows %d, ncols %d" % (nrows,ncols))

#获取第一行第一列数据

for i in range(1,nrows):

cell_value = sh.cell_value(i,0)

time.sleep(2)

el = driver.find_element_by_id(cell_value)

el.click()

time.sleep(3)

writeData(i,2,el.text)

data1 = str((sh.cell_value(i, 1)))

if data1 == el.text:

#写入数据

writeData(i,3,"pass")

readTestData()

技术解释:上面这段代码首先导入了xlrd和xlwt模块,也导入appium相关的模块,接下来代码appium配置需要启动的相关设置,然后启动被测应用。通过封装的readTestData的方法来读取Excel表格数据,用for循环来遍历每一行测试数据,这里注意要排除掉第一行数据(也就是标题行)。在for循环内部读取测试数据驱动测试执行,然后将执行测试结果和表格内的预期结果进行比对,如果对比一致就写入excel文件的第四列,如果不一致就空白。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值