详细设计说明书
引言
编写目的
此文档用于对WalktourN95 FTP测试模块进行Bug修正、代码复审、代码修改以及后续开发等。本文档给出了在第一版FTP测试模块中设计时所使用的设计思路和设计逻辑,分析了系统实现的总体结构和各个层次结构,同时阐述了接口和使用方法,给以后的代码修改和后续扩展提供基础和必要的帮助。
背景
- FTP测试模块主要面向需要进行无线网络数据业务测试的网络服务提供商。此测试模块是WalktourN95测试业务的一个重要组成部分,主要针对WalktourN95网络数据业务测试。此测试模块包括FTP上传测试业务和FTP下载测试业务。
- 本测试模块由杨志明提出开发,由张晓军负责开发,主要面向需要进行网络数据业务测试的客户。
定义
[列出本文件中用到的专门术语的定义和外文首字母组词的原词组。]
无
参考资料
[列出有关的参考资料。]
无
系统的结构
[给出系统的结构框图,包括软件结构、硬件结构框图。用一系列图表列出系统内的每个模块的名称、标识符和它们之间的层次结构关系。]
本测试模块在WalktourN95中的位置:

本测试模块内部层次:

业务层(FtpTestTask):
业务层面向任务调度器,提供启动上传任务,启动下载任务,取消任务等功能,同时向任务调度器输出登陆成功、发送关键命令、第一个数据包发送/接收、最后一个数据包发送/接收、网络断开等关键点信息。根据任务调度器中FTP业务结构的设定,完成特定的FTP次数。
传输层(FtpEngine):
面向业务层,提供IAP连接状态下或者断开状态重新连接这两种情况下登陆服务器传输文件完成FTP测试业务中单独一次任务如切换到特定目录上传或下载文件的功能,并提供对FTP服务器查询信息如是否支持多点下载,查询文件大小等的功能。并向业务层反馈关键点信息。
网络层(FtpSession):
面向传输层,提供FTP客户端的一些基本操作如登陆服务器、改变当前目录、在当前目录建立文件夹、上传、下载、查询是否支持REST、查询文件大小等等。
链路层(CtrlSocket和TransFile):
根据FTP协议建立起两条不同的链路,分别进行命令的接收解析以及文件的传输功能。
本测试模块内部结构:
业务模块(FtpTestTask)设计说明
本模块的设计考虑到几个因素:一、关键点信息的输出;二、多线程下载;三、业务由多次的FTP过程组成。加入此模块的另一个重要原因是在使用RCU数据上传时需要使用单次传输文件只输出成功与失败信息。因此独立出这一层次来,这样能更好的从总体结构上把握业务的实现并且易于扩展RCU文件上传等功能。
模块描述
业务模块面向任务调度器,由任务调度器调用,提供启动上传任务,启动下载任务,取消任务等功能,同时向任务调度器输出登陆成功、发送关键命令、第一个数据包发送/接收、最后一个数据包发送/接收、网络断开等关键点信息。任务调度器调用此模块时传入FTP业务的参数,根据设定完成特定的FTP次数。
分离出这一层次主要为了从总体结构上把握业务的实现,使得RCU文件上传功能更容易扩展。这样做的能使扩展功能更加方便。
功能
业务模块根据设定FTP业务的参数上传或下载文件,并提供获取到关键信息。
性能
无
输入项
启动FTP上传业务时需要输入FTP上传业务结构体的参数
上传业务结构体:
参数名称 | 默认值 | 参数说明 |
Name | 无 | 此测试业务名称,必须输入 |
Repeat | 1 | 重复上传任务的次数 |
FtpServerId | -1 | FTP服务器索引号, FTP服务器列表必须有FTP服务器才可以选择,如果没有则需要首先建立FTP服务器再设定此结构,必须选择 |
Dir | "/" | FTP服务器登陆时需要切换到此服务器目录并且以默认文件名进行上传任务;如果输入带文件名则先切换到服务器该目录上传时产生此文件。 |
FileSize | 102400 字节 | 设定上传到服务器的文件大小 |
Limit | 600 秒 | 传输文件时间长度,如果在规定时间内没传完就算失败 |
Intervals | 50 秒 | 每个单次上传任务之间的时间间隔 |
NoResponse | 20 秒 | 无响应时间,从网络连接上到FTP登陆完成的时间 |
DisconnectNet | 否 | 做完一次FTP任务时是否断开网络。意味着下一次是否需要重新连接网络。 |
启动FTP下载业务时需要输入FTP下载业务结构体的参数
下载业务结构体:
参数名称 | 默认值 | 参数说明 |
Name | 无 | 此测试业务名称,必须输入 |
Repeat | 1 | 重复上传任务的次数 |
FtpServerId | -1 | FTP服务器索引号, FTP服务器列表必须有FTP服务器才可以选择,如果没有则需要首先建立FTP服务器再设定此结构,必须选择 |
File | 无 | 服务器上需要下载的文件名,必须输入 |
Limit | 900 秒 | 传输文件时间长度,如果在规定时间内没传完就算失败 |
Intervals | 50 秒 | 每个单次上传任务之间的时间间隔 |
NoResponse | 20 秒 | 无响应时间,从网络连接上到FTP登陆完成的时间 |
DisconnectNet | 否 | 做完一次FTP任务时是否断开网络。意味着下一次是否需要重新连接网络。 |
Passive | 否 | 是否使用被动模式,注1:因中移动等网络商接入Internet网络由专门的IP地址,此处默认使用被动模式。 |
MultiDownCount | 2 | 采用多线程下载时的线程数,注2:是否应该采用多进程的方式下载才能得到精确的FTP传输速率未知 |
取消FTP业务可以在FTP业务的任何时刻取消。
输出项
向外输出关键点信息,上传和下载业务分别对应各自相应关键点信息,更为详细的描述见文档《RCU事件存储结构》
关键点 | 说明 |
SocketConnect | 此关键点信息从发起网络连接请求开始,如果网络已经连接则从Socket连接请求开始。标志着网络连接和FTP数据链路准备建立。 |
SendCommand | 此关键点信息对应上传业务是指发送STOR命令时刻,对应下载业务是发送RETR命令时刻。标志着FTP数据链路准备建立。 |
FirstData | 第一个数据包发送或者接收,标志着数据链路已经建立开始数据传输。 |
LastData | 最后一个数据包发送或接收,标志着数据传输完毕等待握手信号 |
TransferRate | 传输平均速度,标志着收到握手信号计算出了从传输第一个数据包到FTP服务器端传输最后一个数据包的时间段内网络传输的平均速率 |
SocketDisconnect | Socket断开连接 |
LoginFail | 登陆失败,注:登陆失败的情况多种,网络错误导致没法连接服务器、服务器地址用户名端口号错误都有可能引起此错误。 |
NoSuchFile | 无此文件错误,注:此错误可能下载文件不存在、上传的文件不存在等。 |
NoPermission | 无权限,注:此错误可能服务器不允许上传下载、不允许建立目录等 |
Drop | 传输过程中掉线 |
设计方法(算法)
无
流程逻辑

接口
此模块向任务调度器公开了最基本的三个接口函数,启动上传/下载任务以及取消任务。
作为传输层(FtpEngine)的观察者,此模块需要观察FtpEngine的状态变化。
存储分配
无
注释设计
代码已给出一些基本注释
限制条件
此模块面向任务调度器开发,输出了关键点信息。如果需要开发仅传输文件可以修改此业务层的实现不影响业务层以下层的实现。
测试计划
无
尚待改进的建议
[说明在本模块的设计中尚未解决而设计者认为在系统完成之前应解决的问题。]
可以改进和完善的建议:
- 多点下载是否采用多进程的方式
- 使用Port模式传输在模拟器中实现但在真机上尚未实现
传输模块(FtpEngine)设计说明
FTP的一次传输过程比较重要,这层的加入可以简化业务层的设计,可以使业务层专注实现业务方面的功能。
模块描述
此模块面向业务层,提供IAP连接状态下或者断开状态重新连接这两种情况下登陆服务器传输文件的功能。FTP单独一次任务是指切换到特定目录上传或下载文件的功能,同时提供对FTP服务器查询信息如是否支持多点下载,查询文件大小等的功能,并向业务层反馈关键点信息。
功能
完成一次传输,并提供查询服务器必要信息功能,对上层反馈关键点信息。
输入项
使用StartFtp函数启动FTP单独一次过程。将FTP命令串起来组成一次FTP过程。
参数 | 说明 |
isReconnectIap | 是否重新连接IAP |
isGetServerInfo | 是否获取服务器信息 |
使用DisconnectIap函数断开IAP和使用CancelFtp函数来取消Ftp
输出项
向观察者输出关键点信息,同上
流程逻辑

接口
此模块向网络模块公开了三个接口函数,启动任务、取消任务和断开网络。
作为网络层(FtpSession)的观察者,此模块需要观察FtpSession的状态变化。
网络模块(FtpSession)设计说明
网络模块FtpSession主要完成网络连接的建立、控制链路的建立和数据链路的建立,建立起FTP传输的基本环境,提供对FTP客户端命令的支持。
模块描述
此模块面向传输层,提供FTP客户端的一些基本操作如登陆服务器、改变当前目录、在当前目录建立文件夹、上传、下载、查询是否支持REST、查询文件大小等等,并向观察者反馈关键点信息。
功能
建立FTP传输的基本环境。
输入项
函数名 | 参数 | 说明 |
IapConnectL | aIapId | IAP连接,需要提供接入点号 |
CloseFtpLink | 无 | 关闭FTP连接 |
IapDisconnect | 无 | 断开IAP连接 |
Login | aServerIp aPort aUserName aPassword | 登陆FTP服务器,需要提供基本信息 |
TestRest | 无 | 获取服务器是否支持REST信息 |
ChangeDir | aDirectoryName | 改变当前目录 |
CreateDir | aDirectoryName | 在当前目录下新建目录 |
Store | 多个 | 提供两种方式的上传,根据是否从本地文件中读取数据上传到服务器分成两种方式上传 |
Retrieve | 多个 | 提供四种方式的下载,根据整存,整不存,块存,块不存四种不同的方式下载数据 |
Size | aRemoteFileName | 向服务器查询文件的大小 |
输出项
向观察者输出关键点信息,同上
流程逻辑

接口
此模块向传输模块多个FTP操作的函数详见输入项说明。
作为控制链路和数据链路的观察者,此模块需要观察控制链路和数据链路的状态变化。
控制链路、数据链路设计说明
根据FTP协议的描述,需要构建控制链路和数据链路,控制链路完成基本FTP命令的传输和解析,而数据链路完成数据的传输。
模块描述
本模块根据FTP协议建立起两条不同的链路,分别进行命令的接收解析以及文件的传输功能。
功能
建立FTP传输链路。
输入项
控制链路:
函数名 | 参数 | 说明 |
Connect | aIpAddr aPort | 连接FTP服务器,需要提供服务器地址和 端口号 |
SendRequest | aCmdId aBuffer | 发送FTP控制链路命令 |
RecvResponse | 无 | 接收FTP服务器下发信息 |
数据链路:
函数名 | 参数 | 说明 |
InitFtpModeL | aIpAddr aPort isPasvMode | 初始化数据传输通道,如果Pasv模式则需要连接到服务器特定端口,如果是Port模式则需要监听本地特定端口 |
StartSendFile | aFileSize | 传输特定文件大小的数据 |
StartSendFile | aLocalFile | 传输本地文件到服务器 |
StartRecvFileL | 多个 | 分别有四种形式整存,整不存,块存,块不存的下载方式 |
输出项
向观察者输出关键点信息
控制链路:
函数名 | 参数 | 说明 |
PackageReceivedL | aCmdId aData | 连接FTP服务器,需要提供服务器地址和 端口号 |
CtrlSockErr | aState aErrorCode | 发送FTP控制链路命令 |
数据链路:
函数名 | 参数 | 说明 |
DataLinkCreated | 无 | 数据传输通道建立 |
FirstData | 无 | 传输第一个数据包 |
TransferProgress | aTransSize aFileSize | 传输进度 |
BlockFinish | 无 | 块传输完成 |
LastData | 无 | 传输最后一个数据包 |
FileErr | aErrCode | 文件错误 |
DataSockErr | aErrCode | 数据端口出错 |
DataSockDrop | 无 | 数据传输过程中断线 |
接口
此模块向传输模块多个FTP操作的函数详见输入项说明。
作为控制链路和数据链路的观察者,此模块需要观察控制链路和数据链路的状态变化。

浙公网安备 33010602011771号