美文网首页
零基础小白(三) 自动化使用Yaml进行数据驱动

零基础小白(三) 自动化使用Yaml进行数据驱动

作者: 巴鶴 | 来源:发表于2021-01-13 08:57 被阅读0次

    接口自动化数据分离的方式很多,有数据库存储测试数据、Excel维护测试数据、Yaml文件维护测试数据,本文重点介绍使用Yaml维护测试数据,接口调用Yaml文本。

    第1步: Yaml的介绍及安装

    1. Yaml的介绍

    Yaml 是一种所有编程语言可用的友好的数据序列化标准。语法和其他高阶语言类似,并且可以简单表达字典、列表和其他基本数据类型的形态

    2. yaml格式作为文件的配置格式

    1. yaml支持注释
    2. 不必强求逗号括号等符号
    3. 通过缩进来区分层级,视觉上清晰很多

    3. Yaml安装

    pip install PyYaml

    4. Yaml简单应用

    data.yml文件

    #读取多个文档--yaml写法----注意空格
    ---
    "name": "新北通"
    "time": "180211"
    ---
    "company": "玩蜂"
    "日期": "180320"
    

    yaml_demo.py读取data.yml文件

    """
    @Time : 2020/10/5 19:24
    @Auth : Yvon~₯㎕ζ๓
    @File :yaml_demo.py
    """
    """
    #1、创建yaml格式文件
    #2、读取这个文件
    #3、输出
    """
    import yaml
    from utils.YamlUtil import YamlReader
    
    # res = YamlReader("./data.yml").data()
    res = YamlReader("./data.yml").data_all()
    print(res)
    
    读取data.yml文件结果.jpg

    第2步: Yaml实战于接口自动化--配置测试数据

    简单设计配置URL访问地址,新建conf.yml文件

    # -*- coding: utf-8 -*-
    # @Time : 2021/1/11 16:02
    # @Author : Yvon_₯㎕ζ๓
    
    BASE:
      test:
        url: "https://xxxxxx.com"
        case_file: "testdata.xlsx"
        case_sheet: "斗地主接口测试"
    

    第3步: Yaml实战于接口自动化--封装读取Yaml

    在工具类utils文件夹下 新建YamlUtil.py脚本,读取单行Yaml文件内容,全部读取Yaml文件内容.

    """
    @Time : 2020/10/6 10:44
    @Auth : Yvon~₯㎕ζ๓
    @File :YamlUtil.py
    """
    import  os
    import yaml
    
    #1、创建类
    class YamlReader:
    #2、初始化,文件是否存在
        # def _init_(self):
        def __init__(self,yamlf):
            if os.path.exists(yamlf):
                self.yamlf = yamlf
            else:
                raise FileNotFoundError('文件不存在')
            self._data = None
            self._data_all = None
    
    #3、文件读取
        #1、读取单个文档
        def data(self):
            #第一次调用data,读取yamlf文档,如果不是,直接返回之前保存的数据
            if not self._data:
                with open(self.yamlf,"rb") as f:
                    self._data = yaml.safe_load(f)
            return self._data
        #2、读取多个文档
        def data_all(self):
            #第一次调用data,读取yamlf文档,如果不是,直接返回之前保存的数据
            if not self._data_all:
                with open(self.yamlf,"rb") as f:
                    self._data_all = list(yaml.safe_load_all(f))
            return self._data_all
    

    第4步: Yaml实战于接口自动化-- 增加调用封装YamlUtil.py脚本

    新建Conf.py脚本文件,使用YamlUtil.py脚本,读取conf.yml文件内容,供给后续登录接口使用.
    脚本大体思路如下:

    • 定义获取项目基本目录脚本
    • 定义获取当前项目的绝对路径脚本
    • 定义调用Yaml文件所在文件夹目录路径脚本
    • 定义conf.yml文件路径脚本
    1. 定义方法--获取Yaml文件所在文件夹目录
    2. 定义方法--获取conf.yml文件路径
    3. 定义类-初始化读取conf.yml文件信息
    4. 定义类-读取配置conf.yml中url信息方法
    # -*- coding: utf-8 -*-
    # @Time : 2021/1/11 16:16
    # @File : Conf.py.py
    # @Author : Yvon_₯㎕ζ๓
    
    import os
    from utils.YamlUtil import YamlReader
    
    #获取项目基本目录
    current = os.path.abspath(__file__)
    # print(current)
    #获取当前项目的绝对路径
    BASE_DIR = os.path.dirname(os.path.dirname(current))
    # print(BASE_DIR)
    #定义config目录路径
    _config_path = BASE_DIR + os.sep + "config"
    # print(_config_path)
    
    #定义conf.yml文件路径
    _confyml_file  = _config_path + os.sep + "conf.yml"
    # print(_confyml_file)
    
    #***************************************定义方法**************************************
    
    def get_config_path():
        """
        获取config文件夹目录
        :return:
        """
        return _config_path
    
    def get_confyml_file():
        '''
        获取conf.yml文件路径目录
        :return:
        '''
        return _confyml_file
    
    #读取配置文件,创建类
    class ConfigYaml:
    
        def __init__(self):
            # 初始化读取yaml配置文件
            self.config = YamlReader(get_confyml_file()).data()
    
        # 定义方法获取重要信息
        def get_conf_url(self):
            '''
            获取confyml配置文件中url地址
            :return:
            '''
            return self.config["BASE"]["test"]["url"]
    
    if __name__ == "__main__":
        conf_read = ConfigYaml()
        print(conf_read.get_conf_url())
    

    第5步: 增加封装Header脚本

    Header信息整个接口自动化中,使用频率较高,多个接口会重复使用,为了减少代码输出及达到美观效果,对其进行封装,便于重复调用

    #定义header方法
    def get_SDK_header():
        headers = {
            "App-Channel": "500001009",
            "Host":"xxxxxxx.com",
            "App-GameId": "90005",
            "App-DeviceNum": "65815b3b-befd-35ed-afb6-23d7092d0b82"}
        header = headers
        return header
    
    #定义登录params方法
    def get_params():
        params = {"uId": "2028121608241945","nickName":"957484204800", "session":"VeK1YjaYpKGS9INQ"}
    
        params = params
        return params
    
    if __name__ == '__main__':
        print(get_SDK_header())
    

    第6步: 新增登录接口脚本

    登录脚本后续只需维护配置文件,无需修改代码,减少时间人力成本.

    import requests,json
    from config.Conf import ConfigYaml
    from common.header_Base import get_SDK_header,get_params
    
    def test_login():
        #定义测试数据
        conf_y = ConfigYaml() # 加载config.Conf文件中的ConfigYaml类
        url_path = conf_y.get_conf_url() # 读取配置文件中的url
        base_url = url_path + "/member/api/mi/login" # 拼接url
        #发送Post请求
        header = get_SDK_header()
        params = get_params()
        r = requests.post(url=base_url, headers=header, json=params, verify=False)
        #输出结果
        result = r.json()
        print(json.dumps(result, sort_keys=True, ensure_ascii=False, indent=4, separators=(', ', ': '))) # Json格式打印
    
    if __name__ == "__main__" :
        print(test_login())
    

    第7步: 执行登录接口脚本,返回正确结果

    登录接口返回.jpg

    相关文章

      网友评论

          本文标题:零基础小白(三) 自动化使用Yaml进行数据驱动

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