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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【笔记】软件测试02——移动测试基础02

發布時間:2024/1/1 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【笔记】软件测试02——移动测试基础02 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(一)移動測試概念

1、定義

????????測試手機程序

2、測試的方面

  • 功能測試:查看功能是否正常
  • 安裝卸載測試
  • 升級測試
  • 兼容性測試
    • Android系統版本
    • 廠商二次開發版本
    • 不同分辨率
    • 不同網絡
  • 網絡切換、中斷測試
  • 使用中來電話、短信
  • 橫豎屏切換
  • 健壯性:耗電性、流量消耗、崩潰回復

(二)環境搭建

1.java sdk

? ? ? ? 安裝

????????配置JAVA_HOME和PATH

2.Android SDK

  • 解壓
  • 配置Android_HOME和PATH
  • 3.虛擬機安裝

    ????????使用夜神模擬器

    ????????也可以使用真機

    ????????????????a.?? ?手機通過usb線連接到電腦
    ????????????????b.?? ?在手機上打開文件傳輸(通知欄,手機正在充電)
    ????????????????c.?? ?在電腦上會發現多了一個CD驅動器,里面時手機的驅動
    ????????????????d.?? ?安裝驅動,電腦的設備管理器中就可以看到型號了
    ????????????????e.?? ?開啟開發者模式:手機-設置-關于手機-版本號(多次點擊)
    ????????????????f.?? ?打開usb調試:手機-設置-開發者選項-usb調試(打開)

    1、ADB

    命令:重要 a. 服務(如果發現代碼連不上手機了) adb kill-server adb start-serverb. 查看設備 adb devicesc. 進入手機終端 adb shelld. 獲取信息

    獲取手機android版本:

    adb shell getprop ro.build.version.release

    獲取手機當前運行的程序和界面的名稱:

    adb shell dumpsys window windows | findstr mFocusedApp

    ?綠色是當前運行的程序activity,紅色是當前程序運行的activity所在的包。

    e.其他 i. 文件傳輸 adb push 電腦上的文件 手機上的位置 adb pull 手機上的文件 電腦上的位置ii. 軟件安裝卸載 adb install 電腦上的apk文件路徑 安裝路徑 adb uninstall 應用的包名iii. 獲取其他信息 adb shell am start -w 包名/.啟動名

    (三)自動化測試案例

    1、自動化測試工具

    選取Appnium。支持語言多,支持的平臺多。

    環境搭建:

    ????????1.安裝appnium的程序

    ????????2.在python中安裝Appnium-Python-Client

    需要打開ADB、模擬器、Appnium、Pycharm

    如果是之間導入的一個自己在電腦中直接建立的文件夾,沒有匹配對應的python環境。

    2、入門案例代碼?

    1.連接設備

    #1.連接設備 #組裝一個字典,注明平臺,系統版本,名稱 #從appnium導入webderiver from appnium import webdriver import time #連接移動設備所必須的參數 desired_caps = {} # desired_capabilities 是字典,先定義一個空字典 #當前要測試的設備名稱 desired_caps["deviceName"] = "172.0.0.1:62001" #看系統 desired_caps["platformName"] = "Android" #系統的版本 desired_caps["latformVersion"] = "7.1" #要啟動的app的名稱(app的唯一標識:包名) desired_caps["appPackage"] = "com.android.setting" #要啟動的app的界面 desired_caps["appActivity"] = ".Settings" driver = webdriver.Remote("http://127.0.0.1:4444/wd/hub",desired_capabilities=desired_caps) time.sleep(1)#這里進行所需要的操作#關閉app 關閉后需要釋放資源 driver.close_app() driver.quit()

    亦或者:

    #1.連接設備 #組裝一個字典,注明平臺,系統版本,名稱 #從appnium導入webderiver from appnium import webdriver import time #連接移動設備所必須的參數 desired_caps = {"deviceName": "172.0.0;1:62001","platformName": "Android", "latformVersion": "7.1","appPackage": "com.android.setting","appActivity": ".Settings"} #看系統 #系統的版本 #要啟動的app的名稱(app的唯一標識:包名) #要啟動的app的界面 driver = webdriver.Remote("http://127.0.0.1:4444/wd/hub",desired_capabilities=desired_caps) time.sleep(1) #g關閉app 關閉后需要釋放資源 driver.close_app() driver.quit()

    ADB進入命令行:

    ????????首先進入python模式

    ????????再下指令pip list查看當前已經安裝的包

    ?workon查看當前的虛擬環境。

    ?從Remote點擊查看webdriver.py

    ?Appnium端需要配置 的環境變量:

    ?退出configuraations后:

    端口號,與代碼端口號要一致。host的ip地址也要一致

    點擊start:(運行代碼前要start)

    代碼中的的信息如何查找:

    1.deviceName:

    desired_caps["deviceName"] = "172.0.0.1:62001"

    ?

    2.看系統

    desired_caps["platformName"] = "Android"

    注意首字母大寫

    3.看系統版本

    #系統的版本

    desired_caps["latformVersion"] = "7.1"

    模擬器中查看:

    4.要啟動的app名稱

    #要啟動的app的名稱(app的唯一標識:包名)

    desired_caps["appPackage"] = "com.android.setting"

    5.要啟動的app界面

    #要啟動的app的界面

    desired_caps["appActivity"] = ".Settings"

    4和5使用命令在命令行中查看:

    獲取手機當前運行的程序和界面的名稱:

    adb shell dumpsys window windows | findetr mFocusedApp

    ?3、測試原理

    ????????代碼通過remote連接服務器(Appnium client),將信息傳到server(appnium),需要解析,server通過adb命令傳遞指令給手機。

    4、基礎操作

    基礎API:

    • driver

    close_app()

    關閉打開的應用

    quit()

    斷開連接(后續不能發送指令了)

    install_app('apk在電腦的絕對路徑')

    安裝應用

    remover_app('應用的包名')

    卸載應用

    is_app_installed('應用的包名')

    判斷應用是否安裝

    push_file(目標位置,base64編碼的內容)

    pull_file(來源位置)

    返回值是base64編碼的內容

    pase_source

    獲取界面xml源碼

    find_element...

    find_elements...

    current_package

    獲取當前操作的應用的包名

    current_activity

    獲取當前操作的界面名稱

    python代碼中查看:

    print(driver.pase_source)

    安裝:需要放在當前目錄下,r是將特殊字符轉換回原生字符串

    driver.install_app(r"文件目錄\文件包名")

    卸載:需要先判斷是否已經安裝

    if driver.is_app_install("程序包名(adb指令查看)"):

    ? driver.remove_app("程序包名(adb指令查看)")

    查看包名、界面名稱:

    print(driver.current_package)

    print(driver.current_activity)

    • element

    text

    獲取元素文本的內容

    click()

    點擊元素對應的位置

    get_attribute(屬性名稱)

    獲取屬性值

    location

    獲取元素左上角的坐標(相對于屏幕的左上角)

    size

    獲取元素的寬高(字典)

    el = driver.find_element_by_xpath("//*[@text='顯示']") print(el.size) print(el.text) print(el.get_attribute("text")) print(el.location)

    5、輸入文本

    對于有些元素,可以接受文本輸入。

    • send_keys(文本內容)

    ????????可以輸入文字,但對中文,在連接設備的時候要加上配置。(現在默認是可以的輸入中文,若是不可以則把以下兩行內容進行配置)

    desired_caps('unicodeKeyboard')= True??? #unicode設置(允許中文輸入)

    desired_caps['resetKeyboard'] = True??? #鍵盤設置(允許中文輸入)

    如果對于同一元素,多次調用此方法,會先一個一個刪除掉原內容,再輸入。

    • clear()

    清除文本框的內容。(最后一個不會自動刪除,需要清楚一個)

    eg:

    driver.find_element_by_xpath("//*[@resource-id='com.android.setting:id/search']").click()time.sleep(1)driver.find_element_by_xpath("//*[@resoure-id='android:id/search_src_text']").send_keys('abd')driver.find_element_by_xpath("//*[@resoure-id='android:id/search_src_text']").send_keys('123')driver.find_element_by_xpath("//*[@resoure-id='android:id/search_src_text']").send_keys('張三')time.sleep(2)driver.find_element_by_xpath("//*[@resoure-id='android:id/search_src_text']").clear()

    6、元素定位

    ????????與web自動化不一樣,web元素是在html上,而移動端是在xml上,可通過print(driver.pase_source)指令查看到。定位元素使用xpath的方式.

    ????????通過以下這個bat運行一個截圖工具,查看頁面的元素。

    ????????進去之后,點擊左上角UI字眼下面偏綠色的按鈕進行截圖。再通過滑動點擊頁面元素,可在右邊查看到元素信息。

    ?

    #從appnium導入webderiver from appnium import webdriver import time #連接移動設備所必須的參數 desired_caps = {} # desired_capabilities 是字典,先定義一個空字典 #當前要測試的設備名稱 desired_caps["deviceName"] = "172.0.0.1:62001" #看系統 desired_caps["platformName"] = "Android" #系統的版本 desired_caps["latformVersion"] = "7.1" #要啟動的app的名稱(app的唯一標識:包名) desired_caps["appPackage"] = "com.android.setting" #要啟動的app的界面 desired_caps["appActivity"] = ".Settings" driver = webdriver.Remote("http://127.0.0.1:4444/wd/hub",desired_capabilities=desired_caps) time.sleep(1)print(driver.pase_source)# //*[text()='顯示'] 的意思是在整個頁面下尋找任意的元素(*),限定條件text #在安卓手機中,text并不是文本,而是屬于標簽的屬性 driver.find_element_by_xpath("//*[text()='顯示']").click()#g關閉app 關閉后需要釋放資源 driver.close_app() driver.quit() 以上報錯原因是:< /,即開始和結束標簽是在一起的,在安卓手機中,text并不是文本,而是屬于標簽的屬性。 在xml中 <a herf="www.baidu.com"你好</a你好就是a標簽的text,herf指的就是a標簽的屬性 如果中間沒有值,可以直接如下寫: <a herf="www.baidu.com改成: driver.find_element_by_xpath("//*[text()='顯示']").click() #改成: driver.find_element_by_xpath("//*[@text()='顯示']").click() 一般情況下,通過文本獲取,少數情況下通過id。

    (四)模擬手勢

    1、安卓內在機制

    ????????1. 對于目前不需要在屏幕中顯示的內容,是不需要處理的,為了節省硬件資源;2. 安卓使用了棧的方式管理界面;3. 頁面滑動有“慣性”機制,會根據按下、抬起的位置以及總的時間,滾動不一樣的距離。

    2、滾動

    swipe(self,start_x:int,start_y:int,end_x:int,end_y:int,duration:int = 0)

    注意:duration默認是600單位是毫秒

    ????????它會影響實際滾動的距離

    還需注意:

    ????????click方法,實際上并不是點元素,而是點元素所在位置。在獲取的時候有位置,但可以經過滑動,位置發生了變化,可能點不準。非常有可能在點擊之前睡一會,等待滑動結束。

    scroll(origin_el,destination_el,duration)

    scroll直接傳遞元素作為參數即可,不需要手動獲取位置

    scroll底層實現:與swipe有一些區別,沒有中間的采樣點,只有起始、結束,但最終的效果和swipe是一樣的。

    eg:

    預估位置: driver.swip(start_x=270,start_y=640,end_x=270,end_y=320) 第二種方式: size = driver.get_window_size() prinnt(size) width = size["width"] height = size["height"] driver.swipe(start_x=width/2,start_y=height/3*2,end_x=width/2,end_y=height/3)滾動: el1=driver.find_element_by_xpath("//*[@text='通知']") el2=driver.find_element_by_xpath("//*[@text='WLAN']") driver.scoll(el1,el2)

    關于坐標:

    第二種方式的滑動print:

    3、拖拽

    在安卓中,拖拽=按下 等待一定時間 移動 松手

    drag_and_drop(origin_el,destinatiion_el)

    eg:

    el1.driver.find_element_by_xpath("//*[@text='酷安']") el2.driver.find_element_by_xpath("//*[@text='京東']") driver.drag_and_drop(el1,el2) time.sleep(2)

    4、TouchAction

    • 作用

    構建相對比較復雜的、連續的觸摸動作

    • 用法
    • 創建TouchAction對象,需要把driver作為參數傳遞
    • 通過各種方法添加動作
    • 執行操作perform()
    • 方法
      • 按下

    press(self,el,x,y,pressure)

    ????????如果傳遞了el參數,x,y可以不傳

    ????????如果el為none,就需要傳遞x,y

    ????????pressure是ios專用的

    • 長按

    long_press(self,el,x,y,duration=1000)

    ????????如果傳遞了el參數,x,y可以不傳

    ????????如果el為none,就需要傳遞x,y

    • 移動

    move_to(self,el,x,y)

    ????????如果傳遞了el參數,x,y可以不傳

    ????????如果el為none,就需要傳遞x,y

    • 等待

    wait(self,ms)

    ????????ms等待時間,單位毫秒,默認600ms

    • 松手

    release()

    • 輕敲

    tap(el,element,x,y,count=1)

    ????????tap和click的區別:click有延遲促發效果(為了校驗是不是雙擊),通過tap(el,count=2)可以模擬雙擊。

    實例:

    #需要再導一個包,其他內容要包括基本內容 from appnium.webdriver.common.touch_action import TouchActionel1.driver.find_element_by_xpath("//*[@text='通知']") el2.driver.find_element_by_xpath("//*[@text='WLAN']") #實例化TouchAction action = TouchAction(driver) #既可以使用坐標又可以使用元素 action.press(el1).wait(2000).release() #分開寫: #在移動的過程中wait必不可少,wait(0)是默認600ms action.press(el1).wait(2000).move_to(el2) #x和y是絕對坐標 action.press(x=270,y=640).wait(500).move_to(x=270,y=370) action.release() #執行 模擬收拾的使用,TouchActio進行模擬手勢的時候,一定要記得執行操作 action.perform() time.sleep(3)

    5、圖形滑動案例

    案例如下:

    ????????安全不顯示在當前屏幕中,需要滑動到下面讓其顯示在屏幕前,才能查找到

    el1=driver.find_element_be_xpath("//*[@text='聲音']") el2=driver.find_element_be_xpath("//*[@text='WLAN']") action = TouchAction(driver) action.press(el1).wait(500).move_to(el2) action.releasse() action.perform() time.sleep(1) driver.find_element_be_xpath("//*[@text='安全']").click() time.sleep(1) driver.find_element_be_xpath("//*[@text='屏幕鎖定']").click() time.sleep(1) driver.find_element_be_xpath("//*[@text='圖案']") time.sleep(1) #按下的位置 Z型 action.press(x=105,y=450).wait(200).move_to(x=270,y45).wait(200).move_to(x=435,y=450).wait(200).move_to(x=270,y=615).wait(200).move_to(x=105,y=780).wait(200).move_to(x=270,y=780).wait(200).move_to(x=435,y=780) action.release() action.perform()

    6、基礎操作

    • device_time :獲取手機時間
    • get_window_size():獲取屏幕大小
    • network_connection :獲取手機網絡信息
      • 飛行模式
      • WiFi
      • 移動數據? 6=2+4
    • set_network_connection(網絡模式數字)? :設置手機網絡信息
    • keyevent(按鍵數字) :點擊按鍵
    • set_screenshot_as_file/save_screenshot(圖片路徑) :截屏
    • open_notification() :打開通知欄

    eg:

    print(driver.device_time) print(driver.network_connection) driver.get_screenshot_as_file("jietu.png")

    總結

    以上是生活随笔為你收集整理的【笔记】软件测试02——移动测试基础02的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。