丁顺英,李天翼
(中国铁道科学研究院集团有限公司 电子计算技术研究所,北京 100081)
铁路12306 互联网售票系统(简称:12306)是在中国铁路客票发售和预订系统基础上,拓展互联网售票、手机售票等业务而构建的电子商务系统[1],为广大旅客提供服务。12306 作为中国铁路重要的售票渠道,用户规模庞大,任何缺陷在海量用户的冲击下都可能引起系统灾难,因此,测试是减少12306的缺陷、规避系统风险和确保系统质量不可缺少的重要环节。12306 的测试从系统设计就开始介入,覆盖测试分析、测试需求、案例设计、单元测试、集成测试、系统测试、验收测试等阶段[2];测试范围包括票务主线业务,以及保险、餐饮、旅游、酒店、广告等支线业务。因此,如何有效合理地选择和应用测试技术对12306 的稳定性至关重要。
采用自动化测试技术,可以完成12306 票务主流程变更后的回归测试和分支流程变更后票务主流程的验证性测试;采用测试模拟器技术,可以完成在内部子系统或关联系统不可用、关联系统性能不达标、测试数据无效等客观情况下对系统的测试;在系统正式部署完成后,采用云测试技术,可以完成模拟真实用户在生产系统上进行的测试;采用兼容性测试技术,能够使12306 在最大程度上满足用户的使用需求和使用体验。本文详细介绍上述几种测试关键技术在12306 测试中的应用。
在12306 测试过程中,采用了多种测试分析方法,以满足系统不同阶段的测试需求[3]。
在单元测试和集成测试阶段,主要采用基于功能界面的分析方法:
(1)梳理各子系统的单个功能,分析每个功能的测试需求,包括正常测试需求和异常测试需求;
(2)识别系统内和系统间功能的关联性,并根据功能的关联性进行功能组合或功能交叉的测试需求分析;
(3)根据以上分析结果,最终形成测试需求文档。
文档分为单一功能测试需求和功能组合测试需求两部分。当新增子系统时,只需要关注子系统的新功能和关联子系统的交叉功能。在该阶段,可以采用自动化测试技术完成系统新增功能后的主流程测试;采用测试模拟器技术完成功能测试。
在系统测试和验收测试阶段,采用基于业务流程和规则的分析方法:
(1)根据系统设计,将12306 划分为票务主线业务,以及积分、保险、餐饮等分支业务;
(2)详细划分各类业务,如票务业务中由用户信息、信息查询、购票、订单处理、支付等下一级业务组成,用户信息又可以分为用户注册、信息修改、用户注销等子业务;
(3)分析各类业务的流转过程,标识每一种业务对不同情况的处理流程和处理规则,形成完整业务流路径,分析每个分支路径的测试需求,并确认业务流对应的系统功能;
(4)根据以上分析结果,最终形成业务流程的测试需求文档。
此种分析方法在业务流程规则变化或增加新业务时,需不断地完善和整合。在该阶段,采用云测试技术可以完成以业务流程测试为主要目标的测试任务;在系统测试阶段,采用兼容性测试技术,可提前发现在不同机型、不同系统中的缺陷,以满足更多用户的使用需求。
12306 在票务主流程上和一些分支上采用自动化测试技术,用以解决票务主流程变更后的回归测试和分支流程变更后票务主流程的验证性测试。为了更好地利用自动化测试技术,12306 的自动化测试采用测试数据、测试脚本、测试配置分离的处理方式,同时,加入了测试管理、测试执行、测试结果统计分析等相关功能。
2.1.1 测试方法
12306 的测试数据全部存放于测试数据库中,数据按照类型进行结构化、条件化存放,如用户信息、车次信息、车站信息、席位信息、票价信息等。在测试准备阶段,根据业务需求进行测试数据组织,而对于一些复合数据,可以通过已有的测试数据重新生成并存放在测试数据库中,也可以在测试过程中使用脚本;测试任务执行完成后,将测试结果存放于数据库中进行统计与分析。
2.1.2 测试应用
将进行自动化测试的脚本分成功能级脚本和业务流脚本,功能级脚本指的是与被测系统完成一个特定功能或交易的一系列交互操作,如用户登录、余票查询、联系人查询、扣票、支付等[4];业务流脚本是指按一定业务逻辑将多个功能级脚本串联起来组成的复合脚本,如完整的购票流程、退票流程、改签流程等。在功能级脚本和业务流脚本完成的基础上,进行测试场景的编写,具有业务关联的多个案例(包括功能案例和业务案例)组织到一起形成集合。可对执行过程中涉及到的执行设备、执行次数、执行时间等进行参数化配置,同时,在系统中增加了任务调度功能,满足无人值守下的测试执行、结果收集和报表生成。
引入自动化测试技术,可以减少人工测试的繁琐,并且保障测试的一致性和可重复性,从而提高测试效率[5]。但是,采用自动化测试技术,测试脚本开发周期长、人力和时间成本较高[6];加之12306 产品迭代频繁,会导致自动化测试脚本变化频繁、不易维护;对于短期项目,测试脚本的复用度低,依然无法完全替代手工测试实现功能、业务流程的全覆盖。
测试模拟器类似于训练飞行员的模拟舱,利用测试模拟器,可构建被测试应用系统的完整测试环境,在高度仿真的环境中,能够支持应用系统的功能、性能等测试[7]。
2.2.1 测试方法
12306 内部由几十个子系统组成,对外关联若干系统。在测试过程中,经常会遇到内部系统不可用、关联模块开发未完成、关联系统性能不达标、测试数据无效、网络访问限制/访问费用高等原因影响测试进度,为此,采用了测试模拟器技术。测试模拟器可直接在应用层模拟内部子系统或关联系统的行为,支持HTTP、HTTPS、TCP、UDP、Socket 等多种通信协议,并可根据系统要求定义XML、JSON、SOAP 等多种报文格式,支持请求端模拟、响应端模拟、请求/响应、响应/转发等多种场景,支持报文延迟、报文丢失、报文失败错误等特殊场景的模拟。
2.2.2 测试应用
12306 的席位数据存放于18 个铁路局集团公司客票中心的几十个席位数据库节点中,旅客购票、改签(变更到站)、退票等信息都存储在席位数据库中,旅客购票后的订单信息、电子票信息、实名制信息等存放于20 组电子票库节点中[8]。在测试环境中,搭建了北京、上海、广州等3 个客票中心的4个席位数据库节点,其它的全部采用测试模拟器实现,测试模拟器替代了应用服务+席位数据库的功能。针对电子票库节点,采用同样的处理方式,搭建3组电子票库节点,其余的采用测试模拟器实现。
测试模拟器在模拟外联系统中也发挥了重要作用,典型的应用就是电子支付环境的模拟,由于旅客的支付行为全部是在银行、支付宝和微信等第三方平台进行,测试环境中不具备建立第三方支付系统的能力,因此,通过模拟第三方支付系统的通信协议和报文格式,可满足随时支付的测试要求;其他外联的保险、积分、餐饮、旅游等系统的测试也可采用测试模拟器实现。
采用测试模拟器技术的测试环境软/硬件等基础框架可复用,所以,节约了基础框架塔建成本;可缩短测试周期,将系统从不可测变为可测,测试提前介入,节约时间成本;可模拟各种业务情况,特别是异常测试,提高测试覆盖率,提升测试效率和质量;在性能测试中,测试模拟器的性能一般高于被测系统,不会成为性能测试的瓶颈。
云测试是基于云计算的一种新型测试技术,可以模拟用户远端访问和7×24 h 不间断测试[9]。
2.3.1 测试流程
用户在本地编写并调试自动化测试脚本,将调试后的自动化测试脚本上传到云测试平台,在平台上配置运行自动化测试脚本的目标地址、运行时长、开始时间等参数,实现对12306 的自动化测试。同时,云测试平台具有脚本录制并生成、脚本线上编辑、脚本验证和结果展示等功能。
2.3.2 测试应用
12306 云测试的范围主要以流程测试为主,在系统部署完成后,模拟真实的用户在生产系统进行测试,测试内容包括:编写用户登录、查询发/到站余票、选择车次预订、添加乘车人、提交订单、支付。测试流程覆盖用户购票的全部操作,并在每一步操作后进行预期结果验证,同时,记录错误结果。将测试脚本分发到多台云计算节点上,按需生成虚拟用户运行测试脚本,从互联网端对系统施压,实时查看压力测试的结果;可设置少量用户进行7×24 h不间断运行测试,测试12306 的可用性。
借助云测试平台模拟真实的用户进行测试,不需要购买不同应用的测试软件、不需要进行复杂的网络部署,能够有效降低测试成本,节省测试机器、网络准备等环节的时间,进而缩短搭建测试环境的时间,提高测试效率[10]。
兼容性测试是指测试软件在特定的硬件平台上、不同的应用软件之间、不同的操作系统平台、不同的网络环境中进行的测试[11],手机App 兼容性测试还包括在不同机型、不同系统上进行的测试。
2.4.1 必要性
智能手机的普及率越来越高,无论是在系统还是软/硬件环境方面,种类繁多。目前,铁路12306手机App 订票比率已超过70%,手机App 在各种机型和系统上的运行状况各不相同,若手机App 的兼容性出现问题,不仅会影响用户的使用体验,更严重的还会导致用户流失,因此,需要进行兼容性测试,最大程度地使更多的用户能够正常使用软件。
2.4.2 测试应用
12306 手机App 兼容性测试范围主要包括与硬件设备的兼容性、与操作系统的兼容性、分辨率兼容性、网络运营商兼容性、与其他软件的兼容性、软件版本向前/向后兼容性等。作为功能测试的一部分,兼容性测试着重考虑的测试功能点包括安装测试、卸载测试、启动测试、运行测试、核心功能测试(购票、支付、改签、退票、订单查询等)、用户界面测试等[12]。12306 手机App 兼容性测试考虑的因素及在不同的测试范围下的测试功能点举例,如表1所示。通过兼容性测试,检查手机App 是否有报错或者崩溃发生,并记录错误发生时界面效果,截取系统运行日志等关键信息,根据问题进行分类和优化分析,为手机App 的进一步优化提供依据。
表1 12 306 手机 App 兼容性测试主要内容及测试功能点举例
12306 手机App 兼容性测试能在最大程度上满足广大用户的使用需求和使用体验。但是,兼容性测试成本较高,机型的选择是考虑的重点。
本文分析了12306 在软件测试各个阶段使用的测试方法和测试技术。重点研究了自动化测试、测试模拟器、云测试、手机App 兼容性测试等技术及其在12306 测试中的具体应用。12306 的测试工作伴随着12306 的成长和发展,是一个持续集成与不断演进的过程,随着测试管理、测试技术、测试能力的不断提高,测试工作将在12306 的发展过程中发挥更加重要的作用。