AutoRunner 功能自動化測試專案實訓之第二的案例指令碼增強,正反例設計增加測試覆蓋率範圍(六)
實驗三、指令碼編輯和正反例詳細設計過程和回放實驗
實驗內容導航
1.實驗步驟
2.實驗需求
3.實驗目標
4.實驗理論
5.操作步驟
6.實驗報告模板
7.實驗課尾交流
實驗步驟
1.理解指令碼錄製的原理
2.熟悉需要測試的功能的需求
3.認真分析實驗需求
4.獨立完成實驗任務
5.認真填寫實驗報告,並細緻分析與總結本次實驗
實驗需求
1.成功搭建被測系統crm客戶管理平臺;
2.成功安裝AutoRunner功能自動化測試工具,可以錄製回放指令碼
3.使用IE瀏覽器,並且版本不超過IE9
實驗目標
1.初步瞭解功能自動化測試工具的使用
2.掌握錄製和回放的基本操作
3.熟悉指令碼編輯區域的指令碼資訊
4.掌握報告結果的分析
實驗理論
實驗理論:自動化測試工程實際就是一個工具模擬人工的過程,這個過程可以
細分成倆個獨立又相互關聯的階段,首先是用自動化測試工具模擬記錄人工的
操作過程形成測試指令碼,第二個階段是自動化測試工具根據及錄下的人工的操
作步驟和後期設計的輸入引數,自動迴圈往復執行重複的操作,對被測系統進
行全方位立體式的測試,以期找出系統的所有缺陷。
實驗操作步驟:
在上一個實驗的基礎上我們對測試思路進行進一步處理,我們在上一個實驗裡
面做的引數化都是設計的正確的“name”和正確的“password”,那麼還有使用者名稱
錯誤;密碼錯誤的情況我們沒有考慮進來,下面我們就要考慮這個問題,因為
在實際專案裡面我們的測試不是單純地用正確的資料去驗證功能的正確性,也
要測試在輸入的資料有誤的情況下系統是否能返回錯誤的提示資訊,並且按照
系統的提示正確地處理提示資訊使得crm客戶管理系統能恢復正常執行,在以
上指令碼的基礎上我們先對使用者名稱不存在的情況進行分析:輸入一個錯誤的使用者
名:tes,正確的密碼:test,點選登入。
Crm客戶管理系統提示使用者名稱不存在,這個時候我們點選提示框中的確定按鈕
,則系統可以回到初始的登入頁面,這樣的話符合我們對系統後續測試的需要
(重複登入系統)。在作自動化測試的時候我們由以上的分析可知完全可以正
常實施,在實施之前我們要考慮一個問題,那就是提示框資訊如何錄製,在已
經錄製好的正確登入的指令碼的什麼位置開始錄製?我們知道登入的時候輸入用
戶名和密碼點選登入按鈕之後才會有登入成功後的頁面跳轉或者輸入錯誤的用
戶名正確的密碼後點選登入才會有提示框出現,那麼我們接下來錄製提示框信
息一定是在點選登入按鈕之後,那麼我們在點選登入按鈕的指令碼後面空出一行
開始錄製提示資訊:
注意:在點選錄製按鈕之後,把全新錄製的勾選去掉之後再點選確定開始錄製
,因為我們希望之前錄製的指令碼仍然存在,我們要做的是在原有的指令碼基礎上
把提示資訊補錄進來:
然後我們開始錄製指令碼,首先是記錄提示框:注意這個時候我們把滑鼠定位到
提示框內的空白區域,然後點選滑鼠左鍵就可以記錄指令碼了。
接下來我們考慮,提示框中的提示資訊:“使用者名稱不存在!”,這個資訊剛好可以
作為同型別用例的執行結果,也就是我們在測試裡面所說的實際結果。但是我
們仔細觀察發現它既不是輸入框也不是按鈕,它是屬於一類特殊物件,我們直
接點選滑鼠左鍵發現記錄不到該物件,這種特殊物件的記錄需要用到強制抓取
的方法。具體的做法是:將游標懸停在該物件上,同時按住滑鼠上的ctrl和alt鍵
,輕輕挪動一下滑鼠,直到該物件上出現紅框,該物件就被記錄下來了。
然後點選提示框中的確定按鈕,使得crm客戶管理系統回到初始的登入頁面:
然後結束錄製回到指令碼編輯區:
將註釋部分的指令碼全部刪除處理,留下記錄訊息框和點選確定按鈕的指令碼:
再對指令碼進行編輯,這個是登入過程中的第二種情況,使用者名稱不存在;我們寫
下判斷,這裡我們可以判斷window(“#32770_來自網頁的訊息”)這個視窗存不存
在,如果存在則點選提示框中的確定按鈕,編輯後的指令碼如下:
下面按照對使用者名稱不存在的分析和操作,我們對密碼錯誤的情況進行指令碼的錄
制和編輯,首先我們輸入正確的使用者名稱:test,錯誤的密碼:tes,然後點選登
錄:
指令碼錄製編輯,在使用者名稱不存在情況的指令碼後面錄製:
取消全新錄製的勾選後點選確定開始錄製:
點選密碼錯誤訊息框的空白區域,強抓密碼錯誤特殊物件:
點選確定按鈕,使得crm客戶管理系統退回到初始登入頁面:
結束錄製,然後刪除指令碼中的註釋部分:
接下來對指令碼進行編輯:
接下來我們把登入成功的情況進行下改造:
判斷的情況是判斷物件存不存在我們編輯下指令碼:
接下來我們把參數列部分的資料修改一下,把使用者名稱不存在,和密碼錯誤的數
據新增進來,用資料驅動測試指令碼,執行測試過程。
完整的指令碼如下:
for(ParameterData pd : ar.getParameterDataList("login.xls")/*.subList(0, 2)*/)
{
//ar.parameterData = pd;//ar.parameterData可用於指令碼之間傳遞引數
ar.window("IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer").setValue("INPUT_text_username", ""+pd.getFrom("name"));
ar.window("IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer").setValue("INPUT_password_password", ""+pd.getFrom("pwd"));
ar.window("IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer").clickControl("INPUT_submit_登 錄", 41, 16, "left");
if(ar.windowExist("#32770_來自網頁的訊息")){
ar.window("#32770_來自網頁的訊息").clickControl("Button_確定", 43, 12, "left");
}else if(ar.windowExist("#32770_來自網頁的訊息_2")){
ar.window("#32770_來自網頁的訊息_2").clickControl("Button_確定_2", 40, 6, "left");
}else if(ar.window("IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer_2").controlExist("TD")){
System.out.println("登入成功!");
ar.window("IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer").clickControl("A_退出系統", 30, 5, "left");
}
}
下面我們點選執行按鈕,執行指令碼:
執行日誌資訊:
指令碼詳細:
行號 | 指令碼內容 |
1 | for(ParameterData pd : ar.getParameterDataList("login.xls")/*.subList(0, 2)*/) |
2 | { |
3 | //ar.parameterData = pd;//ar.parameterData可用於指令碼之間傳遞引數 |
4 | ar.window("IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer").setValue("INPUT_text_username", ""+pd.getFrom("name")); |
5 | ar.window("IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer").setValue("INPUT_password_password", ""+pd.getFrom("pwd")); |
6 | ar.window("IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer").clickControl("INPUT_submit_登 錄", 41, 16, "left"); |
7 | if(ar.windowExist("#32770_來自網頁的訊息")){ |
8 | ar.window("#32770_來自網頁的訊息").clickControl("Button_確定", 43, 12, "left"); |
9 | }else if(ar.windowExist("#32770_來自網頁的訊息_2")){ |
10 | ar.window("#32770_來自網頁的訊息_2").clickControl("Button_確定_2", 40, 6, "left"); |
11 | }else if(ar.window("IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer_2").controlExist("TD")){ |
12 | System.out.println("登入成功!"); |
13 | ar.window("IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer").clickControl("A_退出系統", 30, 5, "left"); |
14 | } |
15 | } |
|
|
記錄詳細:
行號 | 物件 | 詳細 | 結果 | 時間 | 備註 |
1 | login.xls | getParameterDataList | Successed | 2019-10-27 12:31:40 |
|
4 | IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer | window | Successed | 2019-10-27 12:31:40 |
|
4 | INPUT_text_username | setValue | Successed | 2019-10-27 12:31:41 |
|
5 | IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer | window | Successed | 2019-10-27 12:31:42 |
|
5 | INPUT_password_password | setValue | Successed | 2019-10-27 12:31:44 |
|
6 | IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer | window | Successed | 2019-10-27 12:31:45 |
|
6 | INPUT_submit_登 錄 | clickControl | Successed | 2019-10-27 12:31:46 |
|
11 | IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer_2 | window | Successed | 2019-10-27 12:31:56 |
|
11 | TD | controlExist | Successed | 2019-10-27 12:31:57 |
|
13 | IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer | window | Successed | 2019-10-27 12:31:57 |
|
13 | A_退出系統 | clickControl | Successed | 2019-10-27 12:31:57 |
|
4 | IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer | window | Successed | 2019-10-27 12:31:58 |
|
4 | INPUT_text_username | setValue | Successed | 2019-10-27 12:31:59 |
|
5 | IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer | window | Successed | 2019-10-27 12:31:59 |
|
5 | INPUT_password_password | setValue | Successed | 2019-10-27 12:32:02 |
|
6 | IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer | window | Successed | 2019-10-27 12:32:03 |
|
6 | INPUT_submit_登 錄 | clickControl | Successed | 2019-10-27 12:32:04 |
|
8 | #32770_來自網頁的訊息 | window | Successed | 2019-10-27 12:32:04 |
|
8 | Button_確定 | clickControl | Successed | 2019-10-27 12:32:04 |
|
4 | IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer | window | Successed | 2019-10-27 12:32:05 |
|
4 | INPUT_text_username | setValue | Successed | 2019-10-27 12:32:06 |
|
5 | IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer | window | Successed | 2019-10-27 12:32:06 |
|
5 | INPUT_password_password | setValue | Successed | 2019-10-27 12:32:09 |
|
6 | IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer | window | Successed | 2019-10-27 12:32:09 |
|
6 | INPUT_submit_登 錄 | clickControl | Successed | 2019-10-27 12:32:10 |
|
10 | #32770_來自網頁的訊息_2 | window | Successed | 2019-10-27 12:32:16 |
|
10 | Button_確定_2 | clickControl | Successed | 2019-10-27 12:32:16 |
|
|
|
|
|
|
|
結果總結:
名稱 | 值 |
指令碼名稱: | login.bsh |
錄影檔案: |
|
開始執行時間: | 2019-10-27 12:31:39 |
執行結束時間: | 2019-10-27 12:32:16 |
執行耗時(秒): | 37 |
指令碼執行結果: | 執行成功! |
指令碼執行結果:
從指令碼的執行結果來看,知識把登入成功的情況列印到了輸出,我們希望把三
種情況的執行結果都列印出來方便統計。
接下來我們處理指令碼,使得使用者名稱不存在和密碼錯誤的情況下的結果也能列印
到輸出:
首先我們要在點選之前去新增獲取“使用者名稱不存在!”物件的name屬性:
我們之前搶抓下來的物件“使用者名稱不存在!”的name屬性值,這個值好就是“使用者
名不存在!”,我們可以在物件庫裡面去檢視:
新增過程:
生成的指令碼如下:
這裡生成的是校驗屬性的指令碼命令,我們要將它改造一下,改成獲取屬性值的指令碼語句:
ar.window("#32770_來自網頁的訊息").getProperty("Static_使用者名稱不存在!", "name");
接下來我們定義一個變數str1,將獲取到的name屬性值儲存起來,然後列印出來:
Srting str1 = ar.window("#32770_來自網頁的訊息").getProperty("Static_使用者名稱不存在!", "name");
System.out.println(str1);
密碼錯誤的情況也類似:
String str2 = ar.window("#32770_來自網頁的訊息_2").checkProperty("Static_密碼錯誤!", "name");
System.out.println(str2);
完整的指令碼如下:
for(ParameterData pd : ar.getParameterDataList("login.xls")/*.subList(0, 2)*/)
{
//ar.parameterData = pd;//ar.parameterData可用於指令碼之間傳遞引數
ar.window("IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer").setValue("INPUT_text_username", ""+pd.getFrom("name"));
ar.window("IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer").setValue("INPUT_password_password", ""+pd.getFrom("pwd"));
ar.window("IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer").clickControl("INPUT_submit_登 錄", 41, 16, "left");
if(ar.windowExist("#32770_來自網頁的訊息")){
String str1 = ar.window("#32770_來自網頁的訊息").getProperty("Static_使用者名稱不存在!", "name");
System.out.println(str1);
ar.window("#32770_來自網頁的訊息").clickControl("Button_確定", 43, 12, "left");
}else if(ar.windowExist("#32770_來自網頁的訊息_2")){
String str2 = ar.window("#32770_來自網頁的訊息_2").getProperty("Static_密碼錯誤!", "name");
System.out.println(str2);
ar.window("#32770_來自網頁的訊息_2").clickControl("Button_確定_2", 40, 6, "left");
}else if(ar.window("IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer_2").controlExist("TD")){
System.out.println("登入成功!");
ar.window("IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer").clickControl("A_退出系統", 30, 5, "left");
}
}
下面我們來執行下指令碼:
執行日誌:
指令碼詳細:
行號 | 指令碼內容 |
1 | for(ParameterData pd : ar.getParameterDataList("login.xls")/*.subList(0, 2)*/) |
2 | { |
3 | //ar.parameterData = pd;//ar.parameterData可用於指令碼之間傳遞引數 |
4 | ar.window("IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer").setValue("INPUT_text_username", ""+pd.getFrom("name")); |
5 | ar.window("IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer").setValue("INPUT_password_password", ""+pd.getFrom("pwd")); |
6 | ar.window("IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer").clickControl("INPUT_submit_登 錄", 41, 16, "left"); |
7 | if(ar.windowExist("#32770_來自網頁的訊息")){ |
8 | String str1 = ar.window("#32770_來自網頁的訊息").getProperty("Static_使用者名稱不存在!", "name"); |
9 | System.out.println(str1); |
10 | ar.window("#32770_來自網頁的訊息").clickControl("Button_確定", 43, 12, "left"); |
11 | }else if(ar.windowExist("#32770_來自網頁的訊息_2")){ |
12 | String str2 = ar.window("#32770_來自網頁的訊息_2").getProperty("Static_密碼錯誤!", "name"); |
13 | System.out.println(str2); |
14 | ar.window("#32770_來自網頁的訊息_2").clickControl("Button_確定_2", 40, 6, "left"); |
15 | }else if(ar.window("IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer_2").controlExist("TD")){ |
16 | System.out.println("登入成功!"); |
17 | ar.window("IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer").clickControl("A_退出系統", 30, 5, "left"); |
18 | } |
19 | } |
|
|
記錄詳細:
行號 | 物件 | 詳細 | 結果 | 時間 | 備註 |
1 | login.xls | getParameterDataList | Successed | 2019-10-27 13:27:07 |
|
4 | IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer | window | Successed | 2019-10-27 13:27:12 |
|
4 | INPUT_text_username | setValue | Successed | 2019-10-27 13:27:12 |
|
5 | IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer | window | Successed | 2019-10-27 13:27:13 |
|
5 | INPUT_password_password | setValue | Successed | 2019-10-27 13:27:16 |
|
6 | IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer | window | Successed | 2019-10-27 13:27:16 |
|
6 | INPUT_submit_登 錄 | clickControl | Successed | 2019-10-27 13:27:17 |
|
15 | IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer_2 | window | Successed | 2019-10-27 13:27:28 |
|
15 | TD | controlExist | Successed | 2019-10-27 13:27:28 |
|
17 | IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer | window | Successed | 2019-10-27 13:27:28 |
|
17 | A_退出系統 | clickControl | Successed | 2019-10-27 13:27:29 |
|
4 | IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer | window | Successed | 2019-10-27 13:27:30 |
|
4 | INPUT_text_username | setValue | Successed | 2019-10-27 13:27:30 |
|
5 | IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer | window | Successed | 2019-10-27 13:27:31 |
|
5 | INPUT_password_password | setValue | Successed | 2019-10-27 13:27:34 |
|
6 | IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer | window | Successed | 2019-10-27 13:27:34 |
|
6 | INPUT_submit_登 錄 | clickControl | Successed | 2019-10-27 13:27:35 |
|
8 | #32770_來自網頁的訊息 | window | Successed | 2019-10-27 13:27:36 |
|
8 | Static_使用者名稱不存在! name | getProperty | 使用者名稱不存在! | 2019-10-27 13:27:36 |
|
10 | #32770_來自網頁的訊息 | window | Successed | 2019-10-27 13:27:36 |
|
10 | Button_確定 | clickControl | Successed | 2019-10-27 13:27:36 |
|
4 | IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer | window | Successed | 2019-10-27 13:27:37 |
|
4 | INPUT_text_username | setValue | Successed | 2019-10-27 13:27:38 |
|
5 | IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer | window | Successed | 2019-10-27 13:27:38 |
|
5 | INPUT_password_password | setValue | Successed | 2019-10-27 13:27:41 |
|
6 | IEFrame_上海澤眾軟體科技有限公司客戶管理系統 - Windows Internet Explorer | window | Successed | 2019-10-27 13:27:41 |
|
6 | INPUT_submit_登 錄 | clickControl | Successed | 2019-10-27 13:27:42 |
|
12 | #32770_來自網頁的訊息_2 | window | Successed | 2019-10-27 13:27:48 |
|
12 | Static_密碼錯誤! name | getProperty | 密碼錯誤! | 2019-10-27 13:27:48 |
|
14 | #32770_來自網頁的訊息_2 | window | Successed | 2019-10-27 13:27:48 |
|
14 | Button_確定_2 | clickControl | Successed | 2019-10-27 13:27:49 |
|
|
|
|
|
|
|
結果總結:
名稱 | 值 |
指令碼名稱: | login.bsh |
錄影檔案: |
|
開始執行時間: | 2019-10-27 13:27:05 |
執行結束時間: | 2019-10-27 13:27:49 |
執行耗時(秒): | 43 |
指令碼執行結果: | 執行成功! |
指令碼執行結果:
這樣我們的指令碼就完成了,整個登入模組的測試也就完成了。
相關文章
- AutoRunner 功能自動化測試專案實訓之自動化測試原理(一)
- AutoRunner 功能自動化測試專案實訓之AutoRunner產品設計目標(三)
- 自動化會提高測試覆蓋率,那測試覆蓋率是什麼?
- 如何制定介面自動化測試的覆蓋率?
- AutoRunner 功能自動化測試專案實訓之crm客戶管理系統試用安裝包下載(二十)
- 自動化測試如何實現全面覆蓋
- 安卓app功能或自動化測試覆蓋率統計(不用instrumentation啟動app)安卓APP
- 測試覆蓋率 之 Cobertura的使用
- 程式碼覆蓋率與測試覆蓋率比較
- go 程式碼覆蓋率測試Go
- iOS 覆蓋率檢測原理與增量程式碼測試覆蓋率工具實現iOS
- 單元測試的覆蓋率計算
- PouchContainer 整合測試覆蓋率統計AI
- 開源專案核心程式碼單元測試 100% 覆蓋率實戰
- 測試開發之單元測試-實現Git增量程式碼的Jacoco覆蓋率統計Git
- 測試覆蓋率二改實現
- vivo 基於 JaCoCo 的測試覆蓋率設計與實踐
- 測試開發之自動化篇-自動化測試框架設計框架
- 軟體測試培訓之:白盒測試的語句覆蓋法和判定覆蓋法
- AutoRunner介面自動化測試工具不能錄製指令碼的解決辦法(A)指令碼
- 單元測試接入覆蓋率
- Jacoco--測試覆蓋率工具
- 精準測試之覆蓋
- 功能測試、自動化測試、效能測試的區別
- 基於Jacoco的單元測試程式碼覆蓋率統計
- 增強自動化測試的8大技巧
- [python] request 介面測試自動化指令碼轉化為 [locust] 效能測試指令碼Python指令碼
- maven 多模組專案的測試覆蓋率分析 - jacoco 聚合分析Maven
- 如何實現工具無關化?關於自動化測試指令碼的設計指令碼
- 白盒測試—六種覆蓋方法
- Mockito提升單元測試覆蓋率Mockito
- 前端精準測試探索:覆蓋率實時統計工具前端
- 從零入門專案整合Karate和Jacoco,配置測試程式碼覆蓋率
- 基於JaCoCo的Android測試覆蓋率統計(二)Android
- Jmeter測試工具的實際專案測試案例JMeter
- 自動化測試人員,專職寫自動化用例,除了用例覆蓋率還有哪些指標?指標
- 介面自動化測試的覆蓋和 Diff 平臺的悖論
- 簡記前後端如何實現統計測試覆蓋率後端