Python中使用YAML编写测试用例

为什么选择yaml

    1. 方便在字典和yaml之间切换
    1. yaml拥有多种数据类型

yaml的主要作用

    1. 用于配置文件
    1. 用于编写用例

YAML数据组成

    1. 对象,通过字典来表示, key:(空格) value
    1. 数组,通过列表来表示,通过一组对齐的-(横线)表示
    • 2.1 基本数据类型

yaml读写方式

命令行安装包 pip install pyyaml
YAML规则

  name: 获取验证码
  request:
    method: post
    url: https://api.education.ocean.com/get
    data:
      type: 2
      mobile: 18888888888
      configCode: YUAN
    headers: null
  validate: null

DDT数据驱动

数据驱动的目的: 一个接口由多个用例, 使用数据驱动可以一次性执行多条同一接口的用例

# 方法
@pytest.mark.parametize(args_name, args_value)
args_name: 参数名,自定义
args_value: 只有两种数据类型,要么时list,要么是tuple

常见用法

@pytest.mark.parametrize("caseInfo", ["乔恩", "安迪"])
@pytest.mark.parametrize("caseInfo", ("乔恩", "安迪"))
@pytest.mark.parametrize("caseInfo", [{"乔恩": 12},{"安迪": 13}])

解包用法

@pytest.mark.parametrize("name, age", [["乔恩", 12],[ "安迪", 13]])

封装读取yaml用例的方法

def read_case_yaml(case_path):
    """
    :param case_path: yaml文件路径
    :return: 返回的是python数据类型的数据
    """
    with open(case_path, encoding="utf-8") as f:
        result = yaml.load(stream=f, Loader=yaml.FullLoader)
        return result

yaml测试用例实例

    1. 一个接口对应一个yaml文件,文件中写入接口请求的字段数据, 这里我给了两个用例
-
  name: 获取手机号验证码1-post请求
  request:
    method: post
    url: http://api.education.test.bedoke.com/getMobileCode
    data:
      type: 2
      mobile: 18888888888
      configCode: YUAN
    headers:
      Content-Type: application/json
  validate: null

-
  name: 获取手机号验证码2-get请求
  request:
    method: get
    url: http://api.education.test.bedoke.com/getMobileCode
    data:
      type: 2
      mobile: 19999999999
      configCode: YUAN
    headers:
      Content-Type: application/json
  validate: null

在python中进行调用, 利用之前封装的read_case_yaml方法

import pytest
from common.request_util import RequestUtil
from common.yaml_util import write_yaml, read_case_yaml
class Test():
	   @pytest.mark.parametrize("caseInfo", read_case_yaml("./testcase/test_get_token.yaml"))
	   def test_api(self, caseInfo):
	        print(caseInfo, type(caseInfo))
	
	        name = caseInfo["name"]
	        method = caseInfo["request"]["method"]
	        urls = caseInfo["request"]["url"]
	        data = caseInfo["request"]["data"]
	        headers = caseInfo["request"]["headers"]
	        validate = caseInfo["validate"]
	        res = RequestUtil().all_send_requests(method=method, url=urls, data=data, headers=headers)
	        result = res.json()
	        if "data" in result:
	            write_yaml({"msg": res.json()["msg"]})
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值