谁说QTP不能多线程 - 当Python遇上QTP

作者:Wally Yu (微博:http://weibo.com/quicktest)

经常有人问我一个问题:QTP可以同时做多个项目的自动化吗?我每次都回答说“不行,QTP不支持多线程,VBS本身就不是一门多线程的语言!”

最近在反思...QTP真的不能多线程吗?

好吧...如果一定要QTP可以多线程,咋办?我硬是想出了两个办法:

1. 需要在Windows可以多个QTP进程 - 可以吗?不行!有木有办法?没办法...

2. 需要QTP弃用VBS作为其脚本语言,改用多线程语言作为脚本语言(如Java、Python...) - 可以吗?不行!有木有办法?没办法...

且慢,假设QTP采用支持多线程的脚本语言,如何实现多线程?对,可以这样实现:

Function testScenario_1()

...

End Function

Function testScrnario_2()

...

End Function

...

Threading (testScenario_1).start()

Threading (testScenario_1).start()

...

如上结构可以实现QTP的多线程测试,这样岂不是大大提高了QTP的执行效率了么

可是回到现实中来,QTP的脚本语言是VBS,如何才能实现以上的愿望呢?呵呵,何不用AOM + DP!!!

(注:AOM - Automation Object Model; DP - Descriptive Programming)

以下代码采用Python,借鉴了“假装不在”的思路,用了Google和Yahoo搜索作为测试实例:

尝试一:

1. 打开两个IE,分别打开Google和Yahoo的首页

2. 将其Browser和Page的信息写入环境变量,并使其停止于断点

3. 打开Python编辑器,首先先把测试代码写入分别的Python函数:

注:函数首先调用QTP的AOM,而后取出环境变量的值,接着加上DP完成一条完整的测试语句

import thread, win32com.client
from time import ctimedef TestGoogle():shellWnd1 = win32com.client.DispatchEx('QuickTest.Application')P = shellWnd1.Test.Environment("google")print P.GetROProperty('title')P.WebEdit("name:=q").Set("Mercer")P.WebButton("name:=Google Search").Click()def TestYahoo():shellWnd2 = win32com.client.DispatchEx('QuickTest.Application')Q = shellWnd2.Test.Environment("yahoo")print Q.GetROProperty("title")Q.WebEdit("html id:=p_13838465-p").Set("Mercer")Q.WebButton("html id:=search-submit").Click()def main():print 'Start at:', ctime()TestGoogle()TestYahoo()print 'End at:', ctime()if __name__ == '__main__':main()

4. 分别执行两个函数,测试其脚本是否正确

如上图,脚本被分别执行了,Python脚本正确无误,QTP也执行了相应的搜索操作

尝试一完成!

尝试二

这次就要把脚本放入多线程里面去执行了,同样的操作,以下是Python代码:

import threading
import win32com.client
import pythoncom
from time import ctimeclass SearchTest(threading.Thread):def __init__(self, testObj):threading.Thread.__init__(self)self.testObj = testObjself.thread_stop = Falsedef run(self):if not self.thread_stop:if self.testObj == "Google":print 'Google test start at '+ ctime()+"\n"pythoncom.CoInitialize()shellWnd1 = win32com.client.DispatchEx('QuickTest.Application')P = shellWnd1.Test.Environment("google")P.WebEdit("name:=q").Set("Mercer")P.WebButton("name:=Google Search").Click()pythoncom.CoUninitialize()print 'Google test finish at ' + ctime() + "\n"elif self.testObj == "Yahoo":print 'Yahoo test start at '+ctime()+"\n"pythoncom.CoInitialize()shellWnd2 = win32com.client.DispatchEx('QuickTest.Application')Q = shellWnd2.Test.Environment("yahoo")Q.WebEdit("html id:=p_13838465-p").Set("Mercer")Q.WebButton("html id:=search-submit").Click()pythoncom.CoUninitialize()print 'Yahoo test finish at ' + ctime() + "\n"else:print "input para error"def stop(self):self.thread_stop = Truedef test():thread1 = SearchTest("Google")thread2 = SearchTest("Yahoo")thread1.start()thread2.start()#time.sleep(10)thread1.stop()thread2.stop()returnif __name__ == '__main__':test()

测试成功,下面是截图:

测试成功,皆大欢喜!

注:目前本人还没有发现这样操作有什么特别的优势。说节省测试时间,但是这样会造成调试上的极大不便。本博权当开拓一下眼界,抛砖引玉,愿大家集思广益 :)

谁说QTP不能多线程 - 当Python遇上QTP相关推荐

  1. 当python遇上echarts (三)绘制3D图表

    当python遇上echarts (二)绘制基本图表 文章目录 前言 3D图形配置项及方法 Grid3DOpts:三维笛卡尔坐标系配置项 Axis3DOpts:三维坐标轴配置项 add(): 共有的方 ...

  2. 文末送书 | 当Python遇上高考,会发生什么?

    (文末送书哦!) 延期一个月之后,1071万考生终于熬出头了. 这届高考太难了,不仅考学生,更是考验疫情的防控能力. 但是说到难,2018年浙江省教育厅的一个决定,让不少人感叹真难! 原来早在2017 ...

  3. 当Python遇上高考,会发生什么?

    延期一个月之后,今天,1071万考生终于走入考场. 这届高考太难了,不仅考学生,更是考验疫情的防控能力. 但是说到难,2018年浙江省教育厅的一个决定,让不少人感叹真难! 原来早在2017年底,就有消 ...

  4. 当Python遇上朱茵、迪丽热巴、林志玲、王祖贤等众多美女

    作者介绍:徐麟,目前就职于互联网公司数据部,哥大统计数据狗,从事数据挖掘&分析工作,喜欢用R&Python玩一些不一样的数据 个人公众号:数据森麟(ID:shujusenlin),知乎 ...

  5. python办公实用功能_【一点资讯】实用办公技巧贴——当Python遇上PDF www.yidianzixun.com...

    Portable Document Format(可移植文档格式),即PDF是一种文件格式,可以用于跨操作系统的呈现和文档交换.尽管PDF最初是由Adobe发明的,但它现在是由国际标准化组织(ISO) ...

  6. python训练营微信广告_当Python遇上微信,可以这么玩

    词云那里可以换成小黄人图片 -------------------------------------------------------------------------------------- ...

  7. c语言多线程转python多线程,真正的python 多线程!一个修饰符让你的多线程和C语言一样快...

    > Python 多线程因为GIL的存在,导致其速度比单线程还要慢.但是近期我发现了一个相当好用的库,这个库只需要增加一个修饰符就可以使原生的python多线程实现真正意义上的并发.本文将和大家 ...

  8. Python之多线程:python多线程设计之同时执行多个函数命令详细攻略

    Python之多线程:python多线程设计之同时执行多个函数命令详细攻略 目录 实现功能 采取方法 应用场景 实现功能 同时执行多个函数命令 采取方法 T1.单个实现 import threadin ...

  9. c++ 多线程 类成员函数_多线程(C++/Python)

    多线程(C++/Python) 本文包括一下内容: 通过C++11的标准库进行多线程编程,包括线程的创建/退出,线程管理,线程之间的通信和资源管理,以及最常见的互斥锁,另外对python下多线程的实现 ...

最新文章

  1. 锦上添花DataGrid!
  2. MVC验证10-到底用哪种方式实现客户端服务端双重异步验证
  3. RxJava flatMap操作符用法详解
  4. openlayers基础(一)——Map
  5. iOS自动偏移64个像素
  6. 基于PHP的CURL快速入门
  7. graphpad导出图片不居中_从GraphPad Prism一键导出满足期刊要求的图表
  8. Redis之压缩列表ziplist
  9. Redis入门指南(三)
  10. Opencv 关于Kmeans算法
  11. 按键精灵 excel mysql_按键精灵常用插件介绍
  12. 考研前辈最后悔的事都有哪些?
  13. java 天气api_基于JAVA的免费天气预报接口查询
  14. 2011考研数学二第(6)题——积分大小关系比较
  15. LTE中的RSRP、RSSI、RSRQ、SINR、MCS介绍
  16. 无线广告屏]无线模块
  17. Java实现O(nlogn)最长上升子序列
  18. redis incr mysql_redis命令_INCR
  19. 基于zxing的二维码扫描
  20. 【THREE.JS学习(3)】使用THREEJS加载GeoJSON地图数据

热门文章

  1. 叔本华的《人生的智慧》感悟
  2. 群控代理、2016年很火的云豹群控代理
  3. php封装新增,php 封装
  4. 那些被踢“出局”的创始人,现在还好吗?
  5. vue 播放rtmp 直播拉流视频
  6. 实战案例 :电信客户流失分析与预测
  7. 使用Golang编写Android应用
  8. centos7查看oracle监听端口,CentOS 7开放及查看防火墙firewall的端口
  9. Excel里关于if的9个函数,如何指定条件求和、计数、平均等
  10. java枚举类型的优势在哪里?