dirtyhand-tester 自动化不用自己开发太多代码如何在 yaml,excel 等文件中使用变量以及变量计算等?
simonpatrick
·
2023年03月20日
·
3844 次阅读
自动化如何在 yaml,excel 等文件中使用变量
问题来源
pytest+yaml 文件,怎么在 yaml 文件中引用变量?
pytest+yaml 文件,怎么在 yaml 文件中引用变量?
利用现有 python 第三方库解决这个问题
首先说我的结论: 不用写太多自定义代码就可以解决文件中使用变量
我的方法是使用 jinja2
模版引擎就可以解决这个问题,不仅仅是:
- yaml
- json
- excel
理论上所有的问题的类似问题都可以解决. 而且这个办法扩展性比一般自己写的方法好.
而且还可以直接使用函数对模版变量进行计算.
至于好用不好用,因为模版引擎功能本身就很强大,所以会复杂一点,但是扩展性肯定好.
最简单的一个例子
一个最简单例子就是: 变量是 name
"Hello, {{ name }}!"
那么如果使用jinja
模版处理就是:
import jinja2
tpl_env = jinja2.Environment() ## 使用模版引擎
def raw_render():
tpl_str = """
"Hello, {{ name}}!"
"""
template = tpl_env.from_string(tpl_str)
print(template.render(name="test"))
跑出来的结果是:
"Hello, test!"
所以变量问题解决了,如果是 yaml 其实也是一样,就是把 yaml 文件读取出来变成文本,然后
和你外部变量进行合成就可以了.
那么如果你想让变量都大写呢?
在上面例子中,如果想让 name 变量值在文本中都是大写, 其实不用去实现自定义方法,
直接在模版中使用 python 函数 upper 就可以使用:
"Hello, {{ name.upper()}}!"
更复杂一点,你的变量会被一个函数调用
在上面例子中如果 需要通过 name 变量进行计算之后在去当成接口输入值,那要怎么做,
比如说 name 变量要加上时间才能当成入参数,那要怎么做?
也不需要写很多代码, 只要写一个函数,然后把这个函数设置到模版引擎中就可以
import jinja2
tpl_env = jinja2.Environment() ## 使用模版引擎
def greeting(name: str): ## 模版中用于计算的函数
return "Hello," + name
def raw_render():
tpl_str = """
Hello {{greet(name)}} ## 模版调用函数
Hello {{ greet(name.upper()) }} ## 模版调用函数
"""
template = tpl_env.from_string(tpl_str)
template.globals.update({
"greet": greeting #设置给模版引擎,进行模版计算
})
print(template.render(name="test"))
我看到挺多同学像自己学一些自定义函数之类的,其实大可不必,如果阅读一下jinja2
文档,我可以说 80% 的自定义函数,那里面都有了.
转载文章时务必注明原作者及原始链接,并注明「发表于 TesterHome 」,并不得对作品进行修改。
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。