一 . 前言
由于IOS系統(tǒng)比Android系統(tǒng)相對封閉,所以進(jìn)行IOS自動(dòng)化測試也是相對復(fù)雜,不過大家不用擔(dān)心,小編已經(jīng)幫你們踩了大部分坑,網(wǎng)上大部分文章都是CV過來的,沒有真正的從0到1落地,我們需要具備開源精神,只為讓更多的小伙伴們少走彎路,歡迎大家在留言區(qū)評論交流!
二 . 環(huán)境依賴
*mac
*xcode
*python
*pycharm
*appium
*pytest
*jdk1.8
*allure
*git
*node
*jenkins
*npm or cnpm
*ios-deploy
*brew
*libimobiledvice
*carthage
*ios phone
*apple id
*webdriveragent
三 . 環(huán)境配置
1. 安裝xcode
方式一:
如果已經(jīng)升級至最新macOS系統(tǒng),可以直接通過App Store安裝最新版本的Xcode
方式二:
如果不想升級最新macOS系統(tǒng),可以使用離線包的形式安裝,安裝地址:Xcode 版本(官方)
2. 安裝python
小編這邊采用的是python3.9,需要使用其他版本也可以,建議3.6+,安裝地址:python3.9(官方)
3. 安裝pycharm
下載社區(qū)版本免費(fèi),一般滿足我們?nèi)粘J褂?,安裝地址:pycharm(官方)
4. 安裝appium
小編這邊采用的是appium 1.17.1,下載 Appium-mac-1.17.1.dmg 包即可, 安裝地址:github appium 1.17.1(官方)
4.1 下載appium命令版,需要先安裝npm,在文章后面有介紹
版本:1.17.1
終端:sudo npm install --unsafe-perm=true --allow-root -g appium@1.17.1
4.2 配置appium GUI版本
版本:1.17.1
參數(shù):{
“bundleId”: “被測應(yīng)用”,
“platformName”: “iOS”,
“platformVersion”: “15.2”,
“deviceName”: “設(shè)備名稱”,
“automationName”: “XCUITest”,
“udid”: “可以使用xcode查詢”
}
5. 安裝pytest
打開已安裝的Pycharm左下角,在Terminal打開當(dāng)面目錄下的命令行窗口,輸入命令:
pip install pytest
6. 安裝jdk1.8
6.1 使用allure報(bào)告或Android SDK必須依賴Java環(huán)境,下載dmg包進(jìn)行安裝即可,安裝地址: oracle jdk1.8(官方)
6.2. 配置JDK環(huán)境變量
6.2.1 如果此前建過.bash_profile隱藏配置文件,直接在終端輸入$ open -e .bash_profile打開文件即可,如果沒有則輸入下方命令
$ touch .bash_profile
6.2.2 輸入下方命令打開此文件
$ open -e .bash_profile
6.2.3 打開.bash_profile文件輸入環(huán)境配置參數(shù),將下方參數(shù)放入其中,并保存(如果用的是vi打開的按esc 輸入:wq退出如果是文本直接command + S)退出即可,JAVA_HOME是JDK安裝路徑,然后保存
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home
PATH=$JAVA_HOME/bin:$PATH:.
CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:.
export JAVA_HOME
export PATH
export CLASSPATH
6.2.4 輸入以下命令使配置文件生效
$ source .bash_profile
6.2.5 最后檢查下環(huán)境變量是否配置成功
$ echo $JAVA_HOME
6.2.6 查詢JDK版本信息
$ java -version
7. 安裝allure
7.1 allure官網(wǎng)
http://allure.qatools.ru/
7.2 allure下載地址,小編版本使用的是2.19.0
https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/2.19.0/
7.3 allure運(yùn)行原理
allure屬于第三方工具,展現(xiàn)更好看的測試報(bào)告,allure服務(wù)兼容pytest生成allure能識(shí)別的json文件,類似于 Apache ECharts你負(fù)責(zé)提供 ECharts能識(shí)別的json數(shù)據(jù), ECharts負(fù)責(zé)展示不同的可視化圖表
7.4 allure使用
7.4.1 下載zip包,默認(rèn)在mac /users/用戶/Downloads,然后解壓到任意目錄
7.4.2 配置環(huán)境變量,打開終端
$ open -e .bash_profile
添加此內(nèi)容,和上面配置JDK環(huán)境變量一樣
#allure 2.19.0
export PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
export PATH=${PATH}:/Users/用戶/allure-2.19.0/bin
PATH更換自己的,然后保存退出即可
7.4.3 驗(yàn)證allure環(huán)境變量是否安裝成功
$ allure --version
7.4.4 結(jié)合pytest生成json測試文件
7.4.4.1 安裝三方庫
pip install allure-pytest
7.4.4.2 生成json測試文件,在pytest.ini文件中配置
[pytest]
addopts = -vs --alluredir ./temp
會(huì)自動(dòng)生成json文件
在主函數(shù)中添加產(chǎn)生報(bào)告的代碼 ,注意:路徑應(yīng)該與json測試文件路徑保持一致
if __name__ == '__main__':
pytest.main(["-vs", "test_case/test_all.py", '--clean-alluredir', '--alluredir=./temp'])
os.system("allure generate ./temp -o ./report --clean")
打開自動(dòng)生成的report目錄下index.html即可
8. 安裝git
方式一:
一般Xcode安裝好后不需要再單獨(dú)安裝Git,Xcode自帶git
方式二:
可以先安裝后面的brew再安裝git,終端輸入該命令即可
brew install git
驗(yàn)證git是否安裝成功,終端輸入該命令即可
git --version
9. 安裝node
說明:安裝就有npm命令了,可以使用npm -v 查詢是否安裝成功,node -v 驗(yàn)證node.js版本
地址: node.js(官方)
版本:12.15.0
10. 安裝jenkins
使用brew安裝可能會(huì)存在更新的問題,小編這邊使用包安裝方式
安裝地址:jenkins(官方)
11. 安裝npm or cnpm
說明:中國版的npm,速度更快
版本:5.2.0
終端:npm install -g cnpm --registry=https://registry.npm.taobao.org
提示:added 845 packages from 976 contributors in 11.97s,表示安裝成功
12. 安裝ios-deploy
說明:用于轉(zhuǎn)發(fā)xcode的ip地址,對于一些國外的ios我們需要轉(zhuǎn)發(fā)端口
終端:cnpm install -g ios-deploy
提示:** BUILD SUCCEEDED **表示安裝成功
13. 安裝brew
說明:使用終端命令brew -v去查看電腦是否已經(jīng)安裝,一般mac會(huì)自帶,如果沒有自行安裝
版本:1.9.1
終端:ruby <(curl -fsSKL raw.github.com/mxcl/homebrew/go)
14. 安裝libimobiledvice
說明:真機(jī)調(diào)試,檢查是否連接設(shè)備,類似于安卓adb
終端:brew install --HEAD libimobiledevice
15. 安裝carthage
說明:webdiverAgent需要
終端:brew install carthage
16. 注冊apple id
說明:app store下載xcode時(shí)會(huì)跳出登錄彈框
使用公司公共賬號(hào)也可以,后續(xù)該賬號(hào)需要加入公司開發(fā)者團(tuán)隊(duì),一個(gè)團(tuán)隊(duì)可以加100個(gè)開發(fā)者賬號(hào)
注冊地址:注冊apple id(官方)
17. 安裝webdriveragent
原理:appium->WebDriverAgent->XCUITest
iOS 9 之前一直以 instruments 下的 UIAutomation 為驅(qū)動(dòng)底層技術(shù)(弊端由于 instruments 的限制,單臺(tái) mac 只能對應(yīng)單臺(tái)設(shè)備);
iOS 9.3 時(shí)代推出 XCUITest 工具,用以替代 UIAutomation;
iOS 10 時(shí)代蘋果直接廢棄了 UIAutomation,F(xiàn)acebook 推出 WebDriverAgent(實(shí)現(xiàn)的 server 能夠支持單臺(tái) mac 對應(yīng)多個(gè)設(shè)備);
Appium 在 iOS 9.3 后全面采用 WebDriverAgent 的方案;
facebook下載地址:https://github.com/facebookarchive/WebDriverAgent
WebDriverAgent2年前facebook已不在維護(hù)!?。”救耸褂胊ppium分支
appium下載地址:https://github.com/appium/WebDriverAgent
下載完成后終端進(jìn)入該目錄(你桌面WebDriverAgent項(xiàng)目的地址):cd /Users/用戶名/Desktop/WebDriverAgent-master
終端:./Scripts/bootstrap.sh
最后使用xcode打開WebDriverAgent項(xiàng)目的WebDriverAgent.xcodeproj文件進(jìn)行配置
配置完成之后,真機(jī)連接mac,使用command+u運(yùn)行,ios上會(huì)自動(dòng)安裝一個(gè)runner程序,這是我們需要去手機(jī)設(shè)置描述文件信任該程序,運(yùn)行成功后xcode控制臺(tái)打印已下信息表示成功
18. 使用腳本獲取driver對象
18.1 添加依賴 requirements.txt
allure_python_commons==2.8.19
Appium_Python_Client==0.46
HTMLTestRunner==0.8.0
pytest==6.2.5
selenium==3.141.0
18.2 恭喜你,到最后一步了,一段簡單的代碼,只是為了測試IOS自動(dòng)化測試環(huán)境是否搭建成功
import time
from appium import webdriver
from tools.LoggerUtil import LoggerUtil
logger = LoggerUtil()
class InitDevices(object):
driver: webdriver = None
@classmethod
def start(cls, port: str, ip: str = '127.0.0.1', **kwargs):
caps = {
'bundleId': '填寫你需要測試的app bundleId ',
'platformName': 'iOS',
'platformVersion': '14.4',
'deviceName': 'iPhone',
'automationName': 'XCUITest',
'udid': '00008020-001434C42232002E',
'newCommandTimeout': '21600'
}
if kwargs:
for k, v in kwargs.items():
caps[k] = v
logger.info("{} 我是主函數(shù)的驅(qū)動(dòng)參數(shù)".format(caps))
cls.driver = webdriver.Remote(f"http://{ip}:{port}/wd/hub", caps)
cls.driver.implicitly_wait(10)
logger.info("---連接設(shè)備成功---")
logger.info("{} 我是主函數(shù)的driver".format(cls.driver))
return cls.driver
else:
logger.info("{} 我是主函數(shù)的驅(qū)動(dòng)參數(shù)".format(caps))
cls.driver = webdriver.Remote(f"http://{ip}:{port}/wd/hub", caps)
cls.driver.implicitly_wait(10)
logger.info("---連接設(shè)備成功---")
logger.info("{} 我是主函數(shù)的driver".format(cls.driver))
return cls.driver
@classmethod
def quit(cls):
"""
關(guān)閉driver對象
:return:
"""
cls.driver.quit()
if __name__ == '__main__':
comm = InitDevices.start('4723', noReset=True)
time.sleep(1)
comm.quit()
注意:連接設(shè)備后一定要quit()關(guān)閉連接,不然下次連接會(huì)出現(xiàn)端口占用的情況,本地運(yùn)行不報(bào)錯(cuò),控制臺(tái)返回driver對象即成功了!文章來源:http://www.zghlxwxcb.cn/news/detail-445697.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-445697.html
到了這里,關(guān)于Appium+Python+Pytest+Allure+Git+Node+Jenkins+Xcode IOS自動(dòng)化測試從0到1落地的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!