以前一直覺得自己沒有寫代碼的資質(zhì),太急于求成,以為一天就能寫好幾個功能,幾千行代碼,于是就沒耐心了,沒
心情學(xué)下去了....但是最近發(fā)現(xiàn)其實寫代碼是一個漫長的過程,都是在修修改改中成長起來的。于是今天試著慢慢用
QTP測下參數(shù)限制,雖然代碼量不多,其實也算不上編程,O(∩_∩)O哈哈~但也是個慢慢積累的過程。
首先,我有一段登陸系統(tǒng)的
測試模塊,可以把它設(shè)為可重用的,并且參數(shù)化必要的信息,比如登陸用戶名密碼等等,這些就不細(xì)說了。可以參見《QTP自動化測試實踐》8.3節(jié) Action測試輸入的參數(shù)化,調(diào)用過程見上一篇關(guān)于action的
文章。
現(xiàn)在我要測試參數(shù)的限制:
第一步,必須要在當(dāng)前項目下新建一個action,步驟如下:
選擇Insert|Call to New Action:
然后在彈出框中填寫新建action的name和description,可不可重用,以及新action的位置,這里我的參數(shù)檢查功能是在登陸模塊之后,所以選擇第一個At the end of the
test。
第二步,既然2個action都是測試同一個軟件,可以重用它們的對象庫respositories,操作步驟是:
先保存login這個action的對象庫,后綴是“.tsr",然后選擇Resources|Associate Respositories,選定剛剛保存的對象庫文件,然后下面的Available Action選擇login模塊,右邊的Associated Action選擇Test_Parameters模塊:
于是,在測試參數(shù)的模塊中就可以直接使用login的對象庫了。 第三步,因為測試參數(shù)是一個繁雜的過程,有很多種組合方式,而且每個參數(shù)輸入框都要求輸入一遍,但是好在參數(shù)輸入框的規(guī)則都是一樣的,比如不能輸入符號,字母,負(fù)數(shù),小數(shù),空格等等,除此之外還有范圍限制,于是我就采用數(shù)據(jù)驅(qū)動測試的方法來做這個腳本。先寫好輸入?yún)?shù)的過程:
Dialog("App(1.0.1.0)").WinEdit("MINS").Set ”1“ Dialog("App(1.0.1.0)").WinEdit("MINX").Set ”1“ Dialog("App(1.0.1.0)").WinEdit("MAXS").Set ”2“ Dialog("App(1.0.1.0)").WinEdit("MAXX").Set ”2“ Dialog("App(1.0.1.0)").WinEdit("IR").Set ”1“ Dialog("App(1.0.1.0)").WinEdit("OR").Set ”2“ |
然后根據(jù)數(shù)據(jù)驅(qū)動測試的步驟設(shè)置參數(shù)根據(jù)table中的值來輸入,詳情參見我博客《QTP:數(shù)據(jù)驅(qū)動測試》,Expert View的顯示如下:
Dialog("App(1.0.1.0)").WinEdit("MINS").Set DataTable("minS", dtLocalSheet) Dialog("App(1.0.1.0)").WinEdit("MINX").Set DataTable("minX", dtLocalSheet) Dialog("App(1.0.1.0)").WinEdit("MAXS").Set DataTable("maxS", dtLocalSheet) Dialog("App(1.0.1.0)").WinEdit("MAXX").Set DataTable("maxX", dtLocalSheet) Dialog("App(1.0.1.0)").WinEdit("IR").Set DataTable("IR", dtLocalSheet) Dialog("App(1.0.1.0)").WinEdit("OR").Set DataTable("OR", dtLocalSheet)<br>Dialog("App(1.0.1.0)").WinButton("應(yīng)用參數(shù)").Click ' 點擊開始應(yīng)用參數(shù) |
我設(shè)置了2種參數(shù)范圍邊界的數(shù)據(jù),9種服務(wù)端會拒絕應(yīng)用的參數(shù)組合,30種客戶端限制的參數(shù)類型組合。
第四步,對測試結(jié)果進(jìn)行判斷并顯示在QTP生成的測試報告中:
開始我是這么寫的:
If Dialog("App(1.0.1.0)").Dialog("提示").Exist(3) Then Dialog("App(1.0.1.0)").Dialog("提示").WinButton("應(yīng)用參數(shù)成功-確定").Click ' 應(yīng)用成功 reporter.ReportEvent micDone,"yes","前2個:可以應(yīng)用成功" else reporter.ReportEvent micFail, "yes"," 前2個:服務(wù)端拒絕應(yīng)用" End If If Dialog("App(1.0.1.0)").Dialog("錯誤").Exist(3) Then Dialog("App(1.0.1.0)").Dialog("錯誤").WinButton("服務(wù)器不支持該參數(shù)-確定").Click reporter.ReportEvent micDone,"server no","中間9個:服務(wù)端拒絕應(yīng)用" else reporter.ReportEvent micFail,"server no", "中間9個:服務(wù)端居然應(yīng)用了" End If If Dialog("App(1.0.1.0)").Dialog("警告").Exist(3) Then Dialog("App(1.0.1.0)").Dialog("警告").WinButton("客戶端不支持該參數(shù)-確定").Click reporter.ReportEvent micDone,"client no","后30個:DTC拒絕應(yīng)用" else reporter.ReportEvent micFail,"client no", "后30個:DTC居然應(yīng)用了" End If |
運行之后發(fā)現(xiàn),每一行參數(shù)的結(jié)果都有2個fail,因為我設(shè)置的三個主if是并列關(guān)系!符合其中一種情況之后,另外2種情況都會失敗。
于是,我再寫成這樣的:
If Dialog("App(1.0.1.0)").Dialog("提示").Exist(3) Then Dialog("App(1.0.1.0)").Dialog("提示").WinButton("應(yīng)用參數(shù)成功-確定").Click ' 應(yīng)用成功 reporter.ReportEvent micDone,"yes","前2個:可以應(yīng)用成功" elseif Dialog("App(1.0.1.0)").Dialog("錯誤").Exist(3) Then Dialog("App(1.0.1.0)").Dialog("錯誤").WinButton("服務(wù)器不支持該參數(shù)-確定").Click reporter.ReportEvent micDone,"server no","中間9個:服務(wù)端拒絕應(yīng)用" elseif Dialog("App(1.0.1.0)").Dialog("警告").Exist(3) Then Dialog("App(1.0.1.0)").Dialog("警告").WinButton("客戶端不支持該參數(shù)-確定").Click reporter.ReportEvent micDone,"client no","后30個:客戶端拒絕應(yīng)用" else reporter.ReportEvent micFail, "fail"," 結(jié)果跟預(yù)期不一致" End If |
現(xiàn)在如果全部測試通過,不會出現(xiàn)fail的情況,但是需要在測試報告中一層層點開,查看對于每個測試數(shù)據(jù)行的測試結(jié)果是不是符合以下描述:
1.前2個:可以應(yīng)用成功
2.中間9個:服務(wù)端拒絕應(yīng)用
3.后30個:客戶端拒絕應(yīng)用
雖然上面的腳本避免了重復(fù)輸入41種數(shù)據(jù),但是后期的結(jié)果查看還是一個艱辛的過程,不知道QTP有沒有把測試人員要求的結(jié)果描述統(tǒng)一到一個頁面來的功能呢,有待挖掘。