dirtyhand-tester 自动化不用自己开发太多代码如何在 yaml,excel 等文件中使用变量以及变量计算等?

simonpatrick · 2023年03月20日 · 3832 次阅读

自动化如何在 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% 的自定义函数,那里面都有了.

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册