python接口自动化实现--基于yaml文件的数据驱动

本文介绍了YAML文件的格式和语法规则,包括键值对和数组表示法,以及如何使用Python进行文件的读写和清除。同时,给出了编写测试用例的yaml文件示例,并提供了封装的读取yaml文件和目录下所有yaml文件的方法。
摘要由CSDN通过智能技术生成

一、yaml文件格式和语法规则

1、yaml文件格式

键值对的格式,对应python的字典dict

数组的格式,对应python的列表list

2、yaml文件语法规则

①严格区分大小写

②用空格缩进表示层级关系,同一层级关系左对齐即可

③用 - 表示列表;用冒号+空格(:空格)表示字典

二、yaml文件编写测试用例示例

-
  features: 模块
  storys: 接口名称
  titles: 用例名称
  request:
    method: 请求方法
    url: 请求地址
    jsons/params:请求内容
  
  extract:#用jsonpath提取中间变量存放在extract变量文件中
  
  vilidate:#断言
    codes: 200   #响应状态码
    success: True   #响应内容

 说明:模板内容非固定格式,可以根据项目需要做不同的修改

三、yaml文件的读、写和清除方法封装

#写入yaml文件:以a+的方式追加写入
#allow_unicode=True 解决文件存储时unicode编码问题
def write_extract_yaml(filename,data):
    with open(filename,'a+',encoding='utf-8') as f:
    yaml.dump(data, stream=f, allow_unicode=True)
#读取yaml文件
def read_extract_yaml(filename):
    with open(filename,'r',encoding='utf-8') as f:
         value = yaml.load(f,yaml.FullLoader)
         return value
#清空yaml文件
def clear_extract_yaml(filename):
    with open(filename, 'w', encoding='utf-8') as f:
        f.truncate()

说明:

        ①yaml.dump()方法中allow_unicode=True是为了解决文件写入时unicode编码问题

        ②yaml.load()方法需要指定Loader,yaml.FullLoader属于方法默认加载器,为了禁止执行任意函数,增强方法的安全性。(其他方式:yaml.safe_load()可以达到相同的效果)

 四、读取testcase目录下的所有yaml文件封装方法

#读取testcase目录下所有的yaml测试用例文件名称
    def read_all_yamlname(self):
        #打印testcase目录下所有的目录和文件名称
        yaml_name_list = []
        testcaselist = os.listdir(self.testcasepath)
        for i in testcaselist:
            #判断是否是目录
            if os.path.isdir(os.path.join(self.testcasepath, i)):
                m = re.search('^.*?case$', i)
                if m:
                    #返回testcase目录下的目录名称
                    m_path = os.path.join(self.testcasepath, m.group())
                    m_list = os.listdir(m_path)
                    for i in m_list:
                        j = re.search('^.*?.yaml$', i)
                        if j:
                            j_path = os.path.join(m_path,j.group())
                            yaml_name_list.append(j_path)
            #判断是否是文件
            elif os.path.isfile(os.path.join(self.testcasepath, i)):
                n = re.search('^.*?.yaml$', i)
                if n:
                    yaml_name_list.append(n.group())
        return yaml_name_list

    def read_all_testcase(self):
        yaml_name_list = yamlUtil().read_all_yamlname()
        caseinfoList = []
        for i in yaml_name_list:
            caseinfo = yamlUtil().read_case_yaml(i)
            caseinfoList.extend(caseinfo)     #用append方法,会多增加一层列表list
        return caseinfoList

总结:人生没有如果,只有后果和结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值