Day17:HTTP 接口测试与链式调用 — sendRequest 从入门到实战

概述

webuiLevel1 框架内置了基于 OkHttp 的 HTTP 请求能力,可以在测试执行链路中发送 RESTful 请求、提取 JSON 字段、将响应存入变量,并在后续步骤中引用------完美支持登录换取 Token → 带 Token 访问这类链式调用场景。

一、前置步骤

双击工具,加载day17_step.xlsx

二、本次新增

点击curl转换

点击发送后效果图

三、步骤sendRequest 动作方法

格式:`动作值 = 方法||URL||请求体||请求头||返回类型`

其中返回类型是最后一个不含 `:` 的参数,从 varargs 末尾自动识别:

|--------------|----------|---------------------------------------------|-------|---------|
| --- | --- | --- | | |
| `body`(默认) | 响应体 | `{"origin":"1.2.3.4"}` | | |
| `headers` | 响应头 | `Content-Type: application/json\r\n...` | | |
| `status` | HTTP 状态码 | `200` | | |
| `all` | 三合一 | `200 | 响应头内容 | 响应体内容` |

四、基础示例

① GET 请求入门

动作方法:sendRequest
动作值 :GET||https://jsonplaceholder.typicode.com/posts/1\|\|Content-Type:application/json\|\|body
特殊方法:存储变量
特殊值 :post

日志输出:

========================================
请求 GET https://jsonplaceholder.typicode.com/posts/1
请求头 Content-Type: application/json
响应 200 OK
响应头 Content-Type: application/json; charset=utf-8
响应体 {"userId":1,"id":1,"title":"sunt aut facere...","body":"quia et..."}

② POST 提交 JSON

动作值:POST||https://jsonplaceholder.typicode.com/posts\|\|{"title":"webui-test","body":"hello","userId":1}\|\|Content-Type:application/json\|\|body

返回示例:

{"title":"webui-test","body":"hello","userId":1,"id":101}

③ 获取响应头 / 状态码 / 全部

只要响应头

GET||https://jsonplaceholder.typicode.com/users/1\|\|Content-Type:application/json\|\|headers

只要状态码

GET||https://jsonplaceholder.typicode.com/todos/1\|\|\|\|status

三合一(状态码||响应头||响应体)

GET||https://jsonplaceholder.typicode.com/comments/1\|\|Content-Type:application/json\|\|all

五、JSON 提取:getValueByJsonPath

配合"存储变量",可以用 JsonPath 从响应中精确提取字段:

动作方法:getValueByJsonPath
动作值 :@loginResult||$.accessToken
特殊方法:存储变量
特殊值 :token

支持的 JsonPath 语法:`.field\`、\`.data0.name`、`$.items\*.id` 等标准表达式。

六、链式调用实战:登录 → 提取 Token → 访问受保护接口

以 `dummyjson.com` 为例,完整流程仅需 4 步:

Step 1 --- 登录获取 Token

动作方法:sendRequest
动作值 :POST||https://dummyjson.com/auth/login\|\|
{"username":"emilys","password":"emilyspass"}||
Content-Type:application/json||body
特殊值 :loginResult

返回示例:

{"id":1,"username":"emilys","accessToken":"eyJhbG...","refreshToken":"eyJhbG..."}

Step 2 --- 提取 accessToken

动作方法:getValueByJsonPath
动作值 :@loginResult||$.accessToken
特殊值 :token

Step 3 --- 带 Token 请求

动作方法:sendRequest
动作值 :GET||https://dummyjson.com/auth/me\|\|
Content-Type:application/json||
Authorization:Bearer ${token}||body
特殊值 :userInfo

注意:`{token}\` 会被框架自动替换为实际值。\`@变量名\` 适合独立字段(整段以 \`@\` 开头),\`{变量名}` 适合嵌入在字符串中间。

Step 4 --- 提取用户名

动作方法:getValueByJsonPath
动作值 :@userInfo||$.firstName
特殊值 :firstName

七、完整测试步骤

baday17 共 15 个步骤,覆盖全部 sendRequest 返回类型 + 链式调用:

b

|---------|---------------|--------------------|------------------|----|----------------------------------------|----|-----------------------------|---------------------------------|-----------|----------|
| --- | --- | --- | --- | | | | | | | |
| 1 | 基础GET请求 | sendRequest | `GET\ | \ | jsonplaceholder.typicode.com/posts/1\ | \ | ...\ | \ | body` | |
| 2 | 提取post标题 | getValueByJsonPath | `@post\ | \ | .title\` | | | | | | | 3 | POST提交JSON | sendRequest | \`POST\\ | \\ | .../posts\\ | \\ | {"title":"webui-test"}...\` | | | | | 4 | 提取新建id | getValueByJsonPath | \`@postResult\\ | \\ | .id` | | | | | |
| 5 | 获取响应头 | sendRequest | `GET\ | \ | .../users/1\ | \ | ...\ | \ | headers` | |
| 6 | 获取状态码 | sendRequest | `GET\ | \ | .../todos/1\ | \ | \ | \ | \ | status` |
| 7 | 三合一返回 | sendRequest | `GET\ | \ | .../comments/1\ | \ | ...\ | \ | all` | |
| 8 | 登录获取Token | sendRequest | `POST\ | \ | dummyjson.com/auth/login\ | \ | ...` | | | |
| 9 | 提取accessToken | getValueByJsonPath | `@loginResult\ | \ | .accessToken\` | | | | | | | 10 | 带Token获取用户信息 | sendRequest | \`GET\\ | \\ | .../auth/me\\ | \\ | \\ | Authorization:Bearer {token}` | | |
| 11 | 提取firstName | getValueByJsonPath | `@userInfo\ | \ | .firstName\` | | | | | | | 12 | 提取lastName | getValueByJsonPath | \`@userInfo\\ | \\ | .lastName` | | | | | |
| 13 | 获取产品信息 | sendRequest | `GET\ | \ | dummyjson.com/products/1\ | \ | ...\ | \ | body` | |
| 14 | 提取title | getValueByJsonPath | `@product\ | \ | .title\` | | | | | | | 15 | 提取price | getValueByJsonPath | \`@product\\ | \\ | .price` | | | | | |

八、请求头语法

jiu请求头支持 3 种写法,可以混用:

单个头

Content-Type:application/json

多个头用 || 分隔

Content-Type:application/json||Authorization:Bearer token

引用变量,嵌入在字符串中间用 ${变量名}

Content-Type:application/json||Authorization:Bearer ${token}

九、关键注意事项

  1. `||` 分隔符不能被转义 ------ 如果 URL/body 中需要 `||`,无法传递。URL 中用 query string 代替,body 中用其他字符

  2. `@变量` 引用 ------ 仅当参数片段以 `@` 开头时替换,如 `@token`(独立使用)

  3. `{变量}\` 引用 ------ 支持嵌入在字符串中间,如 \`Authorization:Bearer {token}`,优先用于拼接场景

  4. 返回类型识别规则 ------ 末尾参数若不含 `:` 且等于 `body/headers/status/all` 之一,识别为返回类型;否则视为请求头

  5. all 返回的三合一中响应头部分的 `||` 会被替换为 `\|\|`,避免与分隔符混淆

  6. 超时配置 ------ 连接超时 30s,读写超时 60s

十、总结

sendRequest + 存储变量 + getValueByJsonPath 的组合,让框架从纯浏览器自动化扩展为支持 API 测试的混合引擎。15 个步骤跑下来,你可以完成:

  • GET / POST 基础请求发送

  • JSON 字段提取与存储

  • 响应头 / 响应码获取

  • 登录 → Token → 授权接口的链式调用

  • 多个请求结果的交叉引用

测试步骤 Excel 文件位于 `day17_http请求/day17_step.xlsx`,可直接加载执行。

相关推荐
showyoui1 小时前
K8s 集群迁移踩坑:Istio 升级后 nginx 403
网络·docker·kubernetes·istio·service_mesh
执笔画流年呀1 小时前
网络原理(http)(https)
网络·http·https
m0_547486661 小时前
《网络协议安全》全套PPT课件(太原理工大学)
网络协议·安全·网络安全
caimouse2 小时前
tcpip.sys 传输层 (TCP) 详细分析
网络·网络协议·tcp/ip
SendTomo2 小时前
send.wang私传网:P2P直连传大文件首选工具
javascript·网络·网络协议·webrtc·p2p
llllll1522 小时前
HTTP协议全解:从报文结构到HTTPS加密原理
网络协议·http·https
caimouse3 小时前
tcpip.sys 传输层 (UDP) 详细分析
网络·网络协议·udp
珠***格13 小时前
双碳目标下:四可装置如何助力光伏消纳与碳数据上报
网络·人工智能·分布式·安全·边缘计算
mounter62514 小时前
绕过主机:通过 Devmem TCP 运行 RDMA 应用
网络·网络协议·tcp/ip·rdma·devmem