Python第三方模块openpyxl简介
openpyxl是专门用来读取和写入Excel文档的python第三方模块。本文将使用这个模块和appium工具进行自动化测试的数据驱动测试实践。
安装openpyxl模块
使用下面命令来安装openpyxl:
$ pip install openpyxl
如果你使用的是ubuntu等linux系统的话,请在命令之前添加sudo命令:
$ sudo pip install openpyxl
用ipython熟悉openpyxl操作
准备测试数据文档
接下来要准备下面测试android计算器的测试数据,请使用MS Office软件或其他类似软件打开一个Excel文件,输入下面内容并保存为“test_data.xlsx”:
注意:如果你电脑上没有可以编辑Excel文档的软件,可以安装开源的LibreOffice。
利用ipython学习openpyxl
建议使用IPython来熟悉openpyxl的使用方法,具体请查看openpyxl的官方文档,地址:https://openpyxl.readthedocs.io/en/default/
在终端中输入下面命令启动ipython。
$ ipython
继续在ipython交互环境中输入以下代码进行openpyxl的学习:
In [13]: wb = openpyxl.load_workbook('test_data.xlsx') #打开当前目录下的test_data.xlsx文件
In [14]: wb.get_sheet_names() #获取当前sheet名称
Out[14]: ['Sheet1']
In [15]: sheet = wb.get_active_sheet() #新建sheet对象
In [16]: sheet.title #查看新建sheet对象的标题
Out[16]: 'Sheet1'
In [17]: sheet['A1'].value #查看sheet页中A1单元格的数值
Out[17]: '编号'
--略--
In [26]: sheet.rows #sheet页中的行数对象
Out[26]:
从Excel表格读取测试数据进行appium自动化测试
下面要通过读取刚刚完成的“test_data.xlsx”表格中的元素id来定位并点击,android手机自带的计算器中对应的按钮,并且将每一条的执行结果记录在一个新的表格中。
请打开一个新的文本编辑器窗口,输入的代码如下,将文件保存为testCal.py:
#!/usr/bin/env python3
# coding=utf-8
import openpyxl #此模块用于读写Excel表格
from appium import webdriver
desired_caps = {}
desired_caps['platformName'] = 'Android' #设置操作平台
desired_caps['platformVersion'] = '5.1.1' #操作系统版本
desired_caps['deviceName'] = 'Nexus 4' #设备名称
desired_caps['appPackage'] = 'com.android.calculator2' #启动原生的计算器
desired_caps['appActivity'] = '.Calculator' #同上,启动原生的计算器
desired_caps['udid'] = '04c5a5af52197902' #设备ID,可以通过adb devices命令查看
desired_caps['noReset'] = 'True' # 设置会话不会重置
#通过appium服务器,新建driver对象
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
wb = openpyxl.load_workbook('test_data.xlsx') # 加载测试数据表格
sheet = wb.get_sheet_by_name('Sheet1')
# 通过枚举函数来循环处理所有的数据行,注意去除标题行
for i, _ in enumerate(list(sheet.rows)[:-1]):
id = sheet['C' + str(i + 2)].value # 读取测试数据字段
driver.find_element_by_id(id).click() #点击指定的id的按键
#元素定位到公式显示区域,获取此元素的文本值作为实际结果
text = driver.find_element_by_id('com.android.calculator2:id/formula').text
sheet['E' + str(i + 2)].value = text # 给E列赋值,实际返回结果
expected_result = sheet['D' + str(i + 2)].value #获取预期结果字段
# 判断实际结果和预期结果是否一致,一致的话标记pass,否则标记fail。
if text == expected_result:
sheet['F' + str(i + 2)].value = 'pass'
else:
sheet['F' + str(i + 2)].value = 'fail'
wb.save('updatedTestData.xlsx') # 另存为表格文档
driver.quit()
上面这段代码首先导入了openpyxl模块,也导入appium相关的模块,你可以用appium进行android手机自动化测试,如果你对appium不熟悉,可以参考我之前写的文章《利用IPython来学习Appium操作》来先学习一下。
接下来代码进行appium启动需要的相关设置,然后启动被测应用。继续通过openpyxl的函数来读取Excel表格数据,用for循环来遍历每一行测试数据,这里注意要排除掉第一行数据(也就是标题行)。在for循环内部对每一行数据都进行读取测试数据,执行测试和将实际结果和测试结果写入表格的操作。代码段的最后是将处理后的Excel表格另存为,然后结束测试。
最后成功运行上面代码后,查看新生成的测试结果'updatedTestData.xlsx'文件,结果如下:
小结
利用python的openpyxl模块不只是可以配合appium进行测试,同样可以和selenium等工具配合,而且也能用在api接口测试方面。
而且openpyxl模块的功能不仅仅是简单的读入和写入数据,它还有生成Excel图表,调整电子表格格式等功能,如果读者兴趣的话,可以深入研究官方文档。
参考文献:
《Python编程快速上手——让繁琐工作自动化》 AI Sweigart 著