木匠的微型博客 Charlie Twitter

    follow me on Twitter
    Showing posts with label test. Show all posts
    Showing posts with label test. Show all posts

    Tuesday, January 13, 2009

    Why to generate test data and how. 为什么要生成测试数据?如何做?

    在学会生成测试数据之前,我仅仅知道select * from scott.emp;
    加上
    create table t(a number);
    insert t values(1);
    这就是我知道的所谓测试,幼稚吧.

    为啥需要测试数据呢?
    情况太多了,我的经验是,等到你需要的时候,就是找不到,干着急.

    测试数据可以用来把灵感转化为实践,验证原型是否工作(可用性,可靠性,可扩展性),性能测试,提问题和重现问题 等等. 随后有一篇介绍我是如何用完善的测试数据发现了使用MERGE SQL产生的臭虫.
    还支持TDD, 测试驱动开发, 用过以后你就知道甜头了, 和异步处理一样美妙!

    关于提问题, 引自Tom: You would better supply very very simple create tables and insert statements.
    The SMALLEST create table possible (no tablespaces, no schema names, just like I do in my examples for you)

    解决方案.
    --------

    *) 产生多个不同数值, 得到一定的数据分布

    Mod(rownum,500)
    dbms_random.value(1,500)
    dbms_random.normal()

    *) 产生字符串

    rpad('x',500,'x')
    lpad(RowNum,200,'*')
    dbms_random.string('l',500)
    # 'u', 'U' - returning string in uppercase alpha characters
    # 'l', 'L' - returning string in lowercase alpha characters
    # 'p': any printable char. this one is slow

    *) 数据源

    # dual connect by level <= 3000 # all_objects # WITH subquery factor *) 随机排序 ORDER BY dbms_random.random; *) 点击进入具体示例

    *) 参考
    1. Tom, from dba_object
    2. Jonathan, + materialize subquery
    3. Christian Antognini, dbms_random.string()
    4. Tanel, dual join dual connect by level <= 3000
    维多利亚市的天鹅湖, 湖对岸右边一点是Hatley Castle城堡, 电影X-Man(X战警)三部都是在这里拍摄的.