自动化测试的过程中一个很核心的需求就是执行效率,单位时间里要执行更多的测试用例。为了完成该要求,我们开发一个调度工具,让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 加载指定脚本

 

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

       加入多个客户端