前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >测试之路 pytest接口自动化框架-yaml数据驱动

测试之路 pytest接口自动化框架-yaml数据驱动

作者头像
歪小王
发布2022-12-12 16:41:11
9840
发布2022-12-12 16:41:11
举报

哈喽~大家好,上期我们聊了聊yaml数据。本期内容是他的兄弟篇。yaml数据驱动与yaml部分模块的封装。废话不多,昊料开始。

01 开篇

数据驱动在自动化中起到了一个很重要的作用。它实现了一条case,多次执行。很多的接口测试工具,也都把数据驱动利用的淋漓尽致。就拿我们最熟悉的jmeter来说。它的数据驱动是依靠CSV文件(一种通用文本格式。常用于数据之间的转换。一行就是一条数据,数据中多个值用“,”分割。)设置的,通过编写CSV表格,然后设置好对应的参数。在接口中调用这些参数所属的变量。即可实现数据驱动。

上期内容我们说到,在做接口自动化的过程中,由于yaml格式的数据与现在流行的restful数据结构一样。所以yaml作为接口自动化中的数据源文件是最合适的。在yaml中,也可以实现数据驱动。

02 初识数据驱动

在没开始说数据驱动之前。先引入一个场景,如果我们想要测一个接口,抛开这个接口有多少个字段不说,就从参数覆盖上,我们要做一条正向用例,然后要校验这个参数是否必填、长度是否符合标准、类型是否是正确的、就要设计4、5条用例。就会出现如下图所示的情况

同一个接口为了覆盖参数是否合法,就做了5条用例。而且除了data参数不一致以外。其他的都是一样的。这很不符合python代码的特性。

为解决这个问题。数据驱动就上场了。

pytest中有一个装饰器是@pytest.mark.parametrize(参数名,数据源);这个装饰器主要功能是将列表转换成用例,列表中的元素个数表示用例个数。举个小例子

单条

代码语言:javascript
复制
data = "s"
@pytest.mark.parametrize("caselist",data)
def test_case(caselist):
    print(caselist)

执行结果

多条

代码语言:javascript
复制
data_list = ["zhangsan","lisi","wangwu"]
@pytest.mark.parametrize("caselist",data_list)
def test_case(caselist):
    print(caselist)

执行结果

上面这个小例子演示了数据驱动的简单实现。pytest.mark.parametrize()接收两个参数,一个是参数名,一个是数据列表。

参数名:表示给每个数据源起一个名称。在用例方法中,需要将这个参数名作为参数传入。

数据源:是主要的数据载体。可以传一个值或传多个值,但是这里注意,所传的参数必须是可迭代的。否则会报xx类型是不可被迭代的错。

比如我们传一个int类型参数,如下图所示。

传入数据源后,这个装饰器就会进行解析,然后将这个数据源中的每一个元素转成一条用例。

通过pytest的特性。我们就可以使用数据驱动进行用例的维护了。实现接口用例覆盖的同时,也提高了代码复用率。

03 yaml数据驱动

上面说到数据驱动的优势,接下来我们说说yaml数据驱动。

在yaml中。我们可以将数据使用列表嵌套字典+关键字的方式来实现数据驱动。定义yaml文件时。在最外层使用“-”(上期介绍过,“-”在yaml文件里面表示数组的意思。)包裹字典数据。然后传入pytest.mark.parametrize()中。

yaml文件

代码语言:javascript
复制
-
  name: 张三
  age: 24
  sex: 女
-
  name: 李四
  age: 24
  sex: 男

用例代码

代码语言:javascript
复制
import pytest
import yaml

with open("test.yaml","r",encoding="utf-8") as f:
    data = yaml.load(stream=f,Loader=yaml.FullLoader)

@pytest.mark.parametrize("caselist",data)
def test_case(caselist):
    print(caselist)

执行结果

上面这个小练习,演示了yaml作为数据驱动的效果。

实现思路就是使用列表嵌套字典的数据结构来定义yaml文件,然后读取这个yaml文件,读取后的参数数据结构,如下图所示,是我们想要的[{},{}...]的格式。

把读取到的数据传入装饰器的数据源参数中。就大功告成了~

04 结语

好了~本期内容先到这里,下期我们就yaml数据驱动的封装以及参数化介绍。

为了不浪费大家时间。我的分享尽量保持在1500字左右。篇幅太长不宜大家阅读。

小歪同学就先撤退啦~大佬们下期见~~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 歪小王的测试成长之道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档