测试积累

1.小数位向上取整问题

  场景描述:需求:项目车零件对应的“备货系数”值需保留两位小数,超过两位部分向上取值(例:导入为备货系数为“12.341”,导入后实际取值为“12.35”)

       缺陷现象:导入其他数值取值没有问题,当数值为“1.1”时,导入后实际数值为“1.11”,当数值为“1.3”时,导入后实际数值为“1.31”

       原因:开发使用String类型接收导入数据,转化为Double类型在做处理,因为Bouble精度导致

       解决方案:改为bigdecimal类型接收并处理

2.SQL拼接问题

  场景描述:需求:零件显示对应的配置(packaged)和选中方式(S/O/-)

      缺陷现象:列表零件配置较多时,后面配置选中方式未显示

      原因:SQL使用了GROUP_CONCAT函数,默认最大长度是1024,查询结果拼接数据超过该长度

      解决方案:修改数据库该字段长度

-- 查询使用SQL
SELECT t.* , ( SELECT GROUP_CONCAT( CONCAT( p.sub_package, '|', p.relation ) ) FROM tt_production_lou_package p WHERE t.lou_id = p.lou_id ORDER BY p.sub_package ) sub_package FROM tt_production_lou_bom t WHERE t.part_no in ( '11110019' ) AND ( (date_format(t.bp_estimate_production_to,'%Y-%m-%d %T') > date_format('1900-01-01T00:00:00.000+0800','%Y-%m-%d %T') AND date_format(t.bp_estimate_production_from,'%Y-%m-%d %T') <= date_format('9999-12-31T23:59:59.000+0800','%Y-%m-%d %T') ) or ( date_format(t.bp_estimate_production_from,'%Y-%m-%d %T') <= date_format('1900-01-01T00:00:00.000+0800','%Y-%m-%d %T') AND date_format(t.bp_estimate_production_to,'%Y-%m-%d %T') >date_format('1900-01-01T00:00:00.000+0800','%Y-%m-%d %T') ) or (date_format(t.bp_estimate_production_from,'%Y-%m-%d %T') <= date_format('9999-12-31T23:59:59.000+0800','%Y-%m-%d %T') AND date_format(t.bp_estimate_production_to,'%Y-%m-%d %T') >date_format('9999-12-31T23:59:59.000+0800','%Y-%m-%d %T') ) ) order by t.lou_id,t.mbom_id asc LIMIT 10;

-- 查询group_concat函数的最大存储位数
show variables like 'group_concat_max_len';

 3.数字大小对比

  场景描述:需求:排程设置的 车型组批数 >= 最小组批数

      缺陷现象:车型组批数为“12”.最小组批数为“2”,校验不通过

      原因:两个字段对比时,采用了字符串的大小对应,对比第一位数的时候2>1,所以校验失败

      解决方案:将两个字段转化为数字后在进行大小对比

 4.数据库读写分离

  场景描述:需求:从上游系统接收车型配置信息,写入接口表,并把接口表数据根据唯一唯一KEY值写入业务表

      缺陷现象:上游系统唯一KEY数据值为810条,实际写入接口表数量为810条,但写入业务表仅800条,且在其他环境更大数据量时未出现该场景

      原因:该环境数据库进行了读写分离,故写入和读数据时间有毫米级时差。在写入接口表程序执行完成时即调用程序执行写入业务表,但此时接口表数据数据未完全提交,没有读到最后10条数据

      解决方案:关闭读写分离,使用同一数据库

 5.缓存问题

  场景描述:需求:根据VC+打散日期,基于BOM基础数据,打散出对应的BOM数据(所有子件数据)

      缺陷现象:同样的VC+打散日期在SIT环境打散出的结果是正确的,在生产某个头零件对应的子零件都缺失

      原因:程序防止重复获取数据,查询时BOM数据会写入缓存,缺失的零件对应的头零件存在两条数据(一条生效,一条失效),生产环境优先查询了在打散日期不生效的零件,该零件数据写入缓存,打散时,该零件有效期不生效,故打散不出对应的子件,测试环境没有查询,首次打散就使用的打散时间,缓存中写入的是生效的头零件

      解决方案:打散时,把对头零件有效期的校验去除(能出现头零件时,则证明该零件能打散出来,无需再判断零件有效期,只需要判断子件的有效期即可)

 

 

 

 

 

 

 

posted @ 2023-03-10 10:42  *球球*  阅读(8)  评论(0编辑  收藏  举报