QTP-不止GUI自动化测试之Telnet自动化

来源:互联网 发布:如何看风险矩阵图 编辑:程序博客网 时间:2024/04/29 07:22
QTP-不止GUI自动化测试之Telnet自动化
发布于:2013-12-26 19:49:05来自【群】                 测试部                     测试部

去年我们在推广QTP的时候,很多人问到我QTP能否完成一些非GUI类的自动化测试,由于公司产品的特殊性,大部分时候,测试人员更多地是需要进入设备调试端口进行调试,这个时候问题就来了,我们的QTP还能搞定吗?

拿前端产品而言,我们的很多信息都能从17230调试端口获取到,来作为我们测试用例的检查点。思考几个问题:

1. QTP 如何跟Telnet交互?

2. VBS原生代码真的能搞定吗?

可能很多测试人会想到一个办法:

那就是直接通过cmd去执行telnet.exe,然后通过一系列sendkey操作......

可想而知,这样的脚本是无法满足我们的需求的。

为此,在完善KCAuto自动化框架的时候,我想到了几个办法:

1. 利用第三方ActiveX COM组件,例如dimac的w3sockets

2.自己写一个跳板,所谓跳板就是让其跟telnet交互完成后将结果扔回QTP

完美解决方案:

步骤一,写一个【跳板】

w3sockets在实际使用过程中并不适用,因为他存在致命BUG,buffer一直返回0

于是用Python内置telnetlib库(之前写过的PySuperPrint也是用到的这个)写一个小跳板:

源代码如下:

# -*- coding:utf-8 -*-
'''
Ktelnet是提供给KCAutoPro自动化框架调用的telnet执行环境
执行环境 Python2.X
作者:龚天羽
版本:1.0
使用帮助:
'''
__author__ = 'Archer'
import telnetlib,sys
# 定义Kteldebug函数,默认gbk解码
def Kteldebug(ip,navpromot,command,port=17230,decodetype='gbk',timeout=30):
    #创建一个对象引用,创建调试连接
    Ktelnet=telnetlib.Telnet(ip,port=port,timeout=timeout)
    #等待前置字符出现
    Ktelnet.read_until(navpromot)
    if not isinstance(command,str):
        return 命令行格式有误,请重新输入
    else:
        #最后发送\r\n相当于某些COM组件的sendline
        Ktelnet.write(command+'\r\n')
        #返回服务器响应的值,调用解码格式
#特别注意,给框架调用时不要调用decode方法,否则会得不到管道返回!
        return Ktelnet.read_until(navpromot)
if __name__==__main__:
    print Kteldebug(sys.argv[1],sys.argv[2],sys.argv[3])
步骤二,封装一个函数给QTP用
'@利用Ktelnet.py工具做代理获取telnet调试返回信息
'Author:龚天羽
'LastEdit:2013-12-26
'参数列表说明:被测设备IP,前置字符,要发送的调试命令
'返回值说明:返回调试结果
Function KtelnetRead(ip,promot,command)
Set ws = CreateObject(WScript.Shell)
set wsres=ws.Exec(cmd.exe /c+ +Chr(34)+\Ktelnet.py+ +Chr(34)+ip+Chr(34)+ +Chr(34)+promot+Chr(34)+ +Chr(34)+command+Chr(34)+Chr(34))
KtelnetRead=wsres.StdOut.ReadAll()
'释放对象
Set wsres=nothing
Set ws=nothing
End Function
步骤三,整合自动化框架,或者直接在QTP中调用
'@底层自动化测试Demo
'Author:龚天羽
'Last Edit:2013-12-26
'获取项目环境变量
KCHOME=Environment.Value(TestDir)
'框架初始化操作,载入库
ExecuteFile KCHOME+\KClibs\KcData.txt
ExecuteFile KCHOME+\KClibs\KcFuncs.txt
Set Kcf=new KcFuncs
print Kcf.KtelnetRead(172.16.121.199,->,printconf 7)
最终效果展示-Python跳板执行结果:
点开大图即可查看动态效果
http://weibo.kedacom.com/weibo/files/weibo/feedAtt/c159b95908e64eeea07c8e053f31fee8/1388057814011/f_p_500_300.gif
最终效果展示-QTP最终运行结果:
点开大图即可查看动态效果
http://weibo.kedacom.com/weibo/files/weibo/feedAtt/c159b95908e64eeea07c8e053f31fee8/1388057836216/f_p_500_461.gif
拿到东西之后,自动化就简单多了~
0 0