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