首页 > 其他分享 > pytest + yaml 框架 -29.模板过滤器语法与自定义过滤器使用

pytest + yaml 框架 -29.模板过滤器语法与自定义过滤器使用

时间:2023-05-23 10:33:29浏览次数:45  
标签:INFO 10 自定义 23 16 29 2023 过滤器

前言

v1.2.6 版本支持模板过滤器语法的使用,并且可以自定义过滤器了。针对有同学提到上个接口返回一个id值,下个接口引用变量的时候需要根据这个值做一些运算,比如在引用的结果加1.
jinja2 是可以支持模板过滤器语法的,本篇介绍下模板过滤器的相关使用.

v1.2.6 版本主要更新以下几点
1.解决与 pytest-base-url 插件不兼容问题
2.解决len_eq 断言 list 长度问题
3.模板过滤器 filter 支持

jinja2 模板过滤器语法

什么是 jinja2 模板过滤器?

通过在 Jinja2 模板中嵌入变量,可以输出变量的值。但是,在很多情况下,不仅仅只是需要输出变量的值,还需要修改变量的显示,对变量进行格式化、运算等。
为了方便对变量进行处理,Jinja2 提供了过滤器,Jinja2 过滤器是一个函数,该函数对输入变量进行变换处理后,返回一个值作为 Jinja2 模板的输出。

在 yaml 用例文件中引用变量,使用 Jinja2 中过滤器有如下用法:

示例1:过滤器不带任何参数

${ var | filter }

例如:过滤器 upper 将输入变量 var 转换为大写, ${"hello" | upper } 的输出为 "HELLO"。

示例2:过滤器带参数的情况

${ var | filter(arg) }

例如:过滤器 replace (source, target) 将输入变量 var 中的字符串 source 替换为字符串 target,
${"hello world" | replace ("hello", "yoyo") } 的输出为 "hello yoyo"。

示例3:过滤器可以组合使用

${ var | filterA | filterB }

过滤器可以组合使用,${var | filterA | filterB} 的处理过程如下:

  • 输入变量 var 传递给第一个过滤器 fiterA;
  • 将过滤器 filterA 的输出作为输入,传递给第二个过滤器 filterB;
  • 将过滤器 filterB 的输出作为模板的输出。

例如:${"abc" | upper | reverse } 的输出为 "CBA"。

常用的过滤器

过滤器名称 语法使用 实现功能
capitalize ${ 'yoyo' | capitalize } 首字母转大写: Yoyo
title ${ 'hello world' | title } 单词首字母大写 Hello World
lower ${ 'HELLO' | lower } 转小写: hello
upper ${ 'hello' | upper } 转大写: HELLO
revsere ${ 'abc' | reverse } 反转: cba
format ${ 'my name %s, %d years.' | format('yoyo', 20) } format 格式化字符:my name yoyo, 20 years.
first ${ ['hello', 'world', 'yoyo'] | first} 取出第一个:hello
last ${ ['hello', 'world', 'yoyo'] | last} 取出最后一个:yoyo
length ${ ['hello', 'world', 'yoyo'] | length} 获取列表 list 长度: 3
sum ${ [1, 2, 3] |sum } list 求和: 6
sort ${ [1, 3, 2] | sort } list 排序:123
sort { [1, 3, 2] | sort(reverse = True) } list 倒序:321
join ['hello', 'world', 'yoyo'] | join('_') 字符拼接:hello_world_yoyo
default ${ gender | default('male') } 如果 gender 变量未定义使用默认值:male
add ${20 | add(1)} (这个是我添加的一个add 方法)变量值加1: 21

上面的过滤器方法除了add是我自定义的一个内置方法,其它都是jinja2模板引擎自带的过滤器方法。

使用示例

在yaml 用例中使用过滤器语法
test_a.yml

config:
  name: xx
  variables:
    age: 20
    x: 22
    y: "hell0"

testx1:
  name: "xx"
  print: '${age | add(3)}'

testx2:
  name: "xx"
  print: '${y | length}'

使用pytest 运行用例

pytest test_a.yml

运行结果:

test_a.yml::testx1
------------------------- live log call ------------------------
2023-05-23 10:16:48 [INFO]: 执行文件-> test_a.yml
2023-05-23 10:16:48 [INFO]: base_url->
2023-05-23 10:16:48 [INFO]: config variables-> {'age': 20, 'x': 22, 'y': 'hell0'}
2023-05-23 10:16:48 [INFO]: 运行用例-> testx1
2023-05-23 10:16:48 [INFO]: 取值表达式 age | add(3)
2023-05-23 10:16:48 [INFO]: 取值结果:23, <class 'int'>
2023-05-23 10:16:48 [INFO]: validate 校验内容-> []
2023-05-23 10:16:48 [INFO]: export 导出全局变量:{}
PASSED                                                              [ 50%]
test_a.yml::testx2
---------------------- live log call ------------------------------
2023-05-23 10:16:48 [INFO]: 执行文件-> test_a.yml
2023-05-23 10:16:48 [INFO]: base_url->
2023-05-23 10:16:48 [INFO]: config variables-> {'age': 20, 'x': 22, 'y': 'hell0'}
2023-05-23 10:16:48 [INFO]: 运行用例-> testx2
2023-05-23 10:16:48 [INFO]: 取值表达式 y | length
2023-05-23 10:16:48 [INFO]: 取值结果: 5, <class 'str'>
2023-05-23 10:16:48 [INFO]: validate 校验内容-> []
2023-05-23 10:16:48 [INFO]: export 导出全局变量:{}
PASSED                                                                [100%]

标签:INFO,10,自定义,23,16,29,2023,过滤器
From: https://www.cnblogs.com/yoyoketang/p/17422567.html

相关文章

  • Qt编写视频监控系统74-悬浮工具栏(半透明/上下左右位置/自定义按钮)
    一、前言在监控系统中一般在视频实时预览的时候,希望提供一个悬浮工具条,可以显示一些提示信息比如分辨率、码率、帧率,提供一堆快捷操作按钮,可以录像、抓拍、云台控制、关闭等操作,参考了国内很多监控厂商客户端软件,总结下来基本就是悬浮条可以半透明悬浮在通道窗体上,也有少部分是固......
  • .Net6自定义拦截器
    .Net6自定义拦截器拦截器是Aop(面向切面编程)的思想指的是不改变原代码封装的前提下去实现更多功能这里通过.net的特性(给一个目标对象添加一段配置信息)的方式去实现拦截器功能新建一个特性namespaceCorePolly{publicclassTestAttribute:Attribute{publ......
  • goframe API 自定义接口返回值处理
    前言goframe默认使用了中间键ghttp.MiddlewareHandlerResponse,HTTPServer的数据返回通过ghttp.Response对象实现,ghttp.Response对象实现了标准库的http.ResponseWriter接口。数据输出使用Write*相关方法实现,并且数据输出采用了Buffer机制,因此数据的处理效率比较高......
  • 一个基础的vue图片放大镜自定义指令
    <template> <div>  <divv-magnifyref="content"class="content">   <imgsrc="https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg"alt="">  </div> </d......
  • 记Perfeye自定义项实现对比需求
    记Perfeye自定义项实现对比需求背景Perfyeye平台很早就支持对比功能了,但是支持的模块不全,需求方现在想要支持自定义列的需求对比功能,用来显示多份报告之间的差异以及性能趋势。刚接到这个需求的时候,我想,这不就是简简单单CV复制一下老代码的逻辑,改改相应字段就可以了,30分钟也......
  • 在Windows Server 2022中使用Microsoft Deployment Toolkit(MDT)时,可使用Rules(规则)文件
    在WindowsServer2022中使用MicrosoftDeploymentToolkit(MDT)时,可使用Rules(规则)文件来配置和自定义部署过程。以下是常见的Rules参数及其描述:UserDomain:指定要加入的域的名称。UserID和UserPassword:指定加入域所需的管理员帐户凭据。TimeZoneName:指定安装期间使用的时区。Jo......
  • 【Git学习】git log自定义格式
    定制自己常用格式:1、二进制作者时间提交备注gitlog–pretty=format:”%h-%an,%ar:%s”2、以图表形式查看远程提交记录gitlog–decorate–oneline–graph3、说明:常用的格式占位符写法及其代表的意义。选项说明%H提交对象(commit)的完整哈希字串%h提交对象的简短......
  • 基于 Socket 接口实现自定义协议通信
    访问【WRITE-BUG数字空间】_[内附完整源码和文档]根据自定义的协议规范,使用Socket编程接口编写基本的网络应用软件。掌握C语言形式的Socket编程接口用法,能够正确发送和接收网络数据包开发一个客户端,实现人机交互界面和与服务器的通信开发一个服务端,实现并发处理多个客户端......
  • flutter dio自定义http client
    finaldio=Dio();DiogetMyDio(){initAdapter();dio.options.headers={'apiKey':'xxxxx'};dio.options.connectTimeout=constDuration(seconds:15);dio.options.receiveTimeout=constDuration(seconds:15);di......
  • springboot自定义拦截器
    之前使用过滤器实现了拦截没有登录的请求,现在使用springboot的拦截器实现1.LoginCheckInterceptor.javapackagecom.minqiliang.interceptor;importcom.alibaba.fastjson.JSONObject;importcom.minqiliang.pojo.Result;importcom.minqiliang.utils.JwtUtils;importlomb......