美文网首页
Pytest学习(9):接口自动化测试之Yaml数据驱动封装

Pytest学习(9):接口自动化测试之Yaml数据驱动封装

作者: 九千年小妖 | 来源:发表于2021-12-09 18:29 被阅读0次

    数据驱动: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文件数据量过多咋办
    带着问题继续学习思考。。。

    相关文章

      网友评论

          本文标题:Pytest学习(9):接口自动化测试之Yaml数据驱动封装

          本文链接:https://www.haomeiwen.com/subject/ctwtxrtx.html