日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【专项】自动化框架

發(fā)布時間:2023/12/31 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【专项】自动化框架 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、自動化概述

1.1 自動化框架搭建

選語言,python。選測試框架,unittest或pytest。

接口自動化:requests +? appium +seleium。如果是前端,一般遵守PO設(shè)計模式。

日志模塊、報告模塊、接入入jenkins

1.2 Pytest和Unittest利弊

參考資料?整體參考?兩者區(qū)別

1. 兩種者之間的關(guān)系

  • unittest是Python標(biāo)準庫中自帶的單元測試框架;
  • pytest是第三方單元測試框架;基于unittest
  • pytest兼容unittest測試集。

2. 框架選擇

  • 從入門難度看,pytest優(yōu)于unittest。簡單靈活,容易上手,文檔豐富;
  • 同為第三方庫,pytest的生態(tài)無疑更具優(yōu)勢,社區(qū)的活躍度也更高。pytest具有很多第三方插件比較好用的如pytest-html、pytest-rerunfailures等;
  • 從通用性角度看,pytest優(yōu)于unittest
  • 測試用例的skip和xfail處理;






1.3 具體差異

unittestpytest
用例編寫1.測試文件必須先import unnitest;2.測試類必須繼承unittest.TestCase; 3.測試方法必須以“test_”開頭;4.測試類必須要有unittest.main()方法1.測試文件名必須以“test_”開頭或“test”結(jié)尾;2.測試類必須以“Test_”開頭;3.測試方法必須以“test_”開頭
用例分類執(zhí)行默認執(zhí)行全部用例,也可以通過加載testsuit,執(zhí)行部分用例

可以通過@pytest.mark來標(biāo)記類和方法,pytest.main加入?yún)?shù)("-m")可以只運行標(biāo)記的類和方法,也可以通過pytest.ini配置markers,執(zhí)行時用-m指定

用例前置與后置條件提供了setUp/tearDown,只能針對所有用例fixture更加靈活,可以在任意自定義方法函數(shù),只要加上@pytest.fix
斷言很多斷言格式(assertEqual、assertIn、assertTrue、assertFalse)python原生assert,只有一個斷言
測試報告使用HTMLTestRunnerNew庫有pytest-HTML、allure插件
失敗重跑機制使用pytest-rerunfailures插件,–reruns n --reruns-delay n
參數(shù)化需要依賴ddt庫使用@pytest.mark.parametrize裝飾器

1.4 pytest assert

pytest使用python自帶斷言

def f():return 3def test_function():assert f() == 4

測試斷言異常拋出

def test_zero_division():with pytest.raises(ZeroDivisionError):1 / 0

1.5 pytest裝飾器學(xué)習(xí)

@pytest.mark.skip("skip test_a") 跳過測試用例

@pytest.mark.xfail()預(yù)期失敗用例

@pytest.mark.parametrize參數(shù)化,后邊直接接入?yún)?shù)化的值。

@pytest.mark.parametrize("參數(shù)1,參數(shù)2",[(數(shù)據(jù)1,數(shù)據(jù)2),(數(shù)據(jù)1,數(shù)據(jù)2)])

@pytest.mark.parametrize("a,b,c",[(1,3,4),(10,35,45),(22.22,22.22,44.44)])

1.6 ALLURE插件

pytest allure生產(chǎn)報告,jenkins上有插件

  • pytest –alluredir allure-results:代表生成的json文件存放位置
  • allure generate allure/ -o report/ --clean:生成html報告
  • allure open report和 allure serve:打開html報告

1.7 Q&A

【問題一】pytest 6.0.0 @pytest.mark.skip有問題

【解答一】直接升級:https://blog.csdn.net/tomoya_chen/article/details/108153581

三、接口自動化

四、UI自動化

4.1 appium工具介紹

  • 跨平臺(android ios、運行在mac linux windows)
  • client/server的模式
  • appium的webdriver很多功能是繼承Selenium的webdriver
  • appium支持多語言:
  • appium簡單原理:appium原理_bisong4665的博客-CSDN博客_appium原理
  • appium是cs架構(gòu),appium server底層也是UiAutomator
  • Appium使用WebDriver的json wire協(xié)議,測試腳本使用這個協(xié)議請求給appium server,告訴我們需要設(shè)備做什么,來驅(qū)動系統(tǒng)的UIAutomation庫、Android系統(tǒng)的UIAutomator框架。
  • Desired Capabilities 來傳遞要啟動的app信息,然后創(chuàng)建一個session
  • 在appium server中會將不同的語言都通過Uiaotumator轉(zhuǎn)換成Bootstrap.jar包(所以支持多語言),傳遞給手機app
  • 返回這是逆向
  • 4.2?環(huán)境安裝

  • Android Studio:因為沒有安卓手機,所以使用模擬器,同時需要下載模擬器的系統(tǒng)鏡像。
  • ADT(Android Development Tools):安卓開發(fā)工具,其中含有adb(Android Debug Bridge),要配置ANDROID_HOME:appium在工作的時候會查找該路徑
  • Appium:是一個開源、跨平臺的測試框架,可以用來測試原生及混合的移動端應(yīng)用
  • JDK、JRE等Android要用的東西
  • python
  • unittest
  • appium-python-client(appium的client端)
  • 4.3?啟動步驟

  • 啟動模擬器,看下模擬器是不是啟動好了。
  • adb devices 確認adb已經(jīng)連接,adb install -r XX.apk,-r的意思是覆蓋安裝
  • 啟動Appium
  • python 運行腳本
  • 4.4 PO設(shè)計模式

  • 每一個page寫成一個類,當(dāng)不同的case用到的時候,直接從這個class來獲取控件。當(dāng)有控件失效的時候,只需要改這個類即可

  • 分頁面去維護空間,所有的定位都是在Page頁面。

  • class IndexPage:def __init__(self,dirver):self.dirver=driverdef searchbar():returnn self.driver.find_element_by_id('com.seacher')class TestCase(unittest.TestCase):def setUp(self):self.driver=webdriver.Remote(……)self.IndexPage(self.driver)passdef tearDown(self):passdef testCase(self):searchbar = self.IndexPage().searchbar()searchbar.click()if __name__=='__init__':……

    常見知識點

  • app頁面元素:UIAutomatorViewer、Inspector獲取元素信息 - Lianstyle - 博客園
  • UI automator view 和 appium
  • appium其他知識點

  • 輸入字符串:send_key(u'add')

  • 輸入漢語:python3+appium,怎么輸入中文,并且調(diào)用搜狗或調(diào)出手機鍵盤;_linmumum的博客-CSDN博客

  • 如何坐標(biāo)定位:self.driver.tap([(711, 761), (909, 959)], 100):python必須給出兩個坐標(biāo),100(duration)表示點擊時間

  • appium啟動包的時候需要哪些屬性:

  • platformVersion、platformName、deviceName、appPackage、appActivity、noReset(是否清除app的數(shù)據(jù))

  • Desired Capabilities:automationName:測試引擎,默認appium,app安裝app的電腦上的路徑。udid(通過adb devices獲取)當(dāng)電腦安裝多個手機時,必須設(shè)置。autowebView表示是否以網(wǎng)頁的形式展示空間節(jié)點間的關(guān)系(div/xx等)

  • 學(xué)習(xí)的定位的方式

  • self.driver.find_element[s]_by_id

  • self.driver.find_element[s]_by_class_name

  • self.driver.find_element_by_android_uiaotumator('new UiSelector().text("行業(yè)')')、Uiselectort().textContains()、UiSeletor().textStartsWith()、UiSelector().textMatches("*行*")、Uiselector().resourceId()、Uiselector().className()、Uiselector().description()

  • self.driver.find_element_by_android_uiautomator('resourceId(XX).text('')')/self.driver.find_element_by_android_uiautomator('className(XX).text('')')?

  • self.dirver.find_element_by_android_uiaotumator('resourceId()').childSelector('className()')//父子查找

  • self.driver.find_element_by_android_uiautomator('resourceId(A)').fromParent('resourceId(C)')//查找的是A節(jié)點的子節(jié)點C的上一個子節(jié)點B,B和C是同級別的,如果沒有B,返回的則是C

  • instance和index的區(qū)別:instance是把相同類型的一個節(jié)點下的子節(jié)點、子子幾點都放到一個列表中。index是把相同類型的子節(jié)點放到一個列表中。

  • self.driver.find_element_by_android_uiautomator('new UiSelector().textContains("行業(yè)")').click() self.driver.tap([(60, 856), (665, 1158)], 100) width = self.driver.get_window_size()['width'] height = self.driver.get_window_size()['height'] self.driver.swipe(0.5 * width, 0.9 * height, 0.5 * width, 0.2 * height)
  • 輸入文字:desired需要設(shè)置desired['unicodeKeyboard']=true和desired['resetKeyborad']=true:意思是使用appium的鍵盤,然后重置鍵盤

  • 打開多的appiumserver (一個appiumserver是有兩個端口的)然后通過不同的udid運行腳本

  • toast支持:desired capibility,aotumationName = uiaotumator2才支持

  • WebDriverWait().until()智能等待\time.sleep()是直接等待多久時間

  • webview:混合應(yīng)用,要切換上下文(獲得這個頁面的環(huán)境)。android.webkit.Webview是網(wǎng)頁。需要開發(fā)配合設(shè)置,webview.setWebContentsDebuggingEnabled(true)。即調(diào)試模式。在chrome中chrome://inspect/#devices,可以看到手機上網(wǎng)頁。然后可以定位(需要fanqiang)。UC 開發(fā)者調(diào)試工具及使用

  • GitHub - openatx/uiautomator2: Android Uiautomator2 Python Wrapper

  • 連接一個Android機器需要參數(shù)

    APP連接 from appium import webdriver#導(dǎo)入appium包#連接手機app初始化的一些信息 desc={}desc['deviceName']='127.0.0.1:62001'#手機設(shè)備名稱,adb devices desc['platformVersion']='4.4.2'#手機版本,在手機中:設(shè)置--關(guān)于手機 desc['platformName']='Android' #手機類型,ios或android #輸入命令,獲取app信息:aapt dump badging C:\Users\83473\Desktop\mobileqq_android.apk desc['appPackage']='com.tencent.mobileqq'#包名 desc['appActivity']='com.tencent.mobileqq.activity.SplashActivity'#啟動入口 desc["unicodeKeyboard"] = "True"#appium提供的一種輸入法,可以傳中文。測試時直接用這個輸入法 desc["resetKeyboard"] = "True"#程序結(jié)束時重置原來的輸入法 desc["noReset"] = "True"#不初始化手機app信息(類似不清楚緩存)#啟動服務(wù)端,再cmd窗口輸入appium.如果appium沒有安裝好,可以打開appium-desktop.也相當(dāng)于啟動了服務(wù)driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub',desc)#訪問服務(wù)接口,并啟動手機app。url參數(shù)是當(dāng)appium啟動后,默認訪問服務(wù)地址和接口

    常見ADB命令

  • 當(dāng)adb devices列出設(shè)備時,發(fā)現(xiàn)設(shè)備offline。可以先adb kill-server 然后 adb start-server
  • 無線連接保證在同一網(wǎng)絡(luò)下:adb tcpip 5555 之后adb connect <IP Address>?
  • adb ?install -r xx.apk? ??adb uninstall packagename

  • adb shell dumpsys activity top | grep 'ACTIVITY' :查找應(yīng)用的包名和activity,top的意思要求你把這個應(yīng)用打開(如果打開多個應(yīng)用,獲取的是在最上層)
  • cpu 、mem執(zhí)行top 命令,grep 包名,1秒一采樣。
  • adb shell dumpsys meminfo/cpuinfo/batterystats/gfxinfo(必須在手機上打開gpu)
  • adb logcat | findstr 'crash'?將日志數(shù)據(jù)輸出到屏幕上

  • adb bugreport?查看bug的報告,如dumpsys ,dumpstate ,和logcat 信息

  • adb pull <手機路徑> ? <本機路徑> ?從手機中拉取信息到本地電腦上
  • adb push <本機路徑> ?<手機路徑> ?從本地電腦推送信息到手機上

  • adb -P -s shell?am:am 表示activity manager,可以啟動Service、Broadcast,殺進程,監(jiān)控等功能,這些功能都非常便捷調(diào)試程序

  • adb -P -s shell pm:為包管理(package manager)的簡稱,可以使用pm工具來執(zhí)行應(yīng)用的安裝和查詢應(yīng)用的信息、系統(tǒng)權(quán)限、控制應(yīng)用,pm工具是Android開發(fā)與測試過程中必不可少的工具

  • 常見問題解決方案

    ?Q:appium在android端彈層無法獲取元素

    https://blog.csdn.net/m0_38115806/article/details/81182150

    Q:Try to increase the 20000ms adb execution timeout represented by 'adbExecTimeout' capability

    主要是模擬器有點慢,超時了,解決方案:https://www.jianshu.com/p/adc685d0ce15

    Q:Appium Desktop如何命令行啟動

    node /Applications/Appium.app/Contents/Resources/app/node_modules/appium/build/lib/main.js --address 127.0.0.1 --port 4723

    http://www.automationtestinghub.com/3-ways-to-start-appium-server-from-java/

    總結(jié)

    以上是生活随笔為你收集整理的【专项】自动化框架的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。