测试数据构造

背景
测试财务相关需求时,需要走从新建采购单到入库确认的流程来触发生成财务单据的事件,效率低下。希望通过编写测试小工具,提高造数据的效率。


解决方法
在业务系统中新加造数据的页面http://ms.kaola.com/backend/back/nopermission ,通过环境隔离、用户隔离和权限隔离保证只有测试环境可用。
——前端代码结构

index.html写页面的元素,引入了nek-ui(http://nek-ui.kaolafed.com/components/),可以方便地使用控件:如必填项校验、按钮样式设置、防止重复点击、文字提示、通知等。关键代码为on-click={this.stockIn($event)},用户点击提交按钮后会调用js的stockIn方法,把参数auditNo传过去。
<div >"nopermissions_item">
    <validation ref="stockIn">
        <ui.input width=200 value={auditNo} placeholder="跟单中/跟单完成的审批单号" required />
        <ui.button action="submit" type="primary" titl e="根据审批单号一键入库采购单" on-click={this.stockIn($event)} />
        <kl-tooltip tip="仓库的unSupportPushPurchase设为true,supportTailyCallback设为false,jxc-compose的inbound_switch开关设为开" placement="right">
            <kl-icon type="warning" color="red"/>
        </kl-tooltip>
    </validation>
</div>
index.js写前端逻辑,把用户输入的请求发送给后端,链接为/backend/back/stockIn,参数为auditNo,后端返回后把结果打到页面上,以通知的形式保留4秒。
stockIn: function(e) {
    var validation=this.refs.stockIn;
    if (!$validation.validate().success) {
        return;
    }
    this.$request('/backend/back/stockIn', {
        btn: e.sender,
        norest: true,
        data: { auditNo: this.data.auditNo},
        onload: function(json) {
            console.log(json);
            NEKUI.Notify.success(json.message, 4000);
        }
    });
},
剩下的entry.js、.ftl和.css文件和其他页面保持一致即可。

——后端代码实现
通过RequestMapping的注解,把前后端关联起来,前端发送的参数名要和后端的入参名称一致,如果后端是个对象,则与对象的元素名称一致。
@RequestMapping(value = "/stockIn")
@ResponseBody
public CommonReturnData stockIn(String auditNo) throws Exception
方法里面先加环境和用户的校验,校验当前环境是否为测试环境,当前账户是否为haitaoadmin等,可以用注解来实现。然后做一些基础校验,比如单号是否为空,审批单号是否存在等。接着从实际的业务操作流程中,抽取核心的方法,放到代码中来。新建到入库采购单的操作包含:创建跟单任务、提交采购单、审核通过采购单、入库确认采购单。
1、创建跟单任务:获取审批单中的商品列表,过滤掉新品,把AuditDetailGoods转换成purchaseOrderDetail,这里需要聚合不同补货原因的商品,考虑赠品和非赠品,复制数量、价格等参数。然后设置purchaseOrderDto的仓库、供应商、采购方式、起运港、目的港等参数。接着调用生成采购单的接口,生成采购单号。
2、提交采购单:调用提交采购单的方法,设置采购单号和备注即可。
3、审核通过采购单:由于仓库的测试环境不可用,需要把参数supportTailyCallback设为false,unSupportPushPurchase设为true,确保采购单不推送仓库。审核通过后需要sleep 20秒,等待mock流程完成。
4、入库采购单:获取汇率,调用入库确认采购单的方法。
5、把生成的采购单号和采购单的页面链接返回给前端。

总结
在测试造数据代码的过程中,遇到了各种各样的异常和空指针,只能遇到一个解决一个,解决问题的过程也是提升对业务理解的过程。

网易云新用户大礼包:https://www.163yun.com/gift

本文来自网易实践者社区,经作者樊文杰授权发布。