pytest数据驱动

#ddt_util.py


# 读取测试数据
from io import StringIO

import yaml


def read_testcases(yaml_path):
    with open(yaml_path,encoding="utf-8",mode="r") as f:
        caseinfo = yaml.load(f,yaml.FullLoader)
        if len(caseinfo)>=2:
            return caseinfo
        else:
            if "paramtrize" in dict(*caseinfo).keys():
                new_caseinfo = ddt(*caseinfo)
                return new_caseinfo
            else:
                return caseinfo


# 解析paramtrize标签做数据驱动
def ddt(caseinfo):
    str_caseinfo = yaml.dump(caseinfo)     # 用yaml的方法。将字典转化为字符串
    case_list = caseinfo["paramtrize"]
    name_length = len(caseinfo["paramtrize"][0])
    length_flag = True
    for p in case_list:
        # 对数据做一个基本的校验,可能出现数据漏写
        if len(p) != name_length:
            length_flag = False
            print("数据长度有误,请检查数据填写是否完整!")
    # 如果长度没问题
    new_caseinfo = []
    if length_flag:
        for x in range(1,len(case_list)):
            raw_caseinfo = str_caseinfo
            for y in range(0,name_length):
                if isinstance(case_list[x][y],str):    # 解决数字字符串变成整型
                    case_list[x][y] = "'"+str(case_list[x][y])+"'"
                raw_caseinfo = raw_caseinfo.replace("$ddt(" + case_list[0][y] + ")", str(case_list[x][y]))
            new_caseinfo.append(yaml.safe_load(StringIO(raw_caseinfo)))      # 用yaml的方法。将raw_caseinfo转化为字典添加到列表中去
    return new_caseinfo



# yaml文件

-
  story: 登录B2C商城接口
  title: 验证登录成功用例
  request:
    method: post
    url: "?s=user/login"
    params:
      application: app
      application_type: h5
    data:
      accounts: $ddt(accounts)
      pwd: $ddt(pwd)
      type: $ddt(type)
  extract:
    token: '"token":"(.*?)"'
  paramtrize:
    - ["accounts","pwd","type"]
    - ["xxx","xxxxx","xxxxxx"]
    - ["xxxxxx","xxxxx","xxxxx"]
    - ["xxxxx",xxxxx,"xxx"]
  validate:
    codes: 200
#    equals: {msg: 登录成功}
#    contains: data
#    databases: {code: "select IndepYear from country where Name = 'China'"}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值