Python3 + Appium + 安卓模擬器實(shí)現(xiàn)APP自動(dòng)化測試并生成測試報(bào)告
2020年4月補(bǔ)充
鑒于配置自動(dòng)化測試這套框架確實(shí)稍微有點(diǎn)麻煩,許多小伙伴在配置的過程中總是踩坑,最近寫了篇簡化版的入門教程,不想折騰Android SDK的小伙伴可以移步到那篇文章:http://www.dbjr.com.cn/article/169763.htm
概述
本文主要分為以下幾個(gè)部分
- 安裝Python3
- 安裝Python3的Appium庫
- 安裝Android SDK
- 安裝JDK
- 安裝Appium
- 安裝模擬器
- 編寫測試腳本并生成測試報(bào)告
項(xiàng)目示例下載地址: https://github.com/lixk/apptest
正文
一、安裝Python3
直接登錄Python官網(wǎng)https://www.python.org/,下載最新版本即可。

然后安裝的時(shí)候注意一下安裝路徑,比如我的安裝路徑D:\Python37,接下來會(huì)用到這個(gè)安裝路徑。
二、安裝Python3的Appium庫
打開Python安裝目錄,找到Scripts文件夾,點(diǎn)進(jìn)去,示例:

在地址欄上輸入cmd,然后回車,打開控制臺(tái):

在控制臺(tái)里輸入命令pip install Appium-Python-Client,然后回車

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

三、安裝Android SDK
我懶得折騰,所以就直接下載了Android Studio
下載地址
https://developer.android.com/studio/#downloads

下載完成開始安裝

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

接下來一路Next,到了選擇SDK的頁面注意一下

選擇Custom,這樣可以只安裝自己喜歡的部分,接下來選擇主題,當(dāng)然這個(gè)以后可以在Android Studio里邊改

繼續(xù)Next,到達(dá)定制組件頁面,如下圖

設(shè)置一下SDK的安裝路徑,比如我的是D:\Android\SDK,接下來繼續(xù)Next…finish。然后就進(jìn)入了緩慢的下載環(huán)節(jié),讓它在這兒慢慢的下載吧,下載完成后就好了。我們可以進(jìn)入下一節(jié)了。
四、安裝JDK
這里我使用的是JDK8,下載地址
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
接受協(xié)議,然后選擇對(duì)應(yīng)平臺(tái)下載即可

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

五、安裝Appium
官網(wǎng)地址 http://appium.io/

點(diǎn)擊下載按鈕會(huì)到GitHub的下載頁面,選擇對(duì)應(yīng)平臺(tái)下載

Windows就選這個(gè)(快捷下載)
安裝完成后,啟動(dòng)Appium,host和port默認(rèn)的即可,然后編輯下配置信息


然后點(diǎn)下邊那個(gè)保存并重啟的按鈕,然后點(diǎn)第一個(gè)Start Server按鈕,將會(huì)看到

如果使用真機(jī)測試,插上手機(jī)就可以開始編寫腳本測試了。但是呢,由于手邊沒有數(shù)據(jù)線,就采用模擬器了,所以有了下一節(jié)。
六、安裝模擬器
這里使用的是夜神模擬器下載地址 https://www.yeshen.com/,之所以不用Android自帶的,是因?yàn)橛浀枚嗄昵皢?dòng)一次要好久,然后就再也沒用過。
這個(gè)也沒有什么好說的,也是注意一下安裝路徑,然后一路下一步就好了。
安裝完成后要進(jìn)行一下簡單修改:
- 打開安裝目錄,進(jìn)入到
bin目錄(比如:D:\Nox\bin) - 把第三節(jié)里安裝好的Android SDK里的
adb.exe文件(比如我的在D:\Android\SDK\platform-tools目錄下)復(fù)制到該目錄覆蓋掉該目錄已存在的adb.exe文件 - 刪掉該目錄的
nox_adb.exe文件,再復(fù)制一份adb.exe并重命名為nox_adb.exe - 啟動(dòng)模擬器
- 再該目錄打開控制臺(tái),執(zhí)行
nox_adb.exe connect 127.0.0.1:62001,然后執(zhí)行adb devices,看到如下信息就表示成功了

在模擬器里安裝測試apk文件,這里以一個(gè)計(jì)算器為例,直接將apk文件拖到模擬器里即可

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

可以看到安裝包的信息都打印出來了,記錄下紅框里這兩個(gè)名稱,待會(huì)兒寫測試腳本的時(shí)候要用。
注意,如果模擬器重啟了,需要執(zhí)行第5步的nox_adb.exe connect 127.0.0.1:62001 七、編寫測試腳本并生成測試報(bào)告
1.創(chuàng)建測試用例目錄testcase,在該目錄下創(chuàng)建test_app.py文件
import time
import unittest
from appium import webdriver
class MyTests(unittest.TestCase):
# 測試開始前執(zhí)行的方法
def setUp(self):
desired_caps = {'platformName': 'Android', # 平臺(tái)名稱
'platformVersion': '4.4.2', # 系統(tǒng)版本號(hào)
'deviceName': '127.0.0.1:62001', # 設(shè)備名稱。如果是真機(jī),在'設(shè)置->關(guān)于手機(jī)->設(shè)備名稱'里查看
'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):
"""計(jì)算器測試"""
time.sleep(3)
window = self.driver.get_window_size()
x0 = window['width'] * 0.8 # 起始x坐標(biāo)
x1 = window['width'] * 0.2 # 終止x坐標(biāo)
y = window['height'] * 0.5 # y坐標(biāo)
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)
# 測試結(jié)束后執(zhí)行的方法
def tearDown(self):
self.driver.quit()
2.創(chuàng)建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="測試報(bào)告", description="本測試報(bào)告內(nèi)容包含超級(jí)計(jì)算器的簡單測試")
runner.run(discover)
導(dǎo)出測試報(bào)告用到了HTMLTestRunner,但是Python3的好像有問題,在網(wǎng)上找了兩個(gè)修改后支持Python3的, 需要的話可以在本文尾部的示例項(xiàng)目中下載。
3.運(yùn)行run.py文件
等程序運(yùn)行完之后即會(huì)在test_report目錄下生成測試報(bào)告


在瀏覽器里打開即可看到報(bào)告內(nèi)容,示例

到此,全部完成。如果有空的話可以再補(bǔ)充下Appium的使用,比如元素定位之類的,希望本文能幫到初學(xué)自動(dòng)化測試的同學(xué)。
項(xiàng)目示例下載地址 https://github.com/lixk/apptest
艾瑪,羅嗦這么多,都八點(diǎn)了還沒吃晚飯,好餓,今天就先到這里了。
2019/5/21 補(bǔ)充
如果配置跟上邊那幾步都一致,確實(shí)沒問題,結(jié)果不能正常運(yùn)行。那么問題可能出在模擬器配置。下邊補(bǔ)充下我這邊的模擬器配置。




代碼中的'platformVersion': '4.4.2'就是上圖中的Android版本。
如果還是有許多人跑不起來,接下來可以考慮抽空錄個(gè)操作視頻,哈哈哈。
到此這篇關(guān)于Python3 + Appium + 安卓模擬器實(shí)現(xiàn)APP自動(dòng)化測試并生成測試報(bào)告的文章就介紹到這了,更多相關(guān)Python3 + Appium + 安卓模擬器實(shí)現(xiàn)APP自動(dòng)化測試內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Appium+Python+pytest自動(dòng)化測試框架的實(shí)戰(zhàn)
- Python+Appium自動(dòng)化測試的實(shí)戰(zhàn)
- python+appium+yaml移動(dòng)端自動(dòng)化測試框架實(shí)現(xiàn)詳解
- Python+Appium實(shí)現(xiàn)自動(dòng)化測試的使用步驟
- Python+appium框架原生代碼實(shí)現(xiàn)App自動(dòng)化測試詳解
- Appium+Python自動(dòng)化測試之運(yùn)行App程序示例
- Appium Python自動(dòng)化測試之環(huán)境搭建的步驟
- Python腳本在Appium庫上對(duì)移動(dòng)應(yīng)用實(shí)現(xiàn)自動(dòng)化測試
- python+appium實(shí)現(xiàn)自動(dòng)化測試的示例代碼
相關(guān)文章
python 計(jì)算數(shù)組中每個(gè)數(shù)字出現(xiàn)多少次--“Bucket”桶的思想
這篇文章主要介紹了python 計(jì)算數(shù)組中每個(gè)數(shù)字出現(xiàn)多少次--“Bucket”桶的思想,需要的朋友可以參考下2017-12-12
用Python做的數(shù)學(xué)四則運(yùn)算_算術(shù)口算練習(xí)程序(后添加減乘除)
這篇文章主要介紹了用Python做的數(shù)學(xué)四則運(yùn)算_算術(shù)口算練習(xí)程序(后添加減乘除),需要的朋友可以參考下2016-02-02
python編程使用協(xié)程并發(fā)的優(yōu)缺點(diǎn)
協(xié)程是一種用戶態(tài)的輕量級(jí)線程,又稱微線程。這篇文章主要介紹了python編程使用協(xié)程并發(fā)的優(yōu)缺點(diǎn),感興趣的朋友跟隨小編一起看看吧2018-09-09
Python解決MySQL數(shù)據(jù)處理從SQL批量刪除報(bào)錯(cuò)
這篇文章主要為大家介紹了Python解決MySQL數(shù)據(jù)處理從SQL批量刪除報(bào)錯(cuò),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
Python headers請(qǐng)求頭如何實(shí)現(xiàn)快速添加
這篇文章主要介紹了Python headers請(qǐng)求頭如何實(shí)現(xiàn)快速添加,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
Python實(shí)現(xiàn)字典序列ChainMap
容器數(shù)據(jù)類型包括數(shù)組list,字典dict以及元組tuple等。本篇主要介紹了ChainMap字典序列的使用,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-06-06
Python標(biāo)準(zhǔn)庫urllib2的一些使用細(xì)節(jié)總結(jié)
這篇文章主要介紹了Python標(biāo)準(zhǔn)庫urllib2的一些使用細(xì)節(jié)總結(jié),本文總結(jié)了Proxy 的設(shè)置、Timeout 設(shè)置、Redirect、Cookie等細(xì)節(jié)的使用,需要的朋友可以參考下2015-03-03
使用Python的package機(jī)制如何簡化utils包設(shè)計(jì)詳解
這篇文章主要給大家介紹了關(guān)于使用Python的package機(jī)制如何簡化utils包設(shè)計(jì)的相關(guān)資料,文中通過示例代碼的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-12-12

