使用 ATX+pytest+allure-pytest 進行 IOS 的 UI 自動化測試
最近學習了 pytest 框架,學習過程中練習的程式碼想分享給大家,僅供參考。
參考精華帖https://testerhome.com/topics/17292
本文主要講解使用 ATX+pytest+allure-pytest, 進行 IOS 的 UI 自動化測試。
ATX 官網:https://github.com/openatx/facebook-wda
Allure 官網:https://docs.qameta.io/allure/#_get_started
Pytest 官網:https://docs.pytest.org/en/latest/reference.html
環境:
macOS mojave 版本 10.14.5
Xcode: Version 11.3
WebDriverAgent :官網下載的最新版,解壓後進入 Xcode 進行配置,具體配置方法後期新建文件詳細說明
Pytest: 安裝命令 pip install pytest==3.7
ATX:安裝命令 pip install -U facebook-wda
Allure: 安裝命令 brew install allure
allure-pytest: 安裝命令 pip install allure-pytest
需要安裝的命令列工具:
libimobiledevice (安裝命令:brew install libimobiledevice)
ideviceinstaller (安裝命令:brew install ideviceinstaller)
ios-deply (安裝命令:brew install ios-deply)
usbmuxd (安裝命令:brew install usbmuxd)
安裝完成後,開啟 Xcode 配置 WebDriverAgent 中的 project,連線裝置,build 成功後 Test
執行以下命令獲取需要的資訊:
ios-deploy -c # 獲取已連線的裝置
ideviceinstaller -l # 獲取 app 列表和資訊
iproxy 8100 8100 # 把當前連線裝置的 8100 埠 (SSH 埠) 對映到電腦的 8100 埠
此時進入瀏覽器輸入地址:http://localhost:8100/status,效果如圖,說明環境配置成功:
專案例項:
專案目錄:
說明:
config.py 檔案中配置了全域性變數
conftest.py 檔案為自定義的 fixture,實現了 setup,teardown,元素資料的傳遞,以及截圖功能
import pytest
import yaml
import time
from driver import Driver
from config import *
from tools.loggers import JFMlogging
logger = JFMlogging().getloger()
@pytest.fixture()
def ios_driver_setup():
logger.info("自動化測試開始!")
request = Driver().init_ios_driver()
# print(request.app_current())
logger.info("建立session")
s = request.session("com.tencent.xin")
# print(s.orientation)
# ios_allow(request)
# 進入微信小程式
s(name='發現').tap()
s(name='小程式').tap()
s(name='魔比UAT').tap()
s.implicitly_wait(wait_timeout)
yield s
logger.info("自動化測試結束!")
ios_screen_shot()
s.close()
logger.info("關閉session")
def ios_screen_shot():
"""
截圖操作
pic_name:截圖名稱
:return:
"""
fail_time = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
os.chdir(img_dir)
a = os.system("idevicescreenshot")
if a == 0:
logger.info('截圖成功')
else:
logger.info(fail_time, "截圖失敗")
@pytest.fixture()
def imyaml():
file = open(yaml_dir, "r")
f = yaml.safe_load(file)
logger.info("匯入yaml資料成功")
return f
logs 存放生成的日誌
tools 目錄下 loggers.py 自定義日誌
htmlreport 存放 html 測試報告
reports 為 allure 生成的 json 檔案存放位置
data 目錄下 data.yaml 檔案配置了控制元件元素
testcases 目錄下為測試用例
@allure.feature("測試XXX")
def test_post(ios_driver_setup, imyaml):
s = ios_driver_setup
# 定位元素
f = imyaml
keyvalues = []
for i in f.keys():
keyvalues.append(i)
name1 = f[keyvalues[1]][0]
name2 = f[keyvalues[1]][1]
name3 = f[keyvalues[1]][2]
xpath1 = f[keyvalues[0]][0]
xpath2 = f[keyvalues[0]][1]
xpath3 = f[keyvalues[0]][2]
xpath4 = f[keyvalues[0]][3]
# 開始
s(name=name1).tap()
s.implicitly_wait(30)
s(name=name2).tap()
s.swipe(0.741, 0.792, 0.741, 0.48)
s.implicitly_wait(30.0)
# 選擇時間
s(xpath=xpath1).tap()
s(xpath=xpath2).tap()
#選擇XX
s(xpath=xpath3).click_exists(timeout=5.0)
# 提交
s(xpath=xpath4).tap()
s.implicitly_wait(30.0)
try:
s(name='取消').tap()
assert s(name=name3).exists
logger.info("成功!")
"""if s(name=name3).exists is True:
logger.info("成功")
else:
logger.info("失敗...")"""
except Exception as e:
logger.info("異常資訊:".format(e))
s.implicitly_wait(30.0)
driver.py 進行了裝置初始化
import wda
class Driver():
def init_ios_driver(self):
"""
ios裝置初始化
:return:
"""
try:
c = wda.Client('http://localhost:8100')
c.healthcheck()
logger.info("連線裝置:{}".format(ios_device_udid))
c.wait_ready(timeout=wait_timeout)
return c
except Exception as e:
logger.info("初始化ios端driver異常!{}".format(e))
run.py 進行環境初始化,執行指定用例,生成測試報告
import pytest
from config import *
def init_env():
cmd = "iproxy 8100 8100"
os.popen(cmd)
def init_report():
cmd = "allure generate reports -o htmlreport --clean"
os.popen(cmd)
# cmd = "allure open htmlreport"
if __name__ == '__main__':
init_env()
pytest.main(["-s", case_dir, "--setup-show", "--alluredir=reports", "--emoji"])
init_report()
相關文章
- 多個 iOS 裝置同時進行 UI 自動化測試iOSUI
- 使用 PostMan 進行自動化測試Postman
- 使用PostMan進行自動化測試Postman
- 自動化測試系列 —— UI自動化測試UI
- iOS appium UI 自動化測試配置可控 xpathiOSAPPUI
- ui自動化測試,頁面方法的使用UI
- 使用 Robot Framework 進行自動化視覺測試Framework視覺
- 自動化測試系列(三)|UI測試UI
- 使用Selenium自動化測試SAP CRM WebClient UIWebclientUI
- UI 自動化測試平臺UI
- UI自動化測試之AirtestUIAI
- UI自動化測試實戰UI
- Flutter應用進行自動化測試Flutter
- 真的要進行介面測試自動化?
- Appium自動化(15) - 針對 webview 進行自動化測試APPWebView
- 前端自動化UI測試的完整方案前端UI
- Postman實現UI自動化測試PostmanUI
- UI自動化測試工程實踐UI
- UI自動化測試框架Cypress初探UI框架
- 請問對於富文字編輯器如何進行 UI 自動化測試?UI
- iOS自動化測試驅動工具探索iOS
- iOS自動化測試調研方案iOS
- 前端ui自動化測試sdk封裝前端UI封裝
- 關於Web端-UI自動化測試WebUI
- APP UI自動化測試思路總結APPUI
- UI自動化測試-web元素選擇UIWeb
- android 5個自動化測試Ui框架AndroidUI框架
- 何時適合進行自動化測試?(下)
- 何時適合進行自動化測試?(上)
- Selenium+Java+TestNG進行web自動化測試JavaWeb
- python+selenium UI自動化測試環境搭建及使用PythonUI
- Python + requests + unittest + ddt 進行介面自動化測試的框架Python框架
- robotframework + appium進行自動化測試時遇到的問題FrameworkAPP
- 移動端 UI 自動化測試框架對比UI框架
- 怎樣開始用selenium進行自動化測試?
- 大資料包表如何進行自動化測試大資料
- UI自動化測試介紹及入門UI
- 關於 ui 自動化測試 driver 疑問?UI