pytest基础知识全集

pytest参数化之yaml文件操作05

2021-12-22  本文已影响0人  软件开发技术修炼
一、@pytest.mark.parametrize()基本用法

@pytest.mark.parametrize(args_name,args_value)

# -*- coding: utf-8 -*-
# @FileName: test_api.py
# @weixin : fily189781
# @Software: PyCharm
# @Blog :https://www.jianshu.com/u/71ff901eeee2

import pytest

class TestApi:

    # 基础用法
    @pytest.mark.parametrize('args',['tg','lity'])
    def test_api1(self,args):
        print(args)

    # 解包
    @pytest.mark.parametrize('name,age', [['123', 'lity'],['56', 'ty']])
    def test_api2(self, name,age):
        print(name,age)

    # 重叠多个参数化
    @pytest.mark.parametrize("name,age",[("kuli",21)])
    @pytest.mark.parametrize("food,price",[('rice',50)])
    def test_03(name,age,food,price):
        print(price)
        assert price == 50

if __name__ == '__main__':
    pytest.main(['test_api.py'])
结果: 01.png
二、yaml文件详解,实现接口自动化

跟json一样,有键值对,或数组两种
多行

msxy:
  name: 百里
  age: 18

一行

maxy:{name: 里 ,age: 19}

数组

-
 msxy:
   -name: 百里 #-代表数组
   -age: 18

-
  msjy:
  -name:lko
  -age:56

或者 [{name:1ko},{age:17}]

实际运用中,接口请求的data值的数据类型

-
  name: 编辑接口用例
  request:
    method: post
    url: www.baidu.com
    # 键值对
    data: {"tag":{"id":134,"name":"gdr"}}
  validata: None

-
  name: grant_type为空
  request:
    method: get
    url: www.baidu.com
    #json格式
    data:
      grant_type:
      appid: wx28392j29283a2e
      secret: e40sia2j2i3ja2
  validata: None
三、yaml文件操作
import os
import yaml

class YamlUtil:

    #读取extract.yml文件
    def read_extract_yaml(self,key):
        with open(os.getcwd()+"/extract.yml",mode='r',encoding='utf-8') as f:
            value = yaml.load(stream=f,Loader=yaml.Fullloader)
            return value[key]

        #  存中多行,读取多行
        for data in value:
            print(type(data))
            print(data)

    #写入extract.yaml文件
    def write_extract_yaml(self,data):
        # 此处注意:w为替换,始终是最开始的一个变量,a为追加yaml文件每次都增加多个变量a
        # 可结合使用fixture、conftest进行清除
        with open(os.getcwd()+"/extract.yml",mode='a',encoding='utf-8') as f:
            yaml.dump(data=data,stream=f,allow_unicode=True)

    #清除extract.yaml文件
    def clear_extract_yaml(self):
        with open(os.getcwd()+"/extract.yml",mode='w',encoding='utf-8') as f:
            f.truncate()

注意由于pycharm配置问题,导致读取yaml文件地址出错,采用下面方法不会报错:

#读取extract.yaml文件  #os.getcwd()+"\extral.yaml"
yaml_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'extral.yaml')
读取yaml文件结果.png
上一篇下一篇

猜你喜欢

热点阅读