|
之前的文章《估价器测试方案在测试过程的落地提效》中,已经对估价器系统进行了简单的介绍,分析了在测试估价器需求时遇到的问题,也逐一介绍了前期的调研成果、第一版工具的实现思路和落地效果。但是,第一期工具仍存在待解决和优化问题。针对这些问题,本期文章将介绍一下具体是怎么解决的,以及进一步的优化。一、背景在估价器系统的估价流程中,从输入质检码到获取质检价格,中间涉及到了很多步的映射逻辑,包括:spu映射、外部检测项映射等等,这些映射关系都是在运营手动上传的Excel中配置的。在对估价器系统进行测试时,对这些映射关系的校验在整个测试工作中占比很大。对于每一条映射关系,如果不能借助测试工具,就要手动筛选Excel映射模板获取结果,再与估价器代码输出的结果进行比对。人工筛选不仅耗时耗力,还有可能眼花手抖导致出错。因此,我们开发这个工具的目的就是将手动执行的过程转变为自动化方式实现,提高测试效率和准确率。二、整体流程第一期工具利用python脚本实现了筛选Excel的过程。主要流程如下图所示:在此基础上,我们把python脚本服务化,同时,提供了前端交互,把筛选的结果通过前端页面对比展示。用户通过前端发起请求调用java服务,java服务获取入参后,调用质检服务获取到质检报告,解析质检报告后发送http请求。python服务获取请求后执行映射过程,并将筛选结果写到服务器上。Java服务读取服务器上的筛选结果后,进行处理并返回前端页面展示对比结果。主要的流程如下图所示:三、解决方案和实现过程3.1 python脚本维护问题问题描述:python脚本是直接放在java服务中的,修改一次脚本,就需要把整个服务重新上线一次。不仅维护的成本高,而且其他服务无法调用。解决方案:Python脚本服务化:我们选择把python脚本封装成一个http接口,java服务通过发送请求来运行脚本。这样脚本迭代不会影响到其他服务,降低维护成本。Python服务化框架选型:flask;flask的优势是小巧、自由、灵活,一个python脚本就可以实现web项目。实现过程:封装接口(1)flask的使用,举例:在hello.py文件中写一个最简单的flask应用如下:from flask import Flask,requestapp = Flask(__name__)@app.route('/out')def hello_world(): return 'Hello World!'if __name__ == '__main__': app.run(host='127.0.0.1', port=5000, debug=True)运行hello.py,打开浏览器访问http://127.0.0.1:5000/out',页面上会展示HelloWorld!(2)具体设计:(3)具体实现首先,通过@app.route("/req",methods=['GET','POST'])获取请求,methods=['GET','POST']表明这个URL允许GET和POST两种请求方式。然后,用flask中的request方法来处理请求。通过request.method获取前端的请求方式,通过request.values获取到前端的入参。调用接口通过解析质检报告获取到spu、sku等参数,这些参数就是后续用来筛选映射模板的条件。把参数存为map的形式后,向python服务发送http请求,来执行映射流程。(1)具体设计:(2)具体实现:3.2Excel文件调用问题问题描述:Excel文件也是放在java服务的resource文件夹下。映射模板会频繁改动,服务也要频繁地重新上线。同时,java中使用了System.class.getResource的方法获取Excel文件路径,在本地时可以调用成功,部署到服务器上之后,获取的路径就不对了。解决方案:我们选择把Excel文件放在服务器上,映射模板有改动的时候,只需要重新上传Excel文件即可。实现过程:四、整体效果第一期工具把映射结果写入了Excel中,展示结果如下:在测试时,需要手动下载Excel查看筛选结果,一个估价的过程需要查看6个Excel。本期通过前端页面展示,我们在估价器DDD重构的测试项目时,输入品类、估价场景和质检码点击执行,只需3s左右时间,就能完成整个估价流程,最终的质检价格、每个映射关系的筛选条件和筛选结果都一一清晰展现。五、后期待完善Excel文件直接写在了服务器上,所以java服务必须要跟python服务部署在同一台服务器,才能获取到筛选结果,进而执行后面的流程,后续希望能够找到一个较好的方法。目前展示了筛选的结果,可以与开发的结果进行diff并在前端展示。
|
|