超市招工启事:TTCN3学习笔记

来源:百度文库 编辑:九乡新闻网 时间:2024/04/28 23:56:41
TTCN-3可以用做多种通信端口上的各种响应系统测试的描述语言。典型的应用领域是协议测试(包括移动协议和互连网协议)、服务测试(包括增补服务)、模块测试、基于平台、APIs等的CORBA测试。TTCN-3并不仅仅局限于一致性测试,它可用于多种类型的测试,如互操作性测试(Interoperability Testing)、健壮性测试(RobustnessTesting)、回归测试(Regression Testing)、系统和集成测试(System and IntegrationTesting)
TTCN-3意在用做独立于测试方法、层和协议的测试套的描述

TTXP(TTCN-3Express)是一个简单的TTCN3编译器(TTCN3是ETSI的一个语言标准,具体的编译器由各个厂商自己开发).在上面的网址可以找到下载地址与安装方法,这里不详细介绍了.

1.Hello World
下面是一个非常简单的TTCN3模块,我们把这个模块存放到HelloWorld.ttcn3文件中
  1. module HelloWorld {
  2. control {
  3.    log("Hello World");
  4. }
  5. }

这个模块只有一个Control部分,Contorl部分只有一条log语句,这条语句是打印一条信息.

2. TTXP命令

ttxp /run HelloWorld

编译并且运行HelloWorld, 运行结果: "Hello World"
这条命令包含了编译和运行两个步骤, 但如果你已经编译过,ttxp /run就会直接运行Hello World
但是如果你后来又修改了文件, ttxp /run会重新编译运行

假如你仅仅想编译文件,而不用运行,用ttxp /compile
ttxp /compile HelloWorld

你也可以用文件名进行编译,
ttxp /compile HelloWorld.ttcn3

运行
ttxp /run HelloWorld.ttcn3

模块名称必须和文件名称保持一致,比如M.ttcn3中只能包含Module M, 一个文件只能有一个Module
A command

ttxp /run M

or
ttxp /run M.ttcn3

会执行模块M的Control部分

模块中也可以不包含Cotrol, 我们可以单独写一些函数库并且分别编译
下面是LibraryModule.ttcn3.这个文件包含了LibraryModule模块,里面提供了一个HelloWorld函数

  1. module LibraryModule
  2. {

  3. function HelloWorld()
  4. {
  5.    log("Hello World");
  6. }

  7. }

用下面的命令编译这个文件
ttxp /compile LibraryModule

下面是一个MainModule模快(文件名MainModule.ttcn3),在这个Module中导入LibraryModule, 并且调用HelloWorld函数,如下

  1. module MainModule
  2. {
  3. import from LibraryModule all;

  4. control
  5. {
  6.    HelloWorld();
  7. }
  8. }

用下面的命令编译并且执行:
ttxp /run MainModule

返回结果:Hello World



这章里面主要介绍了TTXP的一些常用命令, 另外里面很多地方提到了模块Module, 下面我们简单介绍一下:

Module – Top-level unit of TTCN-3
模块- TTCN3中SCOPE最大的单元(其他的都需要包含在Module中).
一个Module包含两个部分:Module定义和Module控制,这两个部分都是可选的,也就是说一个Module中可以是空的,没有任何东西

  1. module MyModule {
  2. : // Definitions part
  3. control {
  4. : // Control part
  5. }
  6. }

Module可以Import 其他Module,这个类似于C中的Include

控制部分类似与C语言中的Main函数,用来控制测试用例的执行

Module还有更多的内容, 等以后接触到更多TTCN内容的时候再介绍

Test Suites
(测试套件或者测试对象)
一个TTCN 测试套件由多个测试用例组成,比如所有测试Attach的用例可以组成一个测试套件,主要是为了方便管理与组织测试用例

下面是一个显示Hello的测试用例
  1. testcase Hello() runs on EmptyComponentType
  2. {
  3.    log("Hello");
  4. }
测试用例由关键字testcase定义,必须定义在Module的定义部分
一个测试用例必须运行在一个component(本文翻译为组件)上(本例中是runs onEmptyComponentType,如果没有写runs on就是默认为运行在Main Test Component上)
这里我们需要定义EmptyComponentType组件,如下(这个Component的内容为空)
先简单介绍一下Component(组件)的概念
Component一般分为两种:MTC和PTC
MTC: Main Test Component,主测试组件,当测试用例执行的时候,测试执行环境(TTCN环境,这里是TTXP)会自动创建一个MTC, 在测试运行过程,只会有唯一的MTC.如果没有指明runs on某个Component,默认就是MTC;在测试代码中,不能控制MTC的建立与停止;
PTC: Parallel Test Component, 并行测试组件,PTC是由测试代码控制的,可以创建,停止等.PTC的销毁(release)是由系统自动完成的

测试组件之间的通讯是通过Ports来进行.PTC与MTC都可以与SUT(System UnderTest,测试对象)通讯.
为什么要利用组件这个概念呢? 最大的好处就是可以用组件来模拟通讯网络结点,
比如MSC(Mobile Switch Center)可以是一个组件, NodeB(基站)可以是一个组件,SUT是RNC(无线网络控制器), 这三者之间消息的交互用测试用例来模拟,MSC与NodeB的组件可以设计为PTC,作为并行运行的进程,在MTC中调用这两个PTC进行消息发送与回复等操作.把每一个PTC想象为一个网络结点,测试环境就会清晰很多.
  1. type component EmptyComponentType {}
下面是一个含有两个测试用例的测试套件:
  1. module Suite {

  2. type component EmptyComponentType {}

  3. testcase Hello() runs on EmptyComponentType
  4. {
  5.    log("Hello");
  6. }

  7. testcase GoodBye() runs on EmptyComponentType
  8. {
  9.    log("Good Bye");
  10. }

  11. control {
  12.    execute( Hello() );
  13.    execute( GoodBye() );
  14. }
  15. }
可以通过下面的命令来编译运行
ttxp /run Suite

Module控制部分执行了两个测试用例,所以结果是Hello 和Good Bye

如果你只想执行一个测试用例,用下面的命令
ttxp /run Suite Hello

这条命令仅仅运行Hello这个测试用例