程序地带

TTCN学习


真没想到,一把年纪了还要学习TTCN…QAQ 学习文章8


以下文章是从别的地方拷过来的,一直找不到出处,如侵权联系我删除


第一点

Hello World 下面是一个非常简单的TTCN3模块,我们把这个模块存放到HelloWorld.ttcn3文件中


module HelloWorld {
control {
log("Hello World");
}
}

这个模块只有一个Control部分,Contorl部分只有一条log语句,这条语句是打印一条信息. control相当于c语言中的main函数,一个文件里面最多只能有1个(可以没有,作为库的情况下)


第二点

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函数


module LibraryModule
{
function HelloWorld()
{
log("Hello World");
}
}

用下面的命令编译这个文件 ttxp /compile LibraryModule 下面是一个MainModule模快(文件名MainModule.ttcn3), 在这个Module中导入LibraryModule, 并且调用HelloWorld函数,如下:


module MainModule
{
import from LibraryModule all;
control
{
HelloWorld();
}
}

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


返回结果:Hello World


第三点

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


module MyModule {
: // Definitions part
control {
: // Control part
}
}

Module可以Import 其他Module,这个类似于C中的Include,控制部分类似与C语言中的Main函数,用来控制测试用例的执行


第三点

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


下面是一个显示Hello的测试用例


testcase Hello() runs on EmptyComponentType
{
log("Hello");
}

测试用例由关键字testcase定义,必须定义在Module的定义部分 一个测试用例必须运行在一个component(本文翻译为组件)上(本例中是runs on EmptyComponentType,如果没有写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 Under Test,测试对象)通讯. 为什么要利用组件这个概念呢? 最大的好处就是可以用组件来模拟通讯网络结点, 比如MSC(Mobile Switch Center)可以是一个组件, NodeB(基站)可以是一个组件, SUT是RNC(无线网络控制器), 这三者之间消息的交互用测试用例来模拟, MSC与NodeB的组件可以设计为PTC,作为并行运行的进程,在MTC中调用这两个PTC进行消息发送与回复等操作.把每一个PTC想象为一个网络结点,测试环境就会清晰很多.


下面是一个含有两个测试用例的测试套件:


module Suite {
type component EmptyComponentType {}
testcase Hello() runs on EmptyComponentType
{
log("Hello");
}
testcase GoodBye() runs on EmptyComponentType
{
log("Good Bye");
}
control {
execute( Hello() );
execute( GoodBye() );
}
}

可以通过下面的命令来编译运行 ttxp /run Suite


excute:执行


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


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


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


第四点

TTCN-3模块定义 module 其他模块的定义引入 import 组定义 group 数据类型定义 type 通信端口定义 port 测试成分定义 component 特征定义 signature 外部函数/常量定义 external 常量定义 const 数据/特征模板定义 template 函数定义 function 可选步定义 altstep 测试例定义 testcase 变量声明 var 定时器声明 timer


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45022086/article/details/109757266

随机推荐

MySQL中你必须知道的10件事,1.5万字!

MySQL中你必须知道的10件事,1.5万字!

攻击性不大,侮辱性极强1、SQL语句执行流程MySQL大体上可分为Server层和存储引擎层两部分。Server层:连接器:TCP握手后服务器来验证登陆用户身...

Java中文社群 阅读(322)

MySQL函数

MySQL函数

MySql常见的函数使用MySql函数的目的为了简化操作,MySql提供了大量的函数给程序员使用(比如你想输入当前时间,可以调用now()函数)...

Or_One 阅读(601)

HELLO WORLD

HELLOWORLDHelloworld通常是程序员用命令行打印出的第一句代码,用于这篇blog的title最为合适。其实很早就有要写blog的想法,一直没有付诸实践。在这...

LeoHzH:) 阅读(949)

C语言学习日记Day04数组

C语言学习日记Day04数组

#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<stdlib.h>...

J_bz_Redio 阅读(201)

Linux用户SSH密钥认证

Linux用户SSH密钥认证《Linux一线运维实战》清华大学出版社,即将出版目前,登录系统使用密码认证是比较常见的认证方式,这是一种传统的安全策略。在密码的...

开拓者01 阅读(370)

最全的NumPy教程

最全的NumPy教程

译者:飞龙译文:https://www.jianshu.com/p/57e3c0a92f3a原文:https://www.tutorialspoint.com...

Python小二 阅读(196)

LeetCode138|搜索插入位置

一,搜索插入位置1.1,问题简述给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将...

码农王同学 阅读(736)