appium 自動化測試框架詳讀(一)


appium框架使用的過程記錄,開始使用markdown來語法來編寫,不知道博客園是否會支持markdown語法

***
1. appium原理
* appium啟動時,創建一個http://127.0.0.1:4723/wd/hub服務端服務端和設備默認使用4724端口進行通信
* 底層調用UIautoamator工具
* 服務端給設備一個bootstrap.jar
* 啟動包后會在手機上創建socket服務,暴露4723端口
* 服務端收到也就是appium收到腳本傳遞命令,通過電腦4724端口想設備4724端口發送指令
* bootstrap,jar收到指令后再去點擊/滑動操作,完成后再給服務端一個響應,服務端收到響應后再去運行腳本

***
2. 運行appiumdesktop的時候,手機上安裝的文件apk是什么
* unlock,setting,inputmanager三個apk
* Settings是用來指定appium server的工作方式。
* Settings只用來控制appium server,不能用於控制被測應用或設備
*unlock 是用來解鎖設備的
*inputmanager 應該是一個輸入管理

****

3. appium api有那些?
* 定位控件
* 手勢操作
* 獲取相關元素及設備
* 其他操作,網絡/截圖
***
4. 課外疑問,安卓的activity究竟是什么
* 在一個android應用中,一個Activity通常就是一個單獨的屏幕
* 它上面可以顯示一些控件也可以監聽並處理用戶的事件做出響應。
* Activity之間通過Intent進行通信。
* Android 是通過一種 Activity 棧的方式來管理 Activity 的,一個 Activity 的實例的狀態決定它在棧中的位置。處於前台的 Activity 總是在棧的頂端,當前台的 Activity 因為異常或其它原因被銷毀時,處於棧第二層的 Activity 將被激活,上浮到棧頂。當新的 Activity 啟動入棧時,原 Activity 會被壓入到棧的第二層。一個 Activity 在棧中的位置變化反映了它在不同狀態間的轉換。

****

5. ui自動化框架目錄
* appium框架目錄:
* appPerf app運行時的性能監控,包括內存和電量cpu
* common 公共文件,獲取yaml內容/報告/截圖
* config 配置文件
* initdata 數據初始話
* testModule 測試用例,每一個yaml文件對應一個用例
* testResult 存放項目運行時需要的文件
* testRuner 存放項目運行時需要的文件
* utils 存放一些工具
***
6. 開始使用框架:
* 在 testModule 目錄的 yaml 文件下編寫腳本了
* 選擇一部合適的手機,連接電腦,打開開發者選項 USB 調試模式。然后 dos 命令下輸入 adb devices 驗證是否連接成功,出現設備信息表示成功
* 打開 appium desktop,然后配置 host 為本地 ip 127.0.0.1 點擊 start server
* 一切准備就緒后,最后我們在 testRunner 目錄下運行 run_mttest_ui.py 文件,開始自動 化執行用例

# 疑問:
1. @classmethod,
* 類屬性屬於類,數據屬性屬於類的實例
* 大家看,數據屬性name和類屬性mode均沒有在類中被定義,你要做的,只是在需要的時候使用他們即可.如何預先給屬性賦值
數據屬性:
```
class Test:
pass
t=Test()
t.name='notus' 數據屬性:
print t.name
Test.mode='auto' 類屬性
print Test.mode
@classmethod #在cal_info函數前加上@classmethon,則該函數變為類方法,該函數只能訪問到類的數
據屬性,不能獲取實例的數據屬性
def cal_info(cls): #python自動傳入位置參數cls就是類本身
print('這是一個%s'%cls.cal_name) #cls.cal_name調用類自己的數據屬性
```

* @staticmethod 靜態方法只是名義上歸屬類管理,但是不能使用類變量和實例變量,是類的工具包放在函數前(該函數不傳入self或者cls),所以不能訪問類屬性和實例屬性
* @property #在cal_add函數前加上@property,使得該函數可直接調用,封裝起來

2. super方法
*super() 函數是用於調用父類(超類)的一個方法。
* super 是用來解決多重繼承問題的,直接用類名調用父類方法在使用單繼承的時候沒問題,但是如果使用多繼承,會涉及到查找順序(MRO)、重復調用(鑽石繼承)等種種問題。
* MRO 就是類的方法解析順序表, 其實也就是繼承父類方法時的順序表。

3. unittest.TestLoader是什么

* unittest 的 TestLoader 成員下面提供了discover()方法可以通過文件的名稱來判斷是否為測試用例文件,

* 如何為用例文件則自動添加到測試套件中

* 多個獨立的測試用例(test case)或者多個獨立的測試套件(test suite,可以理解為子套件)可以構成一個

* 測試套件,那么我們寫好了一個用例之后,如果去構建一個測試套件呢。下面介紹幾種構建測試套件的方法:
* 通過unittest.TestSuite()類直接構建,或者通過TestSuite實例的addTests、addTest方法構建
* 通過unittest.TestLoader類的discover、loadTestsFromTestCase、loadTestsFromModule、loadTestsFromName、loadTestsFromNames這五個方法去構建
* 通過unittest.makeSuite()、unittest.findTestCases()這兩個方法去構建

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM