自动化测试培训:设计和实现分布式QTP调用

 

自动化测试的过程中一个很核心的需求就是执行效率,单位时间里要执行更多的测试用例。为了完成该要求,我们开发一个调度工具,让qtp运行在不同的机器上,通过Controller(开发的中央控制软件)来控制各个机器的终端,Controller发送指令,让终端启动qtp,然后执行脚本。 因为poptest上课用的是python作为主要的测试开发语言来学习,所以案例采用python来实现,下面首先是实现cs架构控制软件,客户端发送指令,服务器执行qtp的思路代码,你也可以通过其他编程语言来实现如c#,java等。

第一步先实现服务器端和客户端代码

服务器段代码:

from socket import *

from time import ctime

HOST = ''                       #空字符表示不绑定如何ip,如何ip都可以与此服务器连接

PORT = 21533                    #端口是随机的,但是不能用与计算机其他程序端口重复,建议1024-65535。还有值得注意,如果此脚本运行2次,则会出现错误,第二次需                                #要改动代码,因为关闭此脚本时,没有关闭端口,第二次运行时,21533已经存在。要么命令行去关闭端口,要么重启,要么改程序。

BUFSIZ = 1024                   #缓存大小,我只发字符,这里设置为1k足以。发送大东西,需要用循环。

ADDR = (HOST,PORT)               #绑定

tcpSerSock = socket(AF_INET,SOCK_STREAM)        # SOCK_STREAM指的是tcp

tcpSerSock.bind(ADDR)                           #绑定

tcpSerSock.listen(5)                            #监听

while True:                                     #死循环

print 'waiting for connection...'           #打印

tcpCliSock, addr = tcpSerSock.accept()      #接受消息,当有消息接收后,才会再向下执行

print '...connected from:', addr            #接受到消息后,打印消息

while True:                                 #又一个死循环。除非接收到消息为空,才会跳出次循环

data = tcpCliSock.recv(BUFSIZ)          #设置数据大小

if not data:                            #如上上所述,数据为空,则结束此层循环

break

tcpCliSock.send('[%s] %s'%(ctime(), data))    #发送消息到客户端,消息为“服务器时间”+“客户端接收到的消息”

tcpCliSock.close()                             #最后2行代码永远不会被执行,因为前面是死循环,这也造成了,我之前说的,第二次执行代码是会出错。

tcpSerSock.close()

客户端代码

from socket import *

HOST = 'localhost'              #设置自己主机

PORT = 21533                    #端口必须和服务器设置的一致

BUFSIZ = 1024  <span style="white-space:pre">                          </span>

ADDR = (HOST, PORT)

tcpCliSock = socket(AF_INET, SOCK_STREAM)

tcpCliSock.connect(ADDR)       #连接,而不是监听

while True:                    #死循环

data = raw_input('> ')     #等待用户输入

if not data:               #如果为空,则,跳出死循环,执行tcpCliSock.close()

break

tcpCliSock.send(data)      #如果不空,则发送

data = tcpCliSock.recv(BUFSIZ   #接受服务器数据,并且处理,其处理过程是在此date之前加入时间

if not data:                    #接受数据为空,则,退出

break

print data                 #打印数据

tcpCliSock.close()

第二步  实现python调用qtp代码

import win32com.client
o = win32com.client.Dispatch("QuickTest.Application")
o.Launch()

o.Open("C:\\Documents and Settings\\DChung\\Desktop\\XMLRequest") 
o.Visible = True
o.Test.Run(o.Test) 
---

第三步  在服务器端加入python处理qtp代码

在服务器端加入代码,处理客户端的指令,如我们在客户端设计指令为“ start  脚本名称”

data = tcpCliSock.recv(BUFSIZ)          #设置数据大小

if not data:                            #如上上所述,数据为空,则结束此层循环

break

elseif  data=“ start  脚本名称”:

解析字符串,如果是start 启动qtp 加载指定脚本

第四步:可以进一步设计优化改控制软件

加入多个客户端

自动化测试培训:设计和实现分布式QTP调用的更多相关文章

  1. QTP自动化测试培训:描述编程之WebElement

    QTP自动化测试培训:描述编程之WebElement   通过描述性编程技术,来描述出来输入框: set po=browser("creationtime:=0").page(&q ...

  2. 手机自动化测试培训:appium目录结构分析

    手机自动化测试培训:appium目录结构分析   移动端的自动化测试越来越普遍,poptest率先退出移动端自动化测试的课程,以appuim的python脚本版本作为授课基础,后期陆续退出java版本 ...

  3. 分布式远程服务调用(RPC)框架

    分布式远程服务调用(RPC)框架 finagle:一个支持容错,协议无关的RPC系统 热门度(没变化) 10.0 活跃度(没变化) 10.0  Watchers:581 Star:6174 Fork: ...

  4. 《手把手教你》系列基础篇(九十七)-java+ selenium自动化测试-框架设计篇-Selenium方法的二次封装和页面基类(详解教程)

    1.简介 上一篇宏哥介绍了如何设计支持不同浏览器测试,宏哥的方法就是通过来切换配置文件设置的浏览器名称的值,来确定启动什么浏览器进行脚本测试.宏哥将这个叫做浏览器引擎类.这个类负责获取浏览器类型和启动 ...

  5. Eclipse+Selenium自动化测试脚本设计V1.0

    Eclipse+Selenium自动化测试脚本设计V1.0 http://www.docin.com/p-803032251.html

  6. 自动化测试 接口自动化及UI自动化测试平台设计演示

    接口自动化及UI自动化测试平台设计演示   by:授客  QQ:1033553122 欢迎加入全国软件测试交流qq群:7156436 大家好,我是授客. 本视频意在分享个人,基于Python,Djan ...

  7. Atitit.分布式远程调用  rpc  rmi  CORBA的关系

    Atitit.分布式远程调用  rpc  rmi  CORBA的关系 1. 远程调用(包括rpc,rmi,rest)1 2. 分布式调用大体上就分为两类,RPC式的,REST式的1 3. RPC(远程 ...

  8. Python3简易接口自动化测试框架设计与实现(中)

    目录 7.Excel数据读取 7.1.读取配置文件 7.1.编写Excel操作类 8.用例组装 9.用例运行结果校验 10.运行用例 11 .小结 上一篇:Python3简易接口自动化测试框架设计与实 ...

  9. java使用netty模拟实现一个类dubbo的分布式服务调用框架

    本文较长,如果想直接看代码可以查看项目源码地址: https://github.com/hetutu5238/rpc-demo.git 要想实现分布式服务调用框架,我们需要了解分布式服务一般需要的功能 ...

随机推荐

  1. sqlalchemy ORM模块使用介绍

    前几天用到了flask框架,所以顺带介绍了flask-sqlalchemy扩展模块,去瞄一眼,由于有好多非web的python程序也用到了数据库,所以今天分享一下sqlalchemy的模块的使用方法. ...

  2. windows下使用命令行给通过genymotion创建的虚拟机配制IP地址

    1.先用genymotion创建2个虚拟机,GoogleNexus7-1,GoogleNexus7-2. 2.在命令行执行 vBoxManage dhcpserver modify --ifname ...

  3. WP8.1程序开发中,如何加载本地文件资源或安装在程序包中的资源。

    Web 要访问来自 Web 的文件,你可以使用标准的绝对 HTTP URI: <img src="http://www.contoso.com/images/logo.png" ...

  4. [Linux] PHP程序员玩转Linux系列-备份还原MySQL

    1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 前几天有个新闻,说是g ...

  5. WPF移动Window窗体(鼠标点击左键移动窗体自定义行为)

    XAML代码部分:1.引用System.Windows.Interactivity 2.为指定的控件添加一个拖动的行为 3.很简单的了解行为的作用和用法 <Window xmlns=" ...

  6. angular ui-router 正则

    {id:[0-9a-fA-F]{1,8}} 如果在找ui-router 时,会看到以上的正则 我解释一下 id是param,可以把必备的结果收起来 []里面的必配的正则,但只是给一个string {} ...

  7. UI培训就业会很难吗

    众所周知UI是研究人机交互的学科,他是从互联网发展而来的,单从目前它的应用领域来看,主要应用于软件.互联网.移动智能设备.游戏和虚拟现实影音方面.这些都是新兴的热门方向和活跃领域.目前人才缺口和社会需 ...

  8. progID

    ProgID程序员给CLSID指定的容易记住的名字ProgID命名约定:<Program>.<Component>.<Version>AppID:将某个APPID( ...

  9. 基于Selenium2+Java的UI自动化(8)- 显式等待和隐式等待

    一.隐式等待 package com.automation.waits; import java.util.concurrent.TimeUnit; import org.openqa.seleniu ...

  10. C++设计模式:Template Method

    我使用过一个简单的后台服务框架.这个框架上手很容易,我只需要继承一个基类,同时实现,或重写(override)基类声明的几个接口(这些接口声明为虚函数,或者纯虚函数),然后调用基类定义好的run()函 ...