• 14
  • 14
分享
  • 想用Excel进行自动化冒烟测试?用这个就对了——软件测试圈
  • 恬恬圈 2021-10-25 11:08:53 字数 2657 阅读 2359 收藏 14

tablib 是 requests 库作者常年维护的一个 python 第三方库,可以操作 Excel 等多种文件格式变成一种通用数据集。

tablib 支持的主要数据格式有:

  • xls, 老版 office 的 Excel 文件格式;

  • xlsx 系列,新版 office 文件格式;

  • JSON

  • YAML

  • HTML

  • CSV

  • df,(pandas 的 DataFrame, 需要安装 pandas)

tablib 操作测试用例的基础使用非常简单,你只需要记住以下 2 点:

1、使用 import_set 导入 Excel 文件

  with open('demo.xls', 'rb') as f:
    # 接受 2 个参数,读出来的数据和读取的文件格式
    data = tablib.import_set(f.read(), 'xls')
    print(data)

使用 DataSet 创建 Excel 表格

  data = tablib.Dataset(*data_list, headers=headers,title='测试用例')

现在来进行更精确的操作:

行列数据操作

先通过加载 Excel 文件获取到数据

  a = tablib.import_set(f.read(), 'xls')

a 得到的是一个列表,每个元素是每一行数据。

1、获取行

  # 获取第一行第一列
print(a[0][0])
# 获取第一行的 url 列
print(a.dict[0]['url'])
# 获取前 2 行
print(a[:2])

2、获取列

  print(a['url'])

3、插入行

  with open('demo_book.xls', 'rb+') as f:
    a = tablib.import_set(f.read(), 'xls')
    print(a)
    # 添加行
    a.append(['zhiwang', 'put', '成功'])
  
    # 在指定行插入
    a.insert(2,['zhiwang', 'put', '成功'])
with open('demo_book.xls', 'wb') as f:
    f.write(a.xls)
print(a)

4、插入列

  # 在最后添加
a.append_col(['成功','失败', '失败'], header='actual_result')
# 在指定位置添加列
a.insert_col(3,['成功','失败', '失败'], header='actual_result')

5、修改

  # 修改某一行数据
a[0] = ('baidu', 'put', 'shibai', 'shibai')
# 修改某个具体的数据
a._data[0][0] = 'wobuzhidao'

注意:不要在代码里直接操作 a._data, 可以封装成方法。

冒烟用例执行

在测试过程中,我们经常需要执行冒烟用例。或者给测试用例打标签,比如登录功能,成功用例,异常用例等等。tablib 通过 tags 关键字方便删选指定的测试用例来执行。

1、添加 tags

  # 添加标签
a.append(['buzhi', 'put', 'c','c'], tags=['成功'])
# 获取所有‘成功’的测试用例
success = a.filter(tag='成功')

2、修改 tags

  # 将测试用例的标签修改成‘失败’
a._data[0].tags = ['失败']
# 获取所有‘失败’ 的测试用例
failed = a.filter(tag='失败')
print(failed)

3、去除重复元素

  a.remove_duplicates()

灵活的格式切换

测试数据最常用的功能是需要切换格式,比如把 Excel 格式的数据切换成 YAML , 这个在接口自动化测试框架 httprunner 中经常用到。还是用 a 来表示 DataSet 数据:

1、存储为 YAML 文件:

  with open('demo.yml', 'w', encoding='utf-8') as f:
    f.write(a.yaml)

2、导入 YAML 文件:

  with open('demo.yml', 'r') as f:
    a = tablib.Dataset().load(f.read(), format='yaml')
    print(a.html)

效果:

1.jpg

651 x 193

3、导出为 HTML :

  with open('demo.html', 'w', encoding='utf-8') as f:
    f.write(data.html)

效果:

2.jpg

728 x 188 879 x 227

5、导出为 json:

  with open('demo.json', 'w', encoding='utf-8') as f:
    f.write(data.json)

效果:

  [
    {
        "url": "baidu",
        "method": "get",
        "expect": "failed"
    },
    {
        "url": "lemon",
        "method": "post",
        "expect": "success"
    }
]

其他常用方法

  • lpop(),lpush(row, tags=[]),lpush_col(col, header=None) 是对列的相关操作

  • pop(),rpop(),rpush(row, tags=[]),rpush_col(col, header=None) 是对行的相关操作

  • remove_duplicates() 去除重复的记录

  • sort(col, reverse=False) 根据列进行排序

  • subset(rows=None, cols=None) 返回子 Dataset

  • wipe() 清空 Dataset,包括表头和内容

总结

tablib 这个库非常灵活,用法非常好记,完全符合我们对 Excel 的理解。非常适用于 python 自动化测试的用例数据管理。只有一个缺点:中文资料太少。后面我会翻译一些优秀的英文文档,让更多人把这个优秀的库用起来。


作者:互联网IT二狗子

链接:https://juejin.cn/post/7010741240832458782

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   想做程序员,想学软件测试,是自学还是培训好?学习的关键是什么呢?  大家纠结的点在于,我是应该去参加培训班还是选择自学,我自身的话没有参加过培训班,所以我觉得没有什么发言权来给大家什么建议。不过我后来去咨询了几个朋友,有一个是在培训机构当老师,还有两个曾经也接受过培训。我根据他们说的,还有结合我自己的一些想法来给大家做个分享。当然如果你有什么补充的,可以在评论区留言!  关于自学还是选择培训有几点——  第一:  你是零基础的小白,自学约等于浪费时间。这个公式在多数情况下都成立,当然,如果你有自信的话可以去试一下。  第二:  如果你有一到两年的开发/测试的经验,想在技术上有所提升,那这个...
            0 0 922
            分享
          • 这篇文章,我会基于自己的一些实践经验和经历,谈谈我对单元测试的理解和观点。测试要做单元测试吗首先聊聊第一个问题:测试要做单元测试吗?我的回答:测试需要做单元测试,但要综合评估团队成员技能、个人意愿、项目迭代周期以及协作默契程度等很多因素,用合适的方法和手段在合适的时机切入,而不是一味强推。很多测试同学往往有一个误区:只要是名字带个测试,就觉得我也要做这件事,而忽略了事物的本质。比如验收测试,一般指的是QA同学经过多轮测试后,交付给产品同学来进行验收交付的产出物是否满足预期设计。比如全链路压测,很多测试同学都希望自己能主导落地,但忽略了为什么做全链路压测,怎么做,落地有哪些难点,自己能否解决,需...
            0 0 651
            分享
          •   迪斯尼一直在暗示 Disney Plus 品牌的一些重大变化。最近几天,很多用户在查看自己的电视、平板电脑或手机时发现,这款流媒体应用换上了新标识--标志性的迪士尼蓝色被发光的绿色背景取代。  新标识引起了争议:有些人认为这是对熟悉的设计进行了不必要的简化;有些人则赞赏新标识与其他流媒体服务看起来并不一样;有些人则怀疑新标识的颜色是否真的变了,还是他们一直以来都看错了电视。  这种新的绿色被称为"Aurora",既是为了向极光致敬,也是为了向《睡美人》中的主角致敬。(我不太记得那部电影中出现过这种绿色,但不管怎么说。)这是迪斯尼蓝和 Hulu 绿的混合色--这里有一个非...
            0 0 721
            分享
          •   据报道,美国白宫上周五表示,使用特斯拉充电接口的电动汽车充电站有资格获得数十亿美元的美国联邦补贴,只要这些充电站也支持美国的标准充电接口CCS。  此前,美国汽车巨头福特和通用汽车分别宣布,将采用特斯拉的充电标准,即北美充电标准(NACS)。而白宫最新宣布的举措意味着,美国政府希望通过联邦补贴,推动行业转向有竞争关系的另一大充电标准CCS。  美国政府正在投资最多75亿美元,在美国最繁忙的高速公路上建设新的快速充电设备。这也是特斯拉首次与这个政府投资项目联系在一起。  受此消息影响,特斯拉股价上涨4.1%。分析师表示,福特和通用汽车宣布的决定是特斯拉的重大胜利,可能会使特斯拉的超级充电站成...
            0 0 736
            分享
          • 国内软件业快速发展的最近十年,软件开发工程师的人数和职业水平得到了很大的提高,当前国内高水平的软件开发工程师的数量已经可以和许多软件业发达的国家相比。但是,软件测试人才严重缺乏,尤其是既懂质量管理,又懂测试技术的软件测试工程师,更是凤毛麟角。现阶段软件测试工程师的晋升通道有两种:一种是专业通道,成长为高级软件测试工程师或专职的性能测试工程师、自动化测试工程师、白盒测试工程师,这时能够独立测试很多软件,甚至可以成为软件测试架构设计师,当然随着技术的积累也可以转做项目管理;第二种是管理通道,从测试工程师到组长(Lead),再到测试经理(Manager),以至更高的职位。测试工程师晋升通道如图3-6...
            0 0 980
            分享
      • 51testing软件测试圈微信