前言
有小伙伴提到,接口返回一个id值,extract提取到后,后面根据这个id值拼接一个SQL语句,调用查询sql的函数。
这样调用函数的时候传参会嵌套引用另外一个变量。
此功能在v1.2.5 版本上实现
使用示例
在conftest.py 定义任意函数, 传一个变量, 并注册到my_builtins
from pytest_yaml_yoyo import my_builtins
def fun_x(x):
return f"result: {x}"
my_builtins.funo = fun_x
在yaml 用例文件中引用函数,标签传参引用其它变量
test_b1.yml
config:
name: xx
variables:
a: "hello"
b: "world"
test1:
name: 调用函数直接传变量
print: ${fun_x(a)}
test2:
name: 函数参数是字符串引用了变量
print: ${fun_x('select * from xx where name="${b}"')}
执行用例
pytest test_b1.yml
运行结果
test_b1.yml::test1
------------------------------- live log call -------------------------
2023-05-23 09:12:21 [INFO]: 执行文件-> test_b1.yml
2023-05-23 09:12:21 [INFO]: base_url->
2023-05-23 09:12:21 [INFO]: config variables-> {'a': 'hello', 'b': 'world'}
2023-05-23 09:12:21 [INFO]: 运行用例-> test1
2023-05-23 09:12:21 [INFO]: 取值表达式 fun_x(a)
2023-05-23 09:12:21 [INFO]: 取值结果:--result:hello----,
2023-05-23 09:12:21 [INFO]: validate 校验内容-> []
2023-05-23 09:12:21 [INFO]: export 导出全局变量:{}
PASSED [ 50%]
test_b1.yml::test2
-------------------- live log call -------------------------------
2023-05-23 09:12:21 [INFO]: 执行文件-> test_b1.yml
2023-05-23 09:12:21 [INFO]: base_url->
2023-05-23 09:12:21 [INFO]: config variables-> {'a': 'hello', 'b': 'world'}
2023-05-23 09:12:21 [INFO]: 运行用例-> test2
2023-05-23 09:12:21 [INFO]: 取值表达式 fun_x('select * from xx where name="world"')
2023-05-23 09:12:21 [INFO]: 取值结果:--result:select * from xx where name="world"----,
2023-05-23 09:12:21 [INFO]: validate 校验内容-> []
2023-05-23 09:12:21 [INFO]: export 导出全局变量:{}
PASSED [100%]
format 格式化方式
第二种解决方式,使用 jinja2 的 filter 过滤器语法,用到 format 格式化方法
config:
name: xx
variables:
a: "hello"
b: "world"
test3:
name: format 格式化传字符串
print: ${'mame="%s"' | format("yoyo")}
test4:
name: format 格式化1个变量
print: ${'a="%s"' | format(a)}
test5:
name: format 格式化2个变量
print: ${'a="%s" b="%s"' | format(a, b)}
test6:
name: 函数中引用
print: ${fun_x('select * from xx where name="%s";' | format(a))}
运行结果
test_b1.yml::test3
---------------------------- live log call -----------------------
2023-05-23 09:32:54 [INFO]: 执行文件-> test_b1.yml
2023-05-23 09:32:54 [INFO]: base_url->
2023-05-23 09:32:54 [INFO]: config variables-> {'a': 'hello', 'b': 'world'}
2023-05-23 09:32:54 [INFO]: 运行用例-> test3
2023-05-23 09:32:54 [INFO]: 取值表达式 'mame="%s"' | format("yoyo")
2023-05-23 09:32:54 [INFO]: 取值结果: mame="yoyo",
mame="yoyo"
2023-05-23 09:32:54 [INFO]: validate 校验内容-> []
2023-05-23 09:32:54 [INFO]: export 导出全局变量:{}
PASSED
test_b1.yml::test4
------------------------- live log call --------------------
2023-05-23 09:32:54 [INFO]: 执行文件-> test_b1.yml
2023-05-23 09:32:54 [INFO]: base_url->
2023-05-23 09:32:54 [INFO]: config variables-> {'a': 'hello', 'b': 'world'}
2023-05-23 09:32:54 [INFO]: 运行用例-> test4
2023-05-23 09:32:54 [INFO]: 取值表达式 'a="%s"' | format(a)
2023-05-23 09:32:54 [INFO]: 取值结果: a="hello",
a="hello"
2023-05-23 09:32:54 [INFO]: validate 校验内容-> []
2023-05-23 09:32:54 [INFO]: export 导出全局变量:{}
PASSED
test_b1.yml::test5
------------------------ live log call --------------------------
2023-05-23 09:32:54 [INFO]: 执行文件-> test_b1.yml
2023-05-23 09:32:54 [INFO]: base_url->
2023-05-23 09:32:54 [INFO]: config variables-> {'a': 'hello', 'b': 'world'}
2023-05-23 09:32:54 [INFO]: 运行用例-> test5
2023-05-23 09:32:54 [INFO]: 取值表达式 'a="%s" b="%s"' | format(a, b)
2023-05-23 09:32:54 [INFO]: 取值结果: a="hello" b="world",
a="hello" b="world"
2023-05-23 09:32:54 [INFO]: validate 校验内容-> []
2023-05-23 09:32:54 [INFO]: export 导出全局变量:{}
PASSED
test_b1.yml::test6
--------------------------- live log call ------------------------
2023-05-23 09:32:54 [INFO]: 执行文件-> test_b1.yml
2023-05-23 09:32:54 [INFO]: base_url->
2023-05-23 09:32:54 [INFO]: config variables-> {'a': 'hello', 'b': 'world'}
2023-05-23 09:32:54 [INFO]: 运行用例-> test6
2023-05-23 09:32:54 [INFO]: 取值表达式 fun_x('select * from xx where name="%s";' | format(a))
2023-05-23 09:32:54 [INFO]: 取值结果: --result:select * from xx where name="hello";----,
--result:select * from xx where name="hello";----
2023-05-23 09:32:54 [INFO]: validate 校验内容-> []
2023-05-23 09:32:54 [INFO]: export 导出全局变量:{}
PASSED
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
相关推荐: 这年头怕数据泄露?全密态数据库:无所谓,我会出手
摘要:有一种数据泄露的死敌,叫全密态! 本文分享自华为云社区《这年头怕数据泄露?全密态数据库:无所谓,我会出手》,作者:GaussDB 数据库。 吊炸天的全密态数据库,到底是个啥? 藏不住了,这全密态数据库真上头! 有一种数据泄露的死敌,叫全密态! 数据被标价…