01、appium環境搭建
- 安裝nodejs
http://nodejs.cn/
為什麼要安裝nodejs?
因為appium這個工具的服務端是由nodejs語言開發的
- 安裝jdk,並且配置環境變數
為什麼要裝jdk?
因為我們要測試安卓,那麼安卓的除錯環境需要依賴jdk
- 安裝sdk,並配置環境變數
為什麼要裝sdk?
因為我們要測試安卓,sdk就是安卓開發除錯的環境
- 安裝appium服務端
1. 命令列形式的appium server
npm install appium@1.15.1
2. appium desktop版本,在官網下載即可
3. 上述兩種之間的區別
桌面版不僅僅是一個appium server,他還包括了元素定位除錯以及錄製指令碼的功能
命令列版本僅僅是一個appium server
- 安裝appium-doctor
npm install appium-doctor
這個工具是用來檢查appium的環境的,但是注意並不是說在這裡檢查沒有錯誤就能代表我的環境一定沒有問題
- 安裝安卓模擬器(並不是必須)
夜神、mumu,等等
2、搭建python+pytest+appium環境
- 安裝python
- 安裝pytest
pip install pytest
- 安裝selenium
pip install selenium
- 安裝appium
pip install Appium-Python-Client
- 安裝allure-pytest
pip install allure-pytest
3l 安裝pycharm搭建專案編寫指令碼
- 初始化driver程式碼編寫
# !/usr/bin python3
# encoding: utf-8 -*-
# @author: 沙陌 微信:Matongxue_2
# @Time: 2021/5/21 10:25
# @Copyright:北京碼同學網路科技有限公司
#移動端初始化用到的引數特別多
#下面的這個字典裡的引數是指令碼告訴appium服務端我都要幹什麼,基礎的能力引數
import time
import allure
from appium import webdriver
from selenium.webdriver.common.by import By
desired_caps = {
#這表示你要測試的裝置型別,安卓就寫android,ios就寫ios
'platformName':'android',
#這表示你要測試的app的路徑
'app':'C:\\Users\\lixio\\Desktop\\douban.apk',
#看起來像是裝置名稱,但是注意在安卓上這個位置的值隨便寫都行,
#這個並不能夠代表你要執行的裝置是哪個
'deviceName':'xxx',
#這個引數才是真正的指定執行哪臺裝置的引數,
# 他的值寫的就是使用adb devices命令看到的裝置名稱
'udid':'127.0.0.1:62001',
#該引數非常重要,表示在執行測試時不重簽名apk檔案,
# 預設情況下appium會針對apk檔案進行重簽名操作,
# 但是現在的app都有簽名篡改的校驗,如果被重簽名了那麼這個app就不能正常使用了
'noSign':True,
#該參數列示在執行appium測試時使用appium的輔助輸入法,
# 好處是支援中文輸入支援鍵盤隱藏
'unicodeKeyboard':True,
#表示執行完測試之後將手機的輸入法重置回手機原來的
'resetKeyboard':True,
#表示指令碼和appium服務之間連線的session超時時間,單位是秒
'newCommandTimeout':600
}
# 初始化driver,引數裡看到的url就是appium服務的地址 driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
#增加隱式等待
driver.implicitly_wait(10) #單位是秒
```
- 元素檢視
可以使用sdk自帶的uiautomatorviewer.bat這個工具,也可以使用appium desktop版本的元素檢視
- 豆瓣登入指令碼編寫,採用pytest方式
@allure.title('豆瓣登入')
def test_login():
# id定位在安卓端對應的元素屬性是resource-id
driver.find_element(By.ID,'com.douban.frodo:id/left').click()
driver.find_element(By.ID,'com.douban.frodo:id/input_user_name').send_keys('18729399607')
driver.find_element(By.ID,'com.douban.frodo:id/input_password').send_keys('abc123456')
driver.find_element(By.ID,'com.douban.frodo:id/sign_in_douban').click()
#操作完成後,必須有斷言來判斷結果是否正常
time.sleep(3)
page_source = driver.page_source
assert '書影音' in page_source
4、執行測試
- 執行前準備工作
1. 啟動appium服務,在命令列做如下操作
2. 確保手機裝置連線正常
- 執行測試
在pycharm的Terminal中執行如下命令
pytest -sv --alluredir ./report/allure-results --clean-alluredir
- 生成allure測試報告
allure generate ./report/allure-results -o ./report/allure-report --clean