查看完整版本: 告别QTP板块,临走吐点心血送给大家(知识是共享和堆积的,不是卖钱的,完全免费)

yuandjing 2008-1-28 11:49

告别QTP板块,临走吐点心血送给大家(知识是共享和堆积的,不是卖钱的,完全免费)

大家好,由于换了新的工作环境,这里不再使用QTP了,所以我可能几年不上QTP这个板块了
临走吐点vbs脚本[attach]38775[/attach]出来送给大家,大家可以加到qtp的resource里去,就可以直接调用了,也欢迎大家以后加函数进去
(外部链接milo.jiang兄的数据库操作:[url]http://bbs.51testing.com/viewthread.php?tid=118028&highlight=[/url])
另外申明一下:
1.有部分函数改写了 风过无息 的blog的函数
2.有部分函数多余了,比如对于日期处理的函数vb本来就有自己的函数,大家可以用vb的函数
3.但是有部分vbs的函数不太好,被我改写了,比如vb的随机函数,发现使用起来相当不随机,我改写了这个函数,现在随机多了
4.附件的rar文件里有个excel的文件,包含了多这些函数的输入参数和输出参数的定义

希望大家多多交流,扩充这个底层脚本。也可以联系我提意见
这个板块成就了如今的我,所以我把我的这些脚本贡献出来,希望能让更多的人受益 Sharing will get in more
谢谢各位
E-mail: [email]quicktest@yahoo.cn[/email] |  MSN: [email]quicktest@yahoo.cn[/email]
Skype: quicktest92 | AIM: quicktest92

(共42个函数,这里举隅一二,详细请见rar附件)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''上海(保密一下)软件有限公司  开发部''''''''''''''''''''''''''''''''''''
'''''函数功能:Quick 和 Robot 常用库函数'''''''''''''''''''''''''''''
'''''说明:1.以QTP_开头的函数只适用于QuickTest'''''''''''''''''''''''
'''''      2.以Robot_开头的函数只适用于Robot'''''''''''''''''''''''''
'''''      3.除以上外,QuickTest和Robot都适用''''''''''''''''''''''''
'''''作者:俞戴龙''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''开始编撰日期:2007-8-17'''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'Option Explicit

''''''''''''''''''''''''''''''''''''''''''''''''
'''测试用调用函数'''''''''''''''''''''''''''''''



''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''以下为QuickTest和Robot都适用函数''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'随机函数生成
'输入值:生成值范围 i~j
'返回值:随机数
Public Function Get_RandNum(fromNum,toNum)
        If (fromNum<0) Or (toNum<0) Then
                MsgBox "只接受大于零的输入"
        ElseIf fromNum>toNum then
                MsgBox "起始值必须小于结束值"
        Else
                Dim RunTime
                Randomize   
                RunTime = Int((10 * Rnd) + 1)
                Dim MyValue,i
                For i = 1 To RunTime
                        Randomize  
                        MyValue = Int(((toNum - fromNum + 1) * Rnd) + (fromNum))
                Next
           Get_randNum=MyValue
          End If
End Function

'去掉字符串中的重复项
Function NoRepeat(Inp,Sp)
Dim aa,flag,words,length,i,j,k,sp1,sp2,cc
        aa = Inp
        Do
                flag = False
                words = Split(aa,Sp)
                length = UBound(words)
                For i = 0 To (length -1)
                        sp1 = words(i)
                        For j = (i+1) To length
                                sp2 = words(j)
                                If sp1 = sp2 Then
                                        flag = True
                                        aa = ""
                                        For k = 0 To (j-1)
                                                aa = aa & words(k) & sp
                                        Next
                                        For k = (j + 1) To length
                                                aa = aa & words(k) & sp
                                        Next
                                       
                                        cc = Len(aa)
                                        aa = Left(aa,(cc - 1))
                                End If
                        Next
                        If flag = True Then
                                Exit For
                        End if
                Next
        Loop Until flag = false
        NoRepeat = aa
End Function

'按ASCII码值冒泡排序
Function BubbleSort(VString,Spl,Func)
        Dim Str,StrLength,i,j
        Str = Split(VString,Spl)
        StrLength = UBound(Str) + 1
        For i = 1 To (StrLength-1)
                For j = (i+1) To StrLength
                        If Func = 1 then
                                If Asc(Str(i-1)) < Asc(Str(j-1)) Then
                                        Call Swap(Str(i-1),Str(j-1))
                                End If
                        Else
                                If Asc(Str(i-1)) > Asc(Str(j-1)) Then
                                        Call Swap(Str(i-1),Str(j-1))
                                End If
                        End If
                Next
        Next
        j = ""
        For i = 1 To StrLength
                j = j & Str(i-1) & Spl
        Next
        j = Left(j,(StrLength * 2 -1))
        BubbleSort = j
End Function


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''以下为仅QuickTest适用函数'''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'让QTP运行时保持最小化
Public Sub QTP_Small()
        Dim objQTPWin
        Set objQTPWin = GetObject("" , "QuickTest.Application")
        objQTPWin.WindowState = "Minimized"
        Set objQTPWin = Nothing
End Sub

'恢复QTP窗口
Public Sub QTP_Big()
        Dim objQTPWin
        Set objQTPWin = GetObject("" , "QuickTest.Application")
        objQTPWin.WindowState = "Restored"
        Set objQTPWin = Nothing
End Sub

'定时停留弹出框函数
Sub QTP_Msgbox(Value,waitTime,Title)
        Dim WshShell
    Set WshShell = CreateObject("WScript.Shell")
    WshShell.Popup Value, waitTime, Title
    Set WshShell = nothing
End Sub

'改变Excel的单元格颜色
Public Function QTP_Change_Color(pathway,sheetname,x,y,color)
        Dim srcData,srcDoc,sp1,sp2,num,use,a1,a2,a3
        set srcData = CreateObject("Excel.Application")
        srcData.Visible = True
        set srcDoc = srcData.Workbooks.Open(pathway)
        srcDoc.Worksheets(sheetname).Activate
        If color = "red" Then
                srcDoc.Worksheets(sheetname).Cells(x,y).Interior.color=vbred
        ElseIf color = "green" Then
                srcDoc.Worksheets(sheetname).Cells(x,y).Interior.color=vbgreen
        Else
                MsgBox "输入的颜色参数不正确,只接收""red""和""green"""
        End If

        Dim WshShell
        Set WshShell=CreateObject("Wscript.Shell")
        WshShell.SendKeys "^s"
        wait(1)
       
        srcData.Workbooks.Close
        Set srcDoc = nothing
        Window("text:=Microsoft Excel").Close
End Function

'写Excel文件元素并保存退出
Public Function QTP_Write_Excel(pathway,sheetname,x,y,content)
        Dim srcData,srcDoc,sp1,sp2,num,use,a1,a2,a3
        set srcData = CreateObject("Excel.Application")
        srcData.Visible = True
        set srcDoc = srcData.Workbooks.Open(pathway)
        srcDoc.Worksheets(sheetname).Activate
        srcDoc.Worksheets(sheetname).Cells(x,y).value = content

        Dim WshShell
        Set WshShell=CreateObject("Wscript.Shell")
        WshShell.SendKeys "^s"
        wait(1)
       
        srcData.Workbooks.Close
        Set srcDoc = nothing
       
        Window("text:=Microsoft Excel").Close
End Function

[[i] 本帖最后由 yuandjing 于 2008-6-20 13:23 编辑 [/i]]

yuandjing 2008-1-28 11:52

发现在这个网页上显示的不怎么规整,大家可以用这个板块的一个工具“vbsedt33”来查看和编辑脚本
从来没坐过沙发,今天顺便享受一下先

[[i] 本帖最后由 yuandjing 于 2008-1-28 12:42 编辑 [/i]]

51mobile 2008-1-28 12:50

:lol 非常不错,:victory:

lantianwei 2008-1-28 13:43

感谢LZ的无私奉献!:)

nestanesta 2008-1-28 14:01

经典的东西,顶你

ppent 2008-1-28 14:40

谢谢 以后常回家看看

threeg 2008-1-28 15:21

LZ好人啊,

frankwangzy1103 2008-1-28 15:22

谢谢,论坛就需要多一点你这样的人

wzdoxu 2008-1-28 15:28

谢谢楼主分享这么好的东东!

yuandjing 2008-1-28 15:37

[quote]原帖由 [i]frankwangzy1103[/i] 于 2008-1-28 15:22 发表 [url=http://bbs.51testing.com/redirect.php?goto=findpost&pid=870115&ptid=105302][img]http://bbs.51testing.com/images/common/back.gif[/img][/url]
谢谢,论坛就需要多一点你这样的人 [/quote]
呵呵,多些夸奖,常看国外的论坛发现国内的人老喜欢吧自己的心包起来,这就像手帕包BT一样,最终只能越包越小
分享很重要,分享的越多学习到的也越多
一个苹果换一个苹果,每个人只有一个苹果
一份知识换一份知识,每个人将有两份知识
加油,同志们,51testing是个测试人才汇集的地方,我们国家的软件行业不能落后!

waiverson 2008-1-28 16:04

非常感谢~ 搂主的一手资料相信能让更多人对QTP的实际应用更上一层楼

今天有雾 2008-1-28 16:49

感谢楼主,希望楼主还是能经常回来看看好了

xiaoyaoke 2008-1-28 16:54

楼主的资料真的很不多,希望楼主可以在新的领域一帆风顺,然后和大家分享经验
感谢楼主的无私奉献

yanzs0120 2008-1-28 17:17

真是谢谢啦。正在学习中~~~~~~~~~~

jxt 2008-1-29 11:53

谢谢!

you力 2008-1-29 11:58

这样的好贴越来越少了

thloong 2008-1-29 12:16

这样的好人真是不多,LZ常回来看看啊

coomon2001 2008-1-29 12:29

多谢楼主,受益匪浅啊

wuyu702 2008-1-29 14:15

谢谢 楼主无私奉献..hoho

language_fw 2008-1-29 14:18

多谢楼主,虽然我关注QTP的时间不是太长,但是你的第一手资料确实让我受益匪浅。祝你在以后工作的道路上越走越顺。

cyrusmm 2008-1-29 14:53

谢谢楼主啊!
真的是好东西!

zycdele 2008-1-29 15:25

谢谢!学习中

lvxdoo 2008-1-29 17:16

要顶的,很不错,谢谢lz:handshake :loveliness:

zgp_roby 2008-1-29 17:34

类似的函数库也写了很多。LZ奉献的先收下了,哪一天正好调用,就节约俺们的工夫了。
同LS,LSS....对LZ表示感谢!:lol

lf0026 2008-1-29 18:03

楼主啊 啥话都不说了 以后记得回来瞄瞄就好
祝福你

mickey-311 2008-1-29 18:12

一个苹果换一个苹果,每个人只有一个苹果
一份知识换一份知识,每个人将有两份知识

不错,非常感谢搂主,希望大家在这里可以更好的分享测试精华,谢谢!

tdj602 2008-1-29 19:42

谢谢

谢谢 以后常回家看看,

zhan_gqian 2008-1-29 23:47

LZ的无私值得我们所有人学习!
希望能在这里看到越来越多测试的知识和精华,让我们团结一致,为测试事业贡献自己的力量!

eightants 2008-1-30 04:11

[b]Thanks a lot![/b]

BenjaminCheung 2008-1-30 14:00

谢谢楼主。51测试网请你当版主真好。

karolin 2008-1-30 23:52

真心感谢楼主1

fyf1871 2008-1-31 09:52

支持开源~~支持免费!!!

kanebluba 2008-1-31 10:10

Dim MyValue As Integer, temp As Integer, temp1 As Integer, toNum As Integer, fromNum As Integer, step As Integer, sign As Integer

Private Sub Form_Activate()
fromNum = InputBox("输入起始数")
           
              toNum = InputBox("输入结束数")
                  step = InputBox("输入间隔")
              
              
              If (fromNum < 0 Or toNum < 0) Then
               MsgBox ("不能小于0")
               sign = 1
              Else
              
                 temp1 = toNum - fromNum
                 If (temp1 < 0) Then
                 MsgBox ("起始数小于结束数")
                 sign = 1
                 Else
                 If (temp1 <= 10) Then
                 
                     Randomize
                      MyValue = Int(((toNum - fromNum) * Rnd) + (fromNum))
                Print MyValue
                        sign = 1
                     Else
                     
               
                 
               
                     If (temp1 >= 10) Then
               
               
                 temp = (toNum - fromNum) / step - 1
                 End If
                 End If
                 End If
              End If
            
              
                 For i = 1 To temp
        Randomize
        MyValue = Int(step * Rnd) + fromNum
                fromNum = fromNum + 8
                   Print MyValue
               
                Next i
               
                 '补最后一次
                 If (sign = 0) Then
                Randomize
        MyValue = Int(((toNum - fromNum) * Rnd) + (fromNum))
          Print MyValue
   
              End If
              
End Sub


是LZ的同学,看到他写了,帮他再完善一下吧,这个是随机函数的另一个版本.
它可以做到根据你想要随机的范围和密度进行调节,有兴趣的人可以自己试试.

sunqiang1024 2008-1-31 10:11

谢谢楼主的无私奉献啊,楼主的帖子给使用QTP的同僚一个莫大的帮助啊,向你致敬!:victory:

yuandjing 2008-1-31 10:40

[quote]原帖由 [i]kanebluba[/i] 于 2008-1-31 10:10 发表 [url=http://bbs.51testing.com/redirect.php?goto=findpost&pid=871935&ptid=105302][img]http://bbs.51testing.com/images/common/back.gif[/img][/url]
Dim MyValue As Integer, temp As Integer, temp1 As Integer, toNum As Integer, fromNum As Integer, step As Integer, sign As Integer

Private Sub Form_Activate()
fromNum = InputBox("输入起始数")
     ... [/quote]

呵呵,小朱来了我顶你一下
估计你以前是用标准VB或者VBA的吧,QTP用VBS的,所以代码调不通,我改了一下,但是没测试过你的代码,不知道功能是不是实现,以下你的代码可以调的通:

'Dim MyValue As Integer, temp As Integer, temp1 As Integer, toNum As Integer, fromNum As Integer, step As Integer, sign As Integer

Private Sub Form_Activate()
fromNum = InputBox("输入起始数")
           
              toNum = InputBox("输入结束数")
                  step = InputBox("输入间隔")
              
              
              If (fromNum < 0 Or toNum < 0) Then
               MsgBox ("不能小于0")
               sign = 1
              Else
              
                 temp1 = toNum - fromNum
                 If (temp1 < 0) Then
                 MsgBox ("起始数小于结束数")
                 sign = 1
                 Else
                 If (temp1 <= 10) Then
                 
                     Randomize
                      MyValue = Int(((toNum - fromNum) * Rnd) + (fromNum))
                Print MyValue
                        sign = 1
                     Else
                     
               
                 
               
                     If (temp1 >= 10) Then
               
               
                 temp = (toNum - fromNum) / step - 1
                 End If
                 End If
                 End If
              End If
            
              
                 For i = 1 To temp
        Randomize
        MyValue = Int(step * Rnd) + fromNum
                fromNum = fromNum + 8
                   Print MyValue
               
                Next
               
                 '补最后一次
                 If (sign = 0) Then
                Randomize
        MyValue = Int(((toNum - fromNum) * Rnd) + (fromNum))
          Print MyValue
   
              End If
              
End Sub

另外这样的话会更好:
1.定义变量最好在函数体里面的
2.代码要保持队形(锯齿形结构)
3.多余的空行最好删除,代码要容易阅读,可以参考一下林锐的《高质量C++编程》,我还是很推崇的,是关于代码规范的书,加油 :)

[[i] 本帖最后由 yuandjing 于 2008-2-1 12:15 编辑 [/i]]

shiyi1022 2008-1-31 10:49

51最需要的就是这样的人才:handshake :handshake

mystufo 2008-1-31 11:37

多谢楼主能无私的奉献

hehemeimei 2008-1-31 14:09

Thank you Yuanding , 我现在也不用QTP了,收藏了,学习以下。

kanebluba 2008-1-31 14:41

LZ你没测试过?我是测试过放出来的,基本没什么问题.
大家有新的想法也可以贴出来的

daneil2007 2008-1-31 15:19

楼主走好 :handshake  谢谢了
页: [1] 2 3
查看完整版本: 告别QTP板块,临走吐点心血送给大家(知识是共享和堆积的,不是卖钱的,完全免费)