yaml数据驱动接口自动化测试(实现参数化关联)核心代码

B站影视 内地电影 2025-10-24 23:07 2

摘要:test_login: description: "登录" method: post route: /weakPwdLogin/?from=web_login RequestData: data: loginName: 18291900215 password

yaml数据驱动接口自动化测试(实现参数化关联)核心代码

真的是很经典,建议每个测试开发人员都要多看几遍!!!

主要核心的代码就是:

1,查找和替换参数名称

2,在response返回值里面提取参数值

注意:第16行的提取规则是jsonpath,第30行的提取规则是正则表达式。

test_login: description: "登录" method: post route: /weakPwdLogin/?from=web_login RequestData: data: loginName: 18291900215 password: dd636482aca022 code: "" description: encrypt Validate: expectcode: 200 resultcheck: '"result":"success"' regularcheck: '[\d]{16}' Extract: - $.data.userinfo.tokentest_login_verify: description: "验证登录" method: post route: /loginSuccess/ RequestData: data: userId: "${data}" Validate: expectcode: 200 resultcheck: '"result":"success"' Extract: - userId:(.+?)import reimport loggingfrom string import Template"""查找和替换yaml数据中的所有变量:Extract里面的内容是需要在返回值中查找提取的变量${data}里面的data是需要替换为实际值的变量"""cache = {} #用于存放参数值logger = logging.getLogger(__name__)def find_variables(string): """查找所有需要替换的变量""" if not isinstance(string, str): return {} pattern = re.compile(r"\${(.*?)}") variables = pattern.findall(string) result = {var: cache.get(var) for var in variables} logger.debug(f"需要替换的变量:{result}") return resultdef substitute_variables(data): """递归替换数据中的所有变量""" if isinstance(data, str): variables = find_variables(data) if variables: template = Template(data) return template.safe_substitute(variables) return data elif isinstance(data, dict): return {key: substitute_variables(value) for key, value in data.items} elif isinstance(data, list): return [substitute_variables(item) for item in data] else: return dataimport reimport loggingfrom string import Templatecache = {} #用于存放参数值 def _extract_by_rule(response, rule): """根据规则提取数据""" response_text = response.text if rule.startswith('$.'): # JSONPath格式(简化版) try: data = json.loads(response_text) keys = rule[2:].split('.') result = data for key in keys: result = result.get(key, {}) return result if result != {} else None except: return None else: # 正则表达式 match = re.search(rule, response_text) return match.group(1) if match else None def save_to_cache(extracted_data): """将提取的数据保存到缓存""" for key, value in extracted_data.items: cache.set(key, value) logger.info(f"保存到缓存: {key} = {value}")

来源:小黄科技频道

相关推荐