谁说QTP不能多线程 - 当Python遇上QTP
谁说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相关推荐
- 当python遇上echarts (三)绘制3D图表
当python遇上echarts (二)绘制基本图表 文章目录 前言 3D图形配置项及方法 Grid3DOpts:三维笛卡尔坐标系配置项 Axis3DOpts:三维坐标轴配置项 add(): 共有的方 ...
- 文末送书 | 当Python遇上高考,会发生什么?
(文末送书哦!) 延期一个月之后,1071万考生终于熬出头了. 这届高考太难了,不仅考学生,更是考验疫情的防控能力. 但是说到难,2018年浙江省教育厅的一个决定,让不少人感叹真难! 原来早在2017 ...
- 当Python遇上高考,会发生什么?
延期一个月之后,今天,1071万考生终于走入考场. 这届高考太难了,不仅考学生,更是考验疫情的防控能力. 但是说到难,2018年浙江省教育厅的一个决定,让不少人感叹真难! 原来早在2017年底,就有消 ...
- 当Python遇上朱茵、迪丽热巴、林志玲、王祖贤等众多美女
作者介绍:徐麟,目前就职于互联网公司数据部,哥大统计数据狗,从事数据挖掘&分析工作,喜欢用R&Python玩一些不一样的数据 个人公众号:数据森麟(ID:shujusenlin),知乎 ...
- python办公实用功能_【一点资讯】实用办公技巧贴——当Python遇上PDF www.yidianzixun.com...
Portable Document Format(可移植文档格式),即PDF是一种文件格式,可以用于跨操作系统的呈现和文档交换.尽管PDF最初是由Adobe发明的,但它现在是由国际标准化组织(ISO) ...
- python训练营微信广告_当Python遇上微信,可以这么玩
词云那里可以换成小黄人图片 -------------------------------------------------------------------------------------- ...
- c语言多线程转python多线程,真正的python 多线程!一个修饰符让你的多线程和C语言一样快...
> Python 多线程因为GIL的存在,导致其速度比单线程还要慢.但是近期我发现了一个相当好用的库,这个库只需要增加一个修饰符就可以使原生的python多线程实现真正意义上的并发.本文将和大家 ...
- Python之多线程:python多线程设计之同时执行多个函数命令详细攻略
Python之多线程:python多线程设计之同时执行多个函数命令详细攻略 目录 实现功能 采取方法 应用场景 实现功能 同时执行多个函数命令 采取方法 T1.单个实现 import threadin ...
- c++ 多线程 类成员函数_多线程(C++/Python)
多线程(C++/Python) 本文包括一下内容: 通过C++11的标准库进行多线程编程,包括线程的创建/退出,线程管理,线程之间的通信和资源管理,以及最常见的互斥锁,另外对python下多线程的实现 ...
最新文章
- 锦上添花DataGrid!
- MVC验证10-到底用哪种方式实现客户端服务端双重异步验证
- RxJava flatMap操作符用法详解
- openlayers基础(一)——Map
- iOS自动偏移64个像素
- 基于PHP的CURL快速入门
- graphpad导出图片不居中_从GraphPad Prism一键导出满足期刊要求的图表
- Redis之压缩列表ziplist
- Redis入门指南(三)
- Opencv 关于Kmeans算法
- 按键精灵 excel mysql_按键精灵常用插件介绍
- 考研前辈最后悔的事都有哪些?
- java 天气api_基于JAVA的免费天气预报接口查询
- 2011考研数学二第(6)题——积分大小关系比较
- LTE中的RSRP、RSSI、RSRQ、SINR、MCS介绍
- 无线广告屏]无线模块
- Java实现O(nlogn)最长上升子序列
- redis incr mysql_redis命令_INCR
- 基于zxing的二维码扫描
- 【THREE.JS学习(3)】使用THREEJS加载GeoJSON地图数据