![TestStand工业自动化测试管理(典藏版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/333/43738333/b_43738333.jpg)
4.5.4 流程控制步骤
默认序列中的步骤是按顺序执行的,而流程控制步骤可以额外控制步骤的执行方式。比如:条件执行语句可以选择性地执行某些步骤;循环语句可以使步骤多次运行;Goto语句可以直接跳转,打破执行顺序。如果读者有过文本编程的经验,对于这些语句应该并不陌生,它们的原理基本是相通的。大体上可将TestStand中的流程控制步骤分为三类。
条件执行语句:if-else if-else和Select-Case
循环语句:For-For Each/While-Do While以及循环控制语句Break/Continue
Goto语句
1.条件执行语句
if语句有三种使用方法,第一种为直接if:
if(表达式)语句;
第二种为if-else:
![](https://epubservercos.yuewen.com/48B856/23020650909763706/epubprivate/OEBPS/Images/42745_90_1.jpg?sign=1739254857-l6WwOefWdbe3SJx7yoj7HgyLmlq7JpkH-0-998118f67cd2d13b277d7902a82e1a4c)
以上适用于两个分支的情况,当出现多个条件分支时,可以采用第三种if-else if-else:
![](https://epubservercos.yuewen.com/48B856/23020650909763706/epubprivate/OEBPS/Images/42745_90_2.jpg?sign=1739254857-sBS8RQOSFqNjnA9XHTPRq9Y6urSpPS8i-0-e145777f4d773878ec295f0e05beb73d)
由于这些步骤的使用比较直观,也没有需要特别配置的地方,比较容易在TestStand中掌握上述三种if语句的使用方法。
在范例资源的第4章练习中,附有例程<Exercises>\Chapter 4\Flow Control\If_ElseIf_Else.seq,读者可以通过菜单命令“ExecuteSingle Pass”运行该范例并观察结果。思考:如果将Locals.Index的值改为1,将会执行哪个分支?
Select-Case步骤类似于文本语言中的Switch-Case语句。如果Select表达式的值与某个Case分支中的常量表达式的值相等,则执行该Case分支。与文本语言中Switch-Case语句的不同之处在于:Select-Case步骤中,任何时候,只要有一个Case分支匹配,则在执行完该分支后,立刻跳出整个Select-Case结构,即最多只有一个Case分支被执行,并且它不需要Default默认分支。
Select-Case的形式如下:
![](https://epubservercos.yuewen.com/48B856/23020650909763706/epubprivate/OEBPS/Images/42745_90_4.jpg?sign=1739254857-ZaK0xIowbEP2lIVjFBCGC92Mov1ia4CN-0-c9feed616a331338ab28fb750cba4dad)
在范例资源的第4章练习中,附有例程<Exercises>\Chapter 4\Flow Control\Select_Case.seq,读者可以通过菜单命令“ExecuteSingle Pass”运行该范例并观察结果。思考:如果将Locals.Name的值改为“Short”,将会执行哪个分支?
2.循环语句
在循环语句中,For循环和While循环的区别在于For循环是执行固定的次数,而While循环的执行次数预先是不知道的,由循环继续条件(Loop Condition)决定。首先看For循环,当在序列中添加For步骤时,TestStand会自动添加一个对应的End步骤,如图4-60所示;For Each、While、Do While等类似。
![](https://epubservercos.yuewen.com/48B856/23020650909763706/epubprivate/OEBPS/Images/42745_91_2.jpg?sign=1739254857-JNumeepryigIHiK7LwSI1AnSabHRJYhY-0-7941e57b40fdfe17bf029e996932a1ea)
图4-60 自动添加End步骤
For循环的使用方式有两种,一种是“Fixed Number of Iterations”(固定循环次数),如图4-61中,配置循环次数为“3”,循环变量设为“Locals.x”,当填写完这两项设置之后,右侧的“Initialization”、“Condition”、“Increment”表达式就自动生成了。可以用如下伪码表示:
![](https://epubservercos.yuewen.com/48B856/23020650909763706/epubprivate/OEBPS/Images/42745_91_3.jpg?sign=1739254857-q709d58WOqeEkPc0Fj2O21F9h0DuCOzX-0-a2f1cf4d969775585a03de60a9cdb036)
![](https://epubservercos.yuewen.com/48B856/23020650909763706/epubprivate/OEBPS/Images/42745_91_4.jpg?sign=1739254857-ZbjtawYnNFJuWDV9cVUDUcHYrArvcMUe-0-d1cf923933a542bbb157289f48b3eed2)
图4-61 For步骤特定配置页
For循环的另一种方式是“Custom Loop”,在这种模式下,需要手动输入初始化、循环条件、循环增量,这种方式的好处是更灵活。
在范例资源的第4章练习中,附有例程<Exercises>\Chapter 4\Flow Control\For.seq,读者可以通过菜单命令“ExecuteSingle Pass”运行该范例并观察结果。
For Each的作用和For类似,它是和一个数组关联起来的。举个例子,某一维数组的长度为10,那么For Each就将执行10次,每次循环将访问该数组中当前索引下的元素。关于For Each不做过多介绍,有兴趣的读者可以查看帮助文档,并运行例程<Exercises>\Chapter 4\Flow Control\ForEach.seq。
While与Do While的区别在于,While循环会先判断循环条件是否得到满足,若条件满足才执行语句,而Do While则会先执行语句,再去评估循环条件,所以Do While中包含的语句至少会被执行一次。
在范例资源第4章练习中,附有例程<Exercises>\Chapter 4\Flow Control\While_DoWhile.seq,读者可以通过菜单命令“ExecuteSingle Pass”运行该范例并观察结果,体会While与Do While的区别。
所有的循环语句都可以用Break语句跳出循环,用Continue语句结束本次循环。Break语句用于从循环体内跳出,提前结束循环,程序接着执行循环后面的语句。Continue语句是强制跳过当前循环中剩余的语句而执行下一次循环,其作用为结束本次循环。Continue语句只结束本次循环,而不是终止整个循环的执行,Break语句则是结束整个循环过程。Break和Continue语句一般与if语句一起使用,例如:
![](https://epubservercos.yuewen.com/48B856/23020650909763706/epubprivate/OEBPS/Images/42745_92_2.jpg?sign=1739254857-3IA63OWP8LoL0ndJazOd4igs7MK82a0f-0-e104727d073920218928bc28f94531f0)
3.Goto语句
Goto语句会改变序列执行的顺序,它指向序列中的某个步骤(跳转目标),这样TestStand执行到Goto语句时,会直接跳转到该步骤。在TestStand中,一般会使用标签作为跳转目标,标签之后紧接着是相关的测试步骤,这样做的好处是修改或删除测试步骤时,不会影响Goto语句正常跳转。Goto语句不可滥用,由于它改变了序列的执行顺序,增加了调试和追踪的难度,并且多次采用Goto语句跳转,可能导致死循环。