YAML文件

yaml是一种数据格格式,后缀是 .yml或 .yaml

用于配置文件以及编写测试用例

语法规则

使用规则

区分大小写

通过缩进表示层级,缩进使用空格非Tab

#注释

字符串一般不用双引号,默认就是字符串

数据类型

1.标量:最基本的数据类型

    • 整数
    • 浮点数
    • 字符串
    • 默认字符串不用引号
    • 单引号可表示字符串,用于转义特殊字符\
    • 双引号也可表示字符串,不转义
    • 布尔值

Null 对应 Python中的None

    • 日期时间类型

2.对象:键(空格)值对,类似dict

3.数组:用过一组同级别的-开头,类似数组

name :
  - name1 : 霸王
  - name2 : '霸\n王'
  - name3 : "霸\n王"
age : 25
height : 156.3
date : 2023-3-20 20:20:20
shenfen : null

读取文件中的所有数据类型

{'name': [{'name1': '霸王'}, {'name2': '霸\\n王'}, {'name3': '霸\n王'}], 'age': 25, 'height': 156.3, 'date': datetime.datetime(2023, 3, 20, 20, 20, 20), 'shenfen': None}

数据类型转换

使用!!+要转的数据类型

age: !!str 18 6

height: !!float "17.5"

引用的应用-用于重复出现多次的数据

&表示锚点,*引用锚点,<<合并到当前数据

name : &name
  - name1 : 霸王
  - name2 : '霸\n王'
  - name3 : "霸\n王"
age : 25
height : 156.3
date : 2023-3-20 20:20:20
shenfen : null
newname : *name
newnages:
  name100: name100
  <<: *name

{'name': [{'name1': '霸王'}, {'name2': '霸\\n王'}, {'name3': '霸\n王'}],

'age': 25,

'height': 156.3,

'date': datetime.datetime(2023, 3, 20, 20, 20, 20),

'shenfen': None,

'newname': [{'name1': '霸王'}, {'name2': '霸\\n王'}, {'name3': '霸\n王'}],

'newnages': {'name3': '霸\n王', 'name2': '霸\\n王', 'name1': '霸王', 'name100': 'name100'}}

YAML的读写和清空

python安装包

pip install pyyaml

读取
def read_yaml():
    with open("./test_case/login.yaml",encoding="utf-8") as f:
        value = yaml.safe_load(f)
        print(value)
写入
def write_yaml():
    with open("./test_case/login.yaml",encoding="utf-8",mode="a+") as f:
        date = {"sdad":"sdsadsa"}
        yaml.safe_dump(date,f)
清空
def clean_yaml():
    with open("./test_case/login.yaml", encoding="utf-8", mode="w") as f:
        f.truncate()

pytest的parametrize数据驱动

数据驱动:

@pytest.mark.parametrize(args_name,args_value)

args_name:参数名

args_value:参数值(只能是列表list或元祖tuple)

import pytest
import allure
@allure.epic("项目名称2")
@allure.feature("模块名称2")
class TestBpi:
    @allure.story("打印参数")
    @pytest.mark.parametrize("name", ["sidyoad", "sdysfysd", "fjdisifdfuo"])
    def test_name(self,name):
        print(name)

如果allure报告样式不显示过长参数,

修改:\venv\Lib\site-packages\allure_pytest\listener.py 中为 test_result.parameters.extend([])

-
  feature: 模块名称1
  story: 接口名称1
  title: 用例标题1
  request:
    method: get
    url: /cgi-bin/token
    params:
      "grant_type": "client_credential"
      "appid": "xx"
      "secret": "xx"
    headers: null
  validate: null
-
  feature: 模块名称2
  story: 接口名称2
  title: 用例标题2
  request:
    method: get
    url: /cgi-bin/token
    params:
      "grant_type": "client_credential"
      "appid": "xx"
      "secret": "xxx"
    headers: null
  validate: null
import pytest
import allure
from commons.yaml_utils import read_yaml

@allure.epic("项目名称2")
@allure.feature("模块名称2")
class TestApi:
    @allure.story("打印参数")
    @pytest.mark.parametrize("caseinfo", read_yaml("./test_case/a/login.yaml"))
    def test_name(self,caseinfo,base_url):
        allure.dynamic.title(caseinfo["title"])
        print("模块名称:%s"%caseinfo["feature"])
        print("接口名称:%s"%caseinfo["story"])
        print("用例标题:%s"%caseinfo["title"])
        print("请求方式:%s"%caseinfo["request"]["method"])
        print("请求路径:%s"%base_url+caseinfo["request"]["url"])
        print("请求参数:%s"%caseinfo["request"]["params"])
        print("请求头:%s"%caseinfo["request"]["headers"])
        print("断言:%s"%caseinfo["validate"])
# 操作工具包
import yaml
def read_yaml(yaml_path):
    with open(yaml_path,encoding="utf-8") as f:
        value = yaml.safe_load(f)
        return value

def write_yaml():
    with open("./test_case/login.yaml",encoding="utf-8",mode="a+") as f:
        date = {"sdad":"sdsadsa"}
        yaml.safe_dump(date,f)

def clean_yaml():
    with open("./test_case/login.yaml", encoding="utf-8", mode="w") as f:
        f.truncate()

 

 

 

 

 

 

 

posted @ 2023-04-15 11:08  测试木可  阅读(260)  评论(0编辑  收藏  举报