(appium+python)UI自動化_08_unittest編寫測試用例

前言

unittest是python自帶的單元測試框架,相似於Junit(Java單元測試框架)。支持自動化測試,可編寫測試前置&後置條件,而且可批量運行測試用例並生成測試報告。python

使用unittest需遵循如下幾點:web

1,使用時需導入unittest模塊瀏覽器

2,編寫測試類,並繼承unittest.TestCaseapp

3,測試用例名字以test開頭(unittest會自動將test開頭的方法放入測試用例集中)框架

4,斷言需用unittest斷言格式函數

用法簡介

1、前置&後置

unittest先後置分類2種:類的先後置、函數的先後置單元測試

類的先後置:測試

  • setUpClass:類的前置-測試類開始時執行,app自動化主要用於啓動app;web自動化主要用於啓動瀏覽器驅動、設置瀏覽器窗口最大化、打開某默認url。
  • tearDownClass:類的後置-測試類結束時執行,主要用於關閉app&瀏覽器回話

函數先後置:編碼

  • setUp:函數的前置-測試函數開始時執行,可編寫一些用例前置條件(例如登陸等操做)
  • tesrDown:函數的後置-測試函數結束時執行,可編寫一些用例後置條件(例如測試數據初始化)

簡單實例:url

備註:

setUpClass&tearDownClass必須使用裝飾器@classmethod 

2、編寫測試用例

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搜索加車爲實例):

3、執行測試用例

經過unittest.main()執行測試用例

示例:

 4、總實例代碼

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,運行結果

 

相關文章
相關標籤/搜索