目录
前言
1. 示例介绍
2. 读取Excel单元格里的数据
1)安装 xlrd 第三方库
2)读取表格数据存储到列表中
3)封装成读取控件信息的函数
3. 处理控件信息并实现控件操作
小结
前言
在UI自动化测试中,测试数据的管理和组织是一个很重要的问题。测试数据不仅要能够反应测试场景的多样性,同时还需要能够随时进行更改,保证测试的灵活性和可维护性。而数据分离则是实现这一目标的重要方法之一。Airtest是一款流行的UI自动化测试框架,它支持使用Excel、CSV、YAML等文件格式来管理测试数据,实现数据分离的目的。
那么下文我们将以1个简单的示例,来看下我们可以如何在Airtest项目中实现数据分离:
1. 示例介绍
编写过Poco脚本的同学都知道,它的操作都是基于控件的。假设我们把需要操作的控件信息都存在Excel表格里面,那么我们的脚本只需要从Excel中读取到我们所需要的控件信息,然后对该控件进行操作即可。
如果控件信息发生了变化,我们也只需要定期维护Excel表格,而不需要处理我们的自动化脚本。
所以今天的示例大致是完成以下事情:
-
把控件数据保存到指定的Excel表格里
-
从Excel表格中读取控件信息待用
-
处理表格读到的控件信息并实现控件操作
2. 读取Excel单元格里的数据
假设我们在 D:\demo\ 下保存了1个名为 NetEase_Cloud_Music.xls 的Excel表格,用于存储下述控件信息:
每行的内容代表着1个完整的控件信息,准备好表格后,我们就可以开始编写对应的脚本把这些控件信息读取出来了。
1)安装 xlrd 第三方库
Python操作Excel表格,有一个专门的第三方库叫 xlrd 。我们需要在使用的Python环境中安装上该第三方库:
pip install xlrd
安装成功后,我们还可以使用 pip list 命令检查下。
这里我们还是使用AirtestIDE来编写脚本,在IDE的选项--设置中,设置使用安装了 xlrd 库的Python环境:
此时在 .air 脚本中,我们就可以直接使用 import xlrd 来调用这个第三方库了。
2)读取表格数据存储到列表中
import xlrd
# 打开指定路径的Excel文件
ex = xlrd.open_workbook(r'D:\demo\NetEase_Cloud_Music.xls')
# 获取指定名称的sheet
sheet = ex.sheet_by_name('elements')
# 定义1个控列表,用于存放控件信息
dat = []
# 遍历表格的每一行数据,将每行的控件信息构建成1个字典添加到列表中
for row in range(sheet.nrows):
cells = sheet.row_values(row)
data={'element':cells[0],'attributes':cells[1],'position':cells[2]}
dat.append(data)
我们可以把列表的内容 print 出来看看我们获取的信息是否正确:
3)封装成读取控件信息的函数
为了方便使用,我们可以把这个读取表格数据这部分的内容封装成函数,最终返回我们想要的保存了控件信息的列表即可:
def get_excel():
ex = xlrd.open_workbook(r'D:\demo\NetEase_Cloud_Music.xls')
sheet = ex.sheet_by_name('elements')
dat = []
for row in range(sheet.nrows):
cells = sheet.row_values(row)
data={'element':cells[0],'attributes':cells[1],'position':cells[2]}
dat.append(data)
return dat
3. 处理控件信息并实现控件操作
拿到了我们需要的控件信息之后,我们预期的情况是,通过控件名称,匹配到对应的属性和定位脚本来实现控件操作:
def another_poco(list,element):
for li in list:
if li.get('element') == element:
if li.get('attributes') == 'text':
return poco(text=li.get('position'))
elif li.get('attributes') == 'name':
return poco(li.get('position'))
这里实现了1个函数,给它传入对应的列表(读取到的表格数据)和想要操作的控件名称,即可返回poco定位脚本,帮助我们实现后续的操作:
dat = get_excel()
start_app("com.netease.cloudmusic")
another_poco(dat,'每日推荐').click()
sleep(1.0)
another_poco(dat,'播放全部').click()
keyevent("BACK")
keyevent("BACK")
another_poco(dat,'每日推荐').wait_for_appearance()
another_poco(dat,'首页搜索').click()
text('张艺兴')
another_poco(dat,'单曲').wait_for_appearance()
another_poco(dat,'单曲').click()
小结
那么以上内容就是我们在Airtest项目上实现数据分离的1个小实践。
那在实际项目的应用过程中呢,还需要考虑更多的一些问题,比如控件重复的情况、控件数据量庞大的情况、控件数据分表保存的情况等等,这些就有待大家继续深入拓展实现了~
作为一位过来人也是希望大家少走一些弯路,希望能对你带来帮助。(WEB自动化测试、app自动化测试、接口自动化测试、持续集成、自动化测试开发、大厂面试真题、简历模板等等),相信能使你更好的进步!
留【自动化测试】即可【自动化测试交流】:574737577(备注ccc)http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=khh1u309hOPfmutO7szune5BMv7p8BHg&authKey=kRBNmDukZpv512fdc7h2hFwQvgQFubVtbuOOFlKwsRVnal%2FcYaEiQOlTEDIi5Nd5&noverify=0&group_code=574737577