QTP自动化测试之使用外部.Net DLL实现与Telnet的交互-程序员宅基地

QTP自动化测试之使用外部.Net DLL实现与Telnet的交互
发布于:2012-11-22 21:57:18来自【群】QTP                     QTP

希望公司喜欢使用QTP进行自动化测试的同事一起探讨和交流,这是一款强大的工具,我不希望像使用按键精灵那样的使用它。QTP自动化测试跟开发一样,有着一套完整的流程和体系,那么我们就从需求开始说起。

之前的课程过后,有同事开始询问我,公司很多的测试业务都在telnet中进行:

如:我们需要获取当前设备的一个编解码状态,然后返回到一个文本中。

那么,这里就涉及到一个难点,如何跟Telnet进行交互,学过网络的同事都应该知道,Telnet是属于TCP/IP协议簇的,大致的一个登陆过程,实现起来就极其复杂!

1)本地与远程主机建立连接。该过程实际上是建立一个TCP连接,用户必须知道远程主机的Ip地址或域名;

2)将本地终端上输入的用户名和口令及以后输入的任何命令或字符以NVT(Net Virtual Terminal)格式传送到远程主机。该过程实际上是从本地主机向远程主机发送一个IP数据报;

3)将远程主机输出的NVT格式的数据转化为本地所接受的格式送回本地终端,包括输入命令回显和命令执行结果;

4)最后,本地终端对远程主机进行撤消连接。该过程是撤销一个TCP连接。

更不用说之后的交互过程了,向远端发送命令,返回信息后通过管道再继续输出。

这样一来,在QTP中与我们的Telnet交互就着实成为了一大难点。

其实牵强一点的办法有很多,我们可以通过调用Wsh直接sendkey操作,把CMD窗口置于激活状态,或者使用API接口直接定位窗口句柄,这些代码都不难,但是效果很差,一般Telnet的输出打印是无缝的,很难再去抽离出我们想要的结果,纯Split分割?那会疯掉的。。。。。。

其实,QTP为我们准备了另外一个强大的保留对象-DotNetFactory

可以直接调用.net类库和.net标准类库。

本方法适用对象---有一定编程基础的童鞋,熟悉.net C#编程

(至少要了解对象,方法,如何引用)

公司的一些复杂测试需求,难点测试需求,我们可以先通过C#进行自定义类的编写,然后定义一个公共方法,编译DLL文件后给QTP使用就行。

上面是编写好的Telnet类库,(其实完全不用担心会不会高级语言,网上直接拿优秀的开源类库就行

那么,针对我们的Telnet测试需求

'外部引用Telnet DLL类

set otel=DotNetFactory.CreateInstance("Mytelnet.telnet","d:\mytelnet.dll")

'描述一个telnet类

'Mytelnet.telnet --对应的是命名空间.类名

保留对象会自带三个参数,如果是外部引用DLL的话,要将完整路径放置于第二个参数内,这里不用担心反斜杠的转义。

但有一点需要注意,编译DLL的时候需要选择.net framework 3.5以下,QTP还不支持4.0框架版本以上的DLL调用。

调用完成之后,我们已经成功描述了一个telnet类

接下来的代码就跟C#中的调用一模一样了,实例化都不用了,QTP直接引用过来了。

例如telnet.send (参数1,参数2) '直接调用该DLL Telnet类的发送指令方法。

再通过收返回信息,我们就可以FSO到我们的文本中。

QTP文本的读写也可以使用.net标准类库,写一段参考代码给大家:

************.net 写文本文件************

set of=DotNetFactory("System.IO.StreamWriter",,"d:\1.txt") '调用该IO标准类,带一个文本文件路径参数

of.Write "你要写到文件中的内容" --这里就可以把我们Telnet返回回来的信息写入到文件中

of.close

of.dispose '清除对象

set of=noting '释放最初对象

***************Code End ***************

在这里,我分享一个C# Telnel类库,功能完善,且修复了字符乱码。

具体的完整代码,本帖会更新送上(由于我电脑上是VS2010 .NET 4.0框架的,编译出来的DLL,QTP调用发生错误)。

END

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

智能推荐

互动抽奖背后的随机性与算法实现-程序员宅基地

文章浏览阅读1.7k次,点赞2次,收藏7次。背景抽奖,是一种典型的互动玩法形式。无论是大V的粉丝抽奖,还是活动会场的参与抽奖,这种起源于彩票开奖的互动玩法,同时兼顾了高期待感和低预期的特征,让活动在成本控制之余又能有惊喜和引爆点,这样的优势让其在各种运营场景中幻化万千,大行其道。在闲鱼各种互动场与营销活动中,抽奖自然也是一个相当高频使用的互动玩法。众所周知,越是经典的玩法,业务需求就越发别出机杼,在参与条件、开奖展示、奖品规则等各方面千变万..._随机中奖逻辑

HSV颜色相似度-程序员宅基地

文章浏览阅读1.1w次,点赞2次,收藏8次。一般对颜色空间的图像进行有效处理都是在HSV空间进行的,然后对于基本色中对应的HSV分量需要给定一个严格的范围,下面是通过实验计算的模糊范围(准确的范围在网上都没有给出)。H: 0 — 180S: 0 — 255V: 0 — 255此处把部分红色归为紫色范围:目前在计算机视觉领域存在着_hsv颜色相似度

cox回归模型python实现_生存分析Cox回归模型(比例风险模型)的spss操作实例-程序员宅基地

文章浏览阅读1.7k次。一、生存分析基本概念1、事件(Event)指研究中规定的生存研究的终点,在研究开始之前就已经制定好。根据研究性质的不同,事件可以是患者的死亡、疾病的复发、仪器的故障,也可以是下岗工人的再就业等等。2、生存时间(Survival time)指从某一起点到事件发生所经过的时间。生存是一个广义的概念,不仅仅指医学中的存活,也可以是机器出故障前的正常运行时间,或者下岗工人再就业前的待业时间等等。有的时候甚..._cox比例风险回归模型spss

git commit --amend_git commit --amend 之后还要push吗-程序员宅基地

文章浏览阅读144次。使用场景用于修改上次提交,可修改上次提交的commit message信息,也可修改commit 的内容用法上次commit 内容不满意,代码并未合并,需要有改动的地方:修改文件git addgit commit – amendgit push以上修改并不产生新的commit id但是如果修改文件git addgit commit “”git push此办法会产生新的commit id,合并的人需要将两次commit id合并..._git commit --amend 之后还要push吗

九度OJ-程序员宅基地

文章浏览阅读891次。1.1016这是一道简单题,主要要考虑到,比如说108,8,2这种类似的情况,其中8被认为是08,所以最后两位相同,输出-1。#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){char a[20], b[20], *p, *q;int k, a1, b1, len1, len2, a2, b2;while (scanf("%s%s%d", a, b, &a..._九度oj

使java方法全部折叠_Intellij IDEA中一次性折叠所有Java代码的快捷键设置-程序员宅基地

文章浏览阅读575次。Intellij IDEA中一次性折叠所有Java代码的快捷键设置问题:在Java文件中,想把所有的Java方法代码都一次性给折叠起来,用哪个点开哪个。问题来源:在新建model bean的时候,要是属性很多,那么对应的getter和setter就会很多,要是所有的方法代码都是展开状态,那么这个文件看着也不甚美观,所以,可以把方法都折叠起来。下面看怎么设置快捷键:看法宝。。。要是看不懂,系统自带的..._idea 设置所有 {} 缩起来

随便推点

Error opening data file Tesseract-OCR\tessdata/eng.traineddata问题 解决_error opening data file ./eng.traineddata-程序员宅基地

文章浏览阅读1.2w次,点赞23次,收藏19次。在安装完tesseract, pytesseract后执行测试命令,发现打印如下错误:Error opening data file \Program Files (x86)\Tesseract-OCR\tessdata/eng.traineddata Please make sure the TESSDATA_PREFIX environment variable is set to the..._error opening data file ./eng.traineddata

杂项总结 vue sass less vue-router_vue使用less还是sass好-程序员宅基地

文章浏览阅读92次。// 通用修饰符 // stop 实现阻止冒泡的修饰符// prevent 实现阻止默认行为的修饰符// once 表示单次触发的修饰符// self 表示绑定事件的元素与触发事件的元素是同一个元素// 鼠标修饰符// left 鼠标点击左键// right 鼠标点击右键// middle 鼠标中间件// 辅助修饰符// ctrl 点击 ctrl 辅助键// shift 点击 shift 辅助键盘// alt 点击 alt 辅助键// meta_vue使用less还是sass好

html5 accept encoding,html - How to Specify a Vary: Accept-Encoding header? - Stack Overflow-程序员宅基地

文章浏览阅读79次。I found a helpful post to speed up wordpress website or blog https://www.keycdn.com/blog/speed-up-wordpress/With some other optimizations, I am also using below code on my site in .htaccess file (usua..._html5设置accept-encoding

在docker容器内 获取swarm节点IP_docker swarm 指定容器ip-程序员宅基地

文章浏览阅读566次。想在应用内获取当前swarm节点的IP使用.net 6框架 vs2022开发工具。_docker swarm 指定容器ip

国产的文档开发控件,spire.office新版本,一起来看看~_spire.office developer subscription(开发版本)-程序员宅基地

文章浏览阅读922次。Spire.Office 8.6.0更新已发布。在该版本中,Spire.PDF支持转换多页PDF文档为单个SVG文件;Spire.XLS新增了优化删除行的速度的方法;Spire.Presentation支持为TextFrame设置栏数。此外,许多已知问题也在该版本中被成功修复。_spire.office developer subscription(开发版本)

阿里云 oss 文件不能下载 只能直接打开的解决方案_oss无法下载-程序员宅基地

文章浏览阅读1.3w次。阿里云的oss,直接上传后,可以访问,直接是打开有一些程序,需要直接能下载设置oss文件的Content-Disposition属性值为attachment就是直接打开了但oss有很多文件,不能批量设置现在可以用ossutil批量操作=====原理:通过ossutil连接到oss,然后通过命令行,直接修改:Content-Disposition值为attachmentossutil支持多系统===..._oss无法下载

推荐文章

热门文章

相关标签