当前位置: 首页 > news >正文

【基础】使用template替换yaml中的变量

前言

在接口自动化测试的时候,yaml 文件一般放测试的数据或当配置文件使用,yaml 文件存放静态的数据是没问题的,python的数据类型基本上都是支持的。
有时候我们想在 yaml 文件中引用变量来读取 python 代码的设置值。

template 使用

template 是字符串模板,用于替换字符串中的变量,是 string 的一个类引用变量有 2 种格式

$variable 使用 $变量名 引用变量
${variable} 使用 ${变量名} 大括号包起来

第一种 $variable

from string import Template
tempTemplate = Template("My name is $name , i like $fancy")
d = {'name': 'yoyo', 'fancy': 'python'}
print(tempTemplate.substitute(d))

**** 运行结果 >>> My name is yoyo , i like python****

第二种 ${variable}

from string import Template
tempTemplate = Template("My name is ${name} , i like ${fancy}")
d = {'name': 'yoyo', 'fancy': 'python'}
print(tempTemplate.substitute(d))

运行结果 >>>My name is yoyo , i like python

safe_substitute使用
上面的方式只能严格的匹配变量,当字符串中有$符号,不想匹配变量的时候,会报错

from string import Template
tempTemplate = Template("$My name is ${name} , i like ${fancy}")
d = {'name': 'yoyo', 'fancy': 'python'}
print(tempTemplate.substitute(d))

这段,$符号加在My的前面,我只想让它是一个普通的字符串,不想引用变量,就出现了报错说找不到这个key

Traceback (most recent call last):
File “D:/soft/api_pytest_1208/config/aa.py”, line 12, in
print(tempTemplate.substitute(d))
File “E:\python36\lib\string.py”, line 130, in substitute
return self.pattern.sub(convert, self.template)
File “E:\python36\lib\string.py”, line 123, in convert
return str(mapping[named])
KeyError: ‘My’
Template 里面还有一个 safe_substitute 的方法,可以忽略匹配不到的变量

from string import Template
tempTemplate = Template("$My name is ${name} , i like ${fancy}")
d = {'name': 'yoyo'}
print(tempTemplate.safe_substitute(d))

运行结果:$My name is yoyo , i like ${fancy}

虽然字符串定义了多个变量,但是引用的时候只给了name这个值,也不影响运行,没给值的当普通字符串出来,这样就很完美了

yaml 文件引用变量
通过前面 Template 的基础使用,已经掌握了基本的用法了,接下来在 yaml 文件中引用变量

  • test:
    name: login case1
    request:
    url: http://x.x:7000/api/v1/login/
    method: POST
    headers:
    Content-Type: application/json
    User-Agent: python-requests/2.18.4
    json:
    username: $user
    password: p s w v a l i d a t e : − e q : [ psw validate: - eq: [ pswvalidate:eq:[.msg, login success!]
    - eq: [$.code, 0]
    python读yaml文件代码
from string import Template
import yaml
with open("login.yml", encoding='utf-8') as fp:read_yml_str = fp.read()# print(xx)tempTemplate1 = Template(read_yml_str)c = tempTemplate1.safe_substitute({"user": "yoyo", "psw": "123456 "})print(c)

yml 文件数据,转 python 类型

yaml_data = yaml.safe_load(c)
print(yaml_data)

运行结果

- test:name: login case1request:url: http://49.235.x.x:7000/api/v1/login/method: POSTheaders:Content-Type: application/jsonUser-Agent: python-requests/2.18.4json:username: userpassword: 123456 validate:- eq: [$.msg, login success!]- eq: [$.code, 0][{'test': {'name': 'login case1','request': {'url': 'http://49.235.x.x:7000/api/v1/login/','method': 'POST','headers': {'Content-Type': 'application/json','User-Agent': 'python-requests/2.18.4'},'json': {'username': 'user','password': 123456}},'validate': [{'eq': ['$.msg', 'login success!']}, {'eq': ['$.code', 0]}]}
}]

这样 yaml 文件就能引用到 python 的变量了


http://www.mrgr.cn/news/64773.html

相关文章:

  • 小菜家教平台:基于SpringBoot+Vue打造一站式学习管理系统
  • WorkFlow源码剖析——Communicator之TCPServer(中)
  • css实现边框双色凹凸半圆
  • Vue2指令原理手写
  • Android Studio插件版本与Gradle 版本对应关系
  • metasploit/modules/auxiliary 有哪些模块,以及具体使用案例
  • 【运动的&足球】足球场上球检测系统源码&数据集全套:改进yolo11-DGCST
  • 【网络面试篇】HTTP(1)(笔记)——状态码、字段、GET、POST、缓存
  • Zypher Network:全栈式 Web3 游戏引擎,服务器抽象叙事的领导者
  • 《TCP/IP网络编程》学习笔记 | Chapter 2:套接字类型与协议设置
  • Java-I/O框架08:BufferedReader、BufferedWriter、PrintWriter使用
  • FPGA(现场可编程门阵列)的时序分析
  • aws(学习笔记第十课) 对AWS的EBS如何备份(snapshot)以及使用snapshot恢复数据,AWS实例存储
  • Shell
  • 站长福音(二)-爬虫代理IP合集(国内版)
  • DNS服务部署
  • 第8章 利用CSS制作导航菜单
  • 中文词向量质量的评估
  • 鸿蒙生态崛起:开发者如何抓住机遇与应对挑战
  • 【Linux系统】—— 基本指令(一)
  • ceph灾备之cephfs snapshot mirror和rsync对比
  • Java编码编程2(juc常用的类,线程池)
  • 第三方支付系统架构设计
  • Django3 + Vue.js 前后端分离书籍添加项目Web开发实战
  • 细说STM32单片机USART中断收发RTC实时时间并改善其鲁棒性的方法
  • celery在django项目中实现并发任务和定时任务