前言
unittest是python自帶的單元測試框架,類似於Junit(Java單元測試框架)。支持自動化測試,可編寫測試前置&后置條件,並且可批量運行測試用例並生成測試報告。
使用unittest需遵循以下幾點:
1,使用時需導入unittest模塊
2,編寫測試類,並繼承unittest.TestCase
3,測試用例名字以test開頭(unittest會自動將test開頭的方法放入測試用例集中)
4,斷言需用unittest斷言格式
用法簡介
一、前置&后置
unittest前后置分類2種:類的前后置、函數的前后置
類的前后置:
- setUpClass:類的前置-測試類開始時執行,app自動化主要用於啟動app;web自動化主要用於啟動瀏覽器驅動、設置瀏覽器窗口最大化、打開某默認url。
- tearDownClass:類的后置-測試類結束時執行,主要用於關閉app&瀏覽器回話
函數前后置:
- setUp:函數的前置-測試函數開始時執行,可編寫一些用例前置條件(例如登錄等操作)
- tesrDown:函數的后置-測試函數結束時執行,可編寫一些用例后置條件(例如測試數據初始化)
簡單實例:
備注:
setUpClass&tearDownClass必須使用裝飾器@classmethod
二、編寫測試用例
1,測試用例需以test開頭
2,unittest常用斷言
unittest常用斷言如下:
- assertEqual(arg1, arg2, msg=None):驗證參數相等
- assertNotEqual(arg1, arg2, msg=None) :驗證參數不等
- assertTrue(expr, msg=None) :驗證參數ture
- assertFalse(expr,msg=None) :驗證參數false
- assertIsNone(expr, msg=None) :驗證參數None
- assertIsNotNone(expr, msg=None) :驗證參數非None
- assertIn(arg1, arg2, msg=None) :驗證arg1包含arg2
簡單實例(以叮咚app搜索加車為實例):
三、執行測試用例
通過unittest.main()執行測試用例
示例:
四、總實例代碼
1,代碼詳情
1 # 叮咚搜索加車(appium+python+unittest)實例 2 from appium import webdriver 3 from time import sleep 4 import unittest 5 6 class DingDong(unittest.TestCase): 7 """ 8 叮咚買菜搜索加車 9 """ 10 11 @classmethod 12 def setUpClass(cls): 13 # 基礎信息配置 14 desired_caps = { 15 'platformName': 'Android', # 平台 16 'deviceName': 'emulator-5554', # 手機設備名稱 17 'platformVersion': '6.0.1', # 安卓系統版本號 18 'appPackage': 'com.yaya.zone', # apk包名 19 'appActivity': 'com.yaya.zone.activity.SplashActivity', # apk activity 20 'unicodeKeyboard': True, # 設置編碼格式為unicode 21 'resetKeyboard': True, # 隱藏手機鍵盤 22 'noReset': True, # 非初始化 23 } 24 25 cls.driver = webdriver.Remote('http://0.0.0.0:4723/wd/hub', desired_caps) # 啟動app 26 sleep(5) 27 28 def test_case01(self): 29 """搜索商品加入購物車""" 30 self.driver.find_element_by_id("com.yaya.zone:id/ll_search").click() # 首頁-點擊搜索框 31 sleep(1) 32 self.driver.find_element_by_id("com.yaya.zone:id/et_what_search").send_keys("雞腿") # 輸入關鍵詞 33 sleep(1) 34 self.driver.find_element_by_id("com.yaya.zone:id/btn_cancel").click() # 點擊搜索btn 35 sleep(3) 36 product_name = self.driver.find_element_by_id("com.yaya.zone:id/tv_name").text # 搜索結果頁-商品名 37 print("搜索結果頁_商品名稱:", product_name) 38 product_price = self.driver.find_element_by_id("com.yaya.zone:id/tv_price").text # 搜索結果頁-商品價格 39 print("搜索結果頁_商品價格:", product_price) 40 self.driver.find_element_by_id("com.yaya.zone:id/iv_add_cart").click() # 搜索結果頁-點擊加車btn 41 sleep(1) 42 self.driver.find_element_by_id("com.yaya.zone:id/iv_cart").click() # 點擊購物車btn 43 sleep(3) 44 cart_product_name = self.driver.find_element_by_id("com.yaya.zone:id/tv_title").text # 購物車-商品名 45 print("購物車_商品名稱:", cart_product_name) 46 cart_product_price = self.driver.find_element_by_id("com.yaya.zone:id/tv_money").text # 購物車-商品價格 47 print("購物車_商品價格:", cart_product_price) 48 self.assertEqual(cart_product_name, product_name) # 判定購物車商品名,同搜索結果頁商品名 49 self.assertEqual(cart_product_price, product_price) # 判定購物車商品價格,同搜索結果頁商品價格 50 51 def test_case02(self): 52 """購物車編輯商品數量""" 53 cart_product_num = self.driver.find_element_by_id("com.yaya.zone:id/tv_number").text # 購物車-商品數量 54 print("購物車_商品數量:", cart_product_num) 55 self.driver.find_element_by_id("com.yaya.zone:id/btn_add").click() # 購物車-增加商品數量 56 after_add_num = self.driver.find_element_by_id("com.yaya.zone:id/tv_number").text # 獲取增加后的商品數量 57 sleep(2) 58 self.assertEqual(int(after_add_num), int(cart_product_num)+1) # 判定商品數量 59 self.driver.find_element_by_id("com.yaya.zone:id/btn_sub").click() # 購物車-減少商品數量 60 after_reduce_num = self.driver.find_element_by_id("com.yaya.zone:id/tv_number").text # 獲取減少后的商品數量 61 self.assertEqual(after_reduce_num, cart_product_num) # 判定商品數量 62 63 if __name__ == '__main__': 64 unittest.main() # 運行該文件下所有測試用例
2,運行過程,app操作詳情
3,運行結果