zoukankan      html  css  js  c++  java
  • 【Airtest】UI自动化测试的数据分离实践

    前言

    今天我们来聊一聊数据分离这个话题,如果我们在网上逛一圈,就很容易找到很多关于 Python数据分离 相关的内容。

    测试数据分离 常用于接口自动化测试和UI自动化测试中,有很多使用Airtest项目进行自动化测试的同学,也在积极思考该如何在Airtest项目中实现数据分离。

    那么下文我们将以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:demoNetEase_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:demoNetEase_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个小实践,希望可以给同学们提供一些简单的思路。

    那在实际项目的应用过程中呢,还需要考虑更多的一些问题,比如控件重复的情况、控件数据量庞大的情况、控件数据分表保存的情况等等,这些就有待大家继续深入拓展实现了~


    Airtest官网https://airtest.netease.com/
    Airtest教程官网https://airtest.doc.io.netease.com/
    搭建企业私有云服务https://airlab.163.com/b2b

    官方答疑 Q 群:654700783

    呀,这么认真都看到这里啦,帮忙点个推荐支持一下呗,灰常感谢~

  • 相关阅读:
    mysql 5.6
    mysql5.7 二进制包安装
    centos 6 编译安装httpd-2.4
    mysql 5.5源码包安装
    BZOJ4945 & 洛谷3825 & UOJ317:[NOI2017]游戏——题解
    BZOJ4943 & 洛谷3823 & UOJ315:[NOI2017]蚯蚓排队——题解
    BZOJ3435 & 洛谷3920 & UOJ55:[WC2014]紫荆花之恋
    BZOJ5343 & 洛谷4602 & LOJ2555:[CTSC2018]混合果汁——题解
    真·APIO2018滚粗记
    BZOJ4518:[SDOI2016]征途——题解
  • 原文地址:https://www.cnblogs.com/AirtestProject/p/15217665.html
Copyright © 2011-2022 走看看