前言
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