基於Appium的APP自動化測試基礎--美團APP的實例


轉:https://blog.csdn.net/Tigerdong1/article/details/80159156
前段時間用一種流行語言,一個主流工具,一個實用框架,寫了一個美團app自動化測試的Demo,利用appium+python+unittest+uiautomatorviewer,編寫了測試用例,並通過HTMLTestRunner輸出測試報告。Appium環境搭建的過程就不說了(這種內容百度一搜一大把)。我是利用uiautomatorviewer進行元素定位的,當然如果比較簡單也可以用appium-desktop自帶功能的進行元素定位。下面是面向過程對美團APP進行自動化測試的一個Demo:from appium import webdriver
import time
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '4.4.2'
desired_caps['deviceName'] = '127.0.0.1:62001'
desired_caps['appPackage'] = 'com.sankuai.meituan'
desired_caps['appActivity'] = '.activity.MainActivity'
desired_caps['autoAcceptAlerts'] = 'True'   # 自動確認彈窗
desired_caps['unicodeKeyboard'] = 'True'    #處理無法輸入中文的問題,使用unicodeKeyboard的編碼方式來發送字符串
desired_caps['resetKeyboard'] = 'True'      #將鍵盤給隱藏起來
d = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
time.sleep(3)               # app啟動后等待3秒,方便元素加載完成
d.find_element_by_id('com.sankuai.meituan:id/citylist_search').send_keys('深圳')
time.sleep(3)
d.find_element_by_id('com.sankuai.meituan:id/citylist_textview').click()
time.sleep(3)
d.tap([(75, 400)])
time.sleep(3)       # 臨時取消彈框
d.tap([(0,270),(180,450)],500)
time.sleep(3)       # 定位元素美食,按住500毫秒
d.tap([(218,406)])  # 定位商家
time.sleep(2)
d.tap([(191,654)])  # 查看商品詳情
time.sleep(2)
d.find_element_by_id("com.sankuai.meituan:id/buy").click()   #立即購買
d.find_element_by_id("com.sankuai.meituan:id/mobile").send_keys("15623512919")      # 輸入手機號
d.find_element_by_id("com.sankuai.meituan:id/get_code").click()             # 獲取驗證碼
#異常處理(解決有時候需要輸入圖片驗證碼,有時候又不需要輸入的問題)
try:
    print('請輸入圖片驗證碼')
    picutrecode = input()
    d.find_element_by_id('com.sankuai.meituan:id/captcha').send_keys(picutrecode)
    d.find_element_by_class_name('android.widget.Button').click()
    time.sleep(5)
except:
    print('請輸入短信驗證碼')
    code = input()
    d.find_element_by_id('com.sankuai.meituan:id/code').send_keys(code)
    d.find_element_by_id('com.sankuai.meituan:id/submit').click()
else:
    print('在輸入圖片驗證碼后,請再次輸入短信驗證碼')
    code = input()
    d.find_element_by_id('com.sankuai.meituan:id/code').send_keys(code)
    d.find_element_by_id('com.sankuai.meituan:id/submit').click()
    print('程序運行正常')
    time.sleep(2)
# 通過查找不到元素從而報錯來判斷是否登錄成功(相當於斷言)
try:
    d.find_element_by_id('com.sankuai.meituan:id/submit').click()
    print('登錄下單成功啦')
except:
    d.find_element_by_id('android:id/button1').click()
    print('登錄失敗啦')
d.get_screenshot_as_file(u'F:\自動化截圖\美團.png')  #是否登錄成功截圖備注:第一個異常處理,主要是因為輸入手機號后,點擊獲取驗證碼,可能會讓你直接輸入短信驗證碼,也可能需要你輸入圖片驗證碼后再次輸入短信驗證碼,所以用了try-except-else來規避這個問題,當try下面語句報錯(也就是不用輸入圖片驗證碼時),直接執行except中的內容(直接輸入短信驗證碼),當try下面語句未報錯時(也就是輸入圖片驗證碼后需要再次輸入短信驗證碼時),try下面語句執行完后,繼續執行else語句(輸入短信驗證碼的過程)。因為try語句未報錯時候,將不會執行except語句,所以需要加else語句。將面向過程的Demo封裝成類與函數,如下所示:import  unittest
from appium import webdriver
from time import sleep
class MeituanTest(unittest.TestCase):
    #手機初始化進入APP
    def setUp(self):
        print('開始跑用例啦--setup')
        desired_caps = {}
        desired_caps['platformName'] = 'Android'
        desired_caps['platformVersion'] = '4.4.2'
        desired_caps['deviceName'] = '127.0.0.1:62001'
        desired_caps['appPackage'] = 'com.sankuai.meituan'
        desired_caps['appActivity'] = '.city.CityActivity'
        desired_caps['unicodeKeyboard'] = 'True'
        desired_caps['resetKeyboard'] = 'True'
        self.d = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
        sleep(3)
    #選擇地區購買商品流程
    def test_goshopping(self):
        d = self.d
        d.find_element_by_id('com.sankuai.meituan:id/citylist_search').send_keys('深圳')
        sleep(3)
        d.find_element_by_id('com.sankuai.meituan:id/citylist_textview').click()
        sleep(3)
        d.tap([(75, 400)])
        sleep(3)  # 臨時取消彈框
        d.tap([(0, 270), (180, 450)], 500)
        sleep(3)  # 定位元素美食,按住500毫秒
        d.tap([(218, 406)])  # 定位商家
        sleep(2)
        d.tap([(191, 654)])  # 查看商品詳情
        sleep(2)
        d.find_element_by_id("com.sankuai.meituan:id/buy").click()  # 立即購買
        d.find_element_by_id("com.sankuai.meituan:id/mobile").send_keys("15623512919")  # 輸入手機號
        d.find_element_by_id("com.sankuai.meituan:id/get_code").click()  # 獲取驗證碼
        # 異常處理(解決有時候需要輸入圖片驗證碼,有時候又不需要輸入的問題)
        try:
            print('請輸入圖片驗證碼')
            picutrecode = input()
            d.find_element_by_id('com.sankuai.meituan:id/captcha').send_keys(picutrecode)
            d.find_element_by_class_name('android.widget.Button').click()
            sleep(5)
        except:
            print('請輸入短信驗證碼')
            code = input()
            d.find_element_by_id('com.sankuai.meituan:id/code').send_keys(code)
            d.find_element_by_id('com.sankuai.meituan:id/submit').click()
        else:
            print('在輸入圖片驗證碼后,請再次輸入短信驗證碼')
            code = input()
            d.find_element_by_id('com.sankuai.meituan:id/code').send_keys(code)
            d.find_element_by_id('com.sankuai.meituan:id/submit').click()
            print('程序運行正常')
            sleep(2)
        # 通過查找不到元素從而報錯來判斷是否登錄成功(相當於斷言)# 是否登錄成功校驗
        try:
            d.find_element_by_id('com.sankuai.meituan:id/submit').click()
            print('登錄下單成功啦')
        except:
            d.find_element_by_id('android:id/button1').click()
            print('登錄失敗啦')
        d.get_screenshot_as_file(u'F:\自動化截圖\美團.png')  # 是否登錄成功截圖
    def tearDown(self):
        sleep(2)
        self.d.quit()
if __name__ == "__main__":
    unittest.main()接下來就是把編寫好的測試用例執行,利用HTMLTestRunner生成測試報告:
import  unittest,time
from HTMLTestRunner import HTMLTestRunner
if __name__ == "__main__":
    test_dir = (r'F:\appiumtest')
    discover = unittest.defaultTestLoader.discover(test_dir,'*case.py')
    testReportDir = (r'F:\report')
    nowTime = time.strftime("%Y-%m-%d-%H_%M_%S",time.localtime())
    fileName = nowTime+".html"
    report_Name = testReportDir+fileName
    fp = open(report_Name,"wb")
    runner = HTMLTestRunner(stream=fp,title="美團自動化測試報告",description="測試結果")
    runner.run(discover)
    fp.close()備注:discover=...是匹配以case結尾的文件(也就是編寫測試用例的文件)
---------------------
作者:Tigerdong1
來源:CSDN
原文:https://blog.csdn.net/Tigerdong1/article/details/80159156
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

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



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