003---接口自动化测试-yaml格式测试用例编写以及数据读取

一,yaml文件的创建:文件名login.yaml

二,根据接口文档进行yaml格式用例的编写

接口文档如下:

yaml用例如下:文件名是login.yaml

# 基础接口信息配置
- baseInfo:
    api_name: 用户登录接口   # 接口名称,用于标识当前接口的功能
    url: /dar/user/login    # 接口请求路径,通常与域名拼接形成完整URL
    method: post            # 请求方法,支持 post/get/put/delete 等
    header:                 # 请求头配置
      Content-Type: application/x-www-for-urlencoded;charset=UTF-8  # 表单格式编码,注意拼写应为 form-urlencoded

# 测试用例集合
  testCase:
    # 测试用例1:验证正确账号密码的登录场景
    - case_name: 正确的账号和密码登录验证  # 用例名称,描述测试场景
      data:      # 根据请求头来确定是data,或json,或params 请求参数(根据header的Content-Type,数据以表单格式发送)
          user_name: test01             # 用户名参数
          passwd: admin123              # 密码参数
      validation:                       # 断言配置,验证接口响应是否符合预期
        - contains: { 'msg': '登录成功'}  # 响应体中需包含"msg:登录成功"
      extract:                          # 提取响应数据,供后续接口使用
        token: $.token                  # 使用JSONPath语法提取token值(例:{"token": "abc123"})

    # 测试用例2:验证错误账号密码的登录场景
    - case_name: 错误的账号和密码登录验证
      data:
        user_name: test0123             # 不存在的用户名
        passwd: admin123                # 密码(此处可能需确认是否与错误账号匹配)
      validation:
        - contains: { 'msg': '登录失败,用户名或密码错误' }  # 预期错误提示
      extract:
        token: $.token                # 使用JSONPath语法提取token值(例:{"token": "abc123"})

三,创建也给读取yaml的文件:文件名readyaml.py

import yaml


def get_testcase_yaml(file):
    """
    获取yaml文件的数据
    :param file: yaml文件的路径
    :return: yaml文件中的数据,如果读取失败则返回None
    """
    try:
        # 以只读模式打开指定的yaml文件,并指定编码为utf-8
        with open(file, 'r', encoding='utf-8') as f:
            # 使用yaml.safe_load方法加载文件内容,将其转换为Python对象
            yaml_data = yaml.safe_load(f)
            return yaml_data
    except Exception as e:
        # 如果在读取文件过程中出现异常,打印异常信息
        print(e)
        return None


if __name__ == '__main__':
    # 调用get_testcase_yaml函数读取login.yaml文件,并获取第一个元素
    res = get_testcase_yaml("login.yaml")[0]
    # 从res中提取baseInfo字典中的url字段
    url = res["baseInfo"]["url"]
    # 拼接新的url,将本地地址和原url组合
    new_url = "http://127.0.0.1:8787" + url
    # 从res中提取baseInfo字典中的method字段
    method = res["baseInfo"]["method"]
    # 从res中提取testCase列表的第一个元素的data字段
    data = res["testCase"][0]["data"]

    # 从sendrequests模块中导入SendRequests类
    from sendrequests import SendRequests

    # 创建SendRequests类的实例
    send = SendRequests()
    # 调用SendRequests类的run_main方法发送请求,传入请求方法、url、数据和请求头
    res = send.run_main(method=method, url=new_url, data=data, header=None)
    # 打印请求的响应结果
    print(res)

四,提取接口的返回值到指定的yaml文件

class ReadYamlData:
    """读取yaml数据,以及写入数据到指定的yaml文件中"""

    # 类的构造函数,用于初始化对象的属性
    def __init__(self, yaml_file=None):
        # 如果传入的 yaml_file 参数不为 None
        if yaml_file is not None:
            # 将传入的 yaml_file 赋值给对象的 self.yaml_file 属性
            self.yaml_file = yaml_file
        else:
            # 若未传入 yaml_file 参数,将对象的 self.yaml_file 属性默认设置为 'login.yaml'
            self.yaml_file = 'login.yaml'

    # 定义一个实例方法,用于将数据写入 YAML 文件
    def write_yaml_data(self, value):
        """
        写入数据到yaml文件
        :param value: (dict)写入的数据
        :return:
        """
        # 初始化一个变量 file 为 None,用于后续存储文件对象
        file = None
        # 定义要写入的 YAML 文件的路径
        file_path = r'extract.yaml'
        # 检查指定路径的文件是否不存在
        if not os.path.exists(file_path):
            # 若文件不存在,创建该文件路径
            os.system(file_path)
        try:
            # 以写入模式打开指定路径的文件,并指定编码为 UTF-8,将文件对象赋值给 file 变量
            file = open(file_path, 'w', encoding='utf-8')
            # 检查传入的 value 是否为字典类型
            if isinstance(value, dict):
                # 使用 yaml.dump 方法将字典数据转换为 YAML 格式的字符串,allow_unicode=True 可支持写入中文,sort_keys=False 表示不按键排序
                write_data = yaml.dump(value, allow_unicode=True, sort_keys=False)
                # 将转换后的 YAML 字符串写入文件
                file.write(write_data)
            else:
                # 若传入的 value 不是字典类型,打印提示信息
                print('写入到【extract.yaml】的数据必须是字典类型')
        # 捕获可能出现的异常
        except Exception as e:
            # 打印异常信息
            print(e)
        finally:
            # 无论是否发生异常,最后都关闭文件对象
            file.close()

五,readyaml.py模块的总代码

readyaml.py模块会将读取的token存入一个新的yaml文件:extract.yaml

import os

import yaml


def get_testcase_yaml(file):
    """
    获取yaml文件的数据
    :param file: yaml文件的路径
    :return: yaml文件中的数据,如果读取失败则返回None
    """
    try:
        # 以只读模式打开指定的yaml文件,并指定编码为utf-8
        with open(file, 'r', encoding='utf-8') as f:
            # 使用yaml.safe_load方法加载文件内容,将其转换为Python对象
            yaml_data = yaml.safe_load(f)
            return yaml_data
    except Exception as e:
        # 如果在读取文件过程中出现异常,打印异常信息
        print(e)
        return None


class ReadYamlData:
    """读取yaml数据,以及写入数据到指定的yaml文件中"""

    def __init__(self, yaml_file=None):
        if yaml_file is not None:
            self.yaml_file = yaml_file
        else:
            self.yaml_file = 'login.yaml'

    def write_yaml_data(self, value):
        """
        写入数据到yaml文件
        :param value: (dict)写入的数据
        :return:
        """
        file = None
        file_path = r'extract.yaml'
        if not os.path.exists(file_path):
            os.system(file_path)
        try:
            file = open(file_path, 'w', encoding='utf-8')
            if isinstance(value, dict):
                write_data = yaml.dump(value, allow_unicode=True, sort_keys=False)  # allow_unicode=True 可写入中文
                file.write(write_data)
            else:
                print('写入到【extract.yaml】的数据必须是字典类型')
        except Exception as e:
            print(e)
        finally:
            file.close()


if __name__ == '__main__':
    # 调用get_testcase_yaml函数读取login.yaml文件,并获取第一个元素
    res = get_testcase_yaml("login.yaml")[0]
    # 从res中提取baseInfo字典中的url字段
    url = res["baseInfo"]["url"]
    # 拼接新的url,将本地地址和原url组合
    new_url = "http://127.0.0.1:8787" + url
    # 从res中提取baseInfo字典中的method字段
    method = res["baseInfo"]["method"]
    # 从res中提取testCase列表的第一个元素的data字段
    data = res["testCase"][0]["data"]

    # 从sendrequests模块中导入SendRequests类
    from sendrequests import SendRequests

    # 创建SendRequests类的实例
    send = SendRequests()
    # 调用SendRequests类的run_main方法发送请求,传入请求方法、url、数据和请求头
    res = send.run_main(method=method, url=new_url, data=data, header=None)
    # 打印请求的响应结果
    print(res)
    token = res.get('token')
    print(token)
    write_data = {'token': token}
    read = ReadYamlData()
    read.write_yaml_data(write_data)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值