openpyxl是专门用来读取和写入Excel文档的python第三方模块。本文将使用这个模块和appium工具进行自动化测试的数据驱动测试实践。python
使用下面命令来安装openpyxl:linux
$ pip install openpyxl
若是你使用的是ubuntu等linux系统的话,请在命令以前添加sudo命令:android
$ sudo pip install openpyxl
接下来要准备下面测试android计算器的测试数据,请使用MS Office软件或其余相似软件打开一个Excel文件,输入下面内容并保存为“test_data.xlsx”:web
本文件的百度网盘下载连接:https://pan.baidu.com/s/1hrS4pMW编程
**注意:**若是你电脑上没有能够编辑Excel文档的软件,能够安装开源的LibreOffice。ubuntu
建议使用IPython来熟悉openpyxl的使用方法,具体请查看openpyxl的官方文档,地址:https://openpyxl.readthedocs.io/en/default/api
在终端中输入下面命令启动ipython。服务器
$ ipython
继续在ipython交互环境中输入如下代码进行openpyxl的学习:app
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]: <generator object get_squared_range at 0x7fe384b47fc0>
下面要经过读取刚刚完成的“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循环内部对每一行数据都进行读取测试数据,执行测试和将实际结果和测试结果写入表格的操做。
最后成功运行上面代码后,查看新生成的测试结果'updatedTestData.xlsx'文件,结果以下:
利用python的openpyxl模块不仅是能够配合appium进行测试,一样能够和selenium等工具配合,并且也能用在api接口测试方面。 并且openpyxl模块的功能不单单是简单的读入和写入数据,它还有生成Excel图表,调整电子表格格式等功能,若是读者兴趣的话,能够深刻研究官方文档。
参考文献:
《Python编程快速上手——让繁琐工做自动化》 AI Sweigart 著