测试脚本说明TCJSON (To be editted)
FWScripts作为自动化执行的脚本语言,最重要的应用场景为测试自动化,因此其支持测试用例相关的概念,如测试用例TC、测试步骤Step、执行流Flow及可重复模块Module FWScripts也支持测试用例执行时的要求,如对话框,结果报告等,主要是与BizAT紧密配合。
载入TC说明文件
测试用例脚本一般以测试步骤为单位,逐步执行,而在测试用例脚本的执行过程中,通过与BizAT框架的配合,可以达到最佳的用户体验,如可以针对每一步选择使用人工进行测试,可以让被测自己不显示对话框,转移到测试工作台上显示等等。为了达到这一个功能,必须针对每个测试步骤进行详细说明,这个说明以Json文件的格式存放到“TC说明文件”中。因此,必须在测试用例脚本中说明要载入的“TC说明文件”。
`FilePath :如果FilePath使用相对路径,则直接采用测试用例脚本文件的绝对路径目录
TC与Feature
在BizAT框架中,自动化脚本分为两种类型:TC与Feature
TC:以步骤为单位的执行脚本,通常包含有通知人工干预的测试脚本。
Feature:没有步骤含义的执行脚本,但有重复执行次数的含义(一共执行多少次,当前执行的是第几次),实现方式分成两种类型:一种类型是该脚本在调用时传入要执行的次数,由该脚本控制内部的次数循环;另一种类型是该脚本每次执行相当于执行了一次,要执行的次数在外部控制,该脚本在调用时传入当前是第几次执行的参数。
在BizAT框架中,SUTAgent与BizRunner会根据TCJSON中定义的情况采取不同的动作,如果发现是TC,则以步骤为单位执行脚本;如果发现是Feature,则进一步判断是否为Automatic,如果是Automatic,则传入要执行的总次数,让脚本执行,等待该脚本完成;如果不是Automatic,则SUTAgent会控制执行的次数,每次的执行都调用一次该脚本,并告知该脚本现在执行的是第几次。在TCJSON的执行命令中,%times%替代成执行总次数,%flow%替代成当前执行的是第几次;与此同时,在BizRunner中,如果$0,$1没有在命令行中被指定,则$0中存放第几次执行,$1中存放总的执行次数。
TCJSON C# 结构
系统根据该结构中totalstep的值来判断是TC还是Feature,如果该值为0,则当作是Feature。
如果是Feature,系统根据automatic来判定该Feature是否属于:自动控制执行次数(automatic==true)。
/* * * The class TC 记录测试用例的自动化脚本的相关信息,该信息贯穿于BIZAT整个框架: * BizTC:在编辑TCInfo完善后,生成TC * BizRunner:通过读取TCScripts或者TCInfo获得TC文件路径,将信息存放到BizRunner执行环境中(RunningEnv),用于执行脚本时使用TC每一个步骤的信息 * SUTAgent:通过命令行、SUTManager或服务器Dashboard发送过来的任务,从而获得TC,根据TC中的信息启动相应的执行命令,以及记录测试结果 * SUTManager:提供用户界面让使用者选择执行某个TC,通过读取TC信息,给予相关的提示 * DashBoard:依据MainServer分配的任务,进行进一步的用户界面操作,让使用者定义如何执行,然后发送到SUTAgent * MainServer:TC作为测试资源存放,testleader依据相关信息,分配任务给Tester,然后发送到SUTManager(通常是脱机方式)或者DashBoard * */ [DataContract] public class TC { [DataMember(Order = 0, IsRequired = true)] public string title; // 显示在Dashboard上面的内容 [DataMember(Order = 1, IsRequired = true)] public string description; // 点击Tips的时候显示的内容 20181010借用该字段,记录有哪些Items,使用items:item1/item2/... 一直到结尾,用于下拉菜单的显示。 [DataMember(Order = 2, IsRequired = true)] public string tcname;// 该TC的代号,检查跟JSON文件名称一致,作为容错的一种手段,该名称很重要,作为TC的指代 [DataMember(Order = 3, IsRequired = true)] public string feature;// 测试的特性,为上层应用使用,一般为空格隔开的Word list, 必须是小写, 可能不同的project定义不一样。 如Sleep,Display,Battery; 再如 Language,Registery, // 开始的字符被用在描述每一步的特诊上 长度totalstep+1,每一步中的数字0,1,2 表示自动化程度 3:表示全自动化 // 20190113 已实现关键字bundle [DataMember(Order = 4, IsRequired = true)] public int flowtype;// 本TC中Flow的类型。 1:固定Flow 0:不固定Flow,只有一个启动命令,有该启动命令自己接着往下执行 // 固定Flow意味着沿用之前的模式,每次启动时依据Floworder来决定启动的命令 // 如果是feature(totalstep==0),则该字段无意义,而且其值应为0。 [DataMember(Order = 5)] public int network;// 测试时网络会断开吗?0:应该不会断开; 1:一直为断开状态 2:会变化(测试的内容与网络相关) // 如果已知测试时网络会断开,则不再尝试着一直监控网络 [DataMember(Order = 6)] public string platforms; // 适合于哪些平台,为上层应用使用,一般为空格隔开的Word list, 必须小写 [DataMember(Order = 7)] public string require; // 工具与平台需求,如Ranorex,不分大小写,在SUTAgent中,可能会依据不同的test case做些不同的动作。 [DataMember(Order = 8)] public bool automatic; // true:totally automatic, false:half auomatic or manually //20190119 在Longrun项目中,用这个字段标记是ATS的脚本(true)还是BizSmooth的脚本(false) == true isATS, == false, not // 2017.04.19 如果是Feature,则意味着一定是全自动化的,此时该属性的含义是:针对feature的tcscript: true:tcscripts会自动重复多次; false:tcscripts每次启动只能执行一次,必须由SUTAgent进行多次调用 [DataMember(Order = 9)] public int totalstep; // 一共有多少步与steps的length应该一致, 新的版本将依据这个数值来决定一共有多少步 // 如果totalStep == 0, 则为 Feature [DataMember(Order = 10)] public TCStep[] steps ; // 每一步的详细信息, 在TCInfo里面,为List[DataMember(Order = 11)] public TCModule[] modules; // 模块名字列表,用于提供下拉菜单, 注意在TCInfo里面为List [DataMember(Order = 12)] public List<Flow> flows = new List<Flow>(); // 描述启动每个Flow的信息,如果flowtype=0,则 [1] 为 一次性准备动作 // 如果是Feature (totalstep==0), 则应有3个成员, [0] 为 执行Feature的命令,[1] 为 一次性准备动作, [2] 为一次性结尾的动作。 [DataMember(Order = 13)] public string savefiles; // 记录一旦发现bug,需要保存的文件,可指定多个文件,使用;隔开。 [DataMember(Order = 14)] public String tcgroup; //属于哪一组或哪一类型的TC组,用于自由编组 [DataMember(Order = 15)] public String dependence; // 执行该TC前要执行的其它的TC // bizat2 作为ReportPanel 里面的ActionButton的说明 [DataMember(Order = 16)] public String pretesting; //测试前准备动作 [DataMember(Order = 17)] public String posttesting; //强制小写。测试后的动作,可以配合main Server提供一些活动 "send result"; // 放入关键字表达不同的含义,如summary意思是每次测试完后若发现错误,要提醒进行summary // 20190113 已实现关键字 summary,appoint [DataMember(Order = 18)] public String messagefile; // 记录测试用例中显示的文本与编号, 用于BizATDLL 中的消息编号 } public class Flow { [DataMember(Order = 0, IsRequired = true)] public string commands;//20170704 改为只包含命令,如果是以\开头,则意味着需要加上BizAT的安装目录 [DataMember(Order = 1, IsRequired = true)] public string param; // 20170704 参数单独放在这里。 [DataMember(Order = 2, IsRequired = true)] public string workingdir; // when execute the command, the current working dir will be set to this. 如果是以\开头,则意味着需要加上BizAT的安装目录 [DataMember(Order = 3)] public bool isreboot;// defined by DATF is the system to be rebooted after this flow [DataMember(Order = 4)] public int firststep; // 开始的步骤编号,只适用于固定flow的情况 [DataMember(Order = 5)] public int steps; // 步数,只适用于固定flow的情况 [DataMember(Order = 6)] public string feature; // 该Flow的特点,便于启动时候的参数设置。 [DataMember(Order = 7)] public int type; // 设计成各种开关方式的Enum。 如是否使用了Ranorex平台等等,便于做些动作 } public class TCModule // 注意模块分为两种:外部模块与步骤内模块 { // 外部模块指定了一个步骤的范围,定义了执行这个步骤范围时的缺省设置 // 步骤内模块则定义在一个步骤的内部,用于测试某个具体的功能,也包含有缺省设置的定义部分 [DataMember(Order = 0, IsRequired = true)] public string name; // 用于下拉菜单显示的名字,不区分大小写,BizRunner依靠这个名字找到对应的模块 [DataMember(Order = 1, IsRequired = true)] public string description; // 描述的内容,主要用于安排任务的时候了解这个模块的细节 [DataMember(Order = 2, IsRequired = true)] public int stepbegin; // 外部模块的起始步骤, 内部模块定义时所在的步骤, [DataMember(Order = 3, IsRequired = true)] public int stepend;// 外部模块的结束步骤 , 如果为0,则意味着这个模块为步骤内的模块 [DataMember(Order = 4)] public int order; // 所在的编号,目前未用,目的时在Exe传递时可以传一个编号,提升效率 }
<< 调用BizAT | 测试执行说明TCEXE >> |