主頁 > 移動端開發 > ??【CSDN首發】5W字minium微信小程式自動化測驗框架專案手冊??

??【CSDN首發】5W字minium微信小程式自動化測驗框架專案手冊??

2021-09-11 11:17:39 移動端開發

大家好,我是小碼哥,今天整理了一份minium微信小程式自動化測驗框架手冊,希望能對你有幫助!

目錄

簡介

特性

暫不支持

快速開始

運行環境

必要的知識

安裝

開始使用

更多能力

常見問題排查

測驗進階

framework

一個簡單例子

目錄結構

撰寫第一個case

撰寫組態檔

運行case

查看結果

Class minium.MiniTest

命令列工具

minitest 命令

測驗計劃

目錄結構

撰寫測驗計劃

運行測驗計劃

測驗結果

測驗報告

真機測驗

Android

IOS

安裝 libmobiledevice

配置 WebDriverAgent

配置測驗 config.json

專案配置

Android的device_desire配置項

IOS的device_desire配置項

IDE的mock_native_modal配置項

mock_request配置項

例子

元素定位

簡單選擇器

多賬號



簡介

minium 是為小程式專門開發的自動化框架, 提供了 Python 版本,使用 minium 可以進行小程式 UI 自動化測驗, 但是 minium 的功能不止于僅僅是 UI 自動化, 甚至可以使用 minium 來進行函式的 mock, 可以直接跳轉到小程式某個頁面并設定頁面資料, 做針對性的全面測驗, 這些都得益于我們開放了部分小程式 API 的能力,除此之外,小程式有部分組件使用了系統原生的組件,對于這部分的組件,我們也基于 uiautomator 和 wda 做了補充,

目前小程式的體量越來越大,相關的框架和組件庫越來越多,對于測驗能力要求也越來越高,業內同行基于Chrome DevTools Protocol開發了很多小程式相關的測驗工具,這些工具都有以下缺點:

  1. 只能在Android端上運行,小程式實際是一個跨平臺的產品(IDE,Android和IOS),測驗的平臺覆寫不足,
  2. 兼容性問題,小程式底層運行的內核多樣化(x5,原生webview內核等等),對應的除錯埠不一定能夠打開,
  3. 只能做UI相關的測驗,小程式架構上分為渲染層和邏輯層,這些框架對于邏輯層上面的測驗限制較大,

minium 除了以上缺點都沒有之外,還支持以下更多特性:

特性

  • 支持一套腳本,iOS & Android & 模擬器,三端運行
  • 提供豐富的頁面跳轉方式,看不到也能去得到
  • 可以獲取和設定小程式頁面資料,讓測驗不止點點點
  • 可以直接觸發小程式元素系結事件
  • 支持往 AppSerive 注入代碼片段執行
  • 可以呼叫部分 wx 物件上的介面
  • 支持 Mock wx 物件上的介面
  • 支持 Hook wx 物件上的介面
  • 通過 suite 方式管理用例,config 管理運行設備
  • ...

暫不支持

  • H5頁面的除錯
  • 插件內wx介面呼叫

快速開始

運行環境

  • Python 3.8及以上
  • 微信開發者工具 最新版本,并打開安全模式: 設定 -> 安全設定 -> 服務埠: 打開
  • 微信 >= 7.0.7 (確認微信公共庫版本 >= 2.7.3即可)

必要的知識

本框架與開發者工具有強關聯,如果你之前對開發者工具沒有基本的了解,可以點擊下面的鏈接了解一些必要的知識:

  • Python3 官網檔案 簡單教程
  • 開發者工具
    • 開發者工具的界面
    • 真機除錯
    • 命令列呼叫

安裝

下載minium安裝包,然后執行:

pip3 install minium-latest.zipCopy to clipboardErrorCopied

亦或者下載解壓之后執行:

python3 setup.py installCopy to clipboardErrorCopied

安裝完成后,可執行以下命令查看版本:

minitest -vCopy to clipboardErrorCopied

開始使用

以下是參考代碼,輸出system_info

import minium
mini = minium.Minium({
    "project_path": "path/to/project",  # 小程式專案目錄地址
    "dev_tool_path": "path/to/cli"      # 開發者工具cli地址,如果沒有修改過默認安裝路徑可不填此項
})
print(mini.get_system_info())Copy to clipboardErrorCopied

更多能力

以上是minium介面的基本用法,minium還集成了測驗框架,給你提供更多的測驗能力,詳情見測驗進階

常見問題排查

  1. cli環境問題,一般報錯如下:

MiniConfigError: dev_tool_path: /Applications/wechatwebdevtools.app/Contents/MacOS/cli not exists

解決方法:

  • 請參考開發者工具的命令列工具排查環境問題,
  • 在minium組態檔中配置dev_tool_path路徑或實體化的時候加上dev_tool_path選項,參考測驗配置或例子

檢查方法:

"path/to/cli" auto --project "path/to/project" --auto-port 9420Copy to clipboardErrorCopied

看到類似下圖的log并能正確打開開發者工具即可, cli/http

  1. 登錄開發者工具的帳號沒有該專案的開發者權限,一般報錯如下: MiniLaunchError: Open project in automation mode fail! Please ensure you have permission of project and have not environ error

解決方法:

  • 請找相關專案成員添加
  1. 除錯基礎庫(公共庫)版本過低,一般報錯如下: receive from remote timeout, id: 99eb239c-a2a3-4a12-80da-6fd0312e768f

解決方法:

使用MiniTest可以大大降低小程式測驗成本,如何快速使用測驗框架進行測驗,可參考例子

  • 開發者工具->詳情->本地設定選擇最新版本的除錯基礎庫(公共庫)
  • 測驗進階

  • framework

    minium提供一個基于unittest封裝好的測驗框架,利用這個簡單的框架對小程式測驗可以起到事半功倍的效果,

    測驗基類Minitest會根據測驗配置進行測驗,minitest向上繼承了unittest.TestCase,并做了以下改動:

  • 加載讀取測驗配置
  • 在合適的時機初始化minium.Minium、minium.App和minium.Native
  • 根據配置打開IDE,拉起小程式專案和或自動打開真機除錯
  • 攔截assert呼叫,記錄檢驗結果
  • 記錄運行時資料和截圖,用于測驗報告生成

一個簡單例子

目錄結構

.
├── test
│   └── __init__.py
│   └── first_test.py
└── config.jsonCopy to clipboardErrorCopied

撰寫第一個case

編輯case檔案first_test.py

#!/usr/bin/env python3
import minium
class FirstTest(minium.MiniTest):
    def test_get_system_info(self):
        sys_info = self.mini.get_system_info()
        self.assertIn("SDKVersion", sys_info)Copy to clipboardErrorCopied

撰寫組態檔

編輯組態檔config.json

{
  "project_path": "/Users/yopofeng/workspace/miniprograms/devtools-test/demo",
  "debug_mode": "info"
}Copy to clipboardErrorCopied

更多配置資訊請參考測驗配置

運行case

minitest -m test.first_test -c config.json -gCopy to clipboardErrorCopied

test.first_test是python包名,不要跟path搞混

更多命令列引數請參考命令列工具

運行結果如下:

first_test_result

查看結果

測驗結果存盤在outputs下,運行命令python3 -m http.server 12345 -d outputs然后在瀏覽器上訪問http://localhost:12345即可查看報告,如圖: pycharm

Class minium.MiniTest

MiniTest是minium中繼承自unittest.TestCase的測驗基類

Properties:

名稱型別默認值說明
miniminium.MiniumNoneMinium實體,可直接呼叫minium.Minium中的方法
appminium.AppNoneApp實體,可直接呼叫minium.App中的方法
nativeminium.NativeNoneNative實體,可直接呼叫minium.Native中的方法

代碼示例:

#!/usr/bin/env python3
import minium
class FirstTest(minium.MiniTest):
    def test_get_system_info(self):
        sys_info = self.mini.get_system_info()
        self.assertIn("SDKVersion", sys_info)Copy to clipboardErrorCopied

運行

參考例子

命令列工具

測驗用例的執行可以用執行unittest的方式,也可以用我們提供的腳本minitest來加載用例,相關的引數說明如下:

minitest 命令

  • -h, --help: 使用幫助,

  • -v, --version: 查看 minium 的版本,

  • -p PATH/--path PATH: 用例所在的檔案夾,默認當前路徑,

  • -m MODULE_PATH, --module MODULE_PATH: 用例的包名或者檔案名

  • --case CASE_NAME: test_開頭的用例名

  • -s SUITE, --suite SUITE:測驗計劃檔案,檔案的格式如下:

    {
      "pkg_list": [
        {
          "case_list": [
            "test_*"
          ],
          "pkg": "test.*_test"
        }
      ]
    }Copy to clipboardErrorCopied

    suite.json的pkg_list欄位說明要執行用例的內容和順序,pkg_list是一個陣列,每個陣列元素是一個匹配規則,會根據pkg去匹配包名,找到測驗類,然后再根據case_list里面的規則去查找測驗類的測驗用例,可以根據需要撰寫匹配的粒度,注意匹配規則不是正則運算式,而是通配符,

    測驗檔案可以指定特定的用例,規定執行順序

  • -c CONFIG, --config CONFIG:組態檔名,配置專案參考組態檔

  • -g, --generate: 生成網頁測驗報告

  • --module_search_path [SYS_PATH_LIST [SYS_PATH_LIST ...]]: 添加 module 的搜索路徑

  • -a, --accounts: 查看開發者工具當前登錄的多賬號, 需要通過 9420 埠,以自動化模式打開開發者工具

  • --mode RUN_MODE: 選擇以parallel(并行)或者fork(復刻)的方式運行用例

測驗計劃

測驗專案中一般包含大量的測驗case,在不同的測驗階段可能需要選取不同的case運行,因此專案中需要配置不同的測驗計劃

以下是一個使用測驗計劃進行配置的例子

目錄結構

.
├── test
│   └── __init__.py
│   └── first_test.py
│   └── second_test.py
└── config.json
└── suite.jsonCopy to clipboardErrorCopied

case配置撰寫可參考例子

撰寫測驗計劃

編輯suite檔案suite.json

{
  "pkg_list": [
    {
      "case_list": [
        "test_*"
      ],
      "pkg": "test.*_test"
    }
  ]
}Copy to clipboardErrorCopied

suite.json的pkg_list欄位說明要執行用例的內容和順序,pkg_list是一個陣列,每個陣列元素是一個匹配規則,會根據pkg去匹配包名,找到測驗類,然后再根據case_list里面的規則去查找測驗類的測驗用例,可以根據需要撰寫匹配的粒度,注意匹配規則不是正則運算式,而是通配符,

運行測驗計劃

minitest -s suite.json -c config.json -gCopy to clipboardErrorCopied

更多命令列引數請參考命令列工具

測驗結果

每條用例的測驗結果我們會存放到一個目錄里面,里面包含:

  1. 包含用例執行資訊的json檔案
  2. 用例運行中的截圖
  3. 用例運行中的日志
  4. 小程式運行中的日志

基于這些資料可以生成測驗報告,也可以做一些存檔的事情,

測驗報告

根據用例的執行結果,我們基于Vue和element提供一個簡潔的測驗報告:例子,

報告生成有2種方式:

  1. 執行用例的時候加上-g引數
  2. 針對已經生成的用例結果目錄
    minireport input_path output_pathCopy to clipboardErrorCopied
    output_path里面會生成有報告的入口,

生成報告之后,在對應的目錄下面有index.html檔案,但是我們不能直接用瀏覽器打開這個 檔案,需要把這個目錄放到一個靜態服務器上,以下方式都是可行的:

  1. 本地執行python3 -m http.server 12345 -d /path/to/dir/of/report,然后瀏覽器輸入:http://localhost:12345/

    PS: 其中/path/to/dir/of/report為上文的output_path

  2. 利用nginx的配置:

     server {
       listen 80;
       server_name  your.domain.com;
    
       location / {
         alias /path/to/dir/of/report;
         index index.html;
       }
     }

真機測驗

minium通過組態檔來識別小程式運行的平臺,如果需要測驗手機上的小程式,那么需要把配置項platform改成Android或者iOS

小程式真機除錯是基于小程式開發者工具的真機除錯能力和appnium實作的,如果case使用了minium.Native的介面,則組態檔中必須配置device_desire配置項

Android

Android需要保證命令列能識別到手機設備

$ adb devices

List of devices attached
28fb61d0ef1c7ece    deviceCopy to clipboardErrorCopied

如果只有一臺手機在線,那么只需要把platform配置成Android即可, 而如果多臺設備連接到手機,組態檔需要制定設備的序列號,如:

{
  "debug_mode": "debug",
  "enable_app_log": false,
  "platform": "Android",
  "device_desire": {
    "serial": "28fb61d0ef1c7ece"
  }
}Copy to clipboardErrorCopied

在我們連接真機的時候,Android手機安裝微信測驗的apk,有些手機在安裝程序中會彈框或者輸入密碼,所以第一次運行的時候可能需要人為的處理

IOS

安裝 libmobiledevice

brew uninstall ideviceinstaller
brew uninstall libimobiledevice
brew install --HEAD libimobiledevice
brew link --overwrite libimobiledevice
brew install ideviceinstaller
brew link --overwrite ideviceinstallerCopy to clipboardErrorCopied

如果沒有安裝過直接 brew install ideviceinstaller 即可,

當然你也可以本地編譯:

git clone https://github.com/libimobiledevice/libimobiledevice.git
cd libimobiledevice
./autogen.sh --disable-openssl
make
sudo make installCopy to clipboardErrorCopied

配置 WebDriverAgent

minium 不包含 WebDriverAgent(簡稱wda) 工程,請到appium/WebDriverAgent clone 最新版本,只需要簡單配置兩個選項即可

123

配置完成之后,可以用?+u快捷鍵運行 unit test 測驗 wda 是否正常運行

4

更加詳細的配置說明請訪問appium/WebDriverAgent/wiki

配置測驗 config.json

在用例目錄下面新增一個叫config.json的組態檔,格式如下

{
  "platform": "iOS",
  "device_desire":{
    "wda_project_path": "/Users/sherlock/github/appium/WebDriverAgent", //自定義 wda 的路徑
    "device_info": {
          "udid": "aee531018e668ff1aadee0889f5ebe21a2292...", //手機的 udid 
          "model": "iPhone XR",
          "version": "12.2.5",
          "name": "sherlock's iPhone"
    }
  }
}Copy to clipboardErrorCopied

PS: JSON不支持注釋,請把“//”以及后面的內容刪掉

詳細說明請看:測驗配置

專案配置

為了保證同一套代碼在IDE,Android,IOS上運行,環境組成比較復雜,所以測驗用例的運行依賴于組態檔,相關配置項說明如下表:

配置項型別默認值說明
platformStringide小程式運行的平臺,可選值為:ide, Android, IOS
project_pathString小程式代碼的專案路徑,如果配置了之后,那么需要同時配置dev_tool_path
dev_tool_pathString小程式IDE cli的路徑
enable_app_logBooleanTrue是否監聽小程式代碼回傳的日志
enable_network_panelBooleanFalse是否監聽所有wx.request的請求和回傳,日志生成到request.log
outputsStringoutputs用例運行的結果存放目錄
debug_modeStringinfo日志列印級別,可選:error, warn, info, debug
close_ideBooleanFalse執行完一個 class 是否關閉 ide,ide 下運行不生效
full_resetBooleanFalse執行完一個 class 是否關閉 ide 和 native driver
device_desireObjectnull連接手機的引數,跟手機平臺有關系
test_portint9420IDE監聽的埠,默認為9420
assert_captureBooleanTrue在assert的時候是否截圖
auto_relaunchBooleanTrue啟動的時候relaunch到啟動頁面
use_pushBooleanTrue是否自動推送遠程除錯
remote_connect_timeoutint180遠程除錯連接超時時間 s
request_timeoutint30請求連接超時時間 s
account_infodictNone賬號資訊,多賬號運行使用
mock_native_modaldict{}僅在ide上生效, mock會引起授權彈窗的方法, 使有彈窗的情況下仍能在ide上運行,具體用法請參考IDE的mock_native_modal配置項
mock_requestlist[]mock網路請求, 具體用法參考mock_request配置項

其中 account_info 有如下兩項,通過minitest -a 獲取:

配置項型別默認值說明
wx_nick_nameStringNone微信賬號名稱
open_idStringNone微信賬號的 open_id

其中,device_desire跟平臺有關系,不同平臺配置不一樣,

Android的device_desire配置項

配置項型別默認值說明
serialStringnullAndroid設備號, adb devices查看
uiautomator_versionint1底層使用的Ui Automator版本, 可選: 1, 2

IOS的device_desire配置項

device_desire:

配置項型別默認值說明
wda_project_pathStringnot null自定義 wda 的路徑
device_infoDictnot null真機資訊

其中device_info:

配置項型別默認值說明
udidStringnot null手機的 uuid
modelStringnull機型
versionStringnull系統版本
nameStringnull設備名稱

IDE的mock_native_modal配置項

mock_native_modal:

配置項型別默認值說明
weRunDataDictNone參考wx.getWeRunData介面回傳的結果資訊
userInfoDictNone參考wx.getUserInfo介面回傳的結果資訊
locationDictNone參考wx.getLocationwx.chooseAddress介面回傳的結果資訊
{
    "mock_native_modal": {
        "weRunData": {
            "encryptedData": "123",
            "iv": "456=="
        },
        "userInfo": {
            "nickName":"test test",
            "gender":1,
            "language":"zh_CN",
            "city":"",
            "province":"",
            "country":"St.Kitts and Nevis",
            "avatarUrl":"https://xxxx.qq.com"
        },
        "location": {
            "address": "廣東省廣州市",
            "latitude": 23.0999,
            "longitude": 113.3249,
            "name": "騰訊微信總部"
        }
    }
}Copy to clipboardErrorCopied

mock_request配置項

mock_request中每一項配置:

配置項型別默認值說明
rulestr|dictNot None規則,如型別為str,則默認匹配url
successdictNone成功回呼結果,與引數fail需二選一
failstr|dictNone失敗回呼結果,如型別為str,會自動填充成基礎庫回傳格式,與引數success需二選一

以下例子運行效果同App.mock_request中的例子

{
    "mock_request": [
        {
            "rule": ".*/SendMsg\\?.*", 
            "success": {"data": "mock result1", "statusCode": 200}
        },
        {
            "rule": {"url": ".*/SendMsg$"}, 
            "success": {"data": "mock result2", "statusCode": 200}
        },
        {
            "rule": {"url": ".*/SendMsg.*", "data": {"content": "^\\d+$"}}, 
            "success": {"data": "mock result3", "statusCode": 200}
        },
        {
            "rule": {"url": ".*/SendMsg.*"}, 
            "fail": {"errMsg": "request:fail mock fail"}
        },
    ]
}Copy to clipboardErrorCopied

例子

{
    "debug_mode": "debug",
    "enable_app_log": true,
    "project_path": "/Users/sherlock/github/miniprogram-demo",
    "dev_tool_path": "/Applications/wechatwebdevtools.app/Contents/MacOS/cli",
    "platform": "ios",
    "close_ide": true,
    "test_port": 9420,
    "assert_capture": true,
    "use_push": true,
    "auto_relaunch": true,
    "remote_connect_timeout": 180,
    "device_desire": {
        "wda_project_path": "/Users/sherlock/.npm-global/lib/node_modules/appium/node_modules/appium-webdriveragent",
        "os_type": "ios",
        "device_info": {
            "udid": "aee531018e668ff1aadee0889f5ebe21axxxxxe8",
            "model": "iPhone XR",
            "version": "12.2.5",
            "name": "sherlock's iPhone"
        }
    }
}

元素定位

minium 通過 WXSS 選擇器來定位元素的,目前小程式僅支持以下的選擇器:

選擇器樣例樣例描述
.class.intro選擇所有擁有 class="intro" 的組件
#id#firstname選擇擁有 id="firstname" 的組件
elementview選擇所有 view 組件
element, elementview, checkbox選擇所有檔案的 view 組件和所有的 checkbox 組件
::afterview::after在 view 組件后邊插入內容
::beforeview::before在 view 組件前邊插入內容

簡單選擇器

一個元素的選擇器通常是以下格式組成的:

id 不能以數字開頭,命名規范問題

tageName + #id + .className

這其實是三個選擇器組合的結果,其中:

  • tagName :型別選擇器,標簽名稱,view、checkbox 等等,選擇所有指定型別的最簡單方式,
  • id:ID 選擇器,自定義給元素的唯一 ID,使用時前面跟著 # 號,這是選擇單個元素的最有效的方式,
  • className:類選擇器,由一個點.以及類后面的類名組成,存在多個類的時候可以以點為間隔一直拼接下去,

e.g:

<view id="main" class="page-section page-section-gap" style="text-align: center;"></view>Copy to clipboardErrorCopied

假如要查找像上面這一個元素的話,他的選擇器會像是下面這樣:

view#main.page-section.page-section-gapCopy to clipboardErrorCopied

另一種寫法

view[id='main'][class='page-section page-section-gap']Copy to clipboardErrorCopied

所以,通常我們只需要關注一個元素的 id 和 class 即可,但是有時候有的情況是,有一堆沒有 id ,相同 class 的同名標簽,我們沒辦法通過 id 或者 class 來區分了,比如我們 demo 的 input 頁面:

<view class="page-body">
    <view class="page-section">
      <view class="weui-cells__title">可以自動聚焦的input</view>
      <view class="weui-cells weui-cells_after-title">
        <view class="weui-cell weui-cell_input">
          <input class="weui-input" auto-focus placeholder="將會獲取焦點" bindinput="bindKeyInput"/>
        ...
          <input class="weui-input" maxlength="10" placeholder="最大輸入長度為10" />
        ...
          <input class="weui-input"  maxlength="10" bindinput="bindKeyInput" placeholder="輸入同步到view中"/>
        ...
          <input class="weui-input"  bindinput="bindReplaceInput" placeholder="連續的兩個1會變成2" />
        ...
          <input class="weui-input"  bindinput="bindHideKeyboard" placeholder="輸入123自動收起鍵盤" />
        ...
          <input class="weui-input" type="number" placeholder="這是一個數字輸入框" />
        ...
          <input class="weui-input" password type="text" placeholder="這是一個密碼輸入框" />
        ...
          <input class="weui-input" type="digit" placeholder="帶小數點的數字鍵盤"/>
        ...
          <input class="weui-input" type="idcard" placeholder="身份證輸入鍵盤" />
        ...
          <input class="weui-input" placeholder-style="color:#F76260" placeholder="占位符字體是紅色的" />
        ...Copy to clipboardErrorCopied

我們仔細觀察,雖然所有的 input 都有著同樣的 class,但其實他們并非都是一模一樣的,在實際測驗中,我們發現絕大部分的屬性都可以用來尋找,

e.g:

<input class="weui-input" type="digit" placeholder="帶小數點的數字鍵盤"/>Copy to clipboardErrorCopied

如上,我們可以通過 typeplaceholder 兩個屬性去找到這個元素,

input[type='digit']Copy to clipboardErrorCopied

或者

input[placeholder='帶小數點的數字鍵盤']Copy to clipboardErrorCopied

亦或者,兩者加起來

input[type='digit'][placeholder='帶小數點的數字鍵盤']Copy to clipboardErrorCopied

所以,具體情況具體分析,在我測驗的程序中發現,bindinput 這一類系結方法是不能用作尋路依據的,

多賬號

公共庫 2.10.0 之后支持

  1. 使用多賬號并行測驗首先需要在開發者工具登錄多個賬號

登錄多賬號

  1. 獲取登錄賬號的 open id

    2.1 先以自動化模式打開開發者工具,埠默認 9420

    2.2 minitest -a 獲取 open id獲取 open id

  2. 創建組態檔,形式如下,你需要將 open id 和 udid 替換成你自己的賬號和設備,保存為 m_config.json

[{
    "debug_mode": "debug",
    "enable_app_log": true,
    "project_path": "/Users/sherlock/github/miniprogram-demo",
    "dev_tool_path": "/Applications/wechatwebdevtools.app/Contents/MacOS/cli",
    "platform": "ide",
    "app": "wx",
    "close_ide": false,
    "test_port": 9421,
    "assert_capture": true,
    "use_push": true,
    "auto_relaunch": true,
    "remote_connect_timeout": 10,
    "account_info": {
        "wx_nick_name": "locker",
        "open_id": "o6zAJs_pwr**********aROZDjiw"
    },
    "device_desire": {
        "wda_project_path": "/Users/sherlock/.npm-global/lib/node_modules/appium/node_modules/appium-webdriveragent",
        "os_type": "ios",
        "device_info": {
            "udid": "aee531018e668ff1aad*************2924e8",
            "model": "iPhone 6",
            "version": "12.2.5",
            "name": "sherlock's iPhone"
        }
    }
},
{
    "debug_mode": "debug",
    "enable_app_log": true,
    "project_path": "/Users/sherlock/github/miniprogram-demo",
    "dev_tool_path": "/Applications/wechatwebdevtools.app/Contents/MacOS/cli",
    "platform": "ide",
    "app": "wx",
    "close_ide": false,
    "test_port": 9422,
    "assert_capture": true,
    "use_push": true,
    "auto_relaunch": true,
    "remote_connect_timeout": 10,
    "account_info": {
        "wx_nick_name": "恒瑜_Sherlock",
        "open_id": "o6zAJsx7zt4***********Tz7Kx10A"
    },
    "device_desire": {
        "wda_project_path": "/Users/sherlock/.npm-global/lib/node_modules/appium/node_modules/appium-webdriveragent",
        "os_type": "ios",
        "device_info": {
            "udid": "aee531018e668ff1***********ebe21a22924e8",
            "model": "iPhone XR",
            "version": "12.2.5",
            "name": "sherlock's iPhone"
        }
    }
}]Copy to clipboardErrorCopied
  1. 啟動測驗
$ minitest -s suite.json -c m_config.json -gCopy to clipboardErrorCopied
  1. 靜候

多視窗

PS: 上圖為了方便展示,platform 配置項都設定為 ide,真機運行只需將 platform 設定為 iOS 或者 Android,并填寫好設備 udid 即可,跟之前單機真機運行的步驟一致

今天的文章就分享在這里了,關注我后續會繼續更新優質的文章

最后感謝每一個認真閱讀我文章的人,看著粉絲一路的上漲和關注,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:

這些資料,對于【軟體測驗】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴上萬個測驗工程師們走過最艱難的路程,希望也能幫助到你!

在我的QQ技術交流群里(技術交流和資源共享,廣告勿擾)

可以自助拿走,群號:310357728群里的免費資料都是筆者十多年測驗生涯的精華,還有同行大神一起交流技術哦

如果對你有一點點幫助,各位的「點贊」就是小編創作的最大動力,我們下篇文章見

🌻好文推薦

在小公司“混”了2年,我只認真做了5件事,如今順利拿到位元組 Offe

去了位元組跳動,才知道年薪 30w 的測驗工程師有這么多?

北京35歲程式員失業,感嘆:編程估計沒戲了,想去賣點煎餅果子養家~

29歲轉行軟體測驗靠譜嗎?一個過來人的心路歷程送給迷茫的你

同樣是IT行業,測驗和開發薪資真就差這么大嗎?

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/299217.html

標籤:其他

上一篇:致終將逝去的 Android

下一篇:Android apk 包體積優化

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【從零開始擼一個App】Dagger2

    Dagger2是一個IOC框架,一般用于Android平臺,第一次接觸的朋友,一定會被搞得暈頭轉向。它延續了Java平臺Spring框架代碼碎片化,注解滿天飛的傳統。嘗試將各處代碼片段串聯起來,理清思緒,真不是件容易的事。更不用說還有各版本細微的差別。 與Spring不同的是,Spring是通過反射 ......

    uj5u.com 2020-09-10 06:57:59 more
  • Flutter Weekly Issue 66

    新聞 Flutter 季度調研結果分享 教程 Flutter+FaaS一體化任務編排的思考與設計 詳解Dart中如何通過注解生成代碼 GitHub 用對了嗎?Flutter 團隊分享如何管理大型開源專案 插件 flutter-bubble-tab-indicator A Flutter librar ......

    uj5u.com 2020-09-10 06:58:52 more
  • Proguard 常用規則

    介紹 Proguard 入口,如何查看輸出,如何使用 keep 設定入口以及使用實體,如何配置壓縮,混淆,校驗等規則。

    ......

    uj5u.com 2020-09-10 06:59:00 more
  • Android 開發技術周報 Issue#292

    新聞 Android即將獲得類AirDrop功能:可向附近設備快速分享檔案 谷歌為安卓檔案管理應用引入可安全隱藏資料的Safe Folder功能 Android TV新主界面將顯示電影、電視節目和應用推薦內容 泄露的Android檔案暗示了傳說中的谷歌Pixel 5a與折疊屏新機 谷歌發布Andro ......

    uj5u.com 2020-09-10 07:00:37 more
  • AutoFitTextureView Error inflating class

    報錯: Binary XML file line #0: Binary XML file line #0: Error inflating class xxx.AutoFitTextureView 解決: <com.example.testy2.AutoFitTextureView android: ......

    uj5u.com 2020-09-10 07:00:41 more
  • 根據Uri,Cursor沒有獲取到對應的屬性

    Android: 背景:呼叫攝像頭,拍攝視頻,指定保存的地址,但是回傳的Cursor檔案,只有名稱和大小的屬性,沒有其他諸如時長,連ID屬性都沒有 使用 cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATIO ......

    uj5u.com 2020-09-10 07:00:44 more
  • Android連載29-持久化技術

    一、持久化技術 我們平時所使用的APP產生的資料,在記憶體中都是瞬時的,會隨著斷電、關機等丟失資料,因此android系統采用了持久化技術,用于存盤這些“瞬時”資料 持久化技術包括:檔案存盤、SharedPreference存盤以及資料庫存盤,還有更復雜的SD卡記憶體儲。 二、檔案存盤 最基本存盤方式, ......

    uj5u.com 2020-09-10 07:00:47 more
  • Android Camera2Video整合到自己專案里

    背景: Android專案里呼叫攝像頭拍攝視頻,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后來因專案需要,改成了camera2 1.Camera2Video 官方demo有點問題,下載后,不能直接整合到專案 問題1.多次拍攝視頻崩潰 問題2.雙擊record按鈕, ......

    uj5u.com 2020-09-10 07:00:50 more
  • Android 開發技術周報 Issue#293

    新聞 谷歌為Android TV開發者提供多種新功能 Android 11將自動填表功能整合到鍵盤輸入建議中 谷歌宣布Android Auto即將支持更多的導航和數字停車應用 谷歌Pixel 5只有XL版本 搭載驍龍765G且將比Pixel 4更便宜 [圖]Wear OS將迎來重磅更新:應用啟動時間 ......

    uj5u.com 2020-09-10 07:01:38 more
  • 海豚星空掃碼投屏 Android 接收端 SDK 集成 六步驟

    掃碼投屏,開放網路,獨占設備,不需要額外下載軟體,微信掃碼,發現設備。支持標準DLNA協議,支持倍速播放。視頻,音頻,圖片投屏。好點意思。還支持自定義基于 DLNA 擴展的操作動作。好像要收費,沒體驗。 這里簡單記錄一下集成程序。 一 跟目錄的build.gradle添加私有mevan倉庫 mave ......

    uj5u.com 2020-09-10 07:01:43 more
最新发布
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:40:31 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:40:11 more
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:39:36 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:39:13 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:16:23 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:16:15 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:15:46 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:14:53 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:14:08 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:08:34 more