自动化测试技术在Web EDI系统中的应用

发表于:2015-1-26 11:09

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:蒋 铭    来源:51Testing软件测试网原创

  【摘 要】传统汽车供应链和医疗保健行业这些系统中的数据信息量都很大,通常会使用EDI系统平台进行数据消息的存储、收发和分享。针对手工创建、导入、验证报文数据效率低下的问题,提出使用自动化技术方法,通过XML来描述EDI报文信息,设计脚本批量生成测试数据,并导入SupplyOnline平台,对展示的信息自动进行正确性验证。在已有开源工具Selenium和Junit测试框架上进行改进,结合WebDriver、Maven与TestNG搭建一个自动化测试框架。实验结果表明,利用该框架快速、便捷地实现大数据量的创建、查询、验证等功能的自动化工作,有效加快项目进度,节省人力资源成本,缩减冗余时间,降低日常开支,提高生产力。
  0、引 言
  Web互联网技术与信息化产业推动着国内热门行业的快速发展,很多刚走出校园的毕业生们都热衷于在那些热门专业领域就职,主要包括汽车、医疗、现代物流业、金融、电子商务、移动互联网等。传统的物流制造业涉及航空、船舶、汽车零配件及供应链营销平台的研发,典型的医疗服务业包含医疗器械用品、卫生护理与医疗信息平台的应用。
  目前我们对于汽车制造业、医疗卫生行业的信息化建设大都停留在企业资源计划(ERP)、医院信息系统(HIS)等系统层面上。毋庸置疑,ERP可以很好地帮助企业进行物流、人力、财务、信息等资产实施与管理。HIS为医疗机构带来科研、教学、诊疗等业务管理和服务。ERP针对的是以人为本的客户支持和企业化服务。HIS也是根据病人另外维度,从身体健康指标测量到创建电子病历搭建属于医疗机构的信息化系统。
  从业务领域看,似乎两者关联不大,故而对系统进行测试只能围绕着业务进行开展。其实,我们可以提炼系统间的相似之处,通过设计有效的可复用测试用例,实现较优化、高质量的系统平台[1,2]。ERP、HIS等系统中的数据都是些关键业务数据、病人隐私信息等,用何种标准、协议、接口来存储、加密和分享数据,是信息资产管理和维护时需要重点考虑和关注的地方。如何安全、快捷地创建系统中的数据、比对数据准确性、验证数据格式,是测试人员在整个系统测试中需要解决的基本问题[3]。
  电子数据交换(EDI)技术的诞生很好解决了汽配供应链和医疗行业中对大数据的存储、传递、共享。然而国内外针对Web EDI系统多数采用传统手工方式进行测试工作,很多厂商仍然会将业务数据通过人力录入到Excel或者文本文件中进行数据比对、信息验证等,故而效率低下,且容易产生错误。越来越多的EDI服务提供商开始引入自动化测试技术来提高业务效率,但目前只处于发展初期阶段。基于Web EDI系统进行测试技术的研究和应用,尤其是利用自动化方法和技术进行测试工作,可以有效提高测试效率和节省测试成本。本文结合SupplyOnline平台,通过编写单元脚本并搭建框架进行自动化测试工作的应用。
  1、SupplyOnline平台
  1.1EDI技术
  EDI全称是Electronic Data Interchange,即电子数据交换,是在贸易伙伴之间进行业务数据的交换。国际标准化组织(ISO)将EDI描述成将贸易(商业)或行政事务处理(Transaction)按照一个共认的标准,形成结构化的事务处理或报文(Message)数据格式,从计算机应用系统到计算机应用系统的电子传输方法。主要包括以下几个特性:1)EDI是两个或多个计算机应用系统之间的通信;2)数据自动地投递和传输处理,无需人工介入,应用程序对其自动响应;3)计算机之间传输的信息遵循一定的语法规则与国际标准。
  目前世界上广泛使用的EDI报文标准是1987年由联合国欧洲经济委员会制定的用于行政、商业和运输的电子数据交换标准(UN/EDI FACT)[4]。
  由于汽车制造业厂商对库存要求比较高、零件采购、供货流程等较为复杂,对合作厂商(如供应商、经销商)的反应速度要求也就比较高,为了高效的沟通,避免数据传递时发生错误,于是就引入了EDI在供应链之间传递数据,即报文。图1简单表示了厂商与供应商之间如何通过EDI进行互联。
  
图1 EDI互联示意图
  1.2平台应用
  EDI可以分为传统EDI (Traditional EDI)和Web EDI两种。符合前述特性2的就是传统EDI,即数据从一个公司的系统(如ERP)自动传送到另一个公司的系统,没有加入人工干预的系统之间的信息交换[4]。Web EDI则相反,其有人工干预,通过网站和贸易伙伴进行电子数据交换(EDI数据收发)。
  Covisint SupplyOnline是一个适用于厂商、供应商、第三方物流等多种角色进行数据传递、业务处理的Web EDI集成平台,其主要功能包括订单管理、交货管理、报表管理、主数据管理等。系统中主数据、日程订单、ASN等关键数据都可以通过报文在系统之间进行传递。对于大批量的数据录入、消息接收和发送,数据正确性的验证,是Web EDI系统在数据层面上的核心问题。
  预测、订单、预先发货清单(ASN)等供应链中的大数据信息就是报文。厂商把采购信息发布到增值网络(VAN)上,然后EDI供应商根据供应商代码,从VAN上面取得报文数据来发送给供应商,供应商根据发运信息,通过系统/软件把电子格式报文传递到VAN。我们可以视作是厂商和供应商数据集成的ERP系统,通过第三方来做数据交换[5]。图2是通过VAN来传递报文的示意图,从中可以看出厂商和供应商是多对多的关系。
  
图2 通过VAN传输数据过程
  2、基于XML描述EDI报文
  SupplyOnline平台不提供手工添加订单信息以及批量导入数据的功能。为解决上述问题,分两步来分析:一是将EDI报文转化为平台能够识别的数据格式,二是能够批量添加数据信息到系统平台。
  EDI标准遵循一定的规范,但是欠缺灵活性。在进行数据创建和系统测试时,我们可以根据指定格式、规范和要求来重定义数据。利用可扩展标记语言(XML)来描述EDI数据信息,是个不错的选择[6]。XML作为一种纯文本类型的语言,其设计宗旨就是传输数据,而不是显示数据。它能够实现数据与格式的分离,简化数据共享、传输和平台变更。
  一条原始EDI报文格式的日程订单信息大致格式如下:
  PO_NORMAL_061101|1|M3425196004201|ZG0001|3000|20140527-001||14/05/27||14/07/28||||1|P|0||0||1000|2000|100|VMI
  上述条目分别对应了订单号、物料号、供应商代码、要求发货时间、到货时间、订单类型、发货量、需求量、欠缴量等信息。数据之间用|进行字段划分,可读性较差。以下是通过XML Schema描述上文订单信息。
  <vastPOList>
  <buyerPlantCode>3000</buyerPlantCode>
  <vastPOInfo>
  <poNo>PO_NORMAL_061101</poNo>
  <supplierPlantCode>ZG0001</supplierPlantCode>
  <lineNo>1</lineNo>
  <partNo>M3425196004201</partNo>
  <shipToCode>VMI</shipToCode>
  <poDetailType>P</poDetailType>
  <releaseIdVast>20140527-001</releaseIdVast>
  <cumReqQty>100.0</cumReqQty>
  <cumToDate>20140527</cumToDate>
  <arriveDateTime>20140702820900</arriveDateTime>
  <reqDateTime>20140407281200</reqDateTime>
  <reqQty>1000.0</reqQty>
  <passDueQty>100</passDueQty>
  ……
  </vastPOInfo>
  </vastPOList>
  XML文件在可读性方面表现较好,方便进行快速阅读。作为一种具有树状结构的语言,文件与文件间能够具有良好的关联性和可扩展性。因为它的这种特性,能够很好地契合面向对象的思想。采用XML语言作为载体,测试信息能够相互引用,在基于已有的大量信息的基础上,可以通过引用的方式,大大地减少当前工作的复杂度。
  3、单元测试用例
  3.1创建/导入信息
  明确定义了数据格式与信息描述,就可以在SupplyOnline平台中创建具体的订单数据。通过手工方式逐条一个一个创建所需要的订单数据,必须批量或者重复添加上文定义的XML节点语句<vastPOInfo>。vastPOInfo描述组定义了一个订单完整的信息,包括订单号poNo,供应商代码supplierPlantCode,要求发货时间reqDateTime等字段。对于汽配供应物流行业中的大数据信息,纯靠人为手工方式来创建测试数据,无疑是低效的,也不现实的。
  下文是在一个XML文件中批量生成多条日程订单信息的部分代码。
  public static void genNormalPOXML(String supplierPlantCode, String poNo) {
  //重复创建订单记录数据
  for (int i = 10; i < 30; i++) {
  Calendar cal = Calendar.getInstance();
  cal.add(Calendar.DATE, i);
  String dateStr = sdf.format(cal.getTime());
  //调用创建物料基本信息方法
  buffer.append(genPartXML(supplierPlantCode, poNo, "aaaa", "P", dateStr, i * 100));
  }
  //生成订单的XML信息
  String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
  + "<vastPOList "+ "xsi:schemaLocation=">"
  + buyerPlantCode>3000</buyerPlantCode>"
  + "<poType>N</poType>" + buffer.toString() + "</vastPOList>";
  //输出生成订单的完整XML信息
  System.out.println(xml);
  }
  public static String genPartXML(String supplierPlantCode, String poNo, String partNo, String detailType, String reqDate, double reqQty) {
  //生成物料的XML信息
  String xml = "<vastPOInfo>"
  + "<poNo>" + poNo + "</poNo>"+ "<supplierPlantCode>" + supplierPlantCode + "</supplierPlantCode>"+ "<lineNo>01</lineNo>" + "<partNo>" + partNo + "</partNo>"+ "<poDetailType>" + detailType + "</poDetailType>"+ "<reqDateTime>" + reqDate + "</reqDateTime>" + "<reqQty>" + reqQty + "</reqQty>"
  + … …
  + "</vastPOInfo>";
  return xml;
  }
  这里定义的genNormalPOXML方法和genPartXML方法将日程订单信息和物料基本信息的XML描述展现出来。其中genNormalPOXML的核心函数是调用方法genPartXML ,见函数buffer.append(genPartXML(supplierPlantCode,poNo,"aaaa", "P", dateStr, i * 100));
  通过参数化变量(/常量)修改供应商代码,订单号,物料编号,订单类型,要求发货时间,需求量等信息,实现了创建订单信息测试脚本的复用。for循环语句定义了订单及物料信息总数。这样自动完成测试数据的创建,有效减少测试人员运行、维护数据的人力成本。
  版权声明:51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。
31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号