1. 首页 > Oracle教程 > 正文

Oracle教程FG197-测试数据管理

本教程详细介绍Oracle数据库的测试数据管理技术,包括测试数据的生成、管理、维护和最佳实践。风哥教程参考Oracle官方文档Security部分,旨在帮助数据库管理员和开发人员创建和管理高质量的测试数据,提高测试效率和质量。

内容大纲

Part01-基础概念与理论知识

1.1 测试数据管理概述

测试数据管理是指为软件开发和测试过程提供高质量、符合业务场景的测试数据的过程。测试数据管理的主要目标是:

  • 提供真实、代表性的测试数据
  • 确保测试数据的一致性和完整性
  • 保护敏感数据
  • 提高测试效率和质量
  • 支持自动化测试

1.2 测试数据类型

常见的测试数据类型包括:

  • 基础测试数据:用于基本功能测试
  • 边界测试数据:用于测试边界条件
  • 异常测试数据:用于测试异常处理
  • 性能测试数据:用于性能测试
  • 安全测试数据:用于安全测试
  • 回归测试数据:用于回归测试

Part02-生产环境规划与建议

2.1 测试数据管理策略制定

制定测试数据管理策略时,需要考虑以下因素:

  • 测试数据的来源和获取方式
  • 测试数据的生成方法
  • 测试数据的存储和管理
  • 测试数据的更新和维护
  • 测试数据的安全性和隐私保护
  • 测试数据的版本控制

2.2 测试数据生成方法

常见的测试数据生成方法包括:

  • 从生产数据复制并脱敏
  • 使用随机数据生成工具
  • 使用模板数据
  • 使用合成数据生成器
  • 手动创建测试数据

Part03-生产环境项目实施方案

3.1 使用Oracle数据泵生成测试数据

使用数据泵导出生产数据并进行脱敏:

# 创建数据泵导出参数文件
$ cat expdp_test_data.par

DIRECTORY=DATA_PUMP_DIR
DUMPFILE=fgedu_test_data.dmp
LOGFILE=expdp_test_data.log
SCHEMAS=FGEDU
TABLES=FGEDU.CUSTOMERS,FGEDU.ORDERS
QUERY=FGEDU.CUSTOMERS:”WHERE ROWNUM <= 500" QUERY=FGEDU.ORDERS:"WHERE CUSTOMER_ID IN (SELECT ID FROM FGEDU.CUSTOMERS WHERE ROWNUM <= 500)"

# 执行数据泵导出
$ expdp system/password@fgedudb parfile=expdp_test_data.par

Export: Release 19.0.0.0.0 – Production on Wed Mar 31 10:00:00 2026
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Starting “SYSTEM”.”SYS_EXPORT_SCHEMA_01″: system/********@fgedudb parfile=expdp_test_data.par
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . exported “FGEDU”.”CUSTOMERS” 50.0 KB 500 rows
. . exported “FGEDU”.”ORDERS” 25.0 KB 250 rows
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Master table “SYSTEM”.”SYS_EXPORT_SCHEMA_01″ successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_SCHEMA_01 is:
/oracle/admin/fgedudb/dpdump/fgedu_test_data.dmp
Job “SYSTEM”.”SYS_EXPORT_SCHEMA_01″ successfully completed at Wed Mar 31 10:05:00 2026 elapsed 0 00:05:00

# 导入到测试环境并应用脱敏
$ impdp system/password@testdb directory=DATA_PUMP_DIR dumpfile=fgedu_test_data.dmp logfile=impdp_test_data.log transform=mask:y

Import: Release 19.0.0.0.0 – Production on Wed Mar 31 10:10:00 2026
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Master table “SYSTEM”.”SYS_IMPORT_FULL_01″ successfully loaded/unloaded
Starting “SYSTEM”.”SYS_IMPORT_FULL_01″: system/********@testdb directory=DATA_PUMP_DIR dumpfile=fgedu_test_data.dmp logfile=impdp_test_data.log transform=mask:y
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . imported “FGEDU”.”CUSTOMERS” 50.0 KB 500 rows
. . imported “FGEDU”.”ORDERS” 25.0 KB 250 rows
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Job “SYSTEM”.”SYS_IMPORT_FULL_01″ successfully completed at Wed Mar 31 10:15:00 2026 elapsed 0 00:05:00

3.2 使用PL/SQL生成测试数据

使用PL/SQL脚本生成测试数据:

SQL> — 创建测试表
SQL> CREATE TABLE FGEDU.TEST_CUSTOMERS (
2 ID NUMBER PRIMARY KEY,
3 NAME VARCHAR2(100),
4 EMAIL VARCHAR2(100),
5 PHONE VARCHAR2(20),
6 REG_DATE DATE
7 );

Table created.

SQL> — 创建序列
SQL> CREATE SEQUENCE FGEDU.TEST_CUSTOMERS_SEQ START WITH 1 INCREMENT BY 1;

Sequence created.

SQL> — 创建生成测试数据的存储过程
SQL> CREATE OR REPLACE PROCEDURE FGEDU.GENERATE_TEST_DATA (p_count NUMBER) IS
2 BEGIN
3 FOR i IN 1..p_count LOOP
4 INSERT INTO FGEDU.TEST_CUSTOMERS (
5 ID,
6 NAME,
7 EMAIL,
8 PHONE,
9 REG_DATE
10 ) VALUES (
11 FGEDU.TEST_CUSTOMERS_SEQ.NEXTVAL,
12 ‘测试用户’ || i,
13 ‘test’ || i || ‘@fgedu.net.cn’,
14 ‘138’ || LPAD(i, 8, ‘0’),
15 SYSDATE – MOD(i, 365)
16 );17 END LOOP;18 COMMIT;19 END;20 /

Procedure created.

SQL> — 生成1000条测试数据
SQL> EXEC FGEDU.GENERATE_TEST_DATA(1000);

PL/SQL procedure successfully completed.

SQL> — 验证测试数据
SQL> SELECT COUNT(*) FROM FGEDU.TEST_CUSTOMERS;

COUNT(*)
———-
1000

SQL> — 查看测试数据示例
SQL> SELECT * FROM FGEDU.TEST_CUSTOMERS WHERE ROWNUM <= 5;

ID NAME EMAIL PHONE REG_DATE
———- ———- ——————– ———— ———
1 测试用户1 fgtest1@fgedu.net.cn 13800000001 2026-03-31
2 测试用户2 fgtest2@fgedu.net.cn 13800000002 2026-03-30
3 测试用户3 fgtest3@fgedu.net.cn 13800000003 2026-03-29
4 测试用户4 test4@fgedu.net.cn 13800000004 2026-03-28
5 测试用户5 test5@fgedu.net.cn 13800000005 2026-03-27

Part04-生产案例与实战讲解

4.1 性能测试数据生成

生成大量测试数据用于性能测试:

SQL> — 创建大表用于性能测试
SQL> CREATE TABLE FGEDU.PERFORMANCE_TEST (
2 ID NUMBER PRIMARY KEY,
3 COL1 VARCHAR2(100),
4 COL2 NUMBER,
5 COL3 DATE,
6 COL4 VARCHAR2(200),
7 COL5 CLOB
8 );

Table created.

SQL> — 创建序列
SQL> CREATE SEQUENCE FGEDU.PERFORMANCE_TEST_SEQ START WITH 1 INCREMENT BY 1;

Sequence created.

SQL> — 启用并行DML
SQL> ALTER SESSION ENABLE PARALLEL DML;

Session altered.

SQL> — 生成100万条测试数据
SQL> INSERT /*+ PARALLEL(8) */ INTO FGEDU.PERFORMANCE_TEST (
2 ID,
3 COL1,
4 COL2,
5 COL3,
6 COL4,
7 COL5
8 )
9 SELECT
10 FGEDU.PERFORMANCE_TEST_SEQ.NEXTVAL,
11 ‘Test data ‘ || LEVEL,
12 LEVEL,
13 SYSDATE – MOD(LEVEL, 365),
14 ‘This is a test string for column 4. ‘ || LEVEL,
15 ‘This is a test CLOB value for performance testing. ‘ || LEVEL
16 FROM DUAL
17 CONNECT BY LEVEL <= 1000000;

1000000 rows created.

SQL> COMMIT;
Commit complete.

SQL> — 收集统计信息
SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS(‘FGEDU’, ‘PERFORMANCE_TEST’);

PL/SQL procedure successfully completed.

4.2 测试数据管理自动化

创建测试数据管理脚本:

# 创建测试数据管理脚本
$ cat test_data_manager.sh

#!/bin/bash
# test_data_manager.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn

# 配置参数
SOURCE_DB=”fgedudb”
TARGET_DB=”testdb”
SCHEMA=”FGEDU”
DATA_PUMP_DIR=”DATA_PUMP_DIR”

# 导出测试数据
export_test_data() {
echo “导出测试数据…”
expdp system/password@$SOURCE_DB \
DIRECTORY=$DATA_PUMP_DIR \
DUMPFILE=${SCHEMA}_test_data.dmp \
LOGFILE=expdp_test_data.log \
SCHEMAS=$SCHEMA \
TABLES=${SCHEMA}.CUSTOMERS,${SCHEMA}.ORDERS \
QUERY=${SCHEMA}.CUSTOMERS:”WHERE ROWNUM <= 1000" \ QUERY=${SCHEMA}.ORDERS:"WHERE CUSTOMER_ID IN (SELECT ID FROM ${SCHEMA}.CUSTOMERS WHERE ROWNUM <= 1000)" } # 导入测试数据 import_test_data() { echo "导入测试数据..." impdp system/password@$TARGET_DB \ DIRECTORY=$DATA_PUMP_DIR \ DUMPFILE=${SCHEMA}_test_data.dmp \ LOGFILE=impdp_test_data.log \ transform=mask:y } # 生成随机测试数据 generate_random_data() { echo "生成随机测试数据..." sqlplus system/password@$TARGET_DB << EOF BEGIN FOR i IN 1..500 LOOP INSERT INTO ${SCHEMA}.TEST_DATA ( ID, NAME, VALUE, CREATED_DATE ) VALUES ( ${SCHEMA}.TEST_DATA_SEQ.NEXTVAL, 'Random Data ' || i, DBMS_RANDOM.VALUE(1, 1000), SYSDATE );END LOOP;COMMIT;END;/EOF } # 清理测试数据 cleanup_test_data() { echo "清理测试数据..." sqlplus system/password@$TARGET_DB << EOF TRUNCATE TABLE ${SCHEMA}.TEST_DATA;TRUNCATE TABLE ${SCHEMA}.CUSTOMERS;TRUNCATE TABLE ${SCHEMA}.ORDERS;EOF } # 主菜单 while true; do echo "" echo "测试数据管理工具" echo "1. 导出测试数据" echo "2. 导入测试数据" echo "3. 生成随机测试数据" echo "4. 清理测试数据" echo "5. 退出" echo "" read -p "请选择操作: " choice case $choice in 1) export_test_data ;;2) import_test_data ;;3) generate_random_data ;;4) cleanup_test_data ;;5) echo "退出工具" exit 0 ;;*) echo "无效选择,请重新输入" ;;esac done

# 赋予执行权限
$ chmod +x test_data_manager.sh

# 运行测试数据管理工具
$ ./test_data_manager.sh

测试数据管理工具
1. 导出测试数据
2. 导入测试数据
3. 生成随机测试数据
4. 清理测试数据
5. 退出

请选择操作: 1
导出测试数据…
Export: Release 19.0.0.0.0 – Production on Wed Mar 31 10:00:00 2026
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Starting “SYSTEM”.”SYS_EXPORT_SCHEMA_01″: system/********@fgedudb DIRECTORY=DATA_PUMP_DIR DUMPFILE=FGEDU_test_data.dmp LOGFILE=expdp_test_data.log SCHEMAS=FGEDU TABLES=FGEDU.CUSTOMERS,FGEDU.ORDERS QUERY=FGEDU.CUSTOMERS:”WHERE ROWNUM <= 1000" QUERY=FGEDU.ORDERS:"WHERE CUSTOMER_ID IN (SELECT ID FROM FGEDU.CUSTOMERS WHERE ROWNUM <= 1000)" Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA . . exported "FGEDU"."CUSTOMERS" 100.0 KB 1000 rows . . exported "FGEDU"."ORDERS" 50.0 KB 500 rows Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS Master table "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded ****************************************************************************** Dump file set for SYSTEM.SYS_EXPORT_SCHEMA_01 is: /oracle/admin/fgedudb/dpdump/FGEDU_test_data.dmp Job "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully completed at Wed Mar 31 10:05:00 2026 elapsed 0 00:05:00

Part05-风哥经验总结与分享

5.1 测试数据管理最佳实践

  • 建立测试数据管理的标准流程
  • 使用自动化工具生成和管理测试数据
  • 确保测试数据的质量和代表性
  • 保护敏感数据,使用数据脱敏技术
  • 定期更新测试数据,确保与生产环境同步
  • 使用版本控制管理测试数据
  • 为不同类型的测试创建专门的测试数据集
  • 监控测试数据的使用情况,优化存储和性能

5.2 常见测试数据管理问题与解决方案

问题1:测试数据不足或不代表性

解决方案:使用多种方法生成测试数据,确保覆盖各种业务场景和边界条件。

问题2:测试数据管理效率低下

解决方案:自动化测试数据生成和管理过程,减少手动操作。

问题3:敏感数据泄露

解决方案:使用数据脱敏技术,确保测试数据中的敏感信息得到保护。

问题4:测试数据与生产环境不同步

解决方案:定期从生产环境更新测试数据,确保测试环境能够反映生产环境的最新状态。

更多视频教程www.fgedu.net.cn

学习交流加群风哥微信: itpux-com

学习交流加群风哥QQ113257174

风哥提示:测试数据管理是提高测试效率和质量的关键,需要建立标准化的流程和工具。

更多学习教程公众号风哥教程itpux_com

from oracle:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息