51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4361|回复: 7
打印 上一主题 下一主题

[求助] 如何设计测试用例,验证存储过程中:数据处理的逻辑

[复制链接]
  • TA的每日心情
    开心
    2015-10-19 13:26
  • 签到天数: 2 天

    连续签到: 2 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2011-3-14 11:24:13 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
    我这次测试的项目是数据仓库的解决方案,验证的数据处理逻辑,基本上都是写在存储过程中的。
    如何设计测试用例来验证其处理逻辑是否正确?


    示例说明如下:求出过去3个月各有效商店销售的sku数目(先按商店求出每个商店销售的不同sku数目,再求和);求出过去3个月有销售sku的商店数目
    源表:
    init_store_scope存储有效的商店信息,包括store_id(为总店,分店及一般商店),banner_id(banner_id不为空,则store_id是分店)
    init_banner_outlet
    存储banner_id与store_id映射关系(init_store_scope中banner_id不为空时)
    fdt_indirect_shipment各store销售的商品信息,包括:store_id,product_id,shipment_su(+表示售出,-表示退货)
    mdt_product存储产品的层次信息,product_id上一层是product_l6_id(即sku)


    目标表:
    hlfdt_p3m_ld:store_number(不同的商店数据),sku_number(先求出各商店不同的sku数目,再求和)

    存储过程逻辑基本代码如下:
    1.提取各商店过去3个月销售的所有sku
    -------------------------------
    INSERT INTO init_p3m_ld
                   (yearmonth
                   ,country_id
                   ,organization_id
                   ,distributor_id
                   ,store_id
                   ,sku_id)
             SELECT DISTINCT p_yearmonth AS yearmonth
                   ,a.country_id
                   ,a.organization_id
                   ,a.distributor_id
                   ,a.store_id
                   ,b.product_l6_id AS sku_id
               FROM fdt_indirect_shipment a
                   ,mdt_product b
              WHERE a.product_id=b.product_id(+)
                AND a.shipment_su>0
                AND(a.shipment_yearmonth=v_last1_yearmonth
                 OR a.shipment_yearmonth=v_last2_yearmonth
                 OR a.shipment_yearmonth=v_last3_yearmonth)
    2.如果分店没有销售sku,则把总店销售的所有sku拷贝过来(只对country_id='156',其他国家不用)
    -------------------------------------------------------------
    MERGE INTO init_p3m_ld a
          USING (SELECT DISTINCT a.yearmonth
                          ,a.country_id
                          ,a.organization_id
                          ,a.distributor_id
                          ,b.outlet_id store_id
                          ,a.sku_id
                FROM init_p3m_ld a
                          ,init_banner_outlet b
            WHERE a.store_id=b.banner_id
              AND a.distributor_id=b.distributor_id
              AND a.country_id='156'
          ) b
          ON (a.store_id=b.store_id)
          WHEN NOT MATCHED THEN
      INSERT (a.yearmonth
          ,a.country_id
          ,a.organization_id
          ,a.distributor_id
          ,a.store_id
          ,a.sku_id)
         VALUES (b.yearmonth
          ,b.country_id
          ,b.organization_id
          ,b.distributor_id
          ,b.store_id
          ,b.sku_id)
    3.按商店分组,求每个商店不同的sku数目
    --------------------------------------
    INSERT INTO temp_p3m_ld
                   (yearmonth
                   ,country_id
                   ,distributor_id
                   ,store_id
                   ,sku_number)
             SELECT a.yearmonth
                   ,a.country_id
                   ,a.distributor_id               
                   ,a.store_id
                   ,COUNT(DISTINCT a.sku_id) AS sku_number
               FROM init_p3m_ld a
           GROUP BY a.yearmonth
                   ,a.country_id
             ,a.distributor_id
          ,a.store_id
    4.求SKU数目,求商店数目
    ------------------------------------
    INSERT INTO hlfdt_p3m_ld
                   (yearmonth
                   ,country_id
                   ,distributor_id
                   ,customer_id
                   ,store_number
                   ,sku_number)
             SELECT a.yearmonth
                   ,a.country_id
                   ,a.distributor_id               
                   ,b.customer_id
                   ,COUNT(DISTINCT a.store_id) AS store_number
                   ,SUM(a.sku_number) AS sku_number
               FROM temp_p3m_ld a
                   ,init_store_scope b
              WHERE a.distributor_id=b.distributor_id
                AND a.store_id=b.store_id
           GROUP BY a.yearmonth
                   ,a.country_id
                   ,a.distributor_id
                   ,b.customer_id
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    该用户从未签到

    8#
    发表于 2012-2-7 14:47:39 | 只看该作者
    这些都是白盒测试的东西吧?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7#
    发表于 2012-2-7 09:43:25 | 只看该作者
    呜呜,我都看不懂,学习学习!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-10-19 13:26
  • 签到天数: 2 天

    连续签到: 2 天

    [LV.1]测试小兵

    6#
     楼主| 发表于 2011-3-26 12:14:18 | 只看该作者
    多谢版主指导,不胜感激!~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5#
    发表于 2011-3-23 17:06:51 | 只看该作者
    回复 4# kavensyw


    呃,我理解错了,看到code,先入为主,就以为是单元测试呢....


    先画图,步骤1的图如下:

    然后可以参考白盒用例设计中的路径覆盖,此图不包含循环节点,很简单,肉眼也能看出7个用例组,当然,你可以可以套用公式计算:节点数*2-1

    1~4步一起画图太复杂,你下来自己画一个吧。如,继续画步骤2的图,可以在最后的Init_p3m_ld结束点继续向下画图,去判断
    WHERE a.store_id=b.banner_id
              AND a.distributor_id=b.distributor_id
              AND a.country_id='156'

    ——————————————————————
    总的来说,若不考虑数据合法性,可使用黑盒流程法或白盒路径法解决此类问题。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-10-19 13:26
  • 签到天数: 2 天

    连续签到: 2 天

    [LV.1]测试小兵

    4#
     楼主| 发表于 2011-3-18 16:32:47 | 只看该作者
    本帖最后由 kavensyw 于 2011-3-18 16:35 编辑

    多谢版主的指导。
    我主要就是要了解2.逻辑部分的验证方法。
    不是要一步步验证,而是要step1~step4集成起来一起验证。

    数据合法性,我是另外单独验证的。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3#
    发表于 2011-3-18 13:45:46 | 只看该作者
    回复 1# kavensyw

    哎,你这同学也真够偷懒的,你把下面的SQL换成中文描述,多方便的...非得贴这么几块.....

    1.数据部分,主要两部分:表间关系和数据合法性
    表间关系:如mdt_product表中的product_l6_id和product_id的继承。
    测试方法,将有关系的表列为一组,列举出测试元素状态,如product_l6_id这个元素就有有效值/无效值(空值)两个状态,然后组合就可以了(若你考虑进行整体测试,则把多组测试元素进行正交。若只考一组一组得测试,则只用组合就够了)

    数据合法性:
    基础合法性检查,即字符串定义的类型,长度等,用等价和边界搞定它们
    特殊合法性检查,主要指逻辑有效性,需结合后面的具体功能设计。如查询3月内的sku中,a.shipment_su>0,则需检查=0和<0的数据是否可能存在,若存在,则需标记出来,并在下一部分的用例设计中体现出来。

    上面的两部分测试可单独设计和执行,主要检查整个数据库的基础数据构建。
    ————————————————
    2.逻辑部分
    你这几个搜索流程都比较简单,记住以下几点即可:
    1).有比较符号<>=的,参考第1部分的分析结果
    2).有and语句的,分析出测试元素类型进行组合,必要时可正交
    3).有or语句的,直接测试每个or分支即可
    4).有if语句的,进行路径覆盖。(当然,你这几个逻辑里都没有)
    5).有select语句的,建议结合第1部分的用例用正交设计

    PS:至于from/insert语句,不用花精力去关注,在完成上面两部分后,这些内容已经被设计过了。



    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-10-19 13:26
  • 签到天数: 2 天

    连续签到: 2 天

    [LV.1]测试小兵

    2#
     楼主| 发表于 2011-3-14 12:16:50 | 只看该作者
    给出指导思想,用哪种用例设计方法即可
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-22 19:55 , Processed in 0.078820 second(s), 29 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表