petiokasmetio/iso20022-camt053-test-data-generator
GitHub: petiokasmetio/iso20022-camt053-test-data-generator
这是一个Java工具,用于自动生成ISO 20022 camt.053 XML测试数据,解决银行测试中手动准备数据繁琐的问题。
Stars: 0 | Forks: 0
# ISO 20022 camt.053 测试数据生成器
一个用于生成合成 camt.053 风格 XML 账户对账单测试数据的 Java 控制台应用程序。
本项目展示了 QA 工程师如何利用自动化技术,为账户对账单、交易和余额验证场景生成可重复的银行测试数据。
## 免责声明
这是一个仅使用合成数据的作品集/演示项目。
它不包含真实客户数据、真实银行数据、真实账户数据、生产标识符、内部项目信息或机密客户信息。
生成的 XML 文件仅用于 QA 练习、学习、演示和作品集目的。
## 概述
该应用程序通过控制台输入生成一个 `camt.053.001.02` 风格的 XML 文件。
用户可以配置账户对账单信息,例如:
- 消息接收方
- 账户持有人
- 银行/服务提供方详细信息
- 分支机构详细信息
- 开始时的已记账余额
- 交易条目
- 贷方/借方指示符
- 记账日和起息日
- 汇款信息
然后,该工具构建一个包含账户对账单数据的 XML 文档,并自动计算结束时的已记账余额。
## 工具存在的原因
在银行和金融软件测试中,手动准备基于 XML 的账户对账单测试数据可能既缓慢、重复又容易出错。
本工具展示了一种自动生成结构化银行测试数据的简单方法,使测试场景更具可重复性且更易准备。
典型的 QA 用例包括:
- 回归测试
- 银行工作流验证
- 账户对账单场景准备
- 交易和余额测试
- 基于 XML 的测试数据生成
- 金融业务规则验证
## 主要功能
- 生成 camt.053 风格的 XML 账户对账单文件
- 创建 `BkToCstmrStmt` XML 结构
- 生成 `GrpHdr`、`Stmt`、`Acct`、`Bal` 和 `Ntry` 部分
- 支持多个交易条目
- 支持 `CRDT` 和 `DBIT` 交易类型
- 在用户定义的范围内随机化交易金额
- 自动计算结束时的已记账余额
- 生成消息 ID、对账单 ID 和电子序列号
- 生成账户服务提供方参考号
- 使用 `BigDecimal` 进行金融金额计算
- 默认使用合成的演示值
- 无需外部库
## 使用技术
- Java
- Java XML DOM API
- BigDecimal
- 控制台输入处理
- ISO 20022 camt.053 风格的 XML 结构
## 余额计算逻辑
应用程序会询问开始时的已记账余额及其贷方/借方指示符。
生成的每个交易条目可以是以下之一:
- `CRDT` - 贷方交易
- `DBIT` - 借方交易
结束时的已记账余额使用以下逻辑计算:
```
Closing Balance = Opening Balance + Credit Entries - Debit Entries
```
如果最终余额为正或零,则结束时的余额指示符设置为:
```
CRDT
```
如果最终余额为负,则结束时的余额指示符设置为:
```
DBIT
```
计算出的余额的绝对值被写为结束时的余额金额。
## 生成的 XML 结构
生成的 XML 包含以下高层结构:
```
Document
└── BkToCstmrStmt
├── GrpHdr
│ ├── MsgId
│ ├── CreDtTm
│ ├── MsgRcpt
│ └── MsgPgntn
└── Stmt
├── Id
├── ElctrncSeqNb
├── CreDtTm
├── FrToDt
├── Acct
├── Bal - OPBD
├── Bal - CLBD
└── Ntry
└── NtryDtls
└── TxDtls
```
## 生成的示例部分
生成的 XML 包括:
- 组头数据
- 对账单元数据
- 账户信息
- 账户持有人信息
- 金融机构/服务提供方信息
- 分支机构信息
- 开始时的已记账余额
- 计算出的结束时的已记账余额
- 交易条目
- 债务人信息
- 债务人账户信息
- 汇款信息
## 如何编译
在项目文件夹中,运行:
```
javac -encoding UTF-8 Camt053Generator.java
```
## 如何运行
```
java -cp . Camt053Generator
```
应用程序将开始通过控制台请求输入值。
示例:
```
=== CAMT.053.001.02 XML Generator (Java) ===
Output filename (example: statement.xml) [default: camt053_generated.xml]:
Timezone offset (example: +02:00) [default: +02:00]:
Creation date for message/statement (YYYY-MM-DD):
```
## 示例输入流程
用户可以定义:
```
Output filename
Timezone offset
Creation date
Recipient name
Customer ID
Statement date range
Account ID
Owner details
Servicer/bank details
Branch details
Opening balance
Transaction amount range
Number of transaction entries
CRDT/DBIT indicator per entry
Booking date
Value date
Transaction code values
Debtor information
Remittance information
```
## 演示数据
项目使用合成的演示值,例如:
```
Demo Recipient Ltd
DEMO-CUSTOMER-001
Demo Account Owner Ltd
Demo Bank Ltd
Demo Bank Branch
Demo Debtor Ltd
DEMO SEPA TEST PAYMENT
DEMO TRANSACTION INFO
```
这些值是占位符,与真实客户、银行、账户或生产系统无关。
## 示例用例
一位 QA 工程师需要测试银行系统的账户对账单处理。
工程师无需手动准备 XML 测试数据,而是可以使用此工具生成具有可配置余额和交易条目的账户对账单 XML 文件。
生成的输出随后可用作回归测试、集成测试或业务规则验证的测试数据。
## 当前项目状态
当前版本:
- 单文件 Java 控制台应用程序
- 合成的演示数据
- 通过 Java DOM API 生成 XML
- 可配置的控制台提示
- 多个交易条目
- 贷方/借方处理
- 自动结束余额计算
## 局限性
这是一个演示/作品集版本。
当前局限性:
- 尚无 Maven/Gradle 项目结构
- 尚无单元测试
- 尚不支持外部配置文件
- 尚无 XML 模式验证
- 尚未提交示例 XML 文件
- 尚无 CI/CD 管道
## 潜在未来改进
可能的后续改进:
- 添加 Maven 项目结构
- 为余额计算添加单元测试
- 添加 XML 模式验证
- 添加 JSON 或 YAML 输入配置
- 添加示例输入文件
- 添加示例生成的 XML 文件
- 添加 GitHub Actions 构建管道
- 添加负面测试数据生成
- 添加对其他 camt 消息变体的支持
- 添加命令行参数代替交互式提示
## 展示的技能
本项目展示了:
- Java 编程
- XML 生成
- 测试数据自动化
- 金融计算逻辑
- 银行领域知识
- QA 自动化思维
- 结构化测试数据准备
- 处理贷方/借方交易场景
- 用于测试目的的合成数据生成
## 作者
Petar Nikolov
测试自动化工程分析师,拥有 ERP 和银行系统、Java/Python 自动化、QA 工具、XML 测试数据生成以及关键业务软件测试方面的经验。
标签:camt.053, ISO 20022, Java控制台应用, JS文件枚举, QA工具, XML生成, 交易数据, 余额计算, 合成数据, 回归测试, 域名枚举, 数据验证, 测试自动化, 账户对账单, 软件测试工具, 金融数据生成, 金融科技, 银行测试