适用于
- message-based communication
- 单组件
- 非并行
1、Port端口
- 无时延的发送信息
- 接收的信息存储在信息队列,信息队列无长度无上限,实际操作中会加限制
- 实例的端口类型确定可以收发的信息类型,以相对测试系统0的 信息方向决定in和out
- 支持几种信息类型从一个端口交互
2、Components组件
- 给定组件的端口描述它的接口,组件有本地声明,包括常数、变量和定时器
- 一种端口类型可以被多个端口对象实现,端口对象命名需不同、
3、Test Case测试例
- 描述怎么模拟SUT和SUT预期的回应
主测试组件
- 测试系统接口由端口完全定义,不额外定义TSI
判决
- 初始verdict=none,一但置值,TTCN-3不能更改该值
- setverdict不能置入error,error只因run-time error更改。
调用
- control中使用execute调用test case,隐藏的第二参数可以设置时间上限,超时置为error。一些test case设置error时,后面的test case还可以继续执行。
- timer有两种方式:在control part中设置;在test case中设置。control中的timer独立于test case的潜在错误;test case中的timer可以定义超时后的特殊行为,以及定义一个更小的安全界限。
结束
testcase.stop操作写入error在verdict中,终止单个操作;类似于setverdict使用方法反馈错误原因。
4、Template模板
- 保证一致性,和value不同,不能用在表达式中
- 可以被用于in中
5、Massage-Based Communication
send
- 利用template格式在特定端口向SUT发送信息
- 也可以发送value,需要带数据类型。e.g. send(integer:50)
receive
- 参数可以使用template格式
- 阻塞操作机制,只比较队列头template
- 匹配的话,移除信息
- 信息重定向:port.receive(template)->value.v
check
- 比对队列头的信息,不移除
- 队列无消息或队列头部match时,阻塞
多端口接收
- any port用于接收不用于send
- 多个端口有信息队列时,any port.receive随机选择端口队列
6、Timer
- 非负float值,单位秒
- 用于:组件type定义、test case、module的控制部分、函数、altstep;作为altstep/函数的参数,不是test case的参数。
- 操作:start、stop、timeout、running、read,可以log
7、Alt
- 从上至下的顺序,两个alt都满足时选择第一个执行
Boolean保护
- []中可以加入内容,[else]可以没有timeout和receive
- 几个[]可以都判true,也可以都不true。都不true的时候,若保护独立于snapshot快照且后续不改变,则error;若不独立或后续可改变,则可能再次判定为true。
- 建议避免使用该机制
repeat
- 重复alt,只能在alt和altstep中使用
8、Altstep
- 多个alt被不同alt所使用时,复用代码,类似函数
- 可以带参数和本地定义,也可runs on
9、缺省altstep
- 缺省altstep必须activite
- default作为reference
- value和template中,altstep带有out/inout时不能作为缺省;timer和port必须使用inout,并且可以作为缺省
- 频繁激活/停止altstep对代码可读性不好