惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

宝玉的分享
宝玉的分享
NISL@THU
NISL@THU
E
Exploit-DB.com RSS Feed
L
LINUX DO - 热门话题
L
Lohrmann on Cybersecurity
K
Kaspersky official blog
Project Zero
Project Zero
Cisco Talos Blog
Cisco Talos Blog
T
The Exploit Database - CXSecurity.com
P
Palo Alto Networks Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Threatpost
S
Schneier on Security
G
GRAHAM CLULEY
The Hacker News
The Hacker News
T
Threat Research - Cisco Blogs
Scott Helme
Scott Helme
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Privacy & Cybersecurity Law Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Cyberwarzone
Cyberwarzone
C
CERT Recently Published Vulnerability Notes
T
Tor Project blog
AWS News Blog
AWS News Blog
Simon Willison's Weblog
Simon Willison's Weblog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
爱范儿
爱范儿
P
Privacy International News Feed
云风的 BLOG
云风的 BLOG
P
Proofpoint News Feed
S
Securelist
G
Google Developers Blog
The Last Watchdog
The Last Watchdog
Google Online Security Blog
Google Online Security Blog
美团技术团队
F
Fortinet All Blogs
小众软件
小众软件
Recorded Future
Recorded Future
V
Visual Studio Blog
B
Blog RSS Feed
H
Help Net Security
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Google DeepMind News
Google DeepMind News
Blog — PlanetScale
Blog — PlanetScale
博客园 - 聂微东
Stack Overflow Blog
Stack Overflow Blog
Martin Fowler
Martin Fowler
Latest news
Latest news
Spread Privacy
Spread Privacy
H
Heimdal Security Blog

博客园 - 小海海宁宁

从0到1:使用Schemathesis搭建API自动化测试框架实战 OpenAPI规范及自动化用例生成 playwright & selenium对Shadow DOM的处理 自动化平台质量体系建设(草稿) 【模板】邮件提测模板 研发测试质量规范(草稿) 自动化框架 - 核心模块使用指南 - Kafka 自动化框架 - 核心模块使用指南 - Kibana 自动化框架 - 核心模块使用指南 - Playwright 自动化框架 - 核心模块使用指南 - API 自动化框架 - 核心功能使用指南 - 动态值生成 自动化框架 - 核心功能使用指南 - 数据处理模块 自动化框架 - 核心功能使用指南 - 数据校验模块 自动化框架 - 核心功能使用指南 - 上下文值传递 自动化框架 - 核心功能使用指南 - 用例过滤Tag使用 自动化框架 - 核心功能使用指南 - Excel测试用例编写 自动化框架 - 核心功能使用指南 - 配置文件使用指南 自动化框架使用说明 - 快速开始 Kibana如何添加可视化看板
自动化框架 - Q&A
小海海宁宁 · 2026-03-09 · via 博客园 - 小海海宁宁

A:统一标准,数据管理(测试数据,环境变量),可观测和报告,扩展能力,执行能力等,与业务无关

  1. Q:是不是只能用Excel 写测试用例

A:不是,对于API 功能,步骤不多但测试数据多,适合excel数据驱动。后续会补充pytest 用例及其例子。其他的测试场景需评估测试数据。但是只要不是有逻辑分支的(类似于如果条件A下一步B否则C),都可以用Excel

  1. Q:框架只能做API测试?

A:不是,目前UI(进行中),sql(进行中),websocket(进行中),还会支持kafka,linux等等

  1. Q:为什么用Excel

A:数据驱动的测试用Excel,业务功能为主的团队首选Excel

数据驱动举例:

YML和Excel都是常用的自动化测试的文件,一旦测试用例和测试数据达到一定规模, YML在维护和管理上表现就不如Excel好

方案 适用场景 优势 劣势 技术门槛 版本控制
Excel • 业务验收测试 • 业务友好,可视化编辑 • 版本控制困难
• 非技术人员维护 • 批量管理方便 • 依赖较重
• 中等数据量 • 组织结构化 • 类型安全性差
YAML • 技术团队自动化 • 版本控制友好 • 缩进敏感易错 优秀
• CI/CD集成 • 结构清晰 • 非技术人员学习成本
• 需要版本控制 • 注释支持 • 工具支持弱
  • 轻量快速  
JSON • API测试 • 通用性强 • 可读性差 优秀
• 前后端分离 • 解析性能好 • 无注释支持
• 系统间数据交换 • Web友好 • 编辑繁琐
SQL Database • 大规模测试数据 • 动态数据支持 • 环境依赖复杂 困难
• 动态数据生成 • 强大查询能力 • 维护成本高
• 多团队共享 • 数据一致性 • 版本管理复杂
  • 高性能  
代码硬编码 • 简单测试场景 • 开发简单直接 • 维护灾难 优秀
• 快速原型验证 • 无外部依赖 • 无法复用
• 固定测试数据 • 类型安全 • 业务逻辑混杂
  1. Q:之前已有自动化,需要转用现有框架吗?

A:不是必须,自动化目的是提效,如果之前写的测试用例在维护和测试方面都表现很好不需要迁移

  1. Q:子系统自动化是不是只用写auto-test-icc2?

A:不是,也需要整理business层,做业务抽取

  1. Q:后续devops整合后期望的执行流程

A:例子

上午8点:执行公共前置数据准备(各种配置,环境检查)

上午8点半:各个子系统用例执行

用例执行完触发:清理数据

  1. Q:Excel 中Json格式小技巧

A:https://www.bejson.com/

把参数copy 到上述在线格式校验工具中,验证对了再copy 到Excel中(一定要保证json格式是正确无误的)

请把参数那一列Excel单元格格式改为文本

  1. Q: pip install 报错No matching distribution found

ERROR: Could not find a version that satisfies the requirement playwright (from auto-test-framework-common) (from versions: none)

ERROR: No matching distribution found for playwright

A:安装python > 3.8+

  1. Q: API 参数是json格式的string

A: 双引号里面要用单引号, sample如下

{
"Content-Type": "application/json",
"x-zkj-header": "{'type':'web','tenant':'$demo.tenant','version':'v2','product':'zrtc','user':'@user.string:value'}"
 }
  1. Q: No module named 'src'

A:看看python解释器有没有配对, 进入虚拟环境, 安装依赖

# 创建虚拟环境 python -m venv .venv

激活虚拟环境

.venv\Scripts\activate

安装依赖

pip install -r requirements.txt

  1. Q: git 配置令牌

A:到git上生成token

  1. Q:saveAsVariable是什么?

A:是框架用来存返回结果的参数,如果期望返回结果到下一步使用, 要给返回值一个变量名。 Sample 如下, 红线部分会把响应结果存入这个response变量中,(saveAsVariable一般是必填的,否则框架给了默认的保存地址,下面步骤想取到你想获取的对应地址的结果就不对了。比如 api的response的默认保存地址是 api_response, 你在测试用例的参数里面没有指定特定的保存地址response,但是你下面的步骤中直接从@resonse.json:data里面取值,肯定是空值)

  1. Q:请求参数无名,要放data里

例子:

以下API的data参数为一个string的数值,不是json

接口文档说明为:

A: 请在header中加 "Content-Type":"text/plain",

  1. Q:Python版本一直不对,如果修改环境变量?

账户的环境变量可自行添加;系统的环境变量需授权,联系管家洋远程协助授权,修改系统环境变量,重新打开命令行工具检查版本。

  1. Q:环境管理,不同环境的yml

A: 后续会改为perf.yml, test1.yml

  1. Q:执行脚本之后的log优化

是否可以添加log记录当前组装之后的url请求以及request body具体内容?现在log显示出的url是带组装参数的,有时候无法确定组装的这个url是否是正确有效的,request body同理

A:会改进

  1. Q:如何将响应的部分字段作为变量传值给下一个请求?

A:可以使用将所需要字段存为变量,作为下一个请求的输入

context_manager = get_context_manager()
context_manager.set(save_as_variable, result_data)

例如:

response=self.ruleservice_api.send_request(params=data_for_rule_getStrategyByCode)
context_manager = get_context_manager()
context_manager.set("strategyCode_to_delete", response['data']['data'][0]['strategyCode'])
data_for_rule_getStrategyByCode=self.test_data["hook_before_ruleservice_api_rule_deleteStrategy"]
hook_before_ruleservice_api_rule_deleteStrategy:
  method: "post"
  API: "/strategy/deleteStrategy"
  header: |
    {
    "tenantId": "TE16801824195507778",
    "content-type": "application/json"
    }
  body: |
    {
      "tenantId": "TE16801824195507778",
      "strategyCode": "@strategyCode_to_delete.string:value",
      "updatedBy": "auto_test",
      "newValue": 1
    }
  1. Q: 使用pytest怎么使用进行数据校验?

A: 两种方法

方法一:独立判断

result=self.data_validator.validate_data(**self.test_data["validate_200"])
validate_200:
  {
    "field_name": "status_code",
    "actual_value": "@init_rule_param_response.json:data.code",
    "operator": "equal",
    "expect_value": "500"
  }

方法一:放在同一个数据对应的"params"下:

result = self.data_validator.validate_data(**self.test_data["hook_before_ruleservice_api_init_rule_param"])
hook_before_ruleservice_api_init_rule_param:
  method: "get"
  API: "/strategy/initData"
  header: |
    {
    tenantId:TE16801824195507778
    content-type:application/json
    }
  saveAsVariable: "init_rule_param_response"
  'params': |
    {
      "field_name": "status_code",
      "actual_value": "@init_rule_param_response.json:data.code",
      "operator": "equal",
      "expect_value": "500"
    }