乾貨 | 讀懂 Appium 日誌,讓測試效率翻倍!

乾貨 | 讀懂 Appium 日誌,讓測試效率翻倍!

Appium 服務器運行時會產生很多日誌,但是很多人並不瞭解其中的意義,也無法掌握有用的信息。本文將詳細解讀如何讀懂 Appium 日誌,並讓你的測試效率翻倍。


開啟服務

乾貨 | 讀懂 Appium 日誌,讓測試效率翻倍!


日誌第一行顯示了 Appium 版本和運行地址。

<code>$ appium
[Appium] Welcome to Appium v1

.8

.0

-beta3 (REV

40e40975

ebd3593d08c3f83de2546258f7ddf11d) [Appium] Appium REST http

interface

listener

started

on

0.0.0.0:

4723

/<code>

如果你在 Appium 上添加了參數,他們會在日誌中展示,如果添加了 defaultCapabilities,日誌也會顯示出來。

Appium 參數:


http://appium.io/docs/en/writing-running-appium/server-args/defaultCapabilities詳見:

http://appium.io/docs/en/writing-running-appium/default-capabilities-arg/

<code>

$

appium

--address

172.19

.131

.113

--port

8000

--default-capabilities

'{"showIOSLog": true}'

[Appium]

Welcome

to

Appium

v1.8.0-beta3

(REV

40e40975ebd3593d08c3f83de2546258f7ddf11d)

[Appium]

Non-default server args:

[Appium]

address:

172.19

.131

.113

[Appium]

port:

8000

[Appium]

defaultCapabilities:

{

[Appium]

showIOSLog:

true

[Appium]

}

[Appium]

Default

capabilities,

which will be added to each request unless overridden by desired capabilities:

[Appium]

showIOSLog:

true

[Appium]

Appium

REST

http

interface

listener

started

on

172.19

.131

.113

:8000

/<code>

對於自動化測試來說,這個信息很重要,因為不同的 Appium 版本有不同的功能和問題,必須要知道自己的 Appium 版本。



創建 Session

乾貨 | 讀懂 Appium 日誌,讓測試效率翻倍!


為了自動化測試跑起來,session 要做很多事,日誌提供了一些基本的 session 信息,特別是 desired capabilities 和 default capabilities。應該時刻注意 Appium 服務是否正確接收了請求內容,日誌列出了創建 automation session(不懂 automation session 的看下面的鏈接)。

desired capabilities:

http://appium.io/docs/en/writing-running-appium/caps/

<code>

[Appium]

Creating

new

XCUITestDriver

(v2.68.0)

session

[Appium]

Capabilities:

[Appium]

app:

/Users/isaac/apps/UICatalog-iphonesimulator.app

[Appium]

platformName:

iOS

[Appium]

platformVersion:

11.3

[Appium]

deviceName:

iPhone

6

[Appium]

automationName:

XCUITest

[Appium]

noReset:

true

[Appium]

maxTypingFrequency:

30

[Appium]

clearSystemFiles:

true

[Appium]

showXcodeLog:

false

[debug]

[BaseDriver]

[debug]

[BaseDriver]

Creating session with MJSONWP desired capabilities:

{"app":"/Users/isaac/code/a...

/<code>



Appium 指令

乾貨 | 讀懂 Appium 日誌,讓測試效率翻倍!


Appium 是一個 REST 服務,接收 HTTP 請求,展示請求內容,返回某種結果。Appium 服務端日誌用線和箭頭展示了請求和返回的內容。在兩個箭頭之間是 Appium 服務端執行請求命令的日誌信息:

什麼是REST服務:

https://en.wikipedia.org/wiki/Representational_state_transfer

<code>[HTTP]  
[debug] [MJSONWP] Calling AppiumDriver.getStatus() 

with

args: [] [debug] [MJSONWP] Responding

to

client

with

driver.getStatus()

result

: {

"build"

:{

"version"

:

"1.8.0-beta3"

,

"revision"

:

"30e7b45bdc5668124af33c41492aa5195fcdf64d"

}} [

HTTP

]



錯誤排查

乾貨 | 讀懂 Appium 日誌,讓測試效率翻倍!


利用日誌可以非常方便的排查錯誤,錯誤通常發生在 automation session 之後。但有時,如果 session 持續存在,錯誤也可能發生。所以第一步是找出錯誤在哪。

下面的例子可以看出,每個指令用 [HTTP] --> 和 [HTTP]

<code>

[HTTP]

-->

POST

/wd/hub/session

[debug]

[AndroidDriver]

Shutting

down

Android

driver

[debug]

[AndroidDriver]

Called

deleteSession

but

bootstrap

wasn't

active

[debug]

[Logcat]

Stopping

logcat

capture

[debug]

[ADB]

Getting

connected

devices...

[debug]

[ADB]

1

device(s)

connected

[debug]

[ADB]

Running

'/home/user/Android/Sdk/platform-tools//adb'

with args:

["-P",5037,"-s","ec8c4df","shell","am","force-stop","io.appium.unlock"]

[debug]

[AndroidDriver]

Not

cleaning

generated

files.

Add

`clearSystemFiles`

capability

if

wanted.

[MJSONWP]

Encountered internal error running command: Error: Cannot stop and clear com.company.app. Original error: Error executing adbExec. Original error:

'Command '

/home/user/Android/Sdk/platform-tools//adb

-P

5037

-s

ec8c4df

shell

pm

clear

com.company.app'

exited

with

code

1

'; Stderr: '

Error: java.lang.SecurityException:

PID

22126

does

not

have

permission

android.permission.CLEAR_APP_USER_DATA

to

clear

data

of

package

com.company.app';

Code:

'1'

at

Object.wrappedLogger.errorAndThrow

(../../lib/logging.js:63:13)

at

ADB.callee$0$0$

(../../../lib/tools/adb-commands.js:334:9)

at

tryCatch

(/home/linuxbrew/.linuxbrew/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:67:40)

at

GeneratorFunctionPrototype.invoke

[as

_invoke]

(/home/linuxbrew/.linuxbrew/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:315:22)

at

GeneratorFunctionPrototype.prototype.(anonymous

function)

[as

throw]

(/home/linuxbrew/.linuxbrew/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:100:21)

at

GeneratorFunctionPrototype.invoke

(/home/linuxbrew/.linuxbrew/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:136:37)

at

at

process._tickCallback

(internal/process/next_tick.js:188:7)

[HTTP]

POST

/wd/hub/session

500

40811

ms

-

557

/<code>


用戶試圖用 Android driver 啟動一個 session,但發生了錯誤。Appium 為準備 session 而關掉並清除 AUT 時發現了錯誤,這個錯誤讓我們知道兩件事:

  1. Appium 正在嘗試做什麼
  2. 哪裡出錯了

在這個例子中,Appium 嘗試運行 adb 命令(adb shell am force-stop),adb 參數在錯誤信息中也有顯示。發生了 Android 系統權限錯誤。此時,我們可以手動運行這個 adb 命令,看看錯誤是不是可以重現。如果錯誤重現,上網查錯吧!如果 adb 命令成功運行,可能是 Appium 的 bug,應該去 Github 的 issue 上查看或者提交這個 bug 。(例子中的錯誤是設備製造商的安全模型造成的)

這個例子只是眾多錯誤中的一個,但它說明至關重要的一點,當錯誤發生時,日誌可以提供更多的信息,如果沒有完整的日誌信息,對 Appium 排錯難上加難。


可以改變日誌輸出的參數

乾貨 | 讀懂 Appium 日誌,讓測試效率翻倍!


通常,默認的日誌內容已經足夠,如果你想去 Github 上尋求幫助,信息當然越多越好!下面一些參數可以改變 Appium 服務端的日誌行為:

  • --log-level - 改變Appium日誌顯示級別。Appium 默認展示所有日誌,它有以下一些選項:'info', 'info:debug', 'info:info', 'info:warn', 'info:error', 'warn', 'warn:debug', 'warn:info', 'warn:warn', 'warn:error', 'error', 'error:debug', 'error:info', 'error:warn', 'error:error', 'debug', 'debug:debug', 'debug:info', 'debug:warn', 'debug:error'。
  • --log-no-colors - 如果你的控制檯沒有顏色(日誌可能會產生一些奇怪的字符,比如"TODO: find the color"),你可以用這個參數關閉顏色。
  • --log-timestamp - 在日誌前添加時間戳,在排查超時錯誤時有奇效,展示如下:
<code>

2018

-03

-15

13

:17:58:663

-

[Appium]

Welcome

to

Appium

v1.8.0-beta3

(REV

30e7b45bdc5668124af33c41492aa5195fcdf64d)

2018

-03

-15

13

:17:58:664

-

[Appium]

Non-default server args:

2018

-03

-15

13

:17:58:665

-

[Appium]

logTimestamp:

true

2018

-03

-15

13

:17:58:732

-

[Appium]

Appium

REST

http

interface

listener

started

on

0.0

.0

.0

:4723

/<code>

(文章來源於霍格沃茲測試學院)


專欄

軟件測試工程師如何獲取高薪職位

作者:霍格沃茲軟件測試學院

9.9幣

0人已購

查看


分享到:


相關文章: