接口自动化测试之Yaml数据驱动封装

文章介绍了如何使用pytest的parametrize进行数据驱动测试,包括基本用法和多层数据解包。随后详细讲解了如何通过yaml文件封装测试用例数据,以及如何读取和处理yaml文件中的动态参数和断言问题。
摘要由CSDN通过智能技术生成

一、数据驱动:pytest.mark.parametrize()

首先看个样本:

import pytest

class TestData:
    # parametrize有两个值,一个是args_name:参数名,一个是args_value:参数值,可以有多个,进行数据解包
    # args_value可以是:list列表,数组,字典列表,在数据中有多少个值,接口用例就会执行多少次,相等于遍历

    # 基础用法  
    @pytest.mark.parametrize('name', ["李四", '王五'])
    def test_data(self, name):
        print(name)

    # 多层数据,解包
    @pytest.mark.parametrize('name,age', [["李四", '15岁'], ["王五", '16岁'], ["刘大", '126岁']])
    def test_data1(self, name, age):
        print(name, age)

上面的测试数据都是死的,项目中很少把测试用例 数据写在py文件中,那么就需要单独对数据进行封装,就有了yaml文件或excel文件,进行数据驱动封装

二、了解yaml详情及写法:

一种数据格式
主要作用:
1、配置文件
2、测试用例
数据组成:
1、map对象:键:(空格)值对,如:"a": "b"
2、多组需要用-开头,标注为不同组数据:

-
  name: 正确验证码登录
  request:
    method: get
    url:  http://域名/jeecg-boot/sys/login
    data:
          captcha: Gkak!@#2019s
          checkKey: 1637811815838
          password: 123456
          remember_me: 1
          username: admin
  validate: None
-
  name: 错误验证码登录
  request:
    method: get
    url:  http://ip:端口号/jeecg-boot/sys/login
    data:
          captcha: Gkak!@#2019s
          checkKey: 1637811815838
          password: 123456
          remember_me: 1
          username: admin

三、首先我们要读取yaml文件的方法:

之前封装过一个yaml工具类文件,我们只需在里面加入下面这方法即可

 # 读取测试用例的Yaml文件
    def readCaseYaml(self, yamlfileDir, yamlfileName):
        work = os.getcwd() + "/" + yamlfileDir + "/" + yamlfileName
        print(work)
        with open(work, mode='r', encoding='utf-8') as f:
            value = yaml.load(stream=f, Loader=yaml.FullLoader)
        return value

四、统一接口请求封装

因为:如果我么需要多所有的接口请求进行分析处理,日志监控,这样我们就需要制定提取出接口请求的规则:

import json

import requests


class RequestUnit:
    session = requests.session()

    def sendRequest(self, method, url, data, **kwargs):
        #把请求方法改成小写
        method = str(method).lower()
        rep = None
        #get请求以params接参数
        if method == "get":
            rep = RequestUnit.session.request(method=method, url=url, params=data, **kwargs)
        # post请求以data接参数,原因:data只能传输简单的只有键值对的dict或者str格式的数据,json一般只能传输dict格式,简单复杂的都可以
        #data可以满足多种格式,那我们只需把都转成str类型
        elif method=="post":
            # 把键值对转换成str类型
            data = json.dumps(data)
            rep = RequestUnit.session.request(method=method, url=url, data=data, **kwargs)
        return rep.text

遗留问题:

1、yaml文件里面怎么使用动态参数
2、yaml文件里面怎么实现文件上次
3、yaml文件怎么实现断言(断言写在py接口请求文件里又过于多了)
4、yaml文件数据量过多咋办
带着问题继续学习思考。。。

最后:下面是配套学习资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!【100%无套路免费领取】

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

  全套资料获取方式:点击下方小卡片自行领取即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值