第十九章 telnet

13
第十九章 TelnetSSH远程操作自动化测试 19.1、远程操作技术简介 在实施自动化测试过程中,我们往往不仅仅针本地程序进行测试,也可能会访问远程服 务器去查看某些作业的状态,启动某些作业并等待想对应的返回状态,比如:一个应用程序 有一个上载提供了一个上载功能,将一个作业上载到一台 unix 服务器下的某一个目录下去, 在程序完成中这个操作之后,测试人员需要远程登录到那台服务器上去检测文件是否完整的 上载到指定目录,并且文件大小与原始文件大小相符。这样的需求就不免会涉及到 Telnet 或者 SSH 等操作。所以本节主要讲解如何实施这方面的自动化测试过程。其中 Telnet 登录到远程机器所采取的不同的协议,当然还有很多不同的协议可以交互。比如:SSH1RloginSerialCOM)、TAPI 等方法。现在市场上提供了很多这种远程操作工具帮助我 们快捷的实现远程管理操作。这里介绍一个工具---SecureCrt 工具。这个工具也是很多管 理员首选的一个远程管理工具。之所以介绍这个工具,因为它不仅仅提供了丰富的图形化操 作方法,更加可喜的是它提供了一套 Activex 接口,方便了我们通过程序来实现自动化的 操作。我们将通过这个工具提供的接口来实现远程的自动化测试过程。 19.2SecureCrt ActiveX介绍 SecureCrt 是一个访问 UNIX 操作系统的一个仿真程序,可以在 Windows 平台下通过它 来对 UNIX 平台进行相关的命令操作,而且它同时发布的扩展接口,采取程序的模式来实现 自动化操作模式。所以在 UNIX 测试过程中可以借助此工具的扩展进行自动化测试的实施。 19.2.1 ActiveX接口结构图 SecureCrt 提供的 ActiveX 接口的结构图,详见图 19.1 《精通QTP与功能测试自动化框架设计实战》样张

Upload: yuan-yao

Post on 04-Mar-2015

185 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 第十九章 Telnet

第十九章 Telnet、SSH远程操作自动化测试

19.1、远程操作技术简介

在实施自动化测试过程中,我们往往不仅仅针本地程序进行测试,也可能会访问远程服

务器去查看某些作业的状态,启动某些作业并等待想对应的返回状态,比如:一个应用程序

有一个上载提供了一个上载功能,将一个作业上载到一台 unix 服务器下的某一个目录下去,

在程序完成中这个操作之后,测试人员需要远程登录到那台服务器上去检测文件是否完整的

上载到指定目录,并且文件大小与原始文件大小相符。这样的需求就不免会涉及到 Telnet或者 SSH 等操作。所以本节主要讲解如何实施这方面的自动化测试过程。其中 Telnet 是

登录到远程机器所采取的不同的协议,当然还有很多不同的协议可以交互。比如:SSH1、Rlogin、Serial(COM)、TAPI 等方法。现在市场上提供了很多这种远程操作工具帮助我

们快捷的实现远程管理操作。这里介绍一个工具---SecureCrt 工具。这个工具也是很多管

理员首选的一个远程管理工具。之所以介绍这个工具,因为它不仅仅提供了丰富的图形化操

作方法,更加可喜的是它提供了一套 Activex 接口,方便了我们通过程序来实现自动化的

操作。我们将通过这个工具提供的接口来实现远程的自动化测试过程。

19.2、SecureCrt ActiveX介绍

SecureCrt 是一个访问 UNIX 操作系统的一个仿真程序,可以在 Windows 平台下通过它

来对 UNIX 平台进行相关的命令操作,而且它同时发布的扩展接口,采取程序的模式来实现

自动化操作模式。所以在 UNIX 测试过程中可以借助此工具的扩展进行自动化测试的实施。

19.2.1 ActiveX接口结构图

SecureCrt 提供的 ActiveX 接口的结构图,详见图 19.1

《精通QTP与

功能测试自动化框架设计实战》样张

Page 2: 第十九章 Telnet

图 19.1---ActiveX 结构图

19.2.2 接口对象介绍

●Application Object:提供了所有的 SecureCrt 对象的属性和方法,它属于顶级对象

●Session Object:提供了当前与远程服务器端的连接和会话信息的状态和属性

●Screen Object: 提供了终端界面的信息访问的方法与属性

●Window Object: 提供了访问 SecureCrt 窗口的信息和状态等信息

●Dialog Object:提供了一些自定义对话框的对象和方法

●Arguments Object: 通过命令行方式启动 SecureCrt 程序的参数对象

19.2.3 SecureCrt支持的语言以及调用方法

SecureCrt 支持 VBScript 以及 Jscript 两个语言的调用,所以在调用其 ActiveX 接口

时首先要标识你所使用的语言和 ActiveX 的版本号,脚本头部的每一行必须以#开头,头

部包括$language 行和$interface 行。例如:下面一个简单的脚本: # $language = "VBScript" # $interface = "1.0"

Sub Main

MsgBox "SecureCRT version is: " & crt.Version End Sub

《精通QTP与

功能测试自动化框架设计实战》样张

Page 3: 第十九章 Telnet

19.2.4 脚本运行方法

第一种:可以打开 SecureCrt,然后选择菜单【Script】-〉【Run】,选择你写好的脚

本路径,即可运行,具体可参见图 19.2:

图 19.2---ActiveX 脚本运行方法

选择运行的脚本详见图 19.3。

图 19.3---选择运行脚本

选择【run】即可得到结果,详见图 19.4

图 19.4---运行结果 第二种方法:

《精通QTP与

功能测试自动化框架设计实战》样张

Page 4: 第十九章 Telnet

在 DOS 下通过命令行的方式运行脚本,详见图 19.5。

图 19.5---DOS 运行方法

执行命令:SecureCrt /Script 程序路径名+文件名称,然后回车,即可运行脚本,结

果如图 19.6。

图 19.6---运行结果

19.2.5、SecureCrt错误处理方法

SecureCrt ActiveX因为支持VBScript和 Jscript,所以错误处理模式跟此二种语言相

关,拿 VBScript 为例,如果 SecureCrt 脚本一旦出错,它会将错误信息放入到

Err.Description 中去,把错误号码放入到 Err.Number 中。 比如我们无法连接到远程服务器: On Error Resume Next Dim Sess ‘获取 crt 的 Session 对象 Set Sess=crt.Session ‘连接 unix 服务器 Sess.Connect “/s server” ‘连接失败,提示错误信息 If Err.Number<>0 then

Msgbox “不能连接到远程服务器” & Err.Description End If

《精通QTP与

功能测试自动化框架设计实战》样张

Page 5: 第十九章 Telnet

19.3、SecureCrt关键对象详解

在上一节中介绍了 SecureCrt ActiveX 中所涉及到的所有的对象,但是在实际工作中,

往往我们主要针对 Session 和 Screen 这两个对象进行操作。

19.3.1、Session对象

Session 主要控制的是连接过程的所有操作,比如说建立连接、断开连接以及一些服务

器端的属性获取(服务器端的端口、路径、服务器地址等)。 Session 所提供的属性,具体如表 19.1。

表 19.1----Session 属性介绍 属性名 描述 Connected 返回当前 Session 是否连接上

LocalAddress 返回本地机器的 IP 地址 LogFileName 返回或者设定当前的 Log 名字

Logging 返回当前 Session 是否记录了日志 Path 返回当前 Session 的路径

RemoteAddress 返回远程机器的 IP 地址 RemotePort 返回远程机器的端口号

《精通QTP与

功能测试自动化框架设计实战》样张

Page 6: 第十九章 Telnet

Session 所提供的方法,具体如表 19.2: 表 19.2----Session 的方法介绍

方法名 描述 Connect 连接远程服务器

DisConnect 断开远程服务器 Log 启用或者不启用 Log 信息 Print 开始或者停止自动打印

在这里着重介绍一下 Connect 函数,因为连接模式有很多种,所以连接的方法

也有所不同(Telnet、SSH、Rlogin 等等),但是在现实生活中常用的方法有两种 Telnet、SSH,这里主要讲解这两种连接的模式:

19.3.2、Connect函数的语法:

Crt.Session.Connect(“连接串”) Telnet、SSH 连接方法:

SSH 全称为 Secure Shell Protocol,因为中间数据传输有一个加密的过程,很多公

司为了保证数据的安全性,对一些重要的应用都将 telnet 的模式改为 SSH 模式,所以这就

导致了两种连接方式的不同。 SecureCrt 命令行 Telnet 方式:

Crt.Session.Connect(“telnet hostname port”) Crt.Screen.WaitForString(“登录提示信息”,超时时间). ’Example: Crt.Screen.WaitForString(“ogin: ”,5) crt.Screen.Send "用户名" & VbCr Crt.Screen.WaitForString(“登录提示信息”,超时时间). ’Example: Crt.Screen.WaitForString(“assword”) crt.Screen.Send "密码" & VbCr if Crt.Session.Connected then msgbox “登录成功” else msgbox “登录失败” end if SecureCrt 命令行 SSH2 的方式: Cmd="/SSH2 /L " & user & " /PASSWORD " & passwd & " /C 3DES /M MD5 " & " " & host Crt.Session.Connect cmd if Crt.Session.Connected then msgbox “登录成功”

《精通QTP与

功能测试自动化框架设计实战》样张

Page 7: 第十九章 Telnet

else msgbox “登录失败” end if 其中 SSH2 中包含了很多参数的设置,这里稍微介绍一下(可以参考表 19.3): (表 19.3----SSH2 参数介绍)

参数 描述 /L 用户名

/PASSWORD 密码 /C 加密方式 /M 指定的消息认证代码 /P 端口号

/PASSPHRASE 私有保护密钥 /REMOTE 远程服务器连接信息

/Z 指定压缩方式(1--9)

这里主要讲解了常用的方法,其他的方法与属性的介绍,可以去参考 SecureCrt 的 STK

19.3.3、Screen对象

Screen 主要控制着屏幕的手工操作,比如说在屏幕上接收返回值、发送指令等等。这也

是我们在登录操作完成后,常用的操作方法,测试时可以围绕这个对象进行动态数据的回放、

数据检查等。 Screen 提供的属性(具体可以参考表 19.4): (表 19.4---Screen 属性)

属性 描述 CurrentColumn 返回当前光标所处位置的列号

CurrentRow 返回当前光标所处位置的行号 Columns 返回总列数

Rows 返回总行数 Synchronous 设置是否同步

Screen 提供的方法(具体可以参考表 19.5): (表 19.5----Screen 的方法)

属性 描述 Clear 清除屏幕 Get 返回每行指定位置请求的字符 Get2 返回每行请求 Print 打印屏幕

ReadString 返回屏幕上的字符串 Send 发送命令

SendSpecial 发送特殊的字符 WaitForCursor 等待光标

WaitForKey 等待关键字

《精通QTP与

功能测试自动化框架设计实战》样张

Page 8: 第十九章 Telnet

WaitForString 等待某一个字符串 WaitForStrings 等待输出的很多不同的字符串

在实现自动化测试过程中,可以运用灵活运用这些函数实现我们各种类型的操作。

19.3.4、多样的检查点

检查当前屏幕上是否有特定字符输出,比如说下面案例,如果输出屏幕上出现了 hello

字符(等待字符输出超时时间为 5 秒钟),则弹出字符为“正确”的窗口,否则则弹出字符

为“错误”的窗口: If (Crt.Screen.WaitForString(“hello”,5)) then

Msgbox “正确” Else

Msgbox “错误” End If

检查当前屏幕可能存在那些字符输出或者组合输出,比如说下面的案例,我们将根据屏

幕的输出来做不同的判断处理,在写自动化程序时,开始无法准确预知可能出现什么字符,

但是知道哪一类的字符可能会被输出或者组组合输出,程序将根据这些输出做判断来操作程

序的下一步工作: #$language = "VBScript" #$interface = "1.0" Option explicit const STATE_HIDDEN = 0 const STATE_NORMAL = 1 const STATE_MINIMIZED = 2 '把可能出现的字符放入到一个数组里面去 Dim g_szTriggerStrings(13) g_szTriggerStrings(0) = "Permission denied" g_szTriggerStrings(1) = "PERMISSION DENIED" g_szTriggerStrings(2) = "Permission Denied" g_szTriggerStrings(3) = "authentication failure" g_szTriggerStrings(4) = "Authentication Failure" g_szTriggerStrings(5) = "warning" g_szTriggerStrings(6) = "WARNING"

《精通QTP与

功能测试自动化框架设计实战》样张

Page 9: 第十九章 Telnet

g_szTriggerStrings(7) = "Warning" g_szTriggerStrings(8) = "error" g_szTriggerStrings(9) = "Error" g_szTriggerStrings(10) = "ftp" g_szTriggerStrings(11) = "FTP" g_szTriggerStrings(12) = "Ftp" Sub Main() ‘设置屏幕同步输出 crt.screen.synchronous = true do Dim nIndex ‘使用 WaitForStrings 函数等待输出,此函数将根据当前屏幕的输出和你传入的字符进行判

别,如果和数组的第一个值相符,将输出”1”,结果以此类推 nIndex = crt.screen.WaitForStrings(g_szTriggerStrings, 20) Select Case nIndex Case 1,2,3 MsgBox "Permission Denied" Case 4,5 MsgBox "Authentication Failure" Case 6,7,8 MsgBox "Warning" Case 9,10 MsgBox "Error" Case 11,12,13 MsgBox "FTP" Case Else MsgBox "Timed out." End Select loop End Sub

《精通QTP与

功能测试自动化框架设计实战》样张

Page 10: 第十九章 Telnet

19.3.5、获取指定的位置的字符

在实际的工作中有时会截取屏幕上某一些特殊位置上的字符串保存下来,可以作为判断

或者后面的脚本输入处理,例如下面的案例,每 6 秒钟将截取屏幕上的最后一行数据,并等

待用户确认是否退出,是将退出操作,否将继续循环操作,直到 5 次循环结束 For nIndex = 1 to 5 ‘Crt.Screen.Rows 获取屏幕上总行数作为 Get 函数的最后一个参数,确保获取的是屏幕的

最后一行。Crt.Screen.Columns 获取屏幕上的总列数,确保能取完一个整行的数据 szLastRow = Trim(crt.Screen.Get(crt.Screen.Rows, _ 0, _ crt.Screen.Rows, _ crt.Screen.Columns)) szMsg = "现在输出总行数(row #" &crt.Screen.Rows & "): " & vbcrlf & vbcrlf & _ szLastRow & vbcrlf & vbcrlf & "(如果点击确认键,将等待 6 秒钟再次输出)" If MsgBox(szMsg, vbokCancel) <> vbOK then

exit for Else crt.Sleep 6000 End IF Next

19.3.6、请求的发送

一些正常的命令我们可以采用 send 函数与远程机器进行交互(比如说 UNIX 下所提供

的一些常用的命令),但是涉及到一些特殊指令(Shift+F1,F1,ESC、拷贝等等),我们不得不

使用 SendSpecial 函数进行特殊处理发送。这些字符的发送指令的值还与你设置的 Key Map相关。比如下面案例: #$language = "VBScript" #$interface = "1.0" ' 根据 KeyMap 文件, F3 实际对应着 VT_F8 crt.screen.sendSpecial "VT_F8" ' “按" SHIFT+F2 crt.Screen.SendSpecial "VT_F12" ' "按" SHIFT+F6 crt.Screen.SendSpecial "VT_F16"

《精通QTP与

功能测试自动化框架设计实战》样张

Page 11: 第十九章 Telnet

' 通过 SecureCrt 的菜单完成复制与粘贴功能 crt.Screen.SendSpecial "MENU_PASTE" ' 选择所有数据,送到粘贴板 crt.Screen.SendSpecial "MENU_SELECT_ALL" crt.Screen.SendSpecial "MENU_COPY" ' 打印屏幕 crt.Screen.SendSpecial "MENU_PRINT_SCREEN" ' 打印所选择的字符 crt.Screen.SendSpecial "MENU_PRINT_SELECTION"

19.4、案例讲解:远程登录unix服务器自动化测试

本案例主要讲解如何采取 secureCrt 的扩展去实施一套自动化测试的流程。

19.4.1 测试案例

上面通过一些具体的案例讲解了不同的函数在不同自动化测试的场合中应用,它对应着

自动化测试过程中各个小的技术点,比如说通过 SerureCrt 扩展设置的检查点测试工具 QTP的检查点的设置方式比较类似 而且有时使用起来会更加的灵活!因为控制逻辑都是由我们

自己设计完成。下面我们将介绍一个综合的案例来描述一个实际的过程。主要实现功能如下: Telnet 到远程主机 Server1 等待用户名提示符(username:),等待超时时间为 10 秒钟 返回正确将输入正确的用户名(user1),否则报错退出 等待密码提示符(password: ),等待超时时间为 10 秒钟 返回正确将输入正确的密码(pwd1),否则报错退出 进入主机后,进入到 cd /training 目录 执行一个 shell 程序,并随机传入参数 1---10 判断输出值是否为“testing1”、”testing2”、”testing3”、”testing4”,否则报 shell 程序错

误 发送退出命令,退出主机

19.4.2 脚本实现

实现脚本代码如下所示:

《精通QTP与

功能测试自动化框架设计实战》样张

Page 12: 第十九章 Telnet

#$language = "VBScript"

#$interface = "1.0"

Sub main

On Error Resume Next

Dim FindStr(5)

FindStr=”testing1” FindStr(1)=”testing2” FindStr(2)=”testing3” FindStr(3)=”testing4” FindStr(4)=”testing5” ‘设置同步模式

crt.Screen.Synchronous = True

‘等待用户名字段10秒钟

If (Not crt.Screen.WaitForString("username: ", 10)) Then

Msgbox “服务器超时” END IF

crt.Screen.Send "user1" & VbCr

‘等待密码字段10秒钟

If (Not crt.Screen.WaitForString("username: ", 10)) Then

Msgbox “服务器超时” END IF

crt.Screen.Send "user1" & VbCr

‘等待密码字段10秒钟

If (Not crt.Screen.WaitForString("password: ", 10)) Then

Msgbox “服务器超时” END IF

‘输入用户名和密码操作后进行后续的命令操作

crt.Screen.Send "pwd1" & VbCr

crt.Screen.WaitForString "#” crt.Screen.Send “cd /training” & VBCr crt.Screen.WaitForString “/training#”

rand1=int(10*Rnd())+1

crt.Screen.Send “sh test1.sh ” & rand1 ‘字符校验确认

nIndex = crt.screen.WaitForStrings(g_szTriggerStrings, 20)

Select Case nIndex

Case 1,2,3,4,5

Msgbox “testing” & nIndex Case Else

《精通QTP与

功能测试自动化框架设计实战》样张

Page 13: 第十九章 Telnet

Msgbox “timeout End Select

‘发送退出命令

Crt.Screen.Send “exit” & VbCr

Msgbox “Script complete” If Err.Number<>0 then

Msgbox “Error Message” & Err.Description End If

End Sub

19.5 远程服务自动测试思路分析

本节中主要讲解如何使用 SecureCrt 的 ActiveX 所提改得接口来实施 Telnet、SSH

进行自动化测试,着重介绍了 Screen、Session 两个对象以及他们所发布的方法和属

性 在学习这一节时,也提供了一个思路,在很多商用或者开源自动化测试工具未提供的对

应的功能时,也可以去寻求待测软件本身所发布的接口来协助我们实施自动化测试过

程。而且有时会更加的灵活和控制

《精通QTP与

功能测试自动化框架设计实战》样张