python数据驱动测试_利用 python 的第三方 openpyxl 模块做 Appium 数据驱动测试

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 著

你可能感兴趣的:(python数据驱动测试)