测试给我提了个BUG,我发现是开源框架产生的

公司有个财务管理的项目,我负责核心的计算模块。

因为财务管理有很多公式,不仅仅是加减乘除,所以引用了很多数学公式。如MAX,MIN,IF,AND,OR,ROUND等等。

例如:

#平均日工资# = (#基础工资#+#工龄补贴#+#职称补贴#+#绩效工资#)/21.75
#职业技能补贴# = IF(#专业技术#=\"初级\",40,IF(#专业技术#=\"中级\",70,IF(#专业技术#=\"高级\",100,0)))

引用apache-poi巧妙解决复杂公式的计算

一般的加减乘除,还是很容易实现的,但是像上面的公式,基本上处理起来的就比较棘手了。

为啥我会想到用apache-poi呢?

最开始我参加工作的时候,在一家金融公司,报表特别多,所以使用过apache-poi解析过Excel文件。

这时候,我想它既然支持解析Excel,那肯定支持解析公式啊。不过像#基础工资#可不能直接解析,那就将公式里每一项都计算出来,然后再带入到#平均日工资# =(#基础工资#+#工龄补贴#+#职称补贴#+#绩效工资#)/21.75,2

例如:#平均日工资#=(10000+100+500+1000)/21.75,2

这样不就得到平均日工资了嘛,我为自己的智慧深深地折服。

另外,JEP也可以做复杂公式的计算,不过用起来很鸡肋,尤其计算用浮点数竟然用double,精度丢失啊兄弟们有木有。

我在设计模式-解释器模式这一篇博客里,提及过JEP,有兴趣的可以去看下

出现问题

这个项目靠着我的设计稳定运行,财务是不容许出现小错误的。

可是在前天,测试告诉我。平均日工资在使用ROUND函数,保留两位小数时,出现了小小的问题。就是平均日工资为整数时,只保留了1位。如下图:

在这里插入图片描述

把说它是个BUG或者问题,其实也不算,因为计算的数值是正常的;只是整数保留小数点后几位,效果都一样。

例如:3088.00 , 3088.0和3088都是等价的,并且ROUND函数在Excel使用时,也无法保留整数的小数位。

发现问题

抱着治学严谨的态度,我打开之前写的代码,一顿debug后,发现这个锅是apache-poi框架的,他们对整数处理时,往后面加了个.0

,例如:ROUND(3088.00,2),它会将3088.00转化为3088.0,也会将3088.000转化为3088.0,导致了ROUND函数的精确值并不准确。

我也在Excel做了对比试验,在Excel中使用

ROUND(3088,2)ROUND(3088.0,2)以及ROUND(3088.000,2)

得到的结果都是3088,这和我们使用apache-poi又不太一样。

提出问题

于是,我就像给他们这个框架提issue,我来到github上,找到开源项目apache-poi。难受的是,这个开源框架没开issue。WTF,什么操作~!!

我就去它的官网上,结果发现他们把问题都放到了stack overflow上,然后写了个Question,链接

然鹅,没有人理我。

那么问题来了,apache-poi这个框架github上不给提issue,

stack overflow也没人管,那么它到底有没有开源精神~~

另外,我还发现它另一个BUG,等下次更新出来分享给大家,不过看这情况,怕是都要我自己动手解决咯。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,我可以回答这个问题。自动化测试框架是一种用于自动化测试的软件工具,它可以帮助测试人员快速、准确地执行测试用例,测试效率和质量。一般来说,自动化测试框架包括测试用例管理、测试执行、测试结果分析等功能模块。常见的自动化测试框架有Selenium、Appium、Robot Framework等。您可以根据具体的测试需求选择合适的自动化测试框架。 ### 回答2: 自动化测试框架是一种软件测试工具,用于辅助自动化测试的执行和管理。它能够高软件测试的效率和质量,同时减少重复性测试工作的人工操作。 在编写自动化测试框架之前,首先需要明确测试目标和需求。然后,可以按照以下步骤来设计和实现一个自动化测试框架: 1. 定义测试案例:根据项目需求和测试目标,确定需要自动化执行的测试案例。 2. 选择测试工具:根据测试需求,选择适合的测试工具,如Selenium WebDriver、Appium等。这些工具可以模拟用户的操作,实现对Web应用、移动应用的自动化测试。 3. 设计测试架构:根据测试需求,设计测试架构,包括测试环境搭建、测试数据准备、测试用例管理、测试报告生成等。 4. 编写测试脚本:使用选定的测试工具,编写测试脚本,实现对测试案例的自动化执行。测试脚本可以使用编程语言,如Java、Python等。 5. 集成测试工具:将测试工具集成到自动化测试框架中,以便自动化执行测试脚本。这样可以实现自动启动和关闭测试工具,并根据需要进行配置参数。 6. 设计测试数据:根据测试需求,准备测试数据。测试数据可以是各种场景下的输入数据,以验证系统的不同功能和性能。 7. 运行测试用例:使用自动化测试框架运行测试脚本,自动生成测试报告。可以根据测试结果,进行问题跟踪和修复。 8. 分析测试报告:分析测试报告,找出测试用例中存在的缺陷和问题。根据分析结果,进行修改和改进。 9. 进行回归测试:在代码更新后,采用自动化测试框架执行回归测试,验证修改是否对整个系统产生了负面影响。 总之,自动化测试框架有助于测试效率和质量,减少人工操作的重复性工作。通过选择适当的测试工具和设计优雅的测试架构,可以实现更高度的自动化测试。 ### 回答3: 自动化测试框架是一种用于执行软件测试的工具或系统。它能够自动执行测试用例、生成测试报告和记录测试结果。以下是一个简单的自动化测试框架示例: 1. 确定测试需求:首先,需要明确测试的目标和范围,确定需要进行自动化测试的功能和场景。 2. 选择测试工具:选择适合项目需求的测试工具,比如Selenium、Appium或Robot Framework等。 3. 搭建测试环境:配置好测试环境,包括安装测试工具、设置浏览器驱动或移动设备的连接等。 4. 设计测试用例:根据测试需求编写测试用例,用于验证系统的功能和性能。测试用例应具有较高的覆盖率,用于模拟不同的用户行为。 5. 编写测试脚本:使用所选测试工具的语言或脚本语言编写测试脚本,根据测试用例中描述的步骤和预期结果进行编码。 6. 执行测试:执行编写好的测试脚本,自动化地运行测试用例。测试过程中,测试工具会模拟用户的操作,比如点击按钮、输入文字等。 7. 生成测试报告:测试执行完成后,自动化测试框架会生成测试报告,包含测试用例的执行情况、通过率和耗时等信息。 8. 分析测试结果:根据测试报告分析测试结果,查找问题并定位Bug。可以将Bug报告发送给开发团队进行修复。 9. 维护和更新:随着系统的迭代和更新,需要更新和维护自动化测试框架,保持与系统的兼容性。 10. 扩展和集成:根据需要,可以扩展自动化测试框架的功能,比如集成持续集成工具,实现自动化触发测试。 总结:自动化测试框架是一个整体的工具或系统,需要明确测试需求、选择合适的测试工具、编写测试用例和测试脚本、执行测试并生成报告,最后分析运行结果。通过使用自动化测试框架,可以测试效率、降低人工测试的工作量,并能够快速发现和解决软件问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值