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

接口自动化数据分离的方式很多,有数据库存储测试数据、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进行数据驱动)