zoukankan      html  css  js  c++  java
  • ftp服务器测试

    前台传递字符串reqbuf:

    ftp服务器IP 端口 用户名 密码 ftp路径

    解析reqbuf,重新组装成系统命令,去执行ftptest.sh脚本,

    调用system函数,执行以上系统命令,结果日志打印到/tmp/ftptest.log中,读取日志进行结果判断:如果是230,则登录成功。

    登录成功时,日志记录如下:

    230 Login successful.

    Remote system type is UNIX.

    Using binary mode to transfer files.

     

     

    ip:192.168.51.206

    端口:21

    用户名:ftp

    密码:123456

    ftptest.sh脚本:

    #!/bin/bash

    logfile="/tmp/ftptest.log"

    ftp -i -n -v<<EOF>$logfile

    open $1 $2    (IP、端口)

    user $3 $4     (用户名、密码)

    cd $5         (路径)

    bye

    EOF

    测试结果打印到/tmp/ftptest.log,通过查看log文件中的状态码判断测试成功

    logroot@webwall:/home/xiachengjiao/nnba/nnba/mise/calls# vi /tmp/ftptest.log

    调试日志目录:

    Vi /webwall/var/run/debug.ftptest

    while(!feof(fp))

            {

                    if(fgets(statusnum, sizeof(statusnum), fp) == NULL)

                    {

                            DEBUGLOG(IW_LOG_MAINBRANCE, DEBUG, "get statusnum error! ");

                            ERR

                    }

                    DEBUGLOG(IW_LOG_MAINBRANCE, DEBUG, "statusnum=%s ", statusnum);

                    if((testdir == 0) && ((ackstatus = strncmp(statusnum, "230", 3)) == 0))

                    {

                            DEBUGLOG(IW_LOG_MAINBRANCE, DEBUG, "ftp服务登录成功 ");

                            break;

                    }

                    else if((testdir == 1) && ((ackstatus = strncmp(statusnum, "250", 3)) == 0))

                    {

                            DEBUGLOG(IW_LOG_MAINBRANCE, DEBUG, "ftp服务器文件路径测试成功 ");

                            break;

                    }

            }

            if(feof(fp))

            {

                    DEBUGLOG(IW_LOG_MAINBRANCE, DEBUG, "ftp服务器测试失败 ");

                    ERR

            }

    这个程序不能测试出ip或端口等配置错误的情况。错误出在feof()函数上面;。当/tmp/ftptest.log日志内容如下:

    Not connected.

    Not connected.

    程序执行结果是:

    get statusnum error!

    程序修改如下:

    if(fgets(statusnum, sizeof(statusnum), fp) == NULL)

            {

                    DEBUGLOG(IW_LOG_MAINBRANCE, DEBUG, "get statusnum error! ");

                    ERR

            }

            while(!feof(fp))

            {

                    DEBUGLOG(IW_LOG_MAINBRANCE, DEBUG, "statusnum=%s ", statusnum);

                    if((testdir == 0) && ((ackstatus = strncmp(statusnum, "230", 3)) == 0))

                    {

                            DEBUGLOG(IW_LOG_MAINBRANCE, DEBUG, "ftp服务登录成功 ");

                            break;

                    }

                    else if((testdir == 1) && ((ackstatus = strncmp(statusnum, "250", 3)) == 0))

                    {

                            DEBUGLOG(IW_LOG_MAINBRANCE, DEBUG, "ftp服务器文件路径测试成功 ");

                            break;

                    }

    #if 0

                    if(fgets(statusnum, sizeof(statusnum), fp) == NULL)

                    {

                            DEBUGLOG(IW_LOG_MAINBRANCE, DEBUG, "get statusnum error! ");

                            ERR

                    }

    #endif

                    fgets(statusnum, sizeof(statusnum), fp);

                    DEBUGLOG(IW_LOG_MAINBRANCE, DEBUG, "statusnum=%s ", statusnum);

            }

            if(feof(fp))

            {

                    DEBUGLOG(IW_LOG_MAINBRANCE, DEBUG, "ftp服务器测试失败 ");

                    ERR

            }

    当log日志内容不变时,程序执行结果是

    [30881]2013-05-21 15:53:45 ftptest.c[83]:       DoService

            statusnum=Not connected.

    [30881]2013-05-21 15:53:45 ftptest.c[102]:      DoService

            statusnum=Not connected.

    [30881]2013-05-21 15:53:45 ftptest.c[83]:       DoService

            statusnum=Not connected.

    [30881]2013-05-21 15:53:45 ftptest.c[102]:      DoService

            statusnum=Not connected.

    [30881]2013-05-21 15:53:45 ftptest.c[106]:      DoService

            ftp服务器测试失败

    分析:feof(fp)有两个返回值:如果遇到文件结束,函数feof(fp)的值为非零值,否则为0。

    EOF是文本文件结束的标志。在文本文件中,数据是以字符的ASCⅡ代码值的形式存放,普通字符的ASCⅡ代码的范围是32到127(十进制),EOF的16进制代码为0x1A(十进制为26),因此可以用EOF作为文件结束标志。[1]

    当把数据以二进制形式存放到文件中时,就会有-1值的出现,因此不能采用EOF作为二进制文件的结束标志。为解决这一个问题,ASCI C提供一个feof函数,用来判断文件是否结束。feof函数既可用以判断二进制文件又可用以判断文本文件。

    “C”语言的“feof()”函数和数据库中“eof()”函数的运作是完全不同的。数据库中“eof()”函数读取当前指针的位置,“C”语言的“feof()”函数返回的是最后一次“读操作的内容”。多年来把“位置和内容”相混,从而造成了对这一概念的似是而非。

    那么,位置和内容到底有何不同呢?举个简单的例子,比如有人说“你走到火车的最后一节车箱”这就是位置。而如果说“请你一直向后走,摸到铁轨结束”这就是内容。也就是说用内容来判断会“多走一节”。这就是完全依赖于“while(!feof(FP)){...}”进行文件复制时,目标文档总会比源文档“多出一些”的原因。

    在“C”文件读取操作时不能完全依赖于“while(!feof(FP)){...}”的判断。下面代码是改进后的代码,该代码执行后output文件内容和input文件内容一致,与使用“while(!feof(FP)){...}”相比,input文件的结尾符号(EOF)没有被读入到output文件中。

    ftp服务器测试:脚本实现

    bug:测试错误的时候不能检测出来。程序逻辑有问题,。,,所以以后做单元测试的时候必须要把可能出现的情况都测试全面。

    如果有一天我们淹没在茫茫人海中,庸碌一生,那一定是我们没有努力活得丰盛
  • 相关阅读:
    第4章-控制执行流程
    第3章-运算符
    第2章-对象
    第10章-内部类II
    第10章-内部类
    基于gtest、gmock、mockcpp和lcov的C语言LLT工程 —— LLT构造和lcov查看覆盖率实例
    字符设备驱动框架讲解
    基于Hadoop分布式集群YARN模式下的TensorFlowOnSpark平台搭建
    给 Virtualbox 中 Ubuntu 系统设置静态 IP
    小白请教几个关于Java虚拟机内存分配策略的问题
  • 原文地址:https://www.cnblogs.com/xiachj/p/4105137.html
Copyright © 2011-2022 走看看