Python3 + Appium + 安卓模擬器 實現APP自動化測試,並生成測試報告(簡化版)

背景

在2018年的時候曾寫過一篇自動化測試的文章,沒想到這麼受歡迎。原文地址:https://blog.csdn.net/u013314786/article/details/83216390

在這一年多的時間裏,挺多小夥伴看到了那篇文章,但是自己在操作過程中遇到了各式各樣的問題,然後通過留言、私信、加QQ等方式聯繫我,而我又經常不在線,不能及時幫大家解決問題。
所以抽空專門爲想要入門自動化測試的初學者再寫一篇文章。本文內容僅包含自動化測試環境配置、基本的demo測試及生成測試報告,沒有高級功能介紹,目的只是帶門外的小夥伴入個門,故配置方面儘量簡化了。
雖然本文會複用上一篇文章的部分內容,但比上一篇要簡單。比如,本文在使用模擬器測試的基礎上,直接複用模擬器中的工具包,不再需要安裝Android SDK(當然如果有能力折騰的話建議安裝原版Android SDK+最新版Appium)。

概述

本文主要分爲以下幾個部分

  1. 安裝Python3
  2. 安裝Python3的Appium庫
  3. 安裝JDK
  4. 安裝模擬器
  5. 安裝Appium
  6. 編寫測試腳本並生成測試報告

項目示例下載地址: https://github.com/lixk/apptest

正文

一、安裝Python3

直接登錄Python官網https://www.python.org/,下載最新版本即可。
在這裏插入圖片描述
然後安裝的時候注意一下安裝路徑,比如我的安裝路徑D:\Python37,接下來會用到這個安裝路徑。

二、安裝Python3的Appium庫

打開Python安裝目錄,找到Scripts文件夾,點進去,示例:
在這裏插入圖片描述在地址欄上輸入cmd,然後回車,打開控制檯:
在這裏插入圖片描述
在控制檯裏輸入命令pip install Appium-Python-Client,然後回車
在這裏插入圖片描述
看到下圖的提示就表明安裝成功了
在這裏插入圖片描述

三、安裝JDK

這裏我使用的是JDK8,官網下載地址
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
選擇對應平臺下載即可
在這裏插入圖片描述

現在下載JDK好像要賬號登錄,不想麻煩的話,百度下“JDK8 下載”之類的關鍵詞,有許多下載網站,選個靠譜的下載即可。

接下來安裝過程比較簡單,也是一路Next,注意選擇一下安裝路徑,比如我的安裝路徑D:\Java\jdk1.8
在這裏插入圖片描述

四、安裝模擬器

這裏使用的是夜神模擬器,官網地址 https://www.yeshen.com/
本文使用的版本:v6.6.0.5(點擊下載)
這個也沒有什麼好說的,也是注意一下安裝路徑,然後一路下一步就好了。

由於本文我們不打算依賴Android SDK,所以安裝完成後要從模擬器裏抽出adb給Appium用,所以要進行如下配置:

  1. 新建一個文件夾android-sdk,然後在該文件夾下新建platform-tools,比如我的:D:\android-sdk\platform-tools

  2. 打開模擬器安裝目錄,進入到bin目錄(比如:D:\Nox\bin),複製adb.exeAdbWinApi.dllAdbWinUsbApi.dll三個文件到上邊創建的platform-tools文件夾
    在這裏插入圖片描述
    在這裏插入圖片描述

  3. 啓動模擬器

  4. 啓動完成後,在模擬器bin目錄打開控制檯,執行adb.exe connect 127.0.0.1:62001,然後執行adb devices,看到如下信息就表示成功了在這裏插入圖片描述

  5. 在模擬器裏安裝測試apk文件,這裏以一個計算器app(點擊下載)
    爲例,直接將apk文件拖到模擬器裏即可在這裏插入圖片描述

  6. 繼續在剛剛的控制檯窗口裏輸入aapt dump badging D:\apk\com.youdao.calculator-2.0.0.apk,其中D:\apk\com.youdao.calculator-2.0.0.apk是測試apk的完整路徑。
    在這裏插入圖片描述
    可以看到安裝包的信息都打印出來了,記錄下紅框裏這兩個名稱,待會兒寫測試腳本的時候要用。
    注意,如果模擬器重啓了,需要執行第4步的adb.exe connect 127.0.0.1:62001

五、安裝Appium

鑑於本文宗旨是教大家儘可能簡單的入門自動化測試,這裏沒有選用最新版的Appium,因爲最新版的Appium即便運行一個最簡單的測試demo也需要安裝完整的Android SDK。
本文所用的Appium下載地址:https://github.com/appium/appium-desktop/releases/download/v1.7.1/appium-desktop-setup-1.7.1.exe

關於Appium更多信息,請參考官網 http://appium.io/
在這裏插入圖片描述

安裝完成後,啓動Appium,host和port默認的即可,然後編輯下配置信息,ANDROID_HOMEJAVA_HOME就是上邊SDK和JDK的路徑。
在這裏插入圖片描述
在這裏插入圖片描述

然後點下邊那個保存並重啓的按鈕,然後點第一個Start Server按鈕,將會看到
在這裏插入圖片描述

七、編寫測試腳本並生成測試報告

  1. 創建測試用例目錄testcase,在該目錄下創建test_app.py文件

    import time
    import unittest
    
    from appium import webdriver
    
    
    class MyTests(unittest.TestCase):
        # 測試開始前執行的方法
        def setUp(self):
            desired_caps = {'platformName': 'Android',  # 平臺名稱
                            'platformVersion': '5.1.1',  # 系統版本號
                            'deviceName': '127.0.0.1:62001',  # 設備名稱。如果是真機,一般在'設置->關於手機->設備名稱'裏查看
                            'appPackage': 'com.youdao.calculator',  # apk的包名
                            'appActivity': 'com.youdao.calculator.activities.MainActivity'  # activity 名稱
                            }
            self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)  # 連接Appium
            self.driver.implicitly_wait(6)
    
        def test_calculator(self):
            """計算器測試"""
            time.sleep(3)
            window = self.driver.get_window_size()
            x0 = window['width'] * 0.8  # 起始x座標
            x1 = window['width'] * 0.2  # 終止x座標
            y = window['height'] * 0.5  # y座標
            for i in range(3):
                self.driver.swipe(x0, y, x1, y, 500)
                time.sleep(1)
            self.driver.find_element_by_id('com.youdao.calculator:id/guide_button').click()
            time.sleep(1)
            for i in range(6):
                self.driver.find_element_by_id('com.youdao.calculator:id/frag_calculator').click()
                time.sleep(1)
    
            btn_xpath = '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.support.v4.widget.DrawerLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.LinearLayout[2]/android.widget.LinearLayout/android.widget.LinearLayout[3]/android.view.View/android.widget.GridView/android.widget.FrameLayout[{0}]/android.widget.FrameLayout'
            self.driver.find_element_by_xpath(btn_xpath.format(7)).click()
            self.driver.find_element_by_xpath(btn_xpath.format(10)).click()
            self.driver.find_element_by_xpath(btn_xpath.format(8)).click()
            time.sleep(5)
    
        # 測試結束後執行的方法
        def tearDown(self):
            self.driver.quit()
    
    

    其中,appPackageappActivity對應上邊aapt命令查出來的app信息。
    platformVersion指的是系統版本號,對應模擬器或者真機的版本,如下
    在這裏插入圖片描述

  2. 創建run.py文件

    import os
    import time
    import unittest
    
    from HTMLTestRunner import HTMLTestRunner
    
    test_dir = './testcase'
    discover = unittest.defaultTestLoader.discover(start_dir='./testcase', pattern="test*.py")
    
    if __name__ == "__main__":
        report_dir = './test_report'
        os.makedirs(report_dir, exist_ok=True)
        now = time.strftime("%Y-%m-%d %H-%M-%S")
        report_name = '{0}/{1}.html'.format(report_dir, now)
    
        with open(report_name, 'wb') as f:
            runner = HTMLTestRunner(stream=f, title="測試報告", description="本測試報告內容包含超級計算器的簡單測試")
            runner.run(discover)
    
    

    導出測試報告用到了HTMLTestRunner,但是Python3的好像有問題,在網上找了兩個修改後支持Python3的,需要的話可以在本文尾部的示例項目中下載。

  3. 運行run.py文件
    在這裏插入圖片描述

    等程序運行完之後即會在test_report目錄下生成測試報告
    在這裏插入圖片描述

    在瀏覽器裏打開即可看到報告內容,示例
    在這裏插入圖片描述

至此,全部完成。

項目示例下載地址 https://github.com/lixk/apptest

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章