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

推荐订阅源

宝玉的分享
宝玉的分享
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的处理 自动化平台质量体系建设(草稿) 【模板】邮件提测模板 研发测试质量规范(草稿) 自动化框架 - Q&A 自动化框架 - 核心模块使用指南 - Kafka 自动化框架 - 核心模块使用指南 - Kibana 自动化框架 - 核心模块使用指南 - Playwright 自动化框架 - 核心模块使用指南 - API 自动化框架 - 核心功能使用指南 - 动态值生成 自动化框架 - 核心功能使用指南 - 数据处理模块 自动化框架 - 核心功能使用指南 - 数据校验模块 自动化框架 - 核心功能使用指南 - 上下文值传递 自动化框架 - 核心功能使用指南 - 用例过滤Tag使用 自动化框架 - 核心功能使用指南 - 配置文件使用指南 自动化框架使用说明 - 快速开始 Kibana如何添加可视化看板
自动化框架 - 核心功能使用指南 - Excel测试用例编写
小海海宁宁 · 2026-03-09 · via 博客园 - 小海海宁宁
  1. 总体说明

自动化测试项目 auto-test-icc2 中支持使用 Excel 文件管理测试用例和测试数据,通过代码实现测试逻辑,从而实现高效的自动化测试。

以下是项目的关键特点:

  • Excel 驱动测试用例:每个 Excel 文件代表一个测试套件(Case Suite),包含一批测试用例和测试数据。
  • 结构化设计:每个 Excel 文件必须遵循以下结构规则:

    • 测试用例:只能有一个名为 测试用例 的工作表,用于存放具体的测试步骤和验证逻辑。
    • 测试数据:可以包含多个测试数据工作表,名称可以自定义,但不能命名为 **测试用例**。
  1. 测试用例结构

在自动化测试项目auto-test-icc2 中,tests 目录是存放所有测试相关文件的核心目录。为了保持项目结构的清晰和可维护性,按照一定的规范来组织 tests 目录及其子目录的内容。目录excelcases下存放excel测试用例

以下是分层结构和命名规范的详细说明:

tests/
├── excelcases/          # Excel 驱动的测试用例
│   ├── administrator/   # 管理员相关的测试用例
│   │   ├── test_admin_dz_tenant.xlsx   # 租户管理相关测试用例
│   │   └── test_admin_dz_employee.xlsx  # 员工管理相关测试用例
│   ├── CTI/             # CTI 相关的测试用例
│   │   ├── test_XXX_resource.xlsx       # 资源管理相关测试用例
│   │   └── test_XXX_management.xlsx     # 管理相关测试用例
│   └── ...                          # 其他子系统测试用例
├── pytestcases/        # Pytest 测试用例
│   ├── administrator/  # 管理员相关的测试用例
│   │   ├── test_service_admin.py       # 管理服务相关测试用例
│   │   └── test_service_risk.py        # 风险服务相关测试用例
│   ├── CTI/            # CTI 相关的测试用例
│   │   ├── test_service_control.py     # 控制服务相关测试用例
│   │   └── test_service_management.py  # 管理服务相关测试用例
│   └── ...                          # 其他子系统测试用例
└── test_*.py           # 单独的测试文件,可选
  1. Excel文件结构

  1. 子目录命名

按子系统或模块划分:子目录的命名应反映测试用例所属的子系统或模块。例如:

  • Administrator:管理员相关功能。
  • CTI:CTI(呼叫中心)相关功能。
  • OAH:OAH相关功能。

说明:

  • 命名应尽量简洁、清晰,避免冗长。
  • 在同一个子目录下可以有多个Excel
  1. Excel 文件命名

格式:test_<功能模块>_<测试场景>.xlsx

<功能模块>:测试用例所属的功能模块或子系统。

<测试场景>:具体的测试场景或功能点。

示例:

test_admin_dz_tenant_media.xlsx:管理员 - 得助-租户-媒体管理相关测试用例。

test_admin_dz_employee_management.xlsx:管理员 - 得助-员工-管理相关测试用例。

test_oah_api_tenant_edit.xlsx:OAH - 租户api-编辑相关测试用例。

  1. 测试用例编写

  1. 测试用例编写

  1. 字段定义

1

字段名

含义

说明

2

用例唯一标识

可以从灵风系统用例编号,同一用例的多个步骤共用同一个 ID,仅第一步填写

3

LFCaseID

灵风系统用例编号

用于与灵风系统中的用例进行关联,确保唯一性。 如果没有, 可不填

4

ScenarioDescription

场景描述

描述测试用例的业务场景或功能点,便于理解用例目的

5

步骤序号

用于控制执行顺序

6

Description

步骤描述

描述当前步骤的具体操作或验证内容

7

模块类型

如 api、ui、kafka、db、linux 等,或者业务层模块oahapi,seatUI,可从 测试数据表覆盖

5

操作名称

模块中执行的操作(如 send_request、click、query)

9

标签

仅在第一步填写,用于筛选执行(如 SmokeTest, RegressionTest)

10

参数集标识

对应测试数据表中的参数组集合

11

参数

如果Action只有一个参数,可以直接配置在Params中。和ParamsSetID 二选一

12

Priority

优先级

用于标识测试用例的重要程度,如 P0、P1、P2 等

  1. 例子

测试用例表,文件名可自定义。

示例表名为TestCase:

1

TestCaseID

LFCaseID

ScenarioDescription

Step

Description

Module

Action

Tag

Params

ParamsSetID

Priority

2

TC_OAH_API_Tenant_Base_Config_Edit

API_编辑租户基础配置

1

设置变量

data_process

data_process

regression, api,oah

oah_body

p1

3

2

get sign

oah_api

generate_sign

oah_sign

4

3

basicConfig edit

oah_api

send_request

oah_request

p1

5

4

validate 200

value_validation

validate_data

{ "field_name": "status_code", "actual_value": "@response.json:data.code", "operator": "equal", "expect_value": "200" }

6

5

validate msg

value_validation

validate_data

{ "field_name": "msg", "actual_value": "@response.json:data.msg", "operator": "equal", "expect_value": "操作成功" }

🔸说明:

  • TestCaseID 与 Tag 仅在第一个 Step 填写:每个测试用例的 TestCaseIDTag 只在第一个步骤中填写,后续步骤不需要重复填写。
  • Module、Action 将由框架提供,需要使用框架使用手册中提供的模块和功能
  • 若测试数据表中定义了 Module、Action,则覆盖测试用例表中对应字段。(后续补充例子)
  • 不同 Step 使用不同的 ParamsSetID,以便更好地管理和区分不同的参数集。
  • 不同测试用例的 TestCaseID不同,不同参数的的ParamsSetID 不同。
  1. 测试数据编写

  1. 测试数据编写

  1. 字段定义

1

 

2

参数集标识

与测试用例表中的ParamsSetID 对应

3

参数编号

用于区分同组参数

4

参数名

例如 body、url、params

5

参数值

可支持动态变量、上下文变量引用

6

数据分组

用于多组数据驱动

7

关联的测试用例ID

用于跨表映射

说明:

• TestCaseID 与 测试用例中的ID对应

   • 如果调用框架提供的方法,参数名请正确使用框架提供的参数名

   • DataGroup 相同表示同一组测试数据

   • ParamID 如果为M1,表示该参数是一个模块名, 将于yml 文件中的模块名对应。如果为A1,表示该参数是一个方法名,将使用框架提供的模块中实现的方法。如果为PX,表示该参数是模块中提供的方法需要的参数。

   • ParamsSetID 相同的参数是测试数据中同一个step的参数

  1. 例子

测试用例表,文件名可自定义。

case1 示例(有 2 组 DataGroup,即同一个测试用例有两组测试数据)

oah_body

P1

params

{ "operation": "set_variable", "params": { "tenantId": "TE17831554453625869", "explicitIvrStatus": "false", "explicitIvrMode": 1, "encryptionType": 3, "secretKey": "123456", "cipherPrefix": "enc1_", "initializationVector": "789123" }, "saveAsVariable": "body" }

1

TC_OAH_API_Tenant_Base_Config_Edit

oah_sign

P1

body

@body.string:value

1

TC_OAH_API_Tenant_Base_Config_Edit

oah_sign

P2

saveAsVariable

sign

1

TC_OAH_API_Tenant_Base_Config_Edit

oah_request

P1

API

/au/api/ops/oah/tenant/info/basicConfig/edit

1

TC_OAH_API_Tenant_Base_Config_Edit

oah_request

P2

method

POST

1

TC_OAH_API_Tenant_Base_Config_Edit

oah_request

P3

body

@body.string:value

1

TC_OAH_API_Tenant_Base_Config_Edit

oah_request

P4

header

{ "Content-Type": "application/json", "oah-app-id": "DZ-Tr9ilnE8", "oah-sign": "@sign.string:value", "oah-sign-type": "ASK", "oah-timestamp": "1761113092294" }

1

TC_OAH_API_Tenant_Base_Config_Edit

oah_request

P5

saveAsVariable

response

1

TC_OAH_API_Tenant_Base_Config_Edit

oah_body

P1

params

{ "operation": "set_variable", "params": { "tenantId": "TE14327467543869", "explicitIvrStatus": "false", "explicitIvrMode": 1, "encryptionType": 3, "secretKey": "43246", "cipherPrefix": "enc1_", "initializationVector": "43255" }, "saveAsVariable": "body" }

2

TC_OAH_API_Tenant_Base_Config_Edit

oah_sign

P1

body

@body.string:value

2

TC_OAH_API_Tenant_Base_Config_Edit

oah_sign

P2

saveAsVariable

sign

2

TC_OAH_API_Tenant_Base_Config_Edit

oah_request

P1

API

/au/api/ops/oah/tenant/info/basicConfig/edit

2

TC_OAH_API_Tenant_Base_Config_Edit

oah_request

P2

method

POST

2

TC_OAH_API_Tenant_Base_Config_Edit

oah_request

P3

body

@body.string:value

2

TC_OAH_API_Tenant_Base_Config_Edit

oah_request

P4

header

{ "Content-Type": "application/json", "oah-app-id": "fsafdjksf", "oah-sign": "@sign.string:value", "oah-sign-type": "ASK", "oah-timestamp": "43244" }

2

TC_OAH_API_Tenant_Base_Config_Edit

oah_request

P5

saveAsVariable

response

2

TC_OAH_API_Tenant_Base_Config_Edit