自动化测试培训:设计和实现分布式QTP调用
自动化测试培训:设计和实现分布式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调用的更多相关文章
- QTP自动化测试培训:描述编程之WebElement
QTP自动化测试培训:描述编程之WebElement 通过描述性编程技术,来描述出来输入框: set po=browser("creationtime:=0").page(&q ...
- 手机自动化测试培训:appium目录结构分析
手机自动化测试培训:appium目录结构分析 移动端的自动化测试越来越普遍,poptest率先退出移动端自动化测试的课程,以appuim的python脚本版本作为授课基础,后期陆续退出java版本 ...
- 分布式远程服务调用(RPC)框架
分布式远程服务调用(RPC)框架 finagle:一个支持容错,协议无关的RPC系统 热门度(没变化) 10.0 活跃度(没变化) 10.0 Watchers:581 Star:6174 Fork: ...
- 《手把手教你》系列基础篇(九十七)-java+ selenium自动化测试-框架设计篇-Selenium方法的二次封装和页面基类(详解教程)
1.简介 上一篇宏哥介绍了如何设计支持不同浏览器测试,宏哥的方法就是通过来切换配置文件设置的浏览器名称的值,来确定启动什么浏览器进行脚本测试.宏哥将这个叫做浏览器引擎类.这个类负责获取浏览器类型和启动 ...
- Eclipse+Selenium自动化测试脚本设计V1.0
Eclipse+Selenium自动化测试脚本设计V1.0 http://www.docin.com/p-803032251.html
- 自动化测试 接口自动化及UI自动化测试平台设计演示
接口自动化及UI自动化测试平台设计演示 by:授客 QQ:1033553122 欢迎加入全国软件测试交流qq群:7156436 大家好,我是授客. 本视频意在分享个人,基于Python,Djan ...
- Atitit.分布式远程调用 rpc rmi CORBA的关系
Atitit.分布式远程调用 rpc rmi CORBA的关系 1. 远程调用(包括rpc,rmi,rest)1 2. 分布式调用大体上就分为两类,RPC式的,REST式的1 3. RPC(远程 ...
- Python3简易接口自动化测试框架设计与实现(中)
目录 7.Excel数据读取 7.1.读取配置文件 7.1.编写Excel操作类 8.用例组装 9.用例运行结果校验 10.运行用例 11 .小结 上一篇:Python3简易接口自动化测试框架设计与实 ...
- java使用netty模拟实现一个类dubbo的分布式服务调用框架
本文较长,如果想直接看代码可以查看项目源码地址: https://github.com/hetutu5238/rpc-demo.git 要想实现分布式服务调用框架,我们需要了解分布式服务一般需要的功能 ...
随机推荐
- qppium 原理解析
Appium是 c/s模式的appium是基于 webdriver 协议添加对移动设备自化api扩展而成的webdriver 是基于 http协议的,第一连接会建立个 session 会话,并通过 p ...
- 【CNMP系列】CentOS7.0下安装PHP5.6.30服务
上一节我们讲过了如何在CentOS7.0下安装MySql服务,如果没有看到欢迎页面的朋友,可以加我的个人微信详聊:litao514148204 附上一节地址:http://www.cnblogs.co ...
- Struts2初步接触
使用idea快速搭建Struts2的Maven项目 首先使用intelij idea部署Maven项目 1.jar包引入 pom.xml 我们用的是阿里云 我用的是最新版的Struts2核心 ...
- 【转】Java通过IText导出word和pdf
原帖地址:http://blog.csdn.net/zwx19921215/article/details/34439851 最近做的项目中需要用到把Highcharts图表导出word和pdf的功能 ...
- 每天一个linux命令(27)--tar命令
通过SSH访问服务器,难免会要用到压缩,解压缩,打包,解包等,这时候 tar 命令就是必不可少的一个功能强大的工具.Linux 中最流行的 tar 是麻雀虽小,五脏俱全. tar 命令可以为Linux ...
- Struts2学习第一天——struts2基本流程与配置
struts2框架 什么是框架,框架有什么用? 框架 是 实现部分功能的代码 (半成品),使用框架简化企业级软件开发 ,提高开发效率. 学习框架 ,清楚的知道框架能做什么? 还有哪些工作需要自己编码实 ...
- C/C++ char数组存储字符串内存地址
问题描述: #include <stdio.h> int main(void) { //program 6.3 Arrays of strings ][]; ;i<;++i){ ;j ...
- Permanent Generation Removal Overview(译文)
英文原稿:http://vdisk.weibo.com/s/vxGdGZEZTEjk 中文整理稿:http://it.deepinmind.com/gc/2014/05/14/metaspace-in ...
- 通过Servlet生成验证码图片
原文出自:http://www.cnblogs.com/xdp-gacl/p/3798190.html 一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类, ...
- Java 中的锁——Lock接口
Java SE5之后,并发包中新增了Lock接口(以及相关实现类)用来实现锁功能.虽然它少了(通过synchronized块或者方法所提供的)隐式获取释放锁的便捷性,但是却拥有了锁获取与释放的操作性. ...