metersphere 接口自动化中sql场景使用
摘要:
本文详细介绍了在接口自动化测试中如何连接数据库、编写SQL、获取执行结果,如何处理需要多次查询数据并进行依赖性比较的问题,包括循环控制、SQL查询中使用循环变量、计数器的应用以及结果比较的断言。
一、使用场景
在接口自动化测试过程中,有时需要从数据库中多次查询数据,并对查询结果进行比较,查询的前后存在依赖,接口需要获取循环处理多条记录。
二、实际场景实例
1.数据库连接设置,操作步骤:项目环境--数据配置
2.创建sql接口
3.应用到场景中,先查询结果表信息,根据结果表的字段作为条件,用于后续源数据查询语句的条件,并根据源数据算术运算后的结果和结果表的实际结果进行比较
(1)从订单表和售后表里查询出需要退款的订单号db_order_no字段信息用于后续查询件,db_real_amount字段用于后续接口使用
(2)源数据查询
以查询出来的的db_order_no的字段为条件,在订单表里,循环查询原始数据。
难点1:
如何进行循环控制?
a.使用场景用例的循环控制器,选择次数循环。
获取sql查询结果行数:${列名_#} ,本场景中实际变量是:${db_order_no_#}
难点2
如何在sql查询条件中使用前一步骤结果列单行作为变量赋值?
获取sql查询结果(按列存储的方式): ${列表名_n}
例如:获取第一行的order_no值:${order_no_1}
如何在循环控制器中,获取循环次数具体值?
使用计数器:${__counter(,)} , 从1开始。
存在的问题,在第一次循环时,计数器输出结果为2,导致第一行的order_no无法取到、且最后一行取值越界。
解决方案:前置脚本中处理计数值,并设置为场景变量,用于后续引用。
难点3
如何在循环控制器中使用前一步骤的查询结果列作为下个接口的入参?
分析:单行查询条件,需要${order_no_行号}的格式。
解决方案:使用${__V(变量名)}函数,结合计数器,生成变量名表达式,本例中 ${__V(order_no_${count})}。随着每一次循环,其结果对应${order_no_1}、${order_no_2}...实际的列字段值。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步