CN112988597B - 一种基于状态迁移的自动测试可视化方法及系统 - Google Patents

一种基于状态迁移的自动测试可视化方法及系统 Download PDF

Info

Publication number
CN112988597B
CN112988597B CN202110456428.7A CN202110456428A CN112988597B CN 112988597 B CN112988597 B CN 112988597B CN 202110456428 A CN202110456428 A CN 202110456428A CN 112988597 B CN112988597 B CN 112988597B
Authority
CN
China
Prior art keywords
state
test
migration
task
action
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202110456428.7A
Other languages
English (en)
Other versions
CN112988597A (zh
Inventor
曹雅鑫
崔岩
彭栋
张玙
韩兴邦
王振辉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
China Railway Communication Signal Co., Ltd
CRSC Research and Design Institute Group Co Ltd
Original Assignee
CRSC Research and Design Institute Group Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by CRSC Research and Design Institute Group Co Ltd filed Critical CRSC Research and Design Institute Group Co Ltd
Priority to CN202110456428.7A priority Critical patent/CN112988597B/zh
Publication of CN112988597A publication Critical patent/CN112988597A/zh
Application granted granted Critical
Publication of CN112988597B publication Critical patent/CN112988597B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3692Test management for test results analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/34Graphical or visual programming

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明提供一种基于状态迁移的自动测试可视化方法及系统,方法包括:以状态对象列表存储具有迁移关系的一组状态对象;根据状态对象之间的迁移关系,按照一定顺序执行各状态对象相关的测试动作;根据状态对象列表和状态对象执行顺序显示自动测试的执行进度。采用基于状态元素的规范化测试脚本,并转换为对象列表,能够基于对象列表实现对测试过程的清晰、精细、实时的监控,从而获取并显示详细的测试进度。

Description

一种基于状态迁移的自动测试可视化方法及系统
技术领域
本发明属于自动测试领域,特别涉及一种基于状态迁移的自动测试可视化方法及系统。
背景技术
近年来,为满足客运专线及高速铁路快速发展的需求,我国借鉴了欧洲的ETCS标准,提出了立足我国国情的中国列车运行控制系统(CTCS)。无线闭塞中心(Raid BlockCenter,RBC)是CTCS-3级(Chinese Train Control System Level3,中国列车运行控制系统应用等级3)列控系统地面设备中最为关键的设备,它根据和其他外部地面系统交互得到的线路信息和列车位置信息生成安全控车命令,计算行车许可(Movement Authority,MA),并通过GSM-R(GSM For Railway)无线网络传输给列车,实现无线闭塞中心控制列车在其覆盖范围内安全、可靠运行。
作为安全苛求系统的无线闭塞中心,一旦出现预先没有估量的故障及错误,不仅影响运输效率,更严重地,将危及人身财产安全。因此在无线闭塞中心开通运营之前,必须对该设备进行严格的测试,以避免不必要的损失。
无线闭塞中心的测试系统需要模拟与无线闭塞中心通信的所有外部设备,根据相应的通信协议模拟外部设备向无线闭塞中心发送信息,从而构造测试场景。同时,对无线闭塞中心反馈给各个仿真设备的信息进行校验,从而判断无线闭塞中心功能是否正确。由于无线闭塞中心涉及的测试案例,测试场景繁多,为保证测试效率和测试质量,目前采用基于脚本的自动测试方法。自动测试过程通常是首先编写测试脚本,在脚本中规定发送至待测无线闭塞中心的数据并设置测试反馈的校验条件。之后通过脚本执行器加载并执行相应脚本从而实现自动测试。
目前既有的无线闭塞中心自动测试系统往往通过脚本语言TCL编写,脚本形式依据具体的脚本语言语法。脚本编写过程为代码开发过程,脚本不具备固定的文本形式,难以可视化编辑。
现有无线闭塞中心自动化测试系统存在的不足之处:
1.既有无线闭塞中心自动测试系统的脚本直接采用脚本语言编写,要求测试人员熟练掌握脚本编程,编写难度较大。
2.既有无线闭塞中心自动化测试系统编写脚本时采用文本编辑器对脚本直接进行编辑,无法提供可视化的脚本编辑界面。
3.在目前无线闭塞中心自动化测试系统在测试过程中无法实时反馈脚本的执行情况,只能在测试完成后通过测试日志查看测试结果。
如何提供一种针对复杂测试过程的实时精细的进度显示方案是当前自动测试中基带解决的技术问题。
发明内容
为解决至少一个上述现有技术中存在的问题,本发明提供一种基于状态迁移的自动测试可视化方法,包括:
以状态对象列表存储具有迁移关系的一组状态对象;
根据状态对象之间的迁移关系,按照一定顺序执行各状态对象相关的测试动作;
根据状态对象列表和状态对象执行顺序显示自动测试的执行进度。
进一步地,方法包括:
获取测试脚本,所述测试脚本包含一个或多个状态元素,所述状态元素用于表示测试执行动作和状态迁移关系;
解析测试脚本,将状态元素转化为状态对象,将状态对象存储在列表中;
执行自动测试,从列表中获取状态对象,执行相应的测试动作,根据状态迁移关系,迁移至新的状态对象并执行对应的测试动作;
执行自动测试的过程中,记录状态迁移的顺序,根据状态迁移顺序显示自动测试的执行进度。
进一步地,方法包括:
所述测试脚本包含一个或多个任务元素;
所述任务元素分别包含一个或多个状态元素;
所述任务元素转化为任务对象后存储在列表中;
执行测试过程中对每一个任务的状态迁移进行记录,并根据状态迁移的顺序显示测试中的状态的执行情况。
进一步地,方法包括:
所述测试脚本中包含多个任务元素,执行时,存在多个任务元素并行执行;执行过程中对多个并行执行的任务的状态执行情况同时显示。
进一步地,方法包括:
状态执行情况包括已执行、未执行和执行中,根据不同的执行情况,将状态显示为不同的风格。
进一步地,方法包括:
执行任务的状态迁移时,采用第一哈希表记录任务迁移顺序,将任务标识作为第一哈希表的键,将任务的状态按照迁移顺序存储为数组,作为第一哈希表的值;
采用第二哈希表存储状态的动作和迁移执行情况,通过任务名称和任务中的状态名称确定第二哈希表的键,将任务的状态对应的已执行的迁移名称作为第二哈希表的值;
根据第一哈希表和第二哈希表的记录显示任务执行进度。
进一步地,方法包括:
提供与所述测试脚本具有层级关系的元素相对应的第一可视化界面,用于以树形结构展示测试脚本中的元素,树形结构的节点与测试脚本中的元素相对应。
进一步地,方法包括:
状态元素包括动作元素和迁移元素两个子元素;
通过动作元素定义测试执行动作,通过迁移元素定义满足指定条件时需要执行的下一个状态;
解析测试脚本时,为脚本中各个元素创建相应的对象,脚本中相应元素的属性映射为对象属性,包括:
将状态元素映射为状态对象,将迁移元素映射为迁移对象,将动作元素映射为动作对象;
状态对象包含动作对象的动态数组和迁移对象的动态数组。
进一步地,方法包括:
以并行方式执行一个测试脚本中的一组相关联的任务,包括:
采用列表存储任务元素所转换的任务对象;
执行时,从任务对象列表中获取多个任务对象,并行执行任务对象所代表的测试任务。
进一步地,方法包括:
通过增加节点来增加测试脚本中的元素;
通过删除节点来删除脚本中的元素;
通过调整节点位置来调整测试脚本中的元素顺序;
选择树形结构的节点时,提供显示和编辑相应元素树形的第二可视化界面,用于编辑测试脚本元素的属性。
进一步地,方法包括:
所述执行相应的测试动作包括:
通过模拟与无线闭塞中心通信的所有外部设备,根据相应的通信协议模拟外部设备向无线闭塞中心的信息交互。
本发明还提供一种基于状态迁移的自动测试可视化系统,包括:
存储单元,用于以状态对象列表存储具有迁移关系的一组状态对象;
执行单元,用于根据状态对象之间的迁移关系,按照一定顺序执行各状态对象相关的测试动作;
显示单元,用于根据状态对象列表和状态对象执行顺序显示自动测试的执行进度。
进一步地,还包括:
获取单元,用于获取测试脚本,所述测试脚本包含一个或多个状态元素,所述状态元素用于表示测试执行动作和状态迁移关系;
解析单元,解析测试脚本,将状态元素转化为状态对象,将状态对象存储在存储单元的列表中;
所述执行单元用于执行自动测试,从列表中获取状态对象,执行相应的测试动作,根据状态迁移关系,迁移至新的状态对象并执行对应的测试动作;
所述显示单元用于执行自动测试的过程中,记录状态迁移的顺序,根据状态迁移顺序显示自动测试的执行进度。
本发明还提供一种基于状态迁移的自动测试可视化系统,所述系统包括至少一个处理器以及至少一个存储器;
所述存储器存储执行上述基于状态迁移的自动测试可视化方法的计算机程序,所述处理器调用存储器中的所述计算机程序以执行上述基于状态迁移的自动测试可视化方法。
本发明的基于状态迁移的自动测试可视化方法及系统具有以下优点:
采用基于状态元素的规范化测试脚本,并转换为对象列表,能够基于对象列表实现对测试过程的清晰、精细、实时的监控,从而获取并显示详细的测试进度。将测试过程中的复杂前后逻辑转化为具有迁移关系的对象列表,方便管理调度。
为测试人员提供了一种不增加额外学习成本,简洁易用的脚本编写方法。
采用统一格式化脚本,提高了测试人员的脚本编写效率,并且便于程序实现文本脚本和可视化的图表的转化,从而基于这种脚本能够为测试人员提供可视化的脚本编辑工具。
脚本具备明确的步骤和执行顺序,从而能够在测试过程中将脚本执行的具体步骤和进度实时反馈给用户,使用户了解当前测试进度和信息交互详情。
本发明针对无线闭塞中心自动测试脚本的以上需求,提出一种基于状态迁移的无线闭塞中心自动测试脚本,并提出适配该脚本的脚本执行方法。脚本执行方法则根据脚本中的状态以及状态跳转驱动测试,并对测试进度的实时显示。该脚本将测试过程中的信息交互以状态跳转(即迁移)的形式统一组织,在此基础上定义固定的脚本结构实现脚本的可视化编辑。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所指出的结构来实现和获得。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了根据本发明实施例的一个测试脚本元素结构示意图;
图2示出了根据本发明实施例的测试脚本对应的对象关系图;
图3示出了根据本发明实施例的执行一组测试任务的过程示意图;
图4示出了根据本发明实施例的状态生命周期变化过程示意图;
图5示出了根据本发明实施例的动作和迁移处理顺序示意图;
图6示出了根据本发明实施例的通过双线程处理迁移条件的过程示意图;
图7(a)示出了根据本发明实施例的测试脚本可视化编辑界面示例图;
图7(b)示出了根据本发明实施例的测试脚本迁移配置的可视化编辑界面示例图;
图8示出了根据本发明实施例的测试进度可视化示例图;
图9示出了根据本发明实施例的记录任务状态的迁移过程的哈希表结构示意图;
图10示出了根据本发明实施例的一种基于状态迁移的自动测试可视化系统结构示意图;
图11示出了根据本发明实施例的另一种基于状态迁移的自动测试可视化系统结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地说明,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供一种基于状态迁移的自动测试方法,包括以下步骤:
获取测试脚本,所述测试脚本包含一个或多个状态元素,所述状态元素用于表示测试执行动作和状态迁移关系;
解析测试脚本,将状态元素转化为状态对象,将状态对象存储在列表中;
执行自动测试,包括:
从列表中获取至少一个状态对象作为当前状态对象,根据当前状态对象执行相应的测试动作;
根据指定条件将当前状态对象迁移为列表中的其他状态对象,继续根据切换后的当前状态对象执行自动测试。
本发明实施例中,执行相应的测试动作包括:通过模拟与无线闭塞中心通信的所有外部设备,根据相应的通信协议模拟外部设备向无线闭塞中心的信息交互。
下面对本发明实施例中自动测试脚本的结构、脚本解析和执行过程做示例性地说明。本发明实施例以无线闭塞中心测试为例,对一种基于状态迁移的无线闭塞中心自动测试脚本及其执行方法进行说明,本领域技术人员可以根据本发明实施例的记载,将本发明的技术方案应用在其他相似的测试场景中,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
脚本结构
本发明实施例中采用结构简洁易于解析的结构化脚本,以满足测试脚本编写相关逻辑。示例性地,本发明中脚本采用xml(可扩展标记语言)编写,也可以采用其他现有的结构化脚本语言(如JSON、Python等)或者自动定义的结构化脚本,只要能实现本发明实施例中如下的元素组织表达即可。
本发明实施例提供一种基于状态迁移(或称状态跳转)的自动测试方法,因此在测试脚本的结构设计中,测试脚本包含一个或多个状态元素,用于表示测试执行动作和状态迁移关系,状态元素中要执行的动作和迁移可以分别用动作元素和迁移元素进行定义。具体地,状态元素包括动作元素和迁移元素两个子元素;通过动作元素定义测试执行动作,通过迁移元素定义满足指定条件时需要执行的下一个状态。通过规范化的测试脚本,将复杂的测试过程整理为具有固定格式的元素,并通过迁移元素定义多个平行的状态元素之间的关系,设计巧妙,简化了脚本便捷的难度。并且,这种结构化的脚本便于通过可视化便捷界面实现,进一步提高了测试脚本便捷的便捷性、效率、清晰度,降低错误率。同时,提供了将元素转为对象列表的基础。
进一步地,可以采用一组相关联的状态元素表示一个完整的测试任务,该测试任务被执行时执行一个或多个测试动作。
进一步地,还可以将具有相同或相应测试场景的多个任务整和形成一个任务组,方便进行基于场景划分的任务管理。
本发明实施例针对包括任务组(Tasks)元素、任务(Task)元素、状态(State)元素、动作(Action)元素、迁移(Tran)元素的测试脚本进行示例性说明。示例性地,一个测试脚本元素结构如图1所示,测试脚本中包含一个任务组,该任务组内包含三个任务元素(任务1、任务2、任务3),以任务1为例,任务1这个任务元素包含两个状态元素(状态1,状态2),以状态1为例,状态1包含两个动作元素(动作1,动作2)和两个迁移元素(迁移1,迁移2)。元素和元素之间的包含关系根据结构化脚语言的语法通过特定的元素符号和元素位置关系设置,例如,通过具有首尾对应关系的一组标签来表示一个元素,首尾标签之间的内容作为该元素包含的内容。
示例性地,在XML测试脚本中,通过以下方式表示图1中的元素结构。
<tasks> →任务组
<task name="Task1"> →任务1
<state name="S0"> →状态1
<action name="action1"/> →动作1
<tran name="tran1"/> →迁移1
<action name="action2"/> →动作2
<tran name="tran2"/> →迁移2
</state> →状态1结束
<state name="S1">省略状态2的内容</state>
</task> →任务1结束
<task name="Task2">省略任务2的内容</task> →任务2
<task name="Task3">省略任务3的内容</task> →任务3
</tasks> →任务组结束
上述结构仅表示元素组织关系,省略的元素属性等内容。下面对各个元素进行详细说明。
a.任务组
任务组是任务的集合,一个任务组中可以包含一个或多个任务,例如包含当前脚本所描述的场景多个并行的任务。各个任务之间属于并列关系,用任务组来组织各个任务。不失一般性地,一个测试脚本包含一个任务组,便于修改管理。任务组元素需包含一个或多个任务(Task)元素。进一步地,任务组中包含至少两个任务元素,分别为测试任务元素和清理任务元素,也可包含多个测试任务,多个清理任务。
任务组元素包含周期(cycle)属性,执行自动测试时,根据周期属性周期性地依次执行脚本中的任务。不失一般性地,周期属性为数字类型,以毫秒为单位,不可为0或空。
示例性地,如下定义的任务组执行周期为500个时间单位(如毫秒)。
<tasks cycle="500">
b.任务
任务表示实现一个测试目的要执行的一系列相关的测试动作。本发明实施例中,任务元素包含状态子元素,即任务是状态的集合。用任务来组织各个状态,以便于执行器根据规则进行调度。本发明实施例中,执行器是用于解析测试脚本和执行测试脚本的一个或一组程序或包含所述程序的硬件设备。任务根据类型主要分为测试任务和清理任务。其中测试任务用于执行测试流程;清理任务用于在脚本正常执行完成或异常终止后进行相关处理,如关闭相关线程、清理内存、清理临时文件、断开网络连接等。以保证本脚本不对后续执行的脚本造成干扰。脚本执行器用于总体上处理状态的动作、发送数据、处理状态的迁移、校验数据等。其中处理动作由动作处理器承担,处理迁移由迁移处理器承担。动作处理器和迁移处理器被脚本执行器调度使用或者作为脚本执行器的一个组成部分。
任务元素需包含一个以上的状态(State)元素。任务中至少包含一个结束状态和一个非结束状态。
任务包含名称(name)属性,用以区别任务组中的各个任务。名称属性为字符串,可自定义,一般不为空,同一任务组中不同任务名称属性不相同。
任务包含清理标识(clean)属性,用以表示该任务是否为清理任务。不失一般性地,该属性为布尔类型,“true”表示此任务为清理任务,“false”或为空表示此任务为测试任务。在另外的实施例中,也可以用数字0,1区分测试任务和清理任务。
任务包含优先级(priority)属性,用以表示该任务在任务组中的执行的先后顺序。不失一般性地,优先级为整数数字类型,最低优先级为0。
任务包含描述(describe)属性,用以提示该任务的功能、场景。不失一般性地,此属性为字符串,可自定义,可为空。
示例性地,一个任务元素表示如下:
<task name="Task1" priority="0" describe="以不同的ATP模式与RBC建立会话" clean="false">省略子元素</task>
该任务元素的名称为“Task1”,优先级为最低优先级,任务的描述为“以不同的ATP模式与RBC建立会话”,清理标识为“false”,即该任务为测试任务。
c.状态
状态是控制测试逻辑的基本单元,也是执行器处理任务的基本单元,通过不同状态之间的有条件跳转控制与待测设备的信息交互流程。一个任务中包含一到多个状态。
状态包含名称(name)属性,名称属性用以区别同一任务中的不同状态。名称属性为字符串,可自定义,一般不为空。不同任务中的状态,其名称属性可相同。
状态包含描述(describe)属性,用以提示该状态的功能、场景。此属性为字符串,可自定义,可为空。
状态元素用于表示测试执行动作和状态迁移关系。具体地,通过动作元素和迁移元素作为状态元素的子元素,表示测试执行动作和迁移关系。
状态可包含零到多个动作(Action)元素,动作元素表示任务处于该状态时需要执行的操作。
状态可包含零到多个迁移(Tran)元素,此元素表示在满足相应条件下进行状态的转移,更新当前状态。
状态包含结束标识(end)属性,此属性标识任务中最后一个状态。结束属性为布尔类型,“true”表示此状态为结束状态,“fasle”或者为空表示此状态不是结束状态。
示例性地,一个状态元素表示如下:
<state name="S0" end="false" describe="建立安全连接">省略子元素</state>
该状态的名称为“S0”,结束属性为“false”,该状态并不是结束状态,描述为“建立安全连接”。
d.动作
状态通过动作元素内的属性设置相应状态下需要执行器进行的操作。例如向待测设备发送数据。
动作包含名称(name)属性,名称属性用以区别同一状态中的不同动作。名称属性为字符串,可自定义,一般不为空。不同状态中的动作,其名称属性可相同。
动作包含重复次数(times)属性,用以表示重复执行此动作内容的次数。重复次数属性以十进制数字表示,可为空。若此项为空,则默认为发送1次。
动作包含动作间隔(interval)属性,用以表示重复执行此动作内容的间隔。动作间隔属性以十进制毫秒表示,可为空。当重复次数不为0和空时此属性才有意义。若此项为空,则默认间隔为0。
动作包含源设备(src)属性,用以表示此动作对应的仿真设备。源设备属性是字符串,不可为空。
动作包含动作目标设备(target)属性,用以表示此动作对应的待测设备。动作目标属性是字符串,不可为空。
动作包含动作内容(do)属性,用以表示影响测试的相关操作。此属性为字符串形式,可为空。示例性地,利用动作内容属性可以修改向待测设备发送的数据内容,也可以修改测试设备的某些状态,例如测试设备和待测设备某通道的通断,还可以预设某些变量取值供后续动作引用。这些都会影响向待测设备发送数据。
进一步地,为增加脚本编写的灵活性,动作(具体为动作内容)可以还包括:变量引用符号,变量引用符号通过指定名称引用在前执行的状态的迁移中获取的变量。具体地,动作内容字符串中可使用“{捕获变量名称}”形式的字符串来引用之前状态迁移中通过变量属性,即var属性获取的变量。其中“{”、“}”为所述变量引用符号,捕获变量名称为所述指定名称。
动作内容还可以包括:通过保存变量表示、变量名称、变量取值人工设置并保存指定变量,保存的变量可以作为后续动作的引用变量。示例性地,动作内容字符串可使用指定形式的字符串,如“SaveVar:变量名:变量取值”设置并保存某变量取值,后续的动作内容可以用上述方式引用此变量。
本发明实施例中,引用的变量来源为两个地方:1.迁移中的变量,此变量为从待测设备发送来的数据中提取。2.动作中设置的变量,此变量表示预设一个变量取值,后续动作可以直接引用此值。
示例性地,一个动作元素的标识如下:
<action name="action1" do="SetVariable:ATP1_RBC-6:*:t_train_ack Value{t_train}+AddPacket(Once):ATP1_RBC-6:Message146" interval="0" times="1" src="ATP1" target="RBC-6" />
该动作的名称为“action1”,动作内容为“SetVariable:ATP1_RBC-6:*:t_train_ack Value {t_train}+AddPacket(Once):ATP1_RBC-6:Message146”,表示首先设置向待测设备发送的信息包中变量名t_train_ack的变量取值为之前捕获的变量t_train。之后向待测设备发送146信息包。此为内部约定协议。其中,{t_train}为从之前迁移中引用的名称为t_train的变量;动作间隔为0毫秒,即无间隔,重复次数为1次,源设备为“ATP1”,目标设备为“RBC-6”。
示例性地,另一个动作元素的标识如下:
<action name="action1" do="SaveVar:V1:1" interval="0" times="1" src="ATP1" target="RBC-6" />
其中,"SaveVar:V1:1"表示将变量V1赋值为1,后续动作可以直接引用该变量值。
e.迁移
迁移元素记录状态跳转的条件,用于实现根据待设备的不同反馈结果跳转至相应的状态。
迁移元素可包含名称(name)属性,名称属性用以区别同一状态中的不同迁移。名称属性为字符串,可自定义,一般不为空。不同状态中的迁移,其名称属性可相同。
迁移元素应包含目标状态(dest)属性,目标状态属性表示当本迁移条件满足时,将当前状态更新为指定的目标状态。目标状态属性为字符串,不可为空。本发明实施例中,目标状态为同一任务中的状态名称,即默认在同一任务中跳转。
迁移元素包含源设备(src)属性,源设备属性用以表示当前迁移校验数据的来源设备。
迁移元素包含目标设备(target)属性,目标设备属性用以表示当前迁移校验数据的接收方设备。此属性为字符串,可为空。待测试设备(如指定RBC)可能和多个外部设备通信。测试时通过仿真方式提供与待测试设备交互的环境,即通过仿真设备作为外部设备与待测试设备通信。多个仿真设备可以由一个脚本进行仿真数据注入,测试时执行器会收到待测设备向不同外部设备发送的信息,此时需要通过此属性区分该信息是否为发送至相应仿真设备的数据。
迁移元素可包含零到多个迁移动作(Action)子元素。该元素用以标识当迁移条件满足时,立即执行的动作。迁移的动作元素可以和上述状态的动作相同。
迁移可包含获取变量(var)属性,该属性表示当校验条件为真时,获取信息中指定名称的字段值。获取之后存储于执行器内存中。获取变量属性为字符串,不可为空。存储后的变量字段可在后续状态动作内容中引用,从而实现对动作内容中参数的动态赋值。解决了根据接收数据中的信息自动设置反馈数据取值的问题。
迁移元素应包含迁移条件(exp)属性,迁移条件用以定义迁移校验的具体内容。该属性为字符串形式的逻辑表达式,不可为空。
为增加脚本编写的灵活性,通过指定同步任务和同步状态实现任务间同步,具体地,在第一任务的第一状态的迁移中设置第二任务的第二状态,在执行过程中,只有在第二任务的第二状态的执行情况满足指定条件时,才执行该迁移的跳转,即更新当前状态。其中执行情况满足指定条件可以为第二任务的第二状态开始执行或执行完成。
迁移指令可以指定任务名称和状态名称的形式(如“Taskstate#任务名_状态名”)控制各个任务间的同步。例如任务2中状态3某条迁移指令为“Taskstate#任务1_状态5”则,当任务1执行至状态5后(具体为开始执行状态5时),任务2中的状态3进行跳转,以此方式可实现任务间同步。
示例性地,以下为一个状态中的两个迁移表示:
第一个迁移:
<tran name="tran1" dest="S0" exp="recv#"m_ack":1" src="RBC-6" target="ATP1" var="t_train">
<action name="action1" do="SetVariable:ATP1_RBC-6:*:t_train_ackValue {t_train}+AddPacket(Once):ATP1_RBC-6:Message146" interval="0" times="1"src="ATP1" target="RBC-6" />
</tran>
该迁移的名称为“tran1”,迁移条件为exp="recv#"m_ack":1",表示校验接收到的信息包中m_ack变量取值为1,则此条件满足,其中,“"”是XML文本中双引号的转移,此指令实际为recv#”m_ack”:1。当迁移条件满足时,执行迁移中的动作“action1”,执行从源设备ATP(ATP1)向目标设备RBCR(RBC-6)发送数据包的功能;并且在迁移条件满足时,先执行迁移中的动作“action1”,然后跳转到下一个状态“S0”,即执行器执行的当前状态迁移为跳转的目标状态“S0”;声明变量var="t_train",var为变量声明标识,该变量赋值后可以被后续动作引用;跳转的源设备为RBBC-6,目标设备为ATP1。当校验本迁移时,将满足条件的数据中t_train变量取出并存储。在action中利用{t_trian}引用此变量,为发送的M146信息包中的t_train_ack赋值。
src和target分别表示测试过程中数据传输的源设备和目标设备。
第二个迁移:
<tran name="tran2" dest="S12" exp="outOfTime#2000000" src="" target="" />
该迁移的名称为“tran”,当同一状态中动作执行时间超过指定时间,2000000毫秒时,该迁移的迁移条件满足,跳转到目标状态“S12”。 上述具有层级关系的元素定义,能够为实现不同层次的控制过程提供数据基础。
脚本解析和执行方法
参照上述实施例的描述,编写测试脚本。当需要执行时,获取测试脚本,解析测试脚本,将状态元素转化为状态对象,将状态对象存储在列表中。执行自动测试的过程中,从列表中获取至少一个状态对象作为当前状态对象,根据当前状态对象执行相应的测试动作;执行过程中是否满足指定条件,当满足指定条件时,将当前状态对象迁移为列表中的其他状态对象,继续根据切换后的当前状态对象执行自动测试。
本发明实施例中,将解析和执行测试脚本的程序或部件成为执行器。示例性地,执行器读取脚本文件,对脚本中xml格式的信息进行解析,基于面向对象原则,将脚本信息映射为内存中的对象信息。本发明实施例中,以包含任务组、任务、状态、动作、迁移的测试脚本为例进行示例性说明,但不限于包含以上所有元素的脚本,可以简化为包含状态、动作、迁移的测试脚本,也可以包含其他元素,均可以根据本发明实施例揭示的解析执行过程做相同或相似的实现。
解析测试脚本时,为脚本中各个元素创建相应的对象,脚本中相应元素的属性映射为对象属性,将任务元素映射为任务对象,将任务组元素映射为任务组对象,将状态元素映射为状态对象,将迁移元素映射为迁移对象并存储在迁移对象列表中,将动作元素映射为动作对象并存储在动作对象列表中。各个对象的关系如图2所示。任务组元素对应任务对象列表的对象,即TaskList对象,该对象包含任务(Task)对象的动态数组(m_tasks),不失一般性地,数组按照脚本中任务的编写顺序存储相关任务,形成任务集合。Task对象包含状态(State)对象动态数组m_states,m_states按照脚本中本任务的编写顺序存储状态,形成本任务的状态集合。状态对象包含动作(Action)对象的动态数组和迁移(Transition)对象的动态数组m_actions和m_trans,m_actions按照脚本中该状态内动作的编写顺序存储动作,形成该状态对象的动作动态数组;m_trans按照脚本中该状态内迁移的编写顺序存储迁移,形成该状态的迁移集合。Transition对象也可包含Action对象的迁移动态数组m_tranActions作为迁移动作集合,其存储顺序和脚本中迁移动作编写顺序一致。
进一步地,在迁移对象中还可以包含动作对象集合组成的动作动态数组,其中的动作对象与状态中的动作对象可以为同一类型对象。本发明实施例中,示例性地,以JAVA语言的动态数组作为存储状态、动作、迁移等对象集合的容器,在另外的实施例中,也可以采用采用足够空间的静态数组或者集合Set来实现,并且不限制编程语言。本发明实施例中,除了此处的“集合”表示编程中的类型Set以外,其他出现“集合”的地方应作广义理解,即标识包含一组元素的容易,与“列表”意义相同。
执行器执行脚本过程中直接从内存对象获取脚本信息,不再重复读取脚本,该对象信息作为静态脚本信息。
通过将脚本中的元素转换为相应的对象列表,能够对测试过程进行对象化编程控制,具有更明确的数据耦合关系,从而脱离了基于脚本执行测试的“边解析,边执行”的模式。对象列表记录了一个测试场景下的整个测试过程,可以进行全面精细地获取测试情况,并根据执行过程中对于对象处理的记录实时显示整体的测试进度,而不再是线性的显示当前进度状态。
当前脚本采用自定义的结构,无法像脚本语言那样由相应语言的解析器直接执行。需要定义特殊的执行方法来解析、执行脚本,进而驱动测试。下面对基于上述脚本解析过程存储对象后执行测试操作的过程进行具体说明。
a.任务组的执行方法
为实现脚本的批量执行,需要保证上一脚本运行的结果不对后一脚本运行造成影响,因此每个脚本中会定义一个或多个任务用于清理,本发明实施例中,在任务组中设置了测试任务集合与清理任务集合。其中,清理任务与执行任务结构相同,处理流程相同。仅通过清理标识(clean)进行区分,简化了元素对象定义和处理过程。清理任务中对本次测试的清理操作可由用户自定义,如清理内存、关闭网络连接等。执行器根据任务的清理标识属性识别清理任务后将其执行顺序置于测试任务执行完毕之后,执行器调用清理任务对象中相应的清理接口或方法,执行清理操作。这种方法可使得针对不同的测试场景的清理工作,采用统一的执行器逻辑完成,无需为不同的清理工作开发特定的程序。执行器对任务组处理方法如下:
(1)将任务组中的任务分类,形成测试任务集合(测试任务对象列表)与清理任务集合(清理任务对象列表)。
(2)按优先级依次执行测试任务集合中的每个任务。
(3)按优先级依次执行清理任务集合中的每个任务。
(4)结束脚本执行。
解析文本存储对象的过程是按照脚本中的顺序存储,之后根据优先级对数组排序,优先级相同按照编写先后顺序,从而形成按照优先级排序的任务集合(任务对象列表)。
示例性地,测试任务集合存储在第一动态数组m_tasks中,任务组对象还可以包含第二动态数组m_clean_tasks,该数组也用于存储一系列任务对象,即清理任务对象集合。
本发明实施例中,以并行方式执行任务组中(一个测试脚本中)的一组相关联的任务,具体地,以并行方式执行一个任务组中的一个任务集合中的多个任务对象对应的测试操作,进一步地,包括以并行方式执行一个测试任务动态数组的测试任务。具体地,由于采用列表存储任务元素所转换的任务对象,执行时,能够方便地从任务对象列表中获取多个任务对象,并行执行任务对象所代表的测试任务,提高了测试脚本执行的效率,且易于管理和追踪执行进度。当考虑任务优先级时,可以将相同优先级的多个任务并行执行或按照指定时间间隔先后开始并行执行多个任务。
以处理一个任务组的任务为例,本发明实施例实现任务并行执行的方式包括:采用分时复用的方式周期性地轮询调度任务集合中的各个任务。执行器的一个线程在每个周期内,处理任务组中的各个任务当前状态的动作和/或迁移,模拟多个任务的并发执行。本发明实施例中,采用一个线程轮询执行任务,避免多个线程浪费系统资源,开启线程本身就需要一定的系统资源,从而可以在脚本的一个任务组中包含多个任务,并不会因此造成同样数量的线程带来的资源消耗。
实现任务并行执行的方式还可以为:采用多线程并发的方式执行多个任务对象对应的测试任务。对多个任务分别设置执行线程,由系统自动为多个线程分配资源。在任务组的任务个数与系统资源配合恰当的情况下,可以简化编程实现。
下面对分时复用的并行方式进行详细说明,具体地,一组测试任务为任务组中测试任务集合中的测试任务。
执行器周期遍历任务集合中的任务,按照任务集合中任务的优先级依次判断各个任务的当前状态是否具备跳转条件。如果处理时刻该任务的当前状态中任一迁移条件满足,则更新该任务的当前状态,跳转至迁移指定的目标状态。一周期内对一个任务的跳转最多执行一次,不进行连续跳转;如果处理时刻该任务当前状态没有迁移条件满足,则该任务保持当前状态不变;如果该任务当前状态为结束状态,则该任务保持结束状态不变,下一周期不再执行此任务。这种调度方式使得每周期均可处理任务集合中的所有任务,从而以单线程模拟任务集合中各个任务的并发执行。
示例性地,如图3所示,(执行器)执行到第6周期,测试任务集合中未完成的任务对象有:任务1、任务2、任务3。执行开始,按照优先级遍历这三个任务对象,分别执行,本示例中,按照优先级依次执行任务1、任务2、任务3。对于任务1,当前状态为状态1,执行状态1并判断是否满足迁移(跳转)条件,本实例中,状态1满足迁移条件,故跳转至状态2,即将任务1的当前状态迁移为状态2。任务的当前状态可以在执行过程中通过相应的变量定义,如通过字符串保存当前状态的名称指定当前状态。对于任务2,执行当前状态,即状态1的动作,并判断其不满足迁移条件,则保持状态1,结束本周期中任务2的执行,继续执行任务3。对于任务3,当前状态为结束状态-该结束状态可以是上一周期跳转的结果,则保持结束状态,结束本周期对于任务集合的便利。进入第7周期,遍历任务集合中的任务,按照优先级,分别执行当前状态不是结束状态的任务,包括任务1和任务2。对于任务1,当前状态为状态2,执行状态2的动作,判断迁移的条件是否满足,当不满足时,保持状态2。继续执行任务2,执行状态1的动作,判断迁移条件是否满足,满足迁移条件,则跳转至状态2,结束任务2的本周期执行,结束本周期任务集合的执行。
b.任务的执行方法
任务执行过程即处理任务中的各个状态,从列表中获取至少一个状态对象作为当前状态对象,根据当前状态对象执行相应的测试动作。获取当前状态的动作对象,按照动作对象向待测设备发送数据。根据指定条件将当前状态对象迁移为状态对象列表中的其他状态对象,包括:获取当前状态的迁移对象,按照迁移条件校验待测设备反馈的数据,并根据校验结果跳转至新的状态对象。示例性地,执行器处理一组相关任务的过程如下:
步骤1:按照优先级从任务集合中取出任务,之后进行步骤2。
步骤2:获取该任务当前状态,之后进行步骤3。任务的当前状态初始化可以为状态对象列表中的第一个状态,之后根据状态跳转修改当前状态。
步骤3:如果该状态为任务的结束状态则将此任务从任务对象列表中删除并进行步骤6,否则进行步骤4。
步骤4:处理该状态定义的状态动作,之后进行步骤5。
步骤5:校验该状态定义的状态迁移。如果该迁移触发,则将任务的当前状态更新至迁移的目标状态。如果该迁移未触发,则任务保持当前状态。之后进行步骤6。示例性地,等待待测系统的某数据则需要执行器维持当前任务状态不改变。本发明实施例还提供超时判断迁移,例如上面提到的:
<tran name="tran2" dest="S12" exp="outOfTime#2000000" src="" target="" />
为状态增加一个超时检查,这样状态等待超时后,该迁移条件满足,则可以可跳转至预期状态,不会出现无限循环执行该状态的情况。
步骤6:任务集合中存在本周期未处理的任务则重复步骤1。如果没有未处理的任务则进行步骤7。
步骤7:此任务集合执行完毕。
本发明将状态设置为动作和迁移的集合,通过状态的生命周期来实现状态迁移,完成状态中测试动作的执行。状态生命周期包括创建、执行。进一步地,还包括清理,即该步骤不是必须的,但可以提高测试执行的严谨性。
创建:当某个任务当前状态更新时,首先动作处理器和迁移处理器分别加载状态的动作和迁移的静态数据(包括动作和迁移的属性信息),在动作处理器和迁移处理器中设置状态的动作信息和迁移信息,动作信息包括与动作对象属性相应的参数,如执行次数、动作间隔等静态数据,还可以包括用于标记动作执行情况的参数,迁移信息包括与迁移对象属性相应的参数,还可以包括用于标记迁移执行情况的参数。在一个实施例中,动作和迁移的静态数据也可以通过对象拷贝的方式,在动作处理器和迁移处理器中设置具有相应属性的动作对象和迁移对象。本发明实施例中,动作处理器和迁移处理器分别为用于执行动作处理和迁移处理的程序或设备,包含在执行器中。
具体地,获取当前状态的动作对象,获取动作对象的属性信息,根据属性信息设置动作信息,动作信息包含与动作属性相对应的参数,动作对象的属性也与测试脚本中动作元素的属性相应。如通过数值型参数times存储动作对象的重复次数属性值。在执行过程中对于times进行运算,记录当前动作执行次数,以判断是否按照测试脚本中的要求重复执行了指定次数。相似地,将迁移对象的属性信息赋值给迁移执行器中的迁移信息字段,另外,还包括设置用于标记迁移执行情况的参数,例如,通过迁移条件校验状态参数标记迁移条件是否满足。
执行:状态创建完成后由动作处理器执行动作,并更新动作执行次数、距离上次执行的间隔等参数。由迁移处理器检查迁移条件是否满足,并更新迁移条件校验状态,如校验通过或校验不通过。进而执行器获取迁移处理器中的校验状态,判断是否满足跳转条件,满足时,更新当前状态。
清理:当前状态的迁移被满足后,状态即将跳转,跳转前将动作处理器和迁移处理器中该状态的动作信息和迁移信息清除。这样,如果后续状态再次跳回至此状态时,本状态相关迁移和动作的处理不受之前状态的影响。
这种方式可灵活地处理状态之间的跳转,处理不同的状态仅需要在处理器中加载相应的动作和迁移,在状态跳转前清除处理器中的旧状态的动作和迁移即可。
下面结合图4对状态生命周期进行说明。获取状态对象,创建待执行的状态生命周期,包括在动作处理器和迁移处理器中分别根据静态动作数据和静态迁移数据初始化动作信息和迁移信息。示例性地,获取状态的动作,在动作处理器中复制动作对象,即动作1,初始化动作1的执行次数参数为0。获取状态的迁移对象:迁移1、迁移2,生成复制的迁移对象,初始化迁移1的迁移条件校验状态为“条件未满足”,初始化迁移2的迁移条件校验状态为“条件未满足”。开始执行状态:根据执行器中的动作对象指定的动作内容执行相应的测试动作,如从源设备向目标设备发送指定消息,并按照对象的重复次数重复执行n次。动作执行完成后,迁移执行器判断迁移条件是否满足,更新迁移1和迁移2的迁移条件校验状态。执行清理:当迁移处理器中有一个迁移的迁移条件满足时,更新其迁移条件校验状态为“条件满足”,跳转前将动作处理器和迁移处理器中该状态的动作信息和迁移信息清除。当迁移1和迁移2都不满足时,则保持当前状态(不跳转),知道下一个周期在此执行该状态时,由于动作执行器已经完成n次动作操作,则不再需要执行,仅有迁移执行器判断是否存在满足迁移条件的迁移。
解析测试脚本时,按照脚本中的编写顺序将生成的动作对象和迁移对象分别存储在各自的列表中。动作处理器执行时,按照列表中存储顺序,即动作按照脚本中的编写顺序依次执行,执行完当前状态中所有动作后。按照迁移对象列表中的迁移对象判断迁移条件是否满足,当某一迁移条件满足后,立即按照迁移规定的目标状态跳转,不再校验后续迁移条件。如果条件满足的迁移包含迁移动作,则首先执行该动作,迁移动作执行完毕后在进行跳转。动作和迁移处理顺序示意图如图5所示,先按照列表中的顺序(与脚本中的顺序对应,在另外的实施例中也可以根据需要对列表顺序重新排序)执行动作1、动作2、动作3、动作4,之后执行迁移1,判断是否满足迁移条件;若不满足,执行迁移2,判断是否满足迁移条件;若不满足,执行迁移3,若迁移3的迁移条件满足,则执行迁移3中的迁移动作(如果在迁移3中存在动作),即迁移动作3。之后,进行状态跳转,不再执行迁移4。
c.动作执行方法:
执行器依次获取当前状态的动作对象列表,本发明实施例中,动作对象列表通过动态数组ArrayList存储,如图2所示。依次执行列表中的动作,即根据动作属性设置的执行要求和动作内容执行测试操作。具体地,根据动作的重复次数和时间间隔执行动作内容:向待测设备发送相应的数据。执行器(具体为执行器中的动作处理器)处理动作的方法如下:
步骤1:从动作对象列表中获取动作对象,之后进行步骤2。
步骤2:比较动作已执行次数与动作对象属性的重复次数(times)属性,如果执行次数小于times,则跳转至步骤3,如果大于等于times则进行步骤6。
步骤3:计算当前时间距离上次该动作执行的时间间隔T,之后进行步骤4。
步骤4:比较T与动作对象属性中的动作间隔interval,如果T小于interval则进行步骤6,如果T大于或等于interval属性取值则进行步骤5。
步骤5:如果动作对象中存在变量引用符号,首先替换动作内容中被引用的部分,将变量引用符号替换为引用的数据内容,之后按照动作对象中设置的数据内容,即替换后的数据内容向待测设备发送数据。如果不存在变量引用符号,则直接向待测设备发送脚本中数据。之后进行步骤6。
步骤6:动作对象列表中存在本周期未被处理的动作则重复步骤1。如果没有未处理的动作则进行步骤7。
步骤7:动作对象列表执行完毕。
本发明实施例中,动作分为两种,一种是状态对象中包含的动作对象,一种是迁移对象中包含的动作对象。前一种动作是任务执行到当前状态时进行的操作;后一种是为了在迁移条件满足时立即执行相应的动作,迅速做出反应,例如:收到某待测设备反馈数据后立即向待测设备回复确认。
本节提到的动作为后一种。迁移和动作的具体执行顺序参见上文b中叙述。
d.迁移执行方法:
状态对象可以包含多个迁移对象,存储在迁移对象列表中,如上述本发明实施例的动态数组中。执行器根据迁移对象在列表中的顺序,即在脚本中的顺序依次执行迁移:检查迁移条件是否满足,从而控制状态的跳转更新。执行器(具体为执行器中的迁移处理器)处理迁移的方法如下:
步骤1:从迁移对象列表中获取迁移对象,之后进行步骤2。
步骤2:根据待测系统的反馈校验迁移条件,如果该迁移条件满足则进行步骤3,否则进行步骤5。
步骤3:如果迁移中包含变量声明标识,根据迁移对象的变量声明标识(var)指明的变量名称获取接收数据中相应变量的取值,存储于执行器内存,之后进行步骤4,如果var属性为空则进行步骤4。
步骤4:如果此迁移包含动作则处理迁移动作,之后进行步骤5。此迁移的动作(按照c中描述动作执行方法处理动作),否则,直接执行步骤5。
步骤5:根据迁移对象中的属性dest规定的目标状态更新任务的当前状态,之后进行步骤6。
步骤6:迁移对象列表中存在本周期未被处理的迁移则重复步骤1,否则进入步骤7。
步骤7:迁移对象列表执行完毕。
为防止等待迁移条件满足引起的阻塞,迁移处理过程中采用双线程,第一线程(线程1)周期判断迁移处理器中各个迁移对象的迁移条件是否满足,具体地,通过迁移条件校验状态参数的值确定是否满足条件,该参数用于标记条件判断结果,满足迁移条件则进行状态跳转,不满足则检查下一迁移,并不进行阻塞等待。第二线程(线程2)周期性地根据校验接收到的数据判断是否存在与之匹配的迁移条件,如果存在某迁移的校验条件与之匹配,则修改该迁移的校验结果标记,即迁移条件校验状态参数,下一周期第一线程检查到该迁移校验结果标记为满足时立即进行跳转。这种方式将接收信息的解析校验和状态跳转条件的校验分离,避免了等待待测系统数据引起的阻塞。
通过双线程处理迁移条件的具体流程如图6所示。第一周期,线程2从待测系统接收消息1,线程1获取迁移1的迁移条件(该条件为:接收信息2)的校验结果,此时迁移1的校验结果(即迁移条件校验状态)为不满足;线程1获取迁移2的迁移条件(该条件为:接收消息3),此时迁移2的校验结果为不满足。进入第2周期,线程1重复检查迁移1和迁移2的校验后结束本周期的执行;线程2从待测试系统接收信息2,查找是否存根据接收信息2而满足迁移条件的迁移,修改满足条件的迁移2的校验结果为满足。进入第3周期,线程1重复检查迁移1的校验结果,发现已经变成满足,则执行跳转。
基于本发明实施例的结构化、规范化测试脚本和对象列表执行方式,能够获取测试的整体、精细的进度情况。进而,也可以对进度情况进行可视化。
自动测试可视化
基于上述测试脚本结构、脚本分析和执行的设施方式,本发明实施例从测试脚本编辑及测试执行进度两个方面,提出对基于状态迁移的自动测试的可视化方案。基于以上结构化的测试脚本,可设置相应的可视化编辑工具对脚本进行编辑,并且可以将脚本执行的具体进度反馈到显示界面。
脚本可视化编辑:通过增加、删除界面中与脚本对应的可视化元素及修改元素属性从而实现对脚本的编辑。具体如下:
采用结构化测试脚本,所述测试脚本包含具有层级关系的元素,所述元素至少包括一个或多个状态元素;
所述状态元素包含用于表示测试执行动作的动作元素和用于表示状态迁移关系的迁移元素;
提供与所述测试脚本元素的层级关系的相对应的第一可视化界面,用于以树形结构展示测试脚本中的元素,树形结构的节点与测试脚本中的元素相对应。树形结构与测试脚本中的元素层级关系相对应。
测试脚本的元素还包括各自的属性,选择树形结构的节点时,提供显示和编辑相应元素树形的第二可视化界面,用于编辑测试脚本元素的属性,所述第二可视化界面可以包含在第一可视化界面中,也可以并列显示或悬浮显示在第一可视化界面之上,本发明实施例对二者的显示关系不做限制。
通过增加节点来增加测试脚本中的元素;通过删除节点来删除脚本中的元素;通过调整节点位置来调整测试脚本中的元素顺序。
通过程序在指定时机将第一可视化界面或第二可视化界面中节点及其属性设置转化为相应的测试脚本中。不失一般性地,所述指定时机为程序可以识别的编辑完成动作,如通过确认按钮接收的确认指令或者通过界面控件事件监控捕获编辑动作。在一个实施例中,也可以通过程序加载具有指定结构的测试脚本,解析测试脚本并显示在第一可视化界面中。
进一步地,测试脚本还包括上述任务、任务组元素,任务组元素包含任务,任务包含状态,根据这种层级关系按照上述相同的原理进行脚本与显示内容的转换、对应。
示例性地,可视化编辑示例如图7(a)、图7(b)。具体方法如下:
(1)以树形结构对脚本中的各个元素进行显示,树形结构的节点与脚本元素对应。
(2)选择树形结构某一节点时,显示该节点对应元素的属性,从而可对元素属性进行可视化编辑。
(3)选择树形结构的某一节点,可对其子节点进行增加,对当前选中节点进行删除操作,从而实现了对脚本任务,状态,迁移,动作元素的增加和删除编辑。
(4)选择树形结构的某一节点,可对同等级节点进行位置调整,从而实现了脚本中同级节点的排序。
(5)用户在可视化界面对相应属性进行编辑修改后,相应的脚本文件也进行更新。
脚本执行进度显示:以状态元素为基本单元对执行进度进行反馈,可使得脚本的执行情况细致地反馈给测试人员。测试进度可视化示例参见图8。示例性地,显示方式如下:
(1)根据脚本中每一个状态的执行情况对脚本执行进度进行显示,如果该状态正在被执行则相应树形结构节点则显示为黄色,如果已经执行过则显示为绿色,如果未被执行则显示为白色。此方式清晰地展示了各个任务中已经执行完成和正在被执行的状态,从而反映脚本执行进度。
(2)将已执行过的状态的跳转迁移对应的树形结构的节点显示为绿色,表示该状态下相应迁移条件满足,从而清晰地展示脚本中状态的跳转顺序以及迁移条件的校验结果。
下面对测试进度显示原理做详细说明。本发明示例提供一种基于状态迁移的自动测试可视化方法,包括:
以状态对象列表存储具有迁移关系的一组状态对象;
根据状态对象之间的迁移关系按照一定顺序执行状态对象相关的测试动作;
根据状态对象列表和状态执行顺序显示自动测试的执行进度。
具体地,包括以下步骤:
获取测试脚本,所述测试脚本包含一个或多个状态元素,所述状态元素用于表示测试动作和状态迁移关系;
解析测试脚本,将状态元素转化为状态对象,将状态对象存储在列表中;
执行自动测试,从列表中获取状态对象,执行相应的测试动作,根据状态迁移关系,迁移至新的状态对象并执行对应的测试动作。
执行自动测试的过程中,记录状态迁移的顺序,根据状态迁移顺序显示自动测试的执行进度。
进一步地,所述测试脚本包含一个或多个任务元素,所述任务元素分别包含一个或多个状态元素;所述任务元素转化为任务对象后存储在列表中;执行测试过程中对每一个任务的状态迁移进行记录,并根据状态迁移的顺序显示测试中的状态的执行情况。
进一步地,所述测试脚本中包含多个任务元素,执行时,存在多个任务元素并行执行;执行过程中对多个并行执行的任务的状态执行情况同时显示。
进一步地,状态执行情况包括已执行、未执行和执行中,根据不同的执行情况,将状态显示为不同的风格。所述风格包括但不限于:颜色、字体、形状大小。
执行任务的状态迁移时,采用第一哈希表记录任务迁移顺序,将任务标识作为第一哈希表的键,将任务的状态按照迁移顺序存储为数组,作为第一哈希表的值。任务表示具体为任务名称。执行过程中,状态发生迁移时,设置或更新第一哈希表中对应任务的哈希值。
具体地,状态元素包括用于表示测试动作的动作元素和用于表示状态迁移关系的迁移元素。一个状态元素可以包含一个或多个动作元素以及一个或多个迁移元素。
采用第二哈希表存储状态的动作和迁移执行情况,通过任务名称和任务中的状态名称确定第二哈希表的键,将任务的状态对应的已执行的迁移名称作为第二哈希表的值。具体地,如果此状态未执行到或正在执行并未跳转则该属性为空,如果该状态已执行完毕则该属性记录该状态迁移的名称。
根据第一哈希表和第二哈希表的记录显示任务执行进度。具体地,根据第一哈希表和第二哈希表整合出每个任务的状态迁移过程,将每个任务的任务名称、状态名称和迁移名称按照状态迁移的次序拼接为字符串,解析字符串后顺序显示状态迁移情况。本发明实施例中,通过状态的迁移执行情况,可以在测试执行过程中清晰地反应出任务状态的执行情况和迁移情况。
执行器在处理各个任务的状态跳转时,采用第一哈希表记录脚本执行过程中各个任务的状态跳转顺序,该哈希表的键为:任务名称,值为:该任务从起始状态到当前状态所经历的状态组成的数组。此外执行器用第二哈希表记录各个状态的跳转迁移,该哈希表键为:任务名称+状态名称,值为:相应任务的状态对应的迁移,如果此状态未执行到或正在执行并未跳转则该属性为空,如果该状态已执行完毕则该属性记录该状态跳转迁移的名称。
执行器周期遍历第一哈希表,从中获取对应任务经历状态组成的数组,之后遍历该数组,根据任务名称和状态名称从第二哈希表中查询到相应状态的跳转迁移,据此生成相应的字符串信息反馈至界面。该字符串信息格式为:任务名称+第一符号+第一状态+第二符号+第一状态的已执行迁移+分隔符号+第二状态+第二符号+第二状态的已执行迁移。不是一般性地,第一符号可以为“#”,第二符号为“@”,分隔符号为“;”,最后一个状态的已执行迁移可以为空。如果状态为任务的当前状态,则跳转迁移填写空。
该过程原理参见图9,根据第一哈希表和第二哈希表拼接处任务2的字符串信息为:“任务2#状态1@迁移1;状态2@迁移2;状态3@空”,表示任务2已经执行了状态1和状态2,执行状态1中的动作后,因为满足迁移1而跳转至状态2,在执行状态2的动作后,因满足了状态2的迁移2而跳转至状态3,状态3的迁移还未执行。拼接的任务1的字符串为“任务1#状态1@迁移1;状态2@空”。
这种方式每周期以任务为单位生成所有任务的状态跳转路径并实时发送至界面,从而使得界面可以向用户实时反馈脚本中所有任务的执行情况。
基于相同的发明构思,本发明实施例还提供一种基于状态迁移的自动测试可视化系统,如图10所示,系统包括:
存储单元,用于以状态对象列表存储具有迁移关系的一组状态对象;
执行单元,用于根据状态对象之间的迁移关系,按照一定顺序执行各状态对象相关的测试动作;
显示单元,用于根据状态对象列表和状态对象执行顺序显示自动测试的执行进度。
获取单元,用于获取测试脚本,所述测试脚本包含一个或多个状态元素,所述状态元素用于表示测试动作和状态迁移关系;
解析单元,解析测试脚本,将状态元素转化为状态对象,将状态对象存储在存储单元的列表中;
进一步地,执行单元用于执行自动测试,从列表中获取状态对象,执行相应的测试动作,根据状态迁移关系,迁移至新的状态对象并执行对应的测试动作;
进一步地,显示单元用于执行自动测试的过程中,记录状态迁移的顺序,根据状态迁移顺序显示自动测试的执行进度。记录状态迁移的顺序可以存储在存储单元中。自动测试的执行进度数据可以根据存储单元中记录的对象列表、执行过程中的记录和执行单元的当前执行情况进行显示。本发明实施例中各个单元根据需要直接或间接数据连接。
在本发明的方法可以是由计算机或嵌入式程序控制的系统来实现。因此,与之相对应地,本发明的实施例中还提供了另一种基于状态迁移的自动测试可视化系统,如图11所示,一种基于状态迁移的自动测试可视化系统包括至少一个处理器以及至少一个存储器;存储器存储执行以上本发明任意实施例方法的计算机程序,处理器调用存储器中计算机程序以执行本发明任意实施例方法。
进一步地,存储器可与一个或多个处理器通信连接,存储器中存储有可被一个或多个处理器执行的指令,指令被一个或多个处理器执行,以使一个或多个处理器能够实现本发明的方法。
尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (12)

1.一种基于状态迁移的自动测试可视化方法,其特征在于,包括:
以状态对象列表存储具有迁移关系的一组状态对象;
根据状态对象之间的迁移关系,按照一定顺序执行各状态对象相关的测试动作;
根据状态对象列表和状态对象执行顺序显示自动测试的执行进度;
获取测试脚本,所述测试脚本包含一个或多个状态元素,所述状态元素用于表示测试动作和状态迁移关系;
解析测试脚本,将状态元素转化为状态对象,将状态对象存储在列表中;
执行自动测试,从列表中获取状态对象,执行相应的测试动作,根据状态迁移关系,迁移至新的状态对象并执行对应的测试动作;
执行自动测试的过程中,记录状态迁移的顺序,根据状态迁移顺序显示自动测试的执行进度。
2.根据权利要求1所述的基于状态迁移的自动测试可视化方法,其特征在于,
所述测试脚本包含一个或多个任务元素;
所述任务元素分别包含一个或多个状态元素;
所述任务元素转化为任务对象后存储在列表中;
执行测试过程中对每一个任务的状态迁移进行记录,并根据状态迁移的顺序显示测试中的状态的执行情况。
3.根据权利要求1所述的基于状态迁移的自动测试可视化方法,其特征在于,
所述测试脚本中包含多个任务元素,执行时,存在多个任务元素并行执行;执行过程中对多个并行执行的任务的状态执行情况同时显示。
4.根据权利要求1所述的基于状态迁移的自动测试可视化方法,其特征在于,
状态执行情况包括已执行、未执行和执行中,根据不同的执行情况,将状态显示为不同的风格。
5.根据权利要求1所述的基于状态迁移的自动测试可视化方法,其特征在于,
执行任务的状态迁移时,采用第一哈希表记录任务迁移顺序,将任务标识作为第一哈希表的键,将任务的状态按照迁移顺序存储为数组,作为第一哈希表的值;
采用第二哈希表存储状态的动作和迁移执行情况,通过任务名称和任务中的状态名称确定第二哈希表的键,将任务的状态对应的已执行的迁移名称作为第二哈希表的值;
根据第一哈希表和第二哈希表的记录显示任务执行进度。
6.根据权利要求1所述的基于状态迁移的自动测试可视化方法,其特征在于,
提供与所述测试脚本具有层级关系的元素相对应的第一可视化界面,用于以树形结构展示测试脚本中的元素,树形结构的节点与测试脚本中的元素相对应。
7.根据权利要求1所述的基于状态迁移的自动测试可视化方法,其特征在于,
状态元素包括动作元素和迁移元素两个子元素;
通过动作元素定义测试执行动作,通过迁移元素定义满足指定条件时需要执行的下一个状态;
解析测试脚本时,为脚本中各个元素创建相应的对象,脚本中相应元素的属性映射为对象属性,包括:
将状态元素映射为状态对象,将迁移元素映射为迁移对象,将动作元素映射为动作对象;
状态对象包含动作对象的动态数组和迁移对象的动态数组。
8.根据权利要求1所述的基于状态迁移的自动测试可视化方法,其特征在于,以并行方式执行一个测试脚本中的一组相关联的任务,包括:
采用列表存储任务元素所转换的任务对象;
执行时,从任务对象列表中获取多个任务对象,并行执行任务对象所代表的测试任务。
9.根据权利要求8所述的基于状态迁移的自动测试可视化方法,其特征在于,
通过增加节点来增加测试脚本中的元素;
通过删除节点来删除脚本中的元素;
通过调整节点位置来调整测试脚本中的元素顺序;
选择树形结构的节点时,提供显示和编辑相应元素树形的第二可视化界面,用于编辑测试脚本元素的属性。
10.根据权利要求1-9任一项所述的基于状态迁移的自动测试可视化方法,其特征在于,所述执行相应的测试动作包括:
通过模拟与无线闭塞中心通信的所有外部设备,根据相应的通信协议模拟外部设备向无线闭塞中心的信息交互。
11.一种基于状态迁移的自动测试可视化系统,其特征在于,包括:
存储单元,用于以状态对象列表存储具有迁移关系的一组状态对象;
执行单元,用于根据状态对象之间的迁移关系,按照一定顺序执行各状态对象相关的测试动作;
显示单元,用于根据状态对象列表和状态对象执行顺序显示自动测试的执行进度;
获取单元,用于获取测试脚本,所述测试脚本包含一个或多个状态元素,所述状态元素用于表示测试执行动作和状态迁移关系;
解析单元,解析测试脚本,将状态元素转化为状态对象,将状态对象存储在存储单元的列表中;
所述执行单元用于执行自动测试,从列表中获取状态对象,执行相应的测试动作,根据状态迁移关系,迁移至新的状态对象并执行对应的测试动作;
所述显示单元用于执行自动测试的过程中,记录状态迁移的顺序,根据状态迁移顺序显示自动测试的执行进度。
12.一种基于状态迁移的自动测试可视化系统,其特征在于,所述系统包括至少一个处理器以及至少一个存储器;
所述存储器存储执行权利要求1-10任一方法的计算机程序,所述处理器调用存储器中的所述计算机程序以执行权利要求1-10任一所述的方法。
CN202110456428.7A 2021-04-27 2021-04-27 一种基于状态迁移的自动测试可视化方法及系统 Active CN112988597B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110456428.7A CN112988597B (zh) 2021-04-27 2021-04-27 一种基于状态迁移的自动测试可视化方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110456428.7A CN112988597B (zh) 2021-04-27 2021-04-27 一种基于状态迁移的自动测试可视化方法及系统

Publications (2)

Publication Number Publication Date
CN112988597A CN112988597A (zh) 2021-06-18
CN112988597B true CN112988597B (zh) 2021-08-10

Family

ID=76340256

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110456428.7A Active CN112988597B (zh) 2021-04-27 2021-04-27 一种基于状态迁移的自动测试可视化方法及系统

Country Status (1)

Country Link
CN (1) CN112988597B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114706651B (zh) * 2022-06-06 2022-10-04 天津联想协同科技有限公司 网盘文件摆渡状态提示方法、装置、网盘及存储介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20100002564A (ko) * 2008-06-30 2010-01-07 주식회사 큐에이엔씨 보조 접근 기술 기반 소프트웨어 테스트 자동화 시스템 및방법
CN104035870A (zh) * 2014-06-25 2014-09-10 广东欧珀移动通信有限公司 一种脚本执行信息的展现方法及装置
CN105792241B (zh) * 2014-12-26 2019-06-25 展讯通信(上海)有限公司 一种自动测试系统及方法以及移动终端
CN108595329B (zh) * 2018-04-23 2022-08-26 腾讯科技(深圳)有限公司 一种应用测试方法、装置及计算机存储介质
CN112579569A (zh) * 2020-12-15 2021-03-30 中国建设银行股份有限公司 一种数据迁移方法和装置

Also Published As

Publication number Publication date
CN112988597A (zh) 2021-06-18

Similar Documents

Publication Publication Date Title
CN110764753B (zh) 一种业务逻辑代码生成方法、装置、设备及存储介质
CN107273286B (zh) 针对任务应用的场景自动化测试平台及方法
CN111930635B (zh) 基于swagger快速自动化测试的方法及系统
CN104407973B (zh) 一种自动化单元测试的实现方法及装置
Grieskamp et al. Model‐based quality assurance of protocol documentation: tools and methodology
US8892953B2 (en) Method and system for test suite control
US20060282419A1 (en) Diagnosing problems in distributed systems
CN105209925B (zh) 用于调试自动化器件测试的程序的计算机实现方法及系统
CN105608258B (zh) 一种基于模型的系统设计及信息流可视化仿真系统及方法
CN108897676B (zh) 基于形式化规则的飞行引导控制软件可靠性分析系统与方法
CN110013672B (zh) 用于机器运行的游戏的自动化测试的方法、设备、装置以及计算机可读存储介质
CN102915242A (zh) 一种利用图形化操作实现代码编程的方法
CN112988597B (zh) 一种基于状态迁移的自动测试可视化方法及系统
CN112435072A (zh) 一种模型创建方法、装置、电子设备及存储介质
CN108874649B (zh) 自动化测试脚本的生成方法、装置及其计算机设备
CN107870863A (zh) 一种基于xml的分布式自动化测试方法
KR20130053714A (ko) Vpl을 이용한 프로그램 개발 방법과 그 방법을 구현한 프로그램이 기록된 컴퓨터로 읽을 수 있는 기록매체
CN112988596B (zh) 一种基于状态迁移的自动测试方法及系统
CN113919158A (zh) 一种用于飞行控制面板的仿真方法、装置及存储介质
CN110989549B (zh) 用于列车控制系统的软件测试通用自动化控制方法及装置
CN111142861A (zh) 结构化综控系统集成方法及装置
CN113434387A (zh) 一种基于脚本驱动的自动化测试工具及系统
CN100367233C (zh) 程序执行控制方式
CN113434405A (zh) 测试文件的确定方法及装置、存储介质及电子装置
CN110413518A (zh) 控件对象库的生成方法及生成装置和计算机可读存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20211217

Address after: 7 / F, block B, No.1 yard, Automobile Museum South Road, Fengtai Science and Technology Park, Fengtai District, Beijing 100070

Patentee after: BEIJING NATIONAL RAILWAY RESEARCH & DESIGN INSTITUTE OF SIGNAL & COMMUNICATION Co.,Ltd.

Patentee after: China Railway Communication Signal Co., Ltd

Address before: 7 / F, block B, No.1 yard, Automobile Museum South Road, Fengtai Science and Technology Park, Fengtai District, Beijing 100070

Patentee before: BEIJING NATIONAL RAILWAY RESEARCH & DESIGN INSTITUTE OF SIGNAL & COMMUNICATION Co.,Ltd.

CB03 Change of inventor or designer information
CB03 Change of inventor or designer information

Inventor after: Zhao Xiaodong

Inventor after: Luo Jing

Inventor after: Cao Yaxin

Inventor after: Cui Yan

Inventor after: Peng Dong

Inventor after: Zhang Yu

Inventor after: Han Xingbang

Inventor after: Wang Zhenhui

Inventor before: Cao Yaxin

Inventor before: Cui Yan

Inventor before: Peng Dong

Inventor before: Zhang Yu

Inventor before: Han Xingbang

Inventor before: Wang Zhenhui