首页 > 其他分享 >YAML文件

YAML文件

时间:2023-04-15 11:24:13浏览次数:32  
标签:文件 20 name yaml caseinfo YAML allure print

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()

 

 

 

 

 

 

 

标签:文件,20,name,yaml,caseinfo,YAML,allure,print
From: https://www.cnblogs.com/test-shirley/p/17320733.html

相关文章

  • C-文件读写
    文件读写#include<stdio.h>读取文件FILE*fopen(char*filename,char*mode);参数说明:打开方式说明"r"以只读方式打开文件.文件必须存在,否则打开失败."w"以写入方式打开文件.如果文件不存在,那么创建一个新文件;如果文件存在,那么清空文件内容.......
  • CIT 5930 文件I/O输入输出
    CIT5930|Assignment:C-FileI/O–MakingtheLC4Assembler|1SettingupCodioandMakefileforthisHW:1)OpentheCodioassignmentviaCanvas2)FromtheCodioFile-Treeclickon:assembler.c3)Makefilemustimplementthese3targets–all,clean,cl......
  • 如何配置.h头文件include“”相对路径
    编译工程时,找的是当前main.c文件下的.h文件,如果当前路径下没有就会报错,当前路径用.\表示,上一级目录用..\表示。如果你的main.h文件在main.c的上一级目录中Include文件夹内,这样来表示:#include“..\Include\main.h”总结:编译工程时找的是当前程序文件目录下的.h文件。—————......
  • “文件协作”到底是什么意思?
    伴随着信息化的发展,文件从直至存储变成了线上存储,现代职场中文件协作的概念也不再陌生,“文件协作”一词到底是什么意思呢?文档协作是指通过第三方工具,对项目文件进行实时协作。这个词经常与网盘工具一起出现,企业网盘可以帮助团队实现即使分隔多地,也可以与团队成员共同办公,将距离影......
  • #yyds干货盘点#Linux之find:查找目录下的文件
    【功能说明】find命令用于查找目录下的文件,同时也可以调用其他命令执行相应的操作。【语法格式】find[-H][-L][-P][-Ddebugopts][-olevel][pathname][expression]find[选项][路径][操作语句]1)注意find命令以及后面的选项和路径、操作语句,每个......
  • python分段读取word文件数据到MySQL数据库和Java读取word数据到MySQL数据库
    1、python分段读取word文件数据到MySQL数据库示例:(注:此示例为读取某个文件夹下的所有文件,并对文件后缀名为doc的文件进行读取,并以文件名称为id完成对该word内容的插入。)#导入os模块importos#导入所需库importpymysqlfromdocximportDocument#path定义要获取的......
  • X79G Xeon 2630v2 电脑 Hackintosh 黑苹果efi引导文件
    原文来源于黑果魏叔官网,转载需注明出处。(下载请直接百度黑果魏叔)硬件型号驱动情况主板X79G处理器IntelXeon2630v2已驱动内存32g(16*22666MHZ)已驱动硬盘Intel760p512GB已驱动显卡RX470已驱动声卡瑞昱@英特尔HighDefinitionAudio控制器已驱动网卡英特尔EthernetConne......
  • 在 Linux 中使用 sFTP 上传或下载文件与文件夹
    导读sFTP(安全文件传输程序)是一种安全的交互式文件传输程序,其工作方式与FTP(文件传输协议)类似。然而,sFTP比FTP更安全;它通过加密SSH传输处理所有操作。它可以配置使用几个有用的SSH功能,如公钥认证和压缩。它连接并登录到指定的远程机器,然后切换到交互式命令模式,在......
  • 使用appuploader工具发布证书和描述性文件教程
    使用APPuploader工具发布证书和描述性文件教程之前用AppCan平台开发了一个应用,平台可以同时生成安卓版和苹果版,想着也把这应用上架到AppStore试试,于是找同学借了个苹果开发者账号,但没那么简单,还要用到Mac电脑的钥匙串申请发布证书和上传ipa,可没有Mac,同学的大老远的也不方便拿过来......
  • B/S上传大型视频文件到服务器,解决方案
    ​ 最近遇见一个需要上传超大大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现。在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表格数据、上传影音文件等。如果文件体积比较大,或者网络条件不好时,上传的时......