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

本文介绍了yaml数据驱动在接口自动化测试中的应用,通过pytest的参数化装饰器实现数据驱动,提高代码复用率。举例展示了如何使用yaml文件存储测试数据,并通过python读取实现数据驱动的测试用例。最后提到了yaml数据驱动的封装和参数化的后续内容。
摘要由CSDN通过智能技术生成

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

01 yaml数据驱动





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

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

02 初识数据驱动





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

053457919c8e63d7da12ce73cc40c618.png

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

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

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

单条

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

执行结果

debdd9d364d4cd7fc50b7362b9628ce0.png

多条

data_list = ["zhangsan","lisi","wangwu"]
@pytest.mark.parametrize("caselist",data_list)
def test_case(caselist):
    print(caselist)

 执行结果

ed28562aafaa38fe6e701951e0229bce.png

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

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

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

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

1aff4b87b960cb6c0bfc10dd8f2fb2b8.png

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

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

03 yaml数据驱动





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

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

yaml文件

-
  name: 张三
  age: 24
  sex: 女
-
  name: 李四
  age: 24
  sex: 男

 用例代码

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)

执行结果

aba962633098f032b139b2fea3972175.png

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

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

62918f236692c28c13f36244d09d7b2b.png

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

04 结语





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

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

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值