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

2020年4月補充

鑒於配置自動化測試這套框架確實稍微有點麻煩,許多小夥伴在配置的過程中總是踩坑,最近寫瞭篇簡化版的入門教程,不想折騰Android SDK的小夥伴可以移步到那篇文章:https://www.jb51.net/article/169763.htm


概述

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

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

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

正文

一、安裝Python3

直接登錄Python官網https://www.python.org/,下載最新版本即可。

在這裡插入圖片描述

然後安裝的時候註意一下安裝路徑,比如我的安裝路徑D:\Python37,接下來會用到這個安裝路徑。

二、安裝Python3的Appium庫

打開Python安裝目錄,找到Scripts文件夾,點進去,示例:

在這裡插入圖片描述

在地址欄上輸入cmd,然後回車,打開控制臺:

在這裡插入圖片描述

在控制臺裡輸入命令pip install Appium-Python-Client,然後回車

在這裡插入圖片描述

看到下圖的提示就表明安裝成功瞭

在這裡插入圖片描述

三、安裝Android SDK

我懶得折騰,所以就直接下載瞭Android Studio
下載地址
https://developer.android.com/studio/#downloads

在這裡插入圖片描述

下載完成開始安裝

在這裡插入圖片描述

如果需要安裝自帶的模擬器,就把這一項勾選上,然後Next,接下來選擇安裝路徑,比如我的同樣放在D

在這裡插入圖片描述

接下來一路Next,到瞭選擇SDK的頁面註意一下

在這裡插入圖片描述

選擇Custom,這樣可以隻安裝自己喜歡的部分,接下來選擇主題,當然這個以後可以在Android Studio裡邊改

在這裡插入圖片描述

繼續Next,到達定制組件頁面,如下圖

在這裡插入圖片描述

設置一下SDK的安裝路徑,比如我的是D:\Android\SDK,接下來繼續Next…finish。然後就進入瞭緩慢的下載環節,讓它在這兒慢慢的下載吧,下載完成後就好瞭。我們可以進入下一節瞭。

四、安裝JDK

這裡我使用的是JDK8,下載地址
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

接受協議,然後選擇對應平臺下載即可

在這裡插入圖片描述

接下來安裝過程比較簡單,也是一路Next,註意選擇一下安裝路徑,比如我的安裝路徑D:\Java\jdk1.8

在這裡插入圖片描述

五、安裝Appium

官網地址 http://appium.io/

在這裡插入圖片描述

點擊下載按鈕會到GitHub的下載頁面,選擇對應平臺下載

在這裡插入圖片描述

Windows就選這個(快捷下載)

安裝完成後,啟動Appium,host和port默認的即可,然後編輯下配置信息

在這裡插入圖片描述
在這裡插入圖片描述

然後點下邊那個保存並重啟的按鈕,然後點第一個Start Server按鈕,將會看到

在這裡插入圖片描述

如果使用真機測試,插上手機就可以開始編寫腳本測試瞭。但是呢,由於手邊沒有數據線,就采用模擬器瞭,所以有瞭下一節。

六、安裝模擬器

這裡使用的是夜神模擬器下載地址 https://www.yeshen.com/,之所以不用Android自帶的,是因為記得多年前啟動一次要好久,然後就再也沒用過。
這個也沒有什麼好說的,也是註意一下安裝路徑,然後一路下一步就好瞭。
安裝完成後要進行一下簡單修改:

  • 打開安裝目錄,進入到bin目錄(比如:D:\Nox\bin
  • 把第三節裡安裝好的Android SDK裡的adb.exe文件(比如我的在D:\Android\SDK\platform-tools目錄下)復制到該目錄覆蓋掉該目錄已存在的adb.exe文件
  • 刪掉該目錄的nox_adb.exe文件,再復制一份adb.exe並重命名為nox_adb.exe
  • 啟動模擬器
  • 再該目錄打開控制臺,執行nox_adb.exe connect 127.0.0.1:62001,然後執行adb devices,看到如下信息就表示成功瞭

在這裡插入圖片描述

在模擬器裡安裝測試apk文件,這裡以一個計算器為例,直接將apk文件拖到模擬器裡即可

在這裡插入圖片描述

繼續在剛剛的控制臺窗口裡輸入aapt dump badging D:\apk\com.youdao.calculator-2.0.0.apk,其中D:\apk\com.youdao.calculator-2.0.0.apk是測試apk的完整路徑。

在這裡插入圖片描述

可以看到安裝包的信息都打印出來瞭,記錄下紅框裡這兩個名稱,待會兒寫測試腳本的時候要用。
註意,如果模擬器重啟瞭,需要執行第5步的nox_adb.exe connect 127.0.0.1:62001 七、編寫測試腳本並生成測試報告

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': '4.4.2', # 系統版本號
      '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(8)

 def test_calculator(self, t=500, n=4):
  """計算器測試"""
  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(n):
   self.driver.swipe(x0, y, x1, y, t)
   time.sleep(1)
  self.driver.find_element_by_id('com.youdao.calculator:id/guide_button').click()
  for i in range(6):
   self.driver.find_element_by_accessibility_id('Mathbot Editor').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(3)

 # 測試結束後執行的方法
 def tearDown(self):
  self.driver.quit()

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目錄下生成測試報告

在這裡插入圖片描述
在這裡插入圖片描述

在瀏覽器裡打開即可看到報告內容,示例

在這裡插入圖片描述

到此,全部完成。如果有空的話可以再補充下Appium的使用,比如元素定位之類的,希望本文能幫到初學自動化測試的同學。
項目示例下載地址 https://github.com/lixk/apptest
艾瑪,羅嗦這麼多,都八點瞭還沒吃晚飯,好餓,今天就先到這裡瞭。


2019/5/21 補充

如果配置跟上邊那幾步都一致,確實沒問題,結果不能正常運行。那麼問題可能出在模擬器配置。下邊補充下我這邊的模擬器配置。

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

代碼中的'platformVersion': '4.4.2'就是上圖中的Android版本。

如果還是有許多人跑不起來,接下來可以考慮抽空錄個操作視頻,哈哈哈。

到此這篇關於Python3 + Appium + 安卓模擬器實現APP自動化測試並生成測試報告的文章就介紹到這瞭,更多相關Python3 + Appium + 安卓模擬器實現APP自動化測試內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!