Error[8]: Undefined offset: 4344, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

.接口自动化规则说明
前言…2

一、字段说明…2

二、关联参数…3
1.关联参数命名规范 …3

三、名词解释及规范 …3
1.全局字典…3
2.默认全局变量…3
3.字典填写规范…4

四、使用规则说明…4
1.priority…4
2.headers…4
跨项目登录 …5
3.body …6
4.autoProduct…6
5.assert…8
6.save…9
7.beforeSql …10
8.executeSql…11
9.expectSqlResult…11
10.count…12
11.wati…12
12.product…12
13.method …13
upload…14
download…14

五、jsonPath 使用说明…14
1.运算符 …14
2.JsonPath 案例 …15
3.jsonPath 工具…16
六.框架使用相关…16
1.自动化环境安装指南…16
2.运行用例指南…17
runTestcase.py 运行…17
test_*.py 运行…18
3.选择日志打印…19
4.高效调试用例…19
5.全局变量配置及使用…20
1
2
前言
当前接口自动化测试框架采用的是 pytest+数据驱动+allure 集成框架,本文为解释自动化框架编写
用例规则,让使用者能够更快更方便的编写出高可用的测试用例。



如下为自动化使用规则:
1、python 安装:略
2、IDE 集成环境安装:略
Pydev + Eclipse、PyCharm 等 IDE 集成工具,推荐 PyCharm。


编译环境引用
3、allure 报告插件安装。


注意:需配置环境变量,可提供安装包
4、pytesseract 随机图形认证登录插件安装(管理后台)。


注意:需配置环境变量,可提供安装包
5、依赖包安装:切换到所在文件目录下,执行指令:pip install -r requirements.txt。


出现 time out 超
时,重新执行该指令
6、数据库环境配置:FCB_Auto_Test/config/db/xx_db.cfg,xx 表示 test/uat/sit2,option 按格式填写
即可
7、数据库开关:FCB_Auto_Test/config/env_info.cfg 中的 DB_ISOPEN,YES 为打开,NO 为关闭
8、常量配置:FCB_Auto_Test/config/public/public_xx.cfg,xx 表示 test/uat/sit2
9、单个项目执行,选中右击->running,项目同级及下级所有 xlsx 文件都会被执行
10、整个项目执行(生成 allure 报告)选中 runTestcase.py 右击->running 或 python runTestcase.py
–e test
11、报告打开,打开终端切换到报告所在目录,输入指令:allure serve

一、字段说明
caseid 用例 id,预留字段
priority 用例优先级,如 P0、P1
module 模块名称
interfacePath 接口路由
interfaceName 接口名称
method 请求类型
description 用例描述
headers 请求头,字典 dict
body 请求参数,字典 dict
autoProduct 自动生成数据,字典 dict
assert 断言,使用 jsonpath 的定位表达式针对 response 进行结果定位,取到的值会与左边的预期结果进
行断言
save 保存全局变量数据,是指在 response 返回的结果中,部分字段的 value 需要给到下一个或者多
个接口使用的数据
beforeSql 执行 sql,用于数据查询但不做断言
executeSql 执行 sql,用于数据查询需断言
expectSqlResult sql 预期结果,用于数据库校验
count 用例执行次数
wait 等待时间,以秒为单位,需要则加上这一列,不需要可以不加
3
product 产品,用例属于那个产品模块
owner 用例编写者

二、关联参数
为了处理接口之间的依赖关系,从而引入了关联参数。


那么,这个框架如何使用关联参
数?以登录为例:
u s e r n a m e 此 形 式 为 关 联 参 数 , 此 处 为 关 联 用 户 名 , 即 需 要 从 全 局 字 典 中 获 取 k e y 为 的 v a l u e 替 换 掉 {username}此形式为关联参数,此处为关联用户名,即需要从全局字典中获取 key 为的 value 替换 掉 usernamekeyvalue{username}这整个字符串; 1.关联参数命名规范
a.关联参数形式为“ k e y ” , 编 写 用 例 时 , 关 联 参 数 里 面 k e y 的 格 式 不 限 定 大 小 写 , 若 有 多 个 k e y 命 名 重 复 , 但 是 v a l u e 不 同 , 可 根 据 需 要 用 下 划 线 命 名 方 式 区 分 , 如 “ {key}”,编写用例时,关联参数里面 key 的格式不限定大小写,若有多个 key 命 名重复,但是 value 不同,可根据需要用下划线命名方式区分,如“ keykeykeyvalue线{key_1}”;

三、名词解释及规范 1.全局字典
全局字典,顾名思义,就是全局可以引用的字典(变量),也可称为全局变量。


在本框架中,全局字
典中会存放所有自动生成数据 autoProduct 的键值对(生成数据后的)、save 字段对应的键值对(定位
获取到 response 数据后的)另外就是在运行用例前就导入的各种账号等信息,当 body、headers、assert
需要使用时,只需使用 k e y , 即 可 引 用 全 局 字 典 数 据 的 值 。


P s : 全 局 字 典 是 框 架 中 的 一 个 概 念 , 平 时 写 接 口 用 例 接 触 不 到 , 这 里 引 出 这 个 概 念 , 只 是 为 了 解 释 框 架 是 如 何 处 理 依 赖 关 系 的 。


2. 默 认 全 局 变 量 为 了 更 方 便 使 用 框 架 , 框 架 默 认 给 每 个 项 目 默 认 提 供 了 部 分 需 自 动 生 成 的 全 局 变 量 , 可 直 接 以 {key},即可引用全局字典数据的值。


Ps:全局字典是框架中的一个概念,平时写接口用例接触不到,这里引出这个概念,只是为了解释框架是 如何处理依赖关系的。


2.默认全局变量 为了更方便使用框架,框架默认给每个项目默认提供了部分需自动生成的全局变量,可直接以 key


Ps


2.便使{key}
的方式引用,目前系统提供全局变量如下:
4
key 含义及说明
now_time 即时生成当前时间,如:‘2020-12-08 09:30:16’,使用方式: n o w t i m e t i m e s t a m p 即 时 生 成 的 当 前 时 间 的 13 位 毫 秒 级 时 间 戳 , 如 : ′ 160739102709 5 ′ , 使 用 方 式 : {now_time} timestamp 即时生成的当前时间的 13 位毫秒级时间戳,如:'1607391027095',使用方式: nowtimetimestamp131607391027095使{timestamp}
timestamp_sec 即时生成当前时间的 10 位秒级时间戳,如:‘1607391257’,使用方式: t i m e s t a m p s e c s t a r t t i m e 即 时 生 成 当 前 时 间 − 30 天 时 间 , 如 : ′ 2020 − 11 − 0810 : 54 : 2 4 ′ , 使 用 方 式 : {timestamp_sec} start_time 即时生成当前时间-30 天时间,如:'2020-11-08 10:54:24',使用方式: timestampsecstarttime302020110810:54:24使{start_time}
end_time 即时生成当前时间+30 天时间,如:‘2020-12-08 10:54:27’,使用方式: e n d t i m e n o w d a t e 即 时 生 成 当 前 日 期 , 如 : ′ 2020 − 12 − 0 8 ′ e n d d a t e 即 时 生 成 当 前 日 期 + 60 天 , 如 : ′ 2021 − 02 − 1 0 ′ s i g n 即 时 生 成 的 签 名 , 使 用 方 式 : {end_time} now_date 即时生成当前日期,如:'2020-12-08' end_date 即时生成当前日期+60 天,如:'2021-02-10' sign 即时生成的签名,使用方式: endtimenowdate20201208enddate+6020210210sign使{sign}或 s i g n t y p e , t y p e 为 l o g i n i n f o ∗ . x l s x 文 档 里 面 对 应 账 号 的 t y p e 3. 字 典 填 写 规 范 编 写 接 口 自 动 话 用 例 时 , 具 有 多 个 键 值 对 的 字 典 需 填 入 e x c e l , 应 先 格 式 化 再 填 入 ; 四 、 使 用 规 则 说 明 这 里 会 对 编 写 用 例 中 , 部 分 较 重 要 字 段 的 使 用 规 则 进 行 详 细 说 明 ; 1. p r i o r i t y 作 用 : 优 先 级 运 行 , 必 填 说 明 : 按 优 先 级 运 行 c a s e ; 关 联 优 先 级 标 签 为 e x c e l 测 试 用 例 里 面 的 p r i o r i t y 一 列 ; 使 用 说 明 : 可 有 多 种 方 式 1 ) 使 用 命 令 行 运 行 , p y t h o n r u n T e s t c a s e . p y – p p 0 , 表 示 运 行 p 0 级 用 例 2 ) 修 改 默 认 值 , 修 改 r u n T e s t c a s e . p y 的 默 认 值 a l l 为 期 望 值 , 然 后 右 上 角 点 击 运 行 按 钮 运 行 ; 3 ) 修 改 配 置 文 件 , 修 改 e n v i n f o . c f g 的 [ P R I O R I T Y ] 标 签 的 p r i o r i t y 的 值 为 期 望 值 , 然 后 直 接 运 行 t e s t ∗ . p y 等 对 应 项 目 文 件 ( 此 方 法 不 适 用 命 令 行 和 直 接 运 行 r u n T e s t c a s e . p y 文 件 ) ; 2. h e a d e r s 作 用 : 请 求 头 , 支 持 参 数 化 , 必 填 说 明 : 部 分 接 口 请 求 需 要 添 加 请 求 头 。


如 请 求 头 需 要 添 加 鉴 权 令 牌 , 则 需 要 在 登 录 接 口 l o g i n 登 录 成 功 后 获 取 r e s p o n s e 里 面 的 登 录 令 牌 , 然 后 h e a d e r s 里 面 对 应 请 求 头 字 段 的 v a l u e 处 写 上 关 联 参 数 即 可 。


参 数 关 联 方 式 : “ {sign_type},type 为 login_info_*.xlsx 文档里面对应账号的 type 3.字典填写规范 编写接口自动话用例时,具有多个键值对的字典需填入 excel,应先格式化再填入;

四、使用规则说明 这里会对编写用例中,部分较重要字段的使用规则进行详细说明; 1.priority 作用:优先级运行,必填 说明:按优先级运行 case;关联优先级标签为 excel 测试用例里面的 priority 一列; 使用说明: 可有多种方式 1) 使用命令行运行,python runTestcase.py –p p0,表示运行 p0 级用例 2) 修改默认值,修改 runTestcase.py 的默认值 all 为期望值,然后右上角点击运行按钮运行; 3)修改配置文件,修改 env_info.cfg 的[PRIORITY]标签的 priority 的值为期望值,然后直接 运行 test_*.py 等对应项目文件(此方法不适用命令行和直接运行 runTestcase.py 文件); 2.headers 作用:请求头,支持参数化,必填 说明:部分接口请求需要添加请求头。


如请求头需要添加鉴权令牌,则需要在登录接口 login 登录成功后 获取 response 里面的登录令牌,然后 headers 里面对应请求头字段的 value 处写上关联参数即可。


参数 关联方式:“ signtypetypelogininfo.xlsxtype3.excel使使1.prioritycaseexcelpriority使1使pythonrunTestcase.pypp0p02runTestcase.pyall3envinfo.cfg[PRIORITY]prioritytest.pyrunTestcase.py2.headers


loginresponseheadersvalue


{key}” 1)定位表达式的 key 值可自己任意命名,只要能通俗易懂,但同一个项目内,建议不要有重复的 key 命
名,避免产生覆盖情况
2)若关联参数 k e y 对 应 的 值 为 字 符 串 , 则 填 写 时 , 需 对 关 联 参 数 加 上 字 符 串 标 识 , 如 " {key}对应的值为字符串,则填写时,需对关联参数加上字符串标识,如" key"{key}"
5
例子说明:略,见截图
使用截图:
跨项目登录
框架支持跨项目登录,比如案场宝项目需要 B 端 app 的登录去写用例造数据给案场宝使用,这时可
直接在案场宝项目下,写 B 端的用例去造数据;
跨项目引用项目标签:
项目名称 项目标签(跨项目使用,为项目英文名称缩写)
c 端 cus
B 端 bro
管理后台 mid
机构 管理 amg
机构小程序 ami
会员经理 bmg
会员经理小程序 bmi
案场宝 sce
例子:cus. access_token
例子说明:“.”为引用的意思,cus 为项目,指定项目引用对应登录鉴权字段信息,达到登录对应项目目
的;
使用截图:
Ps:框架在运行用例时,以 sit 环境为例,会默认获取 data/login_info_test.xlsx 这个文件里面的账号登录
信息进行登录,所以写用例时,不需要写登录接口用例,只需在 headers 里面直接添加上登录令牌的关联
参数即可,如” a c c e s s t o k e n ” , 随 后 即 可 灵 活 调 用 其 他 接 口 。


若 无 对 应 登 录 令 牌 , 请 联 系 自 动 化 小 组 成 员 添 加 ; 3. b o d y 作 用 : 请 求 参 数 , 支 持 参 数 化 , 必 填 说 明 : 若 请 求 参 数 某 些 字 段 依 赖 上 一 个 接 口 返 回 的 数 据 , 则 需 以 " {access_token}”,随后即可灵活调用其他接口。


若无对应登录令牌,请联系自动化小组 成员添加; 3.body 作用:请求参数,支持参数化,必填 说明:若请求参数某些字段依赖上一个接口返回的数据,则需以" accesstoken


3.body"{key}“的形式在对应请求参数的 value 位
置写上这个关联参数标识,同时,在上一个关联接口的 save 字段处,需填上需要获取关联参数的定位表达
式;(save 填写规则见下方)
1)定位表达式的 key 值可自己任意命名,只要能通俗易懂,但同一个项目内,建议不要有重复的 key 命
名,避免产生覆盖情况
2)若关联参数 k e y 对 应 的 值 为 字 符 串 , 则 填 写 时 , 需 对 关 联 参 数 加 上 字 符 串 标 识 , 如 " {key}对应的值为字符串,则填写时,需对关联参数加上字符串标识,如" key"{key}”
3)若关联参数 k e y 对 应 的 值 为 数 组 或 其 他 非 字 符 串 值 , 关 联 参 数 直 接 填 写 即 可 , 如 {key}对应的值为数组或其他非字符串值,关联参数直接填写即可,如 key{key}
4)若关联参数${key}对应的值为数组,而关联参数只需要数组其中一个值,则可使用索引的方式获取,如
k e y [ 1 ] , 1 为 索 引 5 ) 若 关 联 参 数 {key}[1],1 为索引 5)若关联参数 key[1]15{key}对应的值为字典,而关联参数只需要字典其中一个值,则可使用字典取值的方式获取,
k e y [ " k e y " ] , k e y 为 字 典 的 k e y 例 子 : 略 , 见 截 图 例 子 说 明 : 略 , 见 截 图 使 用 截 图 : 4. a u t o P r o d u c t 作 用 : 自 动 生 成 数 据 , 支 持 参 数 化 , 必 填 说 明 : 接 口 测 试 中 总 有 一 些 数 据 不 能 写 死 , 但 是 又 不 需 要 从 其 他 接 口 获 取 的 数 据 , 比 如 注 册 用 的 手 机 号 , 若 写 死 数 据 , 第 二 次 运 行 则 必 然 报 手 机 号 已 被 注 册 , 无 法 注 册 成 功 , 为 了 让 每 次 注 册 都 顺 利 , 手 机 号 必 须 是 不 能 重 复 的 , 那 么 这 时 候 就 需 要 对 手 机 号 这 个 数 据 进 行 自 动 生 成 。


1 ) 对 需 要 自 动 生 成 数 据 的 字 段 , 在 a u t o P r o d u c t 字 段 下 面 , 填 写 字 段 名 做 为 k e y 即 可 2 ) 运 行 用 例 时 , 框 架 会 根 据 填 入 的 字 段 k e y , 通 过 一 定 的 规 则 自 动 生 成 v a l u e 并 放 入 全 局 字 典 3 ) 通 过 参 数 关 联 的 方 式 , 可 使 用 自 动 生 成 的 k e y 4 ) 多 个 k e y 之 间 使 用 英 文 分 号 “ ; ” 隔 开 5 ) 输 入 的 字 段 名 应 避 免 与 全 局 字 典 中 的 k e y 名 一 致 , 若 一 致 , 会 产 生 覆 盖 效 果 6 ) 自 定 义 规 则 使 用 , 为 直 接 调 用 对 应 函 数 生 成 数 据 , 如 : r a n P h o n e = g e t p h o n e ( ′ 136494 1 ′ ) 例 子 : c h i n a n a m e 1 ; p h o n e 0 ; r a n P h o n e = g e t p h o n e ( ′ 136494 1 ′ ) 例 子 说 明 : c h i n a n a m e 1 为 需 要 自 动 生 成 的 名 字 , p h o n e 0 为 需 要 自 动 生 成 的 手 机 号 , r a n P h o n e = g e t p h o n e ( ′ 136494 1 ′ ) 为 生 成 自 定 义 号 段 的 手 机 号 67 固 定 规 则 : k e y 生 成 规 则 说 明 c h i n a n a m e 作 用 : 随 机 生 成 中 文 名 , 如 : 王 小 二 , 使 用 规 则 : 包 含 p h o n e 作 用 : 按 需 生 成 配 置 文 件 里 面 号 码 段 的 随 机 号 码 , 使 用 规 则 : 包 含 m o b i l e 作 用 : 随 机 生 成 手 机 号 , 使 用 规 则 : 包 含 r a n d o m n a m e 作 用 : 随 机 生 成 英 文 + 数 字 ( 时 分 秒 ) , 如 A U T O 091011 , 使 用 规 则 : 包 含 p w d 作 用 : 生 成 经 过 M D 5 加 密 后 的 密 码 , 默 认 为 q w e r 1234 , 使 用 规 则 : 包 含 i d c a r d 作 用 : 随 机 生 成 完 整 身 份 证 号 , 使 用 规 则 : 包 含 c e r t s i x 作 用 : 随 机 生 成 身 份 证 号 后 6 位 , 使 用 规 则 : 包 含 l e t t e r s i x 作 用 : 自 动 生 成 6 位 字 母 , 不 分 大 小 写 , 使 用 规 则 : 包 含 H K c a r d 作 用 : 自 动 生 成 香 港 身 份 证 号 T W c a r d 作 用 : 自 动 生 成 台 湾 身 份 证 号 A M c a r d 作 用 : 自 动 生 成 澳 门 身 份 证 号 l d n i n e 作 用 : 自 动 生 成 3 位 字 母 + 6 位 数 字 , 不 分 大 小 写 , 使 用 规 则 : 包 含 自 定 义 规 则 : k e y 使 用 方 式 生 成 规 则 说 明 参 数 类 型 自 定 义 k e y = M D 5 ( p w d ) 作 用 : 对 传 入 的 字 符 串 , 进 行 M D 5 加 密 , k e y 为 引 用 的 键 例 子 : k e y = M D 5 ( ′ q w e r 123 4 ′ ) , 针 对 ′ q w e r 123 4 ′ 字 符 串 进 行 M D 5 加 密 , 并 返 回 加 密 后 的 值 给 k e y , 引 用 方 式 : {key}["key"],key 为字典的 key 例子:略,见截图 例子说明:略,见截图 使用截图: 4.autoProduct 作用:自动生成数据,支持参数化,必填 说明:接口测试中总有一些数据不能写死,但是又不需要从其他接口获取的数据,比如注册用的手机号, 若写死数据,第二次运行则必然报手机号已被注册,无法注册成功,为了让每次注册都顺利,手机号必须 是不能重复的,那么这时候就需要对手机号这个数据进行自动生成。


1)对需要自动生成数据的字段,在 autoProduct 字段下面,填写字段名做为 key 即可 2)运行用例时,框架会根据填入的字段 key,通过一定的规则自动生成 value 并放入全局字典 3)通过参数关联的方式,可使用自动生成的 key 4)多个 key 之间使用英文分号“;”隔开 5)输入的字段名应避免与全局字典中的 key 名一致,若一致,会产生覆盖效果 6)自定义规则使用,为直接调用对应函数生成数据,如:ranPhone=get_phone('1364941') 例子:china_name_1;phone_0; ranPhone=get_phone('1364941') 例子说明: china_name_1 为需要自动生成的名字, phone_0 为需要自动生成的手机 号,ranPhone=get_phone('1364941')为生成自定义号段的手机号 6 7 固定规则: key 生成规则说明 china_name 作用:随机生成中文名,如:王小二,使用规则:包含 phone 作用:按需生成配置文件里面号码段的随机号码,使用规则:包含 mobile 作用:随机生成手机号,使用规则:包含 random_name 作用:随机生成英文+数字(时分秒),如 AUTO091011,使用规则:包含 pwd 作用:生成经过 MD5 加密后的密码,默认为 qwer1234,使用规则:包含 id_card 作用:随机生成完整身份z号,使用规则:包含 cert_six 作用:随机生成身份z号后 6 位,使用规则:包含 letter_six 作用:自动生成 6 位字母,不分大小写,使用规则:包含 HK_card 作用:自动生成香港身份z号 TW_card 作用:自动生成台湾身份z号 AM_card 作用:自动生成澳门身份z号 ld_nine 作用:自动生成 3 位字母+6 位数字,不分大小写,使用规则:包含 自定义规则: key 使用方式 生成规则说明 参数类型 自定义 key=MD5(pwd) 作用:对传入的字符串,进行 MD5 加密,key 为引用的键 例子:key=MD5('qwer1234'),针对'qwer1234'字符串进行 MD5 加密,并返回加密后的值给 key,引用方式: key["key"]keykey使4.autoProduct


1autoProductkey2keyvalue3使key4key使;5key6使ranPhone=getphone(1364941)chinaname1;phone0;ranPhone=getphone(1364941)chinaname1phone0,ranPhone=getphone(1364941)67keychinaname使phone使mobile使randomname+AUTO091011使pwdMD5qwer1234使idcard使certsix6使lettersix6使HKcardTWcardAMcardldnine3+6使key使key=MD5(pwd)MD5keykey=MD5(qwer1234)qwer1234MD5key{key}
pwd 字符串 str
自定义 key=get_phone(num)
作用:可根据指定的号码段 num,自动生成 11 位手机号;
例子:ranPhone=get_phone(‘1364941’),那么会自动生成
key=1364941+4 位随机数 组合成的 11 位手机号,引用方式:
r a n P h o n e n u m 字 符 串 s t r 自 定 义 k e y = g e t r a n d o m l n ( l e t t e r , n u m b e r ) 作 用 : 根 据 输 入 的 指 定 字 母 位 数 , 数 字 位 数 , 自 动 生 成 对 应 位 数 的 字 母 + 位 数 的 字 符 串 例 子 : l n n a m e = g e t r a n d o m l n ( 3 , 5 ) , 会 自 动 生 成 3 位 字 母 + 5 位 数 字 的 字 符 串 , 如 : ′ j e t 7013 4 ′ , 引 用 方 式 : {ranPhone} num 字符串 str 自定义 key=get_random_ln(letter,number) 作用:根据输入的指定字母位数,数字位数,自动生成对应位数的字 母+位数的字符串 例子:ln_name=get_random_ln(3,5),会自动生成 3 位字母+5 位 数字的字符串,如:'jet70134',引用方式: ranPhonenumstrkey=getrandomln(letter,number)+lnname=getrandomln(3,5)3+5jet70134{ln_name}
letter 整型 int
number 整型 int
自定义 key=get_random_num(num)
作用:根据传入的 num,自动生成随机多位数字
例子:number=get_random_num(5),会自动生成 5 位随机数,
如:15645,引用方式:引用方式: n u m b e r n u m 整 型 i n t 自 定 义 k e y = g e t r a n d o m l e t ( l e t t e r ) 作 用 : 根 据 传 入 的 l e t t e r , 自 动 生 成 随 机 多 位 字 母 例 子 : l e t t e r = g e t r a n d o m n u m ( 5 ) , 自 动 生 成 5 位 字 母 , 如 : L l d s d l e t t e r 整 型 i n t 自 定 义 K e y = g e t t i m e s t a m p ( n u m ) 作 用 : 根 据 传 入 的 n u m , 自 动 生 成 其 位 数 的 时 间 戳 例 子 : t i m e = g e t r a n d o m n u m ( 10 ) , 自 动 生 成 10 位 秒 级 时 间 戳 , 如 : 1609812592 n u m 整 型 i n t 8 自 定 义 k e y = g e t t i m e ( c o u n t , t a g , f o r m a t ) 作 用 : 根 据 传 入 的 天 数 c o u n t , 加 或 减 t a g , 日 期 格 式 f o r m a t , 自 动 生 成 对 应 格 式 的 日 期 例 子 : n e e d t i m e = g e t t i m e ( 10 , ′ + ′ , ′ 自 动 生 成 当 前 时 间 + 10 天 的 年 月 日 时 分 秒 格 式 的 时 间 , 如 : ′ 2021 − 01 − 0710 : 04 : 3 7 ′ 时 间 年 月 日 : n e e d t i m e = g e t t i m e ( 10 , ′ + ′ , ′ ′ 2021 − 01 − 0 7 ′ 当 前 时 间 减 10 天 : n e e d t i m e = g e t t i m e ( 10 , ′ − ′ , ′ 果 : ′ 2020 − 12 − 1 8 ′ 当 前 时 间 时 分 秒 : n e e d t i m e = g e t t i m e ( 0 , ′ − ′ , ′ ′ 10 : 10 : 1 9 ′ 下 标 为 点 的 时 间 : n e e d t i m e = g e t t i m e ( 10 , ′ − ′ , ′ 引 用 方 式 : 引 用 方 式 : {number} num 整型 int 自定义 key=get_random_let(letter) 作用:根据传入的 letter,自动生成随机多位字母 例子:letter=get_random_num(5),自动生成 5 位字母,如: Lldsd letter 整型 int 自定义 Key=get_timestamp(num) 作用:根据传入的 num,自动生成其位数的时间戳 例子:time=get_random_num(10),自动生成 10 位秒级时间戳, 如:1609812592 num 整型 int 8 自定义 key=get_time(count,tag,format) 作用:根据传入的天数 count,加或减 tag,日期格式 format,自动 生成对应格式的日期 例子:need_time=get_time(10,'+','%Y-%m-%d %H:%M:%S'), 自动生成当前时间+10 天的年月日时分秒格式的时间,如:'2021- 01-07 10:04:37' 时间年月日:need_time=get_time(10,'+','%Y-%m-%d'),结果: '2021-01-07' 当前时间减 10 天:need_time=get_time(10,'-','%Y-%m-%d'),结 果:'2020-12-18' 当前时间时分秒:need_time=get_time(0,'-','%H:%M:%S') 结果: '10:10:19' 下标为点的时间:need_time=get_time(10,'- ','%Y.%m.%d %H:%M:%S') 结果:'2020.12.18 10:13:57' 引用方式:引用方式: numbernumintkey=getrandomlet(letter)letterletter=getrandomnum(5)5LldsdletterintKey=gettimestamp(num)numtime=getrandomnum(10)101609812592numint8key=gettime(count,tag,format)counttagformatneedtime=gettime(10,+,+102021010710:04:37needtime=gettime(10,+,2021010710needtime=gettime(10,,20201218needtime=gettime(0,,10:10:19needtime=gettime(10,,{need_time}
count 整型 int
tag 字符串 str
format 字符串
使用截图:
5.assert
作用:断言,支持参数化,必填
说明:针对 response 进行断言,断言号(=,in,!=)左边的为预期结果,右边为 response 定位表达式
(jsonPath)。



1)运行用例时,会首先通过定位表达式获取到对应字段的 value 然后与右边的预期结果进行断言对比
2)若有多个断言,所有断言均通过,用例才算执行通过
3)若定位表达式定位结果只有一个,则默认直接提取,若有多个,则直接返回列表
4)多个断言请用英文分号";“隔开
5)目前框架支持五种常见断言方式,分别为等值、包含、不等值、或者、不包含:=,in,!=,||,not in
6)支持对 jsonpath 返回的结果进行二次提取,使用“|”符号分隔,输入整数提取列表对应位置的值
0:随机获取 jsonpath 返回数组内的值,如: . . i n f o ∣ 01 : 获 取 j s o n p a t h 返 回 数 组 的 第 1 个 值 , 如 : ..info | 0 1:获取 jsonpath 返回数组的第 1 个值,如: ..info01jsonpath1…code | 1
2:获取 jsonpath 返回数组的第 2 个值,如: . . p r o j e c t ∣ 2 以 此 类 推 … 7 : 获 取 j s o n p a t h 返 回 数 组 的 第 7 个 值 , 如 : ..project | 2 以此类推… 7:获取 jsonpath 返回数组的第 7 个值,如: ..project27jsonpath7…project | 7
例子:
1、“or”断言:“000000”= . . ′ c o d e ′ ∣ ∣ " P 20003 " i n ..'code'||"P20003"in ..code"P20003"in…‘code’
2、其他断言:“000000”= . . c o d e ∣ 1 例 子 说 明 : 第 一 个 断 言 " 000000 " 为 预 期 结 果 , ..code | 1 例子说明: 第一个断言"000000"为预期结果, ..code1"000000"…code 为字段返回 response 中的 code 的定位表达式,若 . . c o d e 定 位 结 果 也 为 " 000000 " , ∣ ∣ 为 o r 含 义 , 若 ∣ ∣ 两 边 的 条 件 , 有 一 个 通 过 , 则 断 言 通 过 ; 第 二 个 断 言 预 期 结 果 为 " 000000 " , ∣ 为 分 隔 符 号 , 1 表 示 提 取 j s o n p a t h 返 回 数 组 中 的 第 一 个 值 ; 使 用 截 图 : 二 次 提 取 截 图 : 6. s a v e 作 用 : 用 于 处 理 接 口 依 赖 关 系 , 必 填 说 明 : 从 r e s p o n s e 里 面 通 过 j s o n P a t h 定 位 表 达 式 获 取 到 需 要 给 下 一 个 或 多 个 接 口 使 用 的 关 联 数 据 1 ) k e y 不 限 定 大 小 写 , 但 须 与 需 引 用 这 个 k e y 的 对 应 b o d y 或 h e a d e r s 里 面 的 关 联 参 数 ..code 定 位结果也为"000000",||为 or 含义,若||两边的条件,有一个通过,则断言通过; 第二个断言预期结果为"000000",|为分隔符号,1 表示提取 jsonpath 返回数组中的第一个值; 使用截图: 二次提取截图: 6.save 作用:用于处理接口依赖关系,必填 说明:从 response 里面通过 jsonPath 定位表达式获取到需要给下一个或多个接口使用的关联数据 1)key 不限定大小写,但须与需引用这个 key 的对应 body 或 headers 里面的关联参数 ..code"000000"or"000000"1jsonpath使6.saveresponsejsonPath使1keykeybodyheaders{key}里的内容
一致,才可进行参数替换
2)多个 key=value 使用英文分号”;“隔开
3)若定位表达式获取的结果只有一个,直接返回结果,若获取的结果为多个,返回一个数组
4)支持对 jsonpath 返回的结果进行二次提取,使用“|”符号分隔,输入整数提取列表对应位置的值
0:随机获取 jsonpath 返回数组内的值,如: . . i n f o ∣ 01 : 获 取 j s o n p a t h 返 回 数 组 的 第 1 个 值 , 如 : ..info | 0 1:获取 jsonpath 返回数组的第 1 个值,如: ..info01jsonpath1…code | 1
2:获取 jsonpath 返回数组的第 2 个值,如: . . p r o j e c t ∣ 2 以 此 类 推 … 7 : 获 取 j s o n p a t h 返 回 数 组 的 第 7 个 值 , 如 : ..project | 2 以此类推… 7:获取 jsonpath 返回数组的第 7 个值,如: ..project27jsonpath7…project | 7
9
例子:secret= . . s e c r e t 例 子 说 明 : s e c r e t 为 k e y , ..secret 例子说明:secret 为 key, ..secretsecretkey…secret 为获取 response 里面字段 secret 的定位表达式
使用截图:
二次提取截图:
7.beforeSql
作用:用于处理数据库查询表结果不做断言,支持参数化,必填
说明:从脚本中查询出一行多列的数据,多张表关联查询需整合成一条 sql 执行。



1)如果查询条件中存在上个案例生成的依赖变量时(ps:变量名称区分大小写),该变量格式为 变 量 名 称 。


如 : {变量名 称}。


如:


{phone}
2)支持多库查询,同库不支持多条 sql 执行。


如:select * from b;select * form b;需转化 select *from
a union all select *from b 或 select * from a,b where a.x = b.x
3)查询列值并生成全局变量给当前案例及后面的案例使用。


如果存在命名相同的,脚本 sql 编写时需给个
别名,因设计中取 sql 查询列名作为全局变量的 key,变量一样就会被覆盖。



4)多库编写格式:”;“分割多库单一数据库查询;”:“分割那个库执行那条脚本。


见图
例子:broker:select guid,screen_name from broker where m_phone = “ p h o n e " ; 例 子 说 明 : g u i d 、 s c r e e n 为 列 名 , 取 其 ” 列 名 和 值 ” 加 到 模 块 内 的 全 局 变 量 ; 取 其 值 同 预 定 值 做 比 较 使 用 截 图 : 108. e x e c u t e S q l 作 用 : 用 于 处 理 数 据 库 查 询 表 结 果 且 断 言 , 支 持 参 数 化 , 必 填 说 明 : 从 脚 本 中 查 询 出 一 行 多 列 的 数 据 , 多 张 表 关 联 查 询 需 整 合 成 一 条 s q l 执 行 。


1 ) 如 果 查 询 条 件 中 存 在 上 个 案 例 生 成 的 依 赖 变 量 时 ( p s : 变 量 名 称 区 分 大 小 写 ) , 该 变 量 格 式 为 {phone}"; 例子说明:guid、screen 为列名,取其”列名和值”加到模块内的全局变量;取其值同预定值做比较 使用截图: 10 8.executeSql 作用:用于处理数据库查询表结果且断言,支持参数化,必填 说明:从脚本中查询出一行多列的数据,多张表关联查询需整合成一条 sql 执行。


1)如果查询条件中存在上个案例生成的依赖变量时(ps:变量名称区分大小写),该变量格式为 phone";guidscreen使108.executeSqlsql


1ps:{变量名
称}。


如: p h o n e 2 ) 支 持 多 库 查 询 , 同 库 不 支 持 多 条 s q l 执 行 。


如 : s e l e c t ∗ f r o m b ; s e l e c t ∗ f o r m b ; 需 转 化 s e l e c t ∗ f r o m a u n i o n a l l s e l e c t ∗ f r o m b 或 s e l e c t ∗ f r o m a , b w h e r e a . x = b . x 3 ) 查 询 只 取 了 列 值 对 比 于 e x p e c t S q l R e s u l t 预 定 的 值 。


查 询 结 果 , 每 列 会 自 动 添 加 到 全 局 变 量 ( 作 用 域 : 模 块 内 ) 中 , 变 量 名 为 查 询 结 果 的 列 名 。


如 : 查 询 结 果 : n a m e = a , 那 么 变 量 名 称 就 是 n a m e , 使 用 方 式 见 1 ) 4 ) 多 库 编 写 格 式 : " ; " 分 割 多 库 单 一 数 据 库 查 询 ; " : " 分 割 那 个 库 执 行 那 条 脚 本 。


见 图 例 子 : s e l e c t g u i d , s c r e e n n a m e f r o m b r o k e r w h e r e m p h o n e = " {phone} 2)支持多库查询,同库不支持多条 sql 执行。


如:select * from b;select * form b;需转化 select *from a union all select *from b 或 select * from a,b where a.x = b.x 3)查询只取了列值对比于 expectSqlResult 预定的值。


查询结果,每列会自动添加到全局变量 (作用域: 模块内)中,变量名为查询结果的列名。


如:查询结果:name=a,那么变量名称就是 name,使用方式见 1) 4)多库编写格式:";"分割多库单一数据库查询;":"分割那个库执行那条脚本。


见图 例子:select guid,screen_name from broker where m_phone = " phone2sql


selectfromb;selectformb;selectfromaunionallselectfrombselectfroma,bwherea.x=b.x3expectSqlResult


(:),


name=aname使1)4";"":"


selectguid,screennamefrombrokerwheremphone="{phone}”
例子说明:guid、screen 为列名,取其”列名和值”加到模块内的全局变量;取其值同预定值做比较
使用截图:
9.expectSqlResult
作用:sql 预期结果,用于比较数据库查询表的每一列结果,支持参数化,必填
说明:用户填写脚本查询出来的预期结果。


1)单库脚本查询出来多少列,该处就填写多少字段对比。


行列一一对应
2)多个结果以”;”分割,不区分中英文
3)当 expectSqlResult 为空 executeSql 不为空时,executeSql 中脚本查询的结果会包含于 response 响
应的结果做比较(也就是:executeSql 查出的每个结果都应在接口响应的值中)。



11
4)多库断言格式:”;“分割多库单一数据库断言;”:“分割那个库断言查询结果;多个字段验证以”,"逗号分
开。


见图
例子:select guid,screen_name from broker where m_phone = "KaTeX parse error: Unexpected character: '' at position 1289: …son 中解析出所需要的值。


̲ JsonPath 参照 XP…表示最外层对象,类似于 Xpath 中的根元素
 JsonPath 可以通过点语法来检索数据,如: shell $.store.book[0].title
 也可以使用中括号[]的形式,如 shell $[‘store’][‘book’][0][‘title’]
1.运算符
运算符 说明
$ 根元素
@ 当前元素

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
自动化测试用例编写全局参数_python_内存溢出

自动化测试用例编写全局参数

自动化测试用例编写全局参数,第1张

.接口自动化规则说明
前言…2

一、字段说明…2

二、关联参数…3
1.关联参数命名规范 …3

三、名词解释及规范 …3
1.全局字典…3
2.默认全局变量…3
3.字典填写规范…4

四、使用规则说明…4
1.priority…4
2.headers…4
跨项目登录 …5
3.body …6
4.autoProduct…6
5.assert…8
6.save…9
7.beforeSql …10
8.executeSql…11
9.expectSqlResult…11
10.count…12
11.wati…12
12.product…12
13.method …13
upload…14
download…14

五、jsonPath 使用说明…14
1.运算符 …14
2.JsonPath 案例 …15
3.jsonPath 工具…16
六.框架使用相关…16
1.自动化环境安装指南…16
2.运行用例指南…17
runTestcase.py 运行…17
test_*.py 运行…18
3.选择日志打印…19
4.高效调试用例…19
5.全局变量配置及使用…20
1
2
前言
当前接口自动化测试框架采用的是 pytest+数据驱动+allure 集成框架,本文为解释自动化框架编写
用例规则,让使用者能够更快更方便的编写出高可用的测试用例。



如下为自动化使用规则:
1、python 安装:略
2、IDE 集成环境安装:略
Pydev + Eclipse、PyCharm 等 IDE 集成工具,推荐 PyCharm。


编译环境引用
3、allure 报告插件安装。


注意:需配置环境变量,可提供安装包
4、pytesseract 随机图形认证登录插件安装(管理后台)。


注意:需配置环境变量,可提供安装包
5、依赖包安装:切换到所在文件目录下,执行指令:pip install -r requirements.txt。


出现 time out 超
时,重新执行该指令
6、数据库环境配置:FCB_Auto_Test/config/db/xx_db.cfg,xx 表示 test/uat/sit2,option 按格式填写
即可
7、数据库开关:FCB_Auto_Test/config/env_info.cfg 中的 DB_ISOPEN,YES 为打开,NO 为关闭
8、常量配置:FCB_Auto_Test/config/public/public_xx.cfg,xx 表示 test/uat/sit2
9、单个项目执行,选中右击->running,项目同级及下级所有 xlsx 文件都会被执行
10、整个项目执行(生成 allure 报告)选中 runTestcase.py 右击->running 或 python runTestcase.py
–e test
11、报告打开,打开终端切换到报告所在目录,输入指令:allure serve

一、字段说明
caseid 用例 id,预留字段
priority 用例优先级,如 P0、P1
module 模块名称
interfacePath 接口路由
interfaceName 接口名称
method 请求类型
description 用例描述
headers 请求头,字典 dict
body 请求参数,字典 dict
autoProduct 自动生成数据,字典 dict
assert 断言,使用 jsonpath 的定位表达式针对 response 进行结果定位,取到的值会与左边的预期结果进
行断言
save 保存全局变量数据,是指在 response 返回的结果中,部分字段的 value 需要给到下一个或者多
个接口使用的数据
beforeSql 执行 sql,用于数据查询但不做断言
executeSql 执行 sql,用于数据查询需断言
expectSqlResult sql 预期结果,用于数据库校验
count 用例执行次数
wait 等待时间,以秒为单位,需要则加上这一列,不需要可以不加
3
product 产品,用例属于那个产品模块
owner 用例编写者

二、关联参数
为了处理接口之间的依赖关系,从而引入了关联参数。


那么,这个框架如何使用关联参
数?以登录为例:
u s e r n a m e 此 形 式 为 关 联 参 数 , 此 处 为 关 联 用 户 名 , 即 需 要 从 全 局 字 典 中 获 取 k e y 为 的 v a l u e 替 换 掉 {username}此形式为关联参数,此处为关联用户名,即需要从全局字典中获取 key 为的 value 替换 掉 usernamekeyvalue{username}这整个字符串; 1.关联参数命名规范
a.关联参数形式为“ k e y ” , 编 写 用 例 时 , 关 联 参 数 里 面 k e y 的 格 式 不 限 定 大 小 写 , 若 有 多 个 k e y 命 名 重 复 , 但 是 v a l u e 不 同 , 可 根 据 需 要 用 下 划 线 命 名 方 式 区 分 , 如 “ {key}”,编写用例时,关联参数里面 key 的格式不限定大小写,若有多个 key 命 名重复,但是 value 不同,可根据需要用下划线命名方式区分,如“ keykeykeyvalue线{key_1}”;

三、名词解释及规范 1.全局字典
全局字典,顾名思义,就是全局可以引用的字典(变量),也可称为全局变量。


在本框架中,全局字
典中会存放所有自动生成数据 autoProduct 的键值对(生成数据后的)、save 字段对应的键值对(定位
获取到 response 数据后的)另外就是在运行用例前就导入的各种账号等信息,当 body、headers、assert
需要使用时,只需使用 k e y , 即 可 引 用 全 局 字 典 数 据 的 值 。


P s : 全 局 字 典 是 框 架 中 的 一 个 概 念 , 平 时 写 接 口 用 例 接 触 不 到 , 这 里 引 出 这 个 概 念 , 只 是 为 了 解 释 框 架 是 如 何 处 理 依 赖 关 系 的 。


2. 默 认 全 局 变 量 为 了 更 方 便 使 用 框 架 , 框 架 默 认 给 每 个 项 目 默 认 提 供 了 部 分 需 自 动 生 成 的 全 局 变 量 , 可 直 接 以 {key},即可引用全局字典数据的值。


Ps:全局字典是框架中的一个概念,平时写接口用例接触不到,这里引出这个概念,只是为了解释框架是 如何处理依赖关系的。


2.默认全局变量 为了更方便使用框架,框架默认给每个项目默认提供了部分需自动生成的全局变量,可直接以 key


Ps


2.便使{key}
的方式引用,目前系统提供全局变量如下:
4
key 含义及说明
now_time 即时生成当前时间,如:‘2020-12-08 09:30:16’,使用方式: n o w t i m e t i m e s t a m p 即 时 生 成 的 当 前 时 间 的 13 位 毫 秒 级 时 间 戳 , 如 : ′ 160739102709 5 ′ , 使 用 方 式 : {now_time} timestamp 即时生成的当前时间的 13 位毫秒级时间戳,如:'1607391027095',使用方式: nowtimetimestamp131607391027095使{timestamp}
timestamp_sec 即时生成当前时间的 10 位秒级时间戳,如:‘1607391257’,使用方式: t i m e s t a m p s e c s t a r t t i m e 即 时 生 成 当 前 时 间 − 30 天 时 间 , 如 : ′ 2020 − 11 − 0810 : 54 : 2 4 ′ , 使 用 方 式 : {timestamp_sec} start_time 即时生成当前时间-30 天时间,如:'2020-11-08 10:54:24',使用方式: timestampsecstarttime302020110810:54:24使{start_time}
end_time 即时生成当前时间+30 天时间,如:‘2020-12-08 10:54:27’,使用方式: e n d t i m e n o w d a t e 即 时 生 成 当 前 日 期 , 如 : ′ 2020 − 12 − 0 8 ′ e n d d a t e 即 时 生 成 当 前 日 期 + 60 天 , 如 : ′ 2021 − 02 − 1 0 ′ s i g n 即 时 生 成 的 签 名 , 使 用 方 式 : {end_time} now_date 即时生成当前日期,如:'2020-12-08' end_date 即时生成当前日期+60 天,如:'2021-02-10' sign 即时生成的签名,使用方式: endtimenowdate20201208enddate+6020210210sign使{sign}或 s i g n t y p e , t y p e 为 l o g i n i n f o ∗ . x l s x 文 档 里 面 对 应 账 号 的 t y p e 3. 字 典 填 写 规 范 编 写 接 口 自 动 话 用 例 时 , 具 有 多 个 键 值 对 的 字 典 需 填 入 e x c e l , 应 先 格 式 化 再 填 入 ; 四 、 使 用 规 则 说 明 这 里 会 对 编 写 用 例 中 , 部 分 较 重 要 字 段 的 使 用 规 则 进 行 详 细 说 明 ; 1. p r i o r i t y 作 用 : 优 先 级 运 行 , 必 填 说 明 : 按 优 先 级 运 行 c a s e ; 关 联 优 先 级 标 签 为 e x c e l 测 试 用 例 里 面 的 p r i o r i t y 一 列 ; 使 用 说 明 : 可 有 多 种 方 式 1 ) 使 用 命 令 行 运 行 , p y t h o n r u n T e s t c a s e . p y – p p 0 , 表 示 运 行 p 0 级 用 例 2 ) 修 改 默 认 值 , 修 改 r u n T e s t c a s e . p y 的 默 认 值 a l l 为 期 望 值 , 然 后 右 上 角 点 击 运 行 按 钮 运 行 ; 3 ) 修 改 配 置 文 件 , 修 改 e n v i n f o . c f g 的 [ P R I O R I T Y ] 标 签 的 p r i o r i t y 的 值 为 期 望 值 , 然 后 直 接 运 行 t e s t ∗ . p y 等 对 应 项 目 文 件 ( 此 方 法 不 适 用 命 令 行 和 直 接 运 行 r u n T e s t c a s e . p y 文 件 ) ; 2. h e a d e r s 作 用 : 请 求 头 , 支 持 参 数 化 , 必 填 说 明 : 部 分 接 口 请 求 需 要 添 加 请 求 头 。


如 请 求 头 需 要 添 加 鉴 权 令 牌 , 则 需 要 在 登 录 接 口 l o g i n 登 录 成 功 后 获 取 r e s p o n s e 里 面 的 登 录 令 牌 , 然 后 h e a d e r s 里 面 对 应 请 求 头 字 段 的 v a l u e 处 写 上 关 联 参 数 即 可 。


参 数 关 联 方 式 : “ {sign_type},type 为 login_info_*.xlsx 文档里面对应账号的 type 3.字典填写规范 编写接口自动话用例时,具有多个键值对的字典需填入 excel,应先格式化再填入;

四、使用规则说明 这里会对编写用例中,部分较重要字段的使用规则进行详细说明; 1.priority 作用:优先级运行,必填 说明:按优先级运行 case;关联优先级标签为 excel 测试用例里面的 priority 一列; 使用说明: 可有多种方式 1) 使用命令行运行,python runTestcase.py –p p0,表示运行 p0 级用例 2) 修改默认值,修改 runTestcase.py 的默认值 all 为期望值,然后右上角点击运行按钮运行; 3)修改配置文件,修改 env_info.cfg 的[PRIORITY]标签的 priority 的值为期望值,然后直接 运行 test_*.py 等对应项目文件(此方法不适用命令行和直接运行 runTestcase.py 文件); 2.headers 作用:请求头,支持参数化,必填 说明:部分接口请求需要添加请求头。


如请求头需要添加鉴权令牌,则需要在登录接口 login 登录成功后 获取 response 里面的登录令牌,然后 headers 里面对应请求头字段的 value 处写上关联参数即可。


参数 关联方式:“ signtypetypelogininfo.xlsxtype3.excel使使1.prioritycaseexcelpriority使1使pythonrunTestcase.pypp0p02runTestcase.pyall3envinfo.cfg[PRIORITY]prioritytest.pyrunTestcase.py2.headers


loginresponseheadersvalue


{key}” 1)定位表达式的 key 值可自己任意命名,只要能通俗易懂,但同一个项目内,建议不要有重复的 key 命
名,避免产生覆盖情况
2)若关联参数 k e y 对 应 的 值 为 字 符 串 , 则 填 写 时 , 需 对 关 联 参 数 加 上 字 符 串 标 识 , 如 " {key}对应的值为字符串,则填写时,需对关联参数加上字符串标识,如" key"{key}"
5
例子说明:略,见截图
使用截图:
跨项目登录
框架支持跨项目登录,比如案场宝项目需要 B 端 app 的登录去写用例造数据给案场宝使用,这时可
直接在案场宝项目下,写 B 端的用例去造数据;
跨项目引用项目标签:
项目名称 项目标签(跨项目使用,为项目英文名称缩写)
c 端 cus
B 端 bro
管理后台 mid
机构 管理 amg
机构小程序 ami
会员经理 bmg
会员经理小程序 bmi
案场宝 sce
例子:cus. access_token
例子说明:“.”为引用的意思,cus 为项目,指定项目引用对应登录鉴权字段信息,达到登录对应项目目
的;
使用截图:
Ps:框架在运行用例时,以 sit 环境为例,会默认获取 data/login_info_test.xlsx 这个文件里面的账号登录
信息进行登录,所以写用例时,不需要写登录接口用例,只需在 headers 里面直接添加上登录令牌的关联
参数即可,如” a c c e s s t o k e n ” , 随 后 即 可 灵 活 调 用 其 他 接 口 。


若 无 对 应 登 录 令 牌 , 请 联 系 自 动 化 小 组 成 员 添 加 ; 3. b o d y 作 用 : 请 求 参 数 , 支 持 参 数 化 , 必 填 说 明 : 若 请 求 参 数 某 些 字 段 依 赖 上 一 个 接 口 返 回 的 数 据 , 则 需 以 " {access_token}”,随后即可灵活调用其他接口。


若无对应登录令牌,请联系自动化小组 成员添加; 3.body 作用:请求参数,支持参数化,必填 说明:若请求参数某些字段依赖上一个接口返回的数据,则需以" accesstoken


3.body"{key}“的形式在对应请求参数的 value 位
置写上这个关联参数标识,同时,在上一个关联接口的 save 字段处,需填上需要获取关联参数的定位表达
式;(save 填写规则见下方)
1)定位表达式的 key 值可自己任意命名,只要能通俗易懂,但同一个项目内,建议不要有重复的 key 命
名,避免产生覆盖情况
2)若关联参数 k e y 对 应 的 值 为 字 符 串 , 则 填 写 时 , 需 对 关 联 参 数 加 上 字 符 串 标 识 , 如 " {key}对应的值为字符串,则填写时,需对关联参数加上字符串标识,如" key"{key}”
3)若关联参数 k e y 对 应 的 值 为 数 组 或 其 他 非 字 符 串 值 , 关 联 参 数 直 接 填 写 即 可 , 如 {key}对应的值为数组或其他非字符串值,关联参数直接填写即可,如 key{key}
4)若关联参数${key}对应的值为数组,而关联参数只需要数组其中一个值,则可使用索引的方式获取,如
k e y [ 1 ] , 1 为 索 引 5 ) 若 关 联 参 数 {key}[1],1 为索引 5)若关联参数 key[1]15{key}对应的值为字典,而关联参数只需要字典其中一个值,则可使用字典取值的方式获取,
k e y [ " k e y " ] , k e y 为 字 典 的 k e y 例 子 : 略 , 见 截 图 例 子 说 明 : 略 , 见 截 图 使 用 截 图 : 4. a u t o P r o d u c t 作 用 : 自 动 生 成 数 据 , 支 持 参 数 化 , 必 填 说 明 : 接 口 测 试 中 总 有 一 些 数 据 不 能 写 死 , 但 是 又 不 需 要 从 其 他 接 口 获 取 的 数 据 , 比 如 注 册 用 的 手 机 号 , 若 写 死 数 据 , 第 二 次 运 行 则 必 然 报 手 机 号 已 被 注 册 , 无 法 注 册 成 功 , 为 了 让 每 次 注 册 都 顺 利 , 手 机 号 必 须 是 不 能 重 复 的 , 那 么 这 时 候 就 需 要 对 手 机 号 这 个 数 据 进 行 自 动 生 成 。


1 ) 对 需 要 自 动 生 成 数 据 的 字 段 , 在 a u t o P r o d u c t 字 段 下 面 , 填 写 字 段 名 做 为 k e y 即 可 2 ) 运 行 用 例 时 , 框 架 会 根 据 填 入 的 字 段 k e y , 通 过 一 定 的 规 则 自 动 生 成 v a l u e 并 放 入 全 局 字 典 3 ) 通 过 参 数 关 联 的 方 式 , 可 使 用 自 动 生 成 的 k e y 4 ) 多 个 k e y 之 间 使 用 英 文 分 号 “ ; ” 隔 开 5 ) 输 入 的 字 段 名 应 避 免 与 全 局 字 典 中 的 k e y 名 一 致 , 若 一 致 , 会 产 生 覆 盖 效 果 6 ) 自 定 义 规 则 使 用 , 为 直 接 调 用 对 应 函 数 生 成 数 据 , 如 : r a n P h o n e = g e t p h o n e ( ′ 136494 1 ′ ) 例 子 : c h i n a n a m e 1 ; p h o n e 0 ; r a n P h o n e = g e t p h o n e ( ′ 136494 1 ′ ) 例 子 说 明 : c h i n a n a m e 1 为 需 要 自 动 生 成 的 名 字 , p h o n e 0 为 需 要 自 动 生 成 的 手 机 号 , r a n P h o n e = g e t p h o n e ( ′ 136494 1 ′ ) 为 生 成 自 定 义 号 段 的 手 机 号 67 固 定 规 则 : k e y 生 成 规 则 说 明 c h i n a n a m e 作 用 : 随 机 生 成 中 文 名 , 如 : 王 小 二 , 使 用 规 则 : 包 含 p h o n e 作 用 : 按 需 生 成 配 置 文 件 里 面 号 码 段 的 随 机 号 码 , 使 用 规 则 : 包 含 m o b i l e 作 用 : 随 机 生 成 手 机 号 , 使 用 规 则 : 包 含 r a n d o m n a m e 作 用 : 随 机 生 成 英 文 + 数 字 ( 时 分 秒 ) , 如 A U T O 091011 , 使 用 规 则 : 包 含 p w d 作 用 : 生 成 经 过 M D 5 加 密 后 的 密 码 , 默 认 为 q w e r 1234 , 使 用 规 则 : 包 含 i d c a r d 作 用 : 随 机 生 成 完 整 身 份 证 号 , 使 用 规 则 : 包 含 c e r t s i x 作 用 : 随 机 生 成 身 份 证 号 后 6 位 , 使 用 规 则 : 包 含 l e t t e r s i x 作 用 : 自 动 生 成 6 位 字 母 , 不 分 大 小 写 , 使 用 规 则 : 包 含 H K c a r d 作 用 : 自 动 生 成 香 港 身 份 证 号 T W c a r d 作 用 : 自 动 生 成 台 湾 身 份 证 号 A M c a r d 作 用 : 自 动 生 成 澳 门 身 份 证 号 l d n i n e 作 用 : 自 动 生 成 3 位 字 母 + 6 位 数 字 , 不 分 大 小 写 , 使 用 规 则 : 包 含 自 定 义 规 则 : k e y 使 用 方 式 生 成 规 则 说 明 参 数 类 型 自 定 义 k e y = M D 5 ( p w d ) 作 用 : 对 传 入 的 字 符 串 , 进 行 M D 5 加 密 , k e y 为 引 用 的 键 例 子 : k e y = M D 5 ( ′ q w e r 123 4 ′ ) , 针 对 ′ q w e r 123 4 ′ 字 符 串 进 行 M D 5 加 密 , 并 返 回 加 密 后 的 值 给 k e y , 引 用 方 式 : {key}["key"],key 为字典的 key 例子:略,见截图 例子说明:略,见截图 使用截图: 4.autoProduct 作用:自动生成数据,支持参数化,必填 说明:接口测试中总有一些数据不能写死,但是又不需要从其他接口获取的数据,比如注册用的手机号, 若写死数据,第二次运行则必然报手机号已被注册,无法注册成功,为了让每次注册都顺利,手机号必须 是不能重复的,那么这时候就需要对手机号这个数据进行自动生成。


1)对需要自动生成数据的字段,在 autoProduct 字段下面,填写字段名做为 key 即可 2)运行用例时,框架会根据填入的字段 key,通过一定的规则自动生成 value 并放入全局字典 3)通过参数关联的方式,可使用自动生成的 key 4)多个 key 之间使用英文分号“;”隔开 5)输入的字段名应避免与全局字典中的 key 名一致,若一致,会产生覆盖效果 6)自定义规则使用,为直接调用对应函数生成数据,如:ranPhone=get_phone('1364941') 例子:china_name_1;phone_0; ranPhone=get_phone('1364941') 例子说明: china_name_1 为需要自动生成的名字, phone_0 为需要自动生成的手机 号,ranPhone=get_phone('1364941')为生成自定义号段的手机号 6 7 固定规则: key 生成规则说明 china_name 作用:随机生成中文名,如:王小二,使用规则:包含 phone 作用:按需生成配置文件里面号码段的随机号码,使用规则:包含 mobile 作用:随机生成手机号,使用规则:包含 random_name 作用:随机生成英文+数字(时分秒),如 AUTO091011,使用规则:包含 pwd 作用:生成经过 MD5 加密后的密码,默认为 qwer1234,使用规则:包含 id_card 作用:随机生成完整身份z号,使用规则:包含 cert_six 作用:随机生成身份z号后 6 位,使用规则:包含 letter_six 作用:自动生成 6 位字母,不分大小写,使用规则:包含 HK_card 作用:自动生成香港身份z号 TW_card 作用:自动生成台湾身份z号 AM_card 作用:自动生成澳门身份z号 ld_nine 作用:自动生成 3 位字母+6 位数字,不分大小写,使用规则:包含 自定义规则: key 使用方式 生成规则说明 参数类型 自定义 key=MD5(pwd) 作用:对传入的字符串,进行 MD5 加密,key 为引用的键 例子:key=MD5('qwer1234'),针对'qwer1234'字符串进行 MD5 加密,并返回加密后的值给 key,引用方式: key["key"]keykey使4.autoProduct


1autoProductkey2keyvalue3使key4key使;5key6使ranPhone=getphone(1364941)chinaname1;phone0;ranPhone=getphone(1364941)chinaname1phone0,ranPhone=getphone(1364941)67keychinaname使phone使mobile使randomname+AUTO091011使pwdMD5qwer1234使idcard使certsix6使lettersix6使HKcardTWcardAMcardldnine3+6使key使key=MD5(pwd)MD5keykey=MD5(qwer1234)qwer1234MD5key{key}
pwd 字符串 str
自定义 key=get_phone(num)
作用:可根据指定的号码段 num,自动生成 11 位手机号;
例子:ranPhone=get_phone(‘1364941’),那么会自动生成
key=1364941+4 位随机数 组合成的 11 位手机号,引用方式:
r a n P h o n e n u m 字 符 串 s t r 自 定 义 k e y = g e t r a n d o m l n ( l e t t e r , n u m b e r ) 作 用 : 根 据 输 入 的 指 定 字 母 位 数 , 数 字 位 数 , 自 动 生 成 对 应 位 数 的 字 母 + 位 数 的 字 符 串 例 子 : l n n a m e = g e t r a n d o m l n ( 3 , 5 ) , 会 自 动 生 成 3 位 字 母 + 5 位 数 字 的 字 符 串 , 如 : ′ j e t 7013 4 ′ , 引 用 方 式 : {ranPhone} num 字符串 str 自定义 key=get_random_ln(letter,number) 作用:根据输入的指定字母位数,数字位数,自动生成对应位数的字 母+位数的字符串 例子:ln_name=get_random_ln(3,5),会自动生成 3 位字母+5 位 数字的字符串,如:'jet70134',引用方式: ranPhonenumstrkey=getrandomln(letter,number)+lnname=getrandomln(3,5)3+5jet70134{ln_name}
letter 整型 int
number 整型 int
自定义 key=get_random_num(num)
作用:根据传入的 num,自动生成随机多位数字
例子:number=get_random_num(5),会自动生成 5 位随机数,
如:15645,引用方式:引用方式: n u m b e r n u m 整 型 i n t 自 定 义 k e y = g e t r a n d o m l e t ( l e t t e r ) 作 用 : 根 据 传 入 的 l e t t e r , 自 动 生 成 随 机 多 位 字 母 例 子 : l e t t e r = g e t r a n d o m n u m ( 5 ) , 自 动 生 成 5 位 字 母 , 如 : L l d s d l e t t e r 整 型 i n t 自 定 义 K e y = g e t t i m e s t a m p ( n u m ) 作 用 : 根 据 传 入 的 n u m , 自 动 生 成 其 位 数 的 时 间 戳 例 子 : t i m e = g e t r a n d o m n u m ( 10 ) , 自 动 生 成 10 位 秒 级 时 间 戳 , 如 : 1609812592 n u m 整 型 i n t 8 自 定 义 k e y = g e t t i m e ( c o u n t , t a g , f o r m a t ) 作 用 : 根 据 传 入 的 天 数 c o u n t , 加 或 减 t a g , 日 期 格 式 f o r m a t , 自 动 生 成 对 应 格 式 的 日 期 例 子 : n e e d t i m e = g e t t i m e ( 10 , ′ + ′ , ′ 自 动 生 成 当 前 时 间 + 10 天 的 年 月 日 时 分 秒 格 式 的 时 间 , 如 : ′ 2021 − 01 − 0710 : 04 : 3 7 ′ 时 间 年 月 日 : n e e d t i m e = g e t t i m e ( 10 , ′ + ′ , ′ ′ 2021 − 01 − 0 7 ′ 当 前 时 间 减 10 天 : n e e d t i m e = g e t t i m e ( 10 , ′ − ′ , ′ 果 : ′ 2020 − 12 − 1 8 ′ 当 前 时 间 时 分 秒 : n e e d t i m e = g e t t i m e ( 0 , ′ − ′ , ′ ′ 10 : 10 : 1 9 ′ 下 标 为 点 的 时 间 : n e e d t i m e = g e t t i m e ( 10 , ′ − ′ , ′ 引 用 方 式 : 引 用 方 式 : {number} num 整型 int 自定义 key=get_random_let(letter) 作用:根据传入的 letter,自动生成随机多位字母 例子:letter=get_random_num(5),自动生成 5 位字母,如: Lldsd letter 整型 int 自定义 Key=get_timestamp(num) 作用:根据传入的 num,自动生成其位数的时间戳 例子:time=get_random_num(10),自动生成 10 位秒级时间戳, 如:1609812592 num 整型 int 8 自定义 key=get_time(count,tag,format) 作用:根据传入的天数 count,加或减 tag,日期格式 format,自动 生成对应格式的日期 例子:need_time=get_time(10,'+','%Y-%m-%d %H:%M:%S'), 自动生成当前时间+10 天的年月日时分秒格式的时间,如:'2021- 01-07 10:04:37' 时间年月日:need_time=get_time(10,'+','%Y-%m-%d'),结果: '2021-01-07' 当前时间减 10 天:need_time=get_time(10,'-','%Y-%m-%d'),结 果:'2020-12-18' 当前时间时分秒:need_time=get_time(0,'-','%H:%M:%S') 结果: '10:10:19' 下标为点的时间:need_time=get_time(10,'- ','%Y.%m.%d %H:%M:%S') 结果:'2020.12.18 10:13:57' 引用方式:引用方式: numbernumintkey=getrandomlet(letter)letterletter=getrandomnum(5)5LldsdletterintKey=gettimestamp(num)numtime=getrandomnum(10)101609812592numint8key=gettime(count,tag,format)counttagformatneedtime=gettime(10,+,+102021010710:04:37needtime=gettime(10,+,2021010710needtime=gettime(10,,20201218needtime=gettime(0,,10:10:19needtime=gettime(10,,{need_time}
count 整型 int
tag 字符串 str
format 字符串
使用截图:
5.assert
作用:断言,支持参数化,必填
说明:针对 response 进行断言,断言号(=,in,!=)左边的为预期结果,右边为 response 定位表达式
(jsonPath)。



1)运行用例时,会首先通过定位表达式获取到对应字段的 value 然后与右边的预期结果进行断言对比
2)若有多个断言,所有断言均通过,用例才算执行通过
3)若定位表达式定位结果只有一个,则默认直接提取,若有多个,则直接返回列表
4)多个断言请用英文分号";“隔开
5)目前框架支持五种常见断言方式,分别为等值、包含、不等值、或者、不包含:=,in,!=,||,not in
6)支持对 jsonpath 返回的结果进行二次提取,使用“|”符号分隔,输入整数提取列表对应位置的值
0:随机获取 jsonpath 返回数组内的值,如: . . i n f o ∣ 01 : 获 取 j s o n p a t h 返 回 数 组 的 第 1 个 值 , 如 : ..info | 0 1:获取 jsonpath 返回数组的第 1 个值,如: ..info01jsonpath1…code | 1
2:获取 jsonpath 返回数组的第 2 个值,如: . . p r o j e c t ∣ 2 以 此 类 推 … 7 : 获 取 j s o n p a t h 返 回 数 组 的 第 7 个 值 , 如 : ..project | 2 以此类推… 7:获取 jsonpath 返回数组的第 7 个值,如: ..project27jsonpath7…project | 7
例子:
1、“or”断言:“000000”= . . ′ c o d e ′ ∣ ∣ " P 20003 " i n ..'code'||"P20003"in ..code"P20003"in…‘code’
2、其他断言:“000000”= . . c o d e ∣ 1 例 子 说 明 : 第 一 个 断 言 " 000000 " 为 预 期 结 果 , ..code | 1 例子说明: 第一个断言"000000"为预期结果, ..code1"000000"…code 为字段返回 response 中的 code 的定位表达式,若 . . c o d e 定 位 结 果 也 为 " 000000 " , ∣ ∣ 为 o r 含 义 , 若 ∣ ∣ 两 边 的 条 件 , 有 一 个 通 过 , 则 断 言 通 过 ; 第 二 个 断 言 预 期 结 果 为 " 000000 " , ∣ 为 分 隔 符 号 , 1 表 示 提 取 j s o n p a t h 返 回 数 组 中 的 第 一 个 值 ; 使 用 截 图 : 二 次 提 取 截 图 : 6. s a v e 作 用 : 用 于 处 理 接 口 依 赖 关 系 , 必 填 说 明 : 从 r e s p o n s e 里 面 通 过 j s o n P a t h 定 位 表 达 式 获 取 到 需 要 给 下 一 个 或 多 个 接 口 使 用 的 关 联 数 据 1 ) k e y 不 限 定 大 小 写 , 但 须 与 需 引 用 这 个 k e y 的 对 应 b o d y 或 h e a d e r s 里 面 的 关 联 参 数 ..code 定 位结果也为"000000",||为 or 含义,若||两边的条件,有一个通过,则断言通过; 第二个断言预期结果为"000000",|为分隔符号,1 表示提取 jsonpath 返回数组中的第一个值; 使用截图: 二次提取截图: 6.save 作用:用于处理接口依赖关系,必填 说明:从 response 里面通过 jsonPath 定位表达式获取到需要给下一个或多个接口使用的关联数据 1)key 不限定大小写,但须与需引用这个 key 的对应 body 或 headers 里面的关联参数 ..code"000000"or"000000"1jsonpath使6.saveresponsejsonPath使1keykeybodyheaders{key}里的内容
一致,才可进行参数替换
2)多个 key=value 使用英文分号”;“隔开
3)若定位表达式获取的结果只有一个,直接返回结果,若获取的结果为多个,返回一个数组
4)支持对 jsonpath 返回的结果进行二次提取,使用“|”符号分隔,输入整数提取列表对应位置的值
0:随机获取 jsonpath 返回数组内的值,如: . . i n f o ∣ 01 : 获 取 j s o n p a t h 返 回 数 组 的 第 1 个 值 , 如 : ..info | 0 1:获取 jsonpath 返回数组的第 1 个值,如: ..info01jsonpath1…code | 1
2:获取 jsonpath 返回数组的第 2 个值,如: . . p r o j e c t ∣ 2 以 此 类 推 … 7 : 获 取 j s o n p a t h 返 回 数 组 的 第 7 个 值 , 如 : ..project | 2 以此类推… 7:获取 jsonpath 返回数组的第 7 个值,如: ..project27jsonpath7…project | 7
9
例子:secret= . . s e c r e t 例 子 说 明 : s e c r e t 为 k e y , ..secret 例子说明:secret 为 key, ..secretsecretkey…secret 为获取 response 里面字段 secret 的定位表达式
使用截图:
二次提取截图:
7.beforeSql
作用:用于处理数据库查询表结果不做断言,支持参数化,必填
说明:从脚本中查询出一行多列的数据,多张表关联查询需整合成一条 sql 执行。



1)如果查询条件中存在上个案例生成的依赖变量时(ps:变量名称区分大小写),该变量格式为 变 量 名 称 。


如 : {变量名 称}。


如:


{phone}
2)支持多库查询,同库不支持多条 sql 执行。


如:select * from b;select * form b;需转化 select *from
a union all select *from b 或 select * from a,b where a.x = b.x
3)查询列值并生成全局变量给当前案例及后面的案例使用。


如果存在命名相同的,脚本 sql 编写时需给个
别名,因设计中取 sql 查询列名作为全局变量的 key,变量一样就会被覆盖。



4)多库编写格式:”;“分割多库单一数据库查询;”:“分割那个库执行那条脚本。


见图
例子:broker:select guid,screen_name from broker where m_phone = “ p h o n e " ; 例 子 说 明 : g u i d 、 s c r e e n 为 列 名 , 取 其 ” 列 名 和 值 ” 加 到 模 块 内 的 全 局 变 量 ; 取 其 值 同 预 定 值 做 比 较 使 用 截 图 : 108. e x e c u t e S q l 作 用 : 用 于 处 理 数 据 库 查 询 表 结 果 且 断 言 , 支 持 参 数 化 , 必 填 说 明 : 从 脚 本 中 查 询 出 一 行 多 列 的 数 据 , 多 张 表 关 联 查 询 需 整 合 成 一 条 s q l 执 行 。


1 ) 如 果 查 询 条 件 中 存 在 上 个 案 例 生 成 的 依 赖 变 量 时 ( p s : 变 量 名 称 区 分 大 小 写 ) , 该 变 量 格 式 为 {phone}"; 例子说明:guid、screen 为列名,取其”列名和值”加到模块内的全局变量;取其值同预定值做比较 使用截图: 10 8.executeSql 作用:用于处理数据库查询表结果且断言,支持参数化,必填 说明:从脚本中查询出一行多列的数据,多张表关联查询需整合成一条 sql 执行。


1)如果查询条件中存在上个案例生成的依赖变量时(ps:变量名称区分大小写),该变量格式为 phone";guidscreen使108.executeSqlsql


1ps:{变量名
称}。


如: p h o n e 2 ) 支 持 多 库 查 询 , 同 库 不 支 持 多 条 s q l 执 行 。


如 : s e l e c t ∗ f r o m b ; s e l e c t ∗ f o r m b ; 需 转 化 s e l e c t ∗ f r o m a u n i o n a l l s e l e c t ∗ f r o m b 或 s e l e c t ∗ f r o m a , b w h e r e a . x = b . x 3 ) 查 询 只 取 了 列 值 对 比 于 e x p e c t S q l R e s u l t 预 定 的 值 。


查 询 结 果 , 每 列 会 自 动 添 加 到 全 局 变 量 ( 作 用 域 : 模 块 内 ) 中 , 变 量 名 为 查 询 结 果 的 列 名 。


如 : 查 询 结 果 : n a m e = a , 那 么 变 量 名 称 就 是 n a m e , 使 用 方 式 见 1 ) 4 ) 多 库 编 写 格 式 : " ; " 分 割 多 库 单 一 数 据 库 查 询 ; " : " 分 割 那 个 库 执 行 那 条 脚 本 。


见 图 例 子 : s e l e c t g u i d , s c r e e n n a m e f r o m b r o k e r w h e r e m p h o n e = " {phone} 2)支持多库查询,同库不支持多条 sql 执行。


如:select * from b;select * form b;需转化 select *from a union all select *from b 或 select * from a,b where a.x = b.x 3)查询只取了列值对比于 expectSqlResult 预定的值。


查询结果,每列会自动添加到全局变量 (作用域: 模块内)中,变量名为查询结果的列名。


如:查询结果:name=a,那么变量名称就是 name,使用方式见 1) 4)多库编写格式:";"分割多库单一数据库查询;":"分割那个库执行那条脚本。


见图 例子:select guid,screen_name from broker where m_phone = " phone2sql


selectfromb;selectformb;selectfromaunionallselectfrombselectfroma,bwherea.x=b.x3expectSqlResult


(:),


name=aname使1)4";"":"


selectguid,screennamefrombrokerwheremphone="{phone}”
例子说明:guid、screen 为列名,取其”列名和值”加到模块内的全局变量;取其值同预定值做比较
使用截图:
9.expectSqlResult
作用:sql 预期结果,用于比较数据库查询表的每一列结果,支持参数化,必填
说明:用户填写脚本查询出来的预期结果。


1)单库脚本查询出来多少列,该处就填写多少字段对比。


行列一一对应
2)多个结果以”;”分割,不区分中英文
3)当 expectSqlResult 为空 executeSql 不为空时,executeSql 中脚本查询的结果会包含于 response 响
应的结果做比较(也就是:executeSql 查出的每个结果都应在接口响应的值中)。



11
4)多库断言格式:”;“分割多库单一数据库断言;”:“分割那个库断言查询结果;多个字段验证以”,"逗号分
开。


见图
例子:select guid,screen_name from broker where m_phone = "KaTeX parse error: Unexpected character: '' at position 1289: …son 中解析出所需要的值。


̲ JsonPath 参照 XP…表示最外层对象,类似于 Xpath 中的根元素
 JsonPath 可以通过点语法来检索数据,如: shell $.store.book[0].title
 也可以使用中括号[]的形式,如 shell $[‘store’][‘book’][0][‘title’]
1.运算符
运算符 说明
$ 根元素
@ 当前元素

  • 通配符,可以表示任何元素
    … 递归搜索
    . 子节点(元素)
    15
    [‘’ (, ‘’)] 一个或者多个子节点
    [ (, )] 一个或者多个数组下标
    [start:end] 数组片段,区间为[start,end)
    [?()]
    过滤器表达式,其中表达式结果必须是 boolean 类型,如可以是比较表达式或者逻辑表
    达式
    2.JsonPath 案例
    Json
    JsonPath 例子及说明
    JsonPath 路径说明
    $.lemon.teachers[].name 获取所有老师的的名称
    $…name 获取所有人的名称
    $.lemon.
    所有的老师和销售
    $.lemon…age 所有人的年龄
    $…age 所有人的年龄
    $.lemon.teachers[*].age 所有老师的年龄
    $.lemon.teachers[3] 索引为 3(第 4 个)老师的信息
    $…teachers[3] 索引为 3(第 4 个)老师的信息
    $.lemon.teachers[-2] 倒数第 2 个老师的信息
    16
    $…teachers[-2] 倒数第 2 个老师的信息
    $…teachers[1,2] 第 2 到第 3 个老师的信息
    $…teachers[:2] 索引 0(包含)到索引 2(不包含)的老师信息
    $…teachers[1:3] 索引 1(包含)到索引 3(不包含)的老师信息
    $…teachers[-2:] 最后的两个老师的信息
    $…teachers[2:] 索引 2 开始的所有老师信息
    $…teachers[?(@.addr)] 所有包含地址的老师信息(jsonpath_rw 不支持)
    KaTeX parse error: Undefined control sequence: \ShareCache at position 155: …已存恒大云盘 安装指导: D:\̲S̲h̲a̲r̲e̲C̲a̲c̲h̲e̲\技术开发中心\测试管理.…{building_id}”
    截图:
    20

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/579323.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-11
下一篇 2022-04-11

发表评论

登录后才能评论

评论列表(0条)

保存