yaml文件中使用函数作为变量,函数没有执行

pytest框架yaml文件中使用函数作为变量,函数没有执行

img

img

该回答引用GPTᴼᴾᴱᴺᴬᴵ
在 YAML 文件中使用函数作为变量时,需要确保该函数被正确引用和调用。以下是一些可能的问题及其解决方法:

1.函数未正确导入:如果函数定义在另一个模块中,需要在 YAML 文件中导入该模块。例如,在 Python 中,可以使用以下语句导入一个名为 my_module 的模块:

import my_module

2.函数名或参数有误:请确保在 YAML 文件中正确引用函数及其参数,例如:

my_function: my_module.some_function
my_parameter: "{{ my_function('parameter_value') }}"



其中 my_function 是要调用的函数名称,my_module.some_function 是该函数的完整引用路径(即模块名和函数名),my_parameter 是传递给函数的参数。

3.函数未被调用:在 YAML 文件中,函数只是变量,需要通过另一个步骤或任务来调用该函数,例如:

- name: Call my_function
  some_module.some_task:
    param: "{{ my_function('parameter_value') }}"



在此示例中,some_module.some_task 是一个任务,将参数 my_function('parameter_value') 传递给 param。该参数将在运行时被替换为 my_function 的返回值。

请注意,YAML 文件中的函数不会在解析 YAML 文件时自动执行。因此,如果您希望在解析 YAML 文件时执行某些函数,请将这些函数放在一个 Python 脚本中,并在任务或步骤中调用该脚本。

该回答引用ChatGPT

1、在函数 read_yaml 中,open() 函数中的 mode='p' 参数应该为 mode='r',表示以只读模式打开文件。

2、在函数 read_yaml 中,读取 YAML 文件的语句 value = yaml.load(stream=f, Loader=yaml.FullLoader) 中使用了过期的 yaml.load() 函数,应该使用 yaml.safe_load() 函数来代替,以提高安全性。

3、在 headers 的值中,调用了一个未定义的函数 tread_yam(),应该改为调用已定义的函数 read_yam()。

您可以参考以下代码修改以上问题:


import os
import yaml

def read_yaml(key):
    with open(os.getcwd() + '/test.yaml', mode='r', encoding='utf8') as f:
        value = yaml.safe_load(f)
        return value[key]

def read_yam():
    with open(os.getcwd() + '/extract.yaml', mode='r', encoding='utf8') as f:
        value = yaml.safe_load(f)
        return value

test_data = {
    'case_name': '获取ticket',
    'url': '/sso/login?ticket=',
    'headers': read_yam()
}

print(test_data)

在上面的代码中,我们对函数 read_yaml 和 read_yam 进行了修正,并将返回值传递给了变量 headers,并在最后打印了整个测试数据。需要注意的是,在 with open() 代码块中使用 yaml.safe_load() 函数读取 YAML 文件,可以安全地将文件内容转换为 Python 对象,避免了潜在的安全问题。

第10行前加打印 看下是否真的没进去