---
# System prepended metadata

title: 透過容器在本地端執行Appium測試

---

透過容器在本地端執行Appium測試
===

由於在不同OS裝Appium和其他設定到可以跑[Appium](https://gitlab.pgtalk.com/pgtalk/cicd/appium)專案有許多步驟要做，包含：
https://pgtalk.atlassian.net/wiki/spaces/PGTAL/pages/35127297/Appium+on+Ubuntu
或 https://pgtalk.atlassian.net/wiki/spaces/PGTAL/pages/34930708/Appium+on+Windows
及專案內的README以及還有許多路徑需要處理，非常麻煩，為了減少不同平台的環境處理程序，統一將整個需求環境包成一個Image，讓使用者可透過docker(or Containerd)去統一執行在不同的OS，讓使用者可以在不同的OS都能簡單的撰寫BDD測試案例並在本地查看報表

Dockerfile已上傳到gitlab:
https://gitlab.pgtalk.com/pgtalk/cicd/pg-qa-env/-/tree/main/docker/pg-appium

## 事前準備
不同的OS需能執行docker和git指令
4723,8883 port不可被佔用

### Docker安裝
以下提供若乾淨環境沒Docker的裝法
#### Linux
在要使用docker的user下執行
```
git clone https://gitlab.pgtalk.com/pgtalk/cicd/pg-qa-env.git
bash pg-qa-env/scripts/set-sudo-user.sh $(whoami)
```
完成後重新登入，確認該user可不用密碼使用sudo，然後執行以下
```
bash pg-qa-env/scripts/docker.sh
```

安裝完docker後重新登入該user，確認可以不用sudo就能使用docker指令

#### Windows
確認開啟hyperv支援
下載[docker desktop](https://docs.docker.com/desktop/install/windows-install/)並點開

#### Mac
```
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew tap homebrew/cask
brew install --cask docker
```
完成後搜尋docker點開來照著指示安裝docker desktop

## Linux
開啟terminal
```
git clone https://gitlab.pgtalk.com/pgtalk/cicd/appium.git
docker run --privileged -d -v $(pwd)/appium:/home/pgtalk/appium --net=host --name pgdev argonhiisi/appium-allure:1.22.3
```

## Windows
開啟cmd.exe
```
git clone https://gitlab.pgtalk.com/pgtalk/cicd/appium.git
docker network create pgdev-net
docker run --privileged -d -v %cd%\appium:/home/pgtalk/appium -p 4723:4723 -p 8883:8883 --network=pgdev-net --name pgdev argonhiisi/appium-allure:1.22.3
```

## Mac
開啟terminal
```
git clone https://gitlab.pgtalk.com/pgtalk/cicd/appium.git
docker network create pgdev-net
docker run --privileged -d -v $(pwd)/appium:/home/pgtalk/appium -p 4723:4723 -p 8883:8883 --network=pgdev-net --name pgdev argonhiisi/appium-allure:1.22.3
```

## 常用adb操作
以下皆在container內執行，要執行bdd測試前至少需要連線其中一台機器，以該台機器進行測試
進入container(或直接用docker desktop進入)
```
docker exec -ti pgdev bash
```

目前提供的模擬器列表：
http://192.168.31.10:8090/main/AUTOTASKS.html
或是開
http://192.168.31.120:8000
點H264_Converter可看模擬器畫面

### 模擬器連線
```
adb connect 192.168.31.120:5555
```

### 察看所有連線機器
```
adb devices
```

### 刪除pgtalk
```
adb -s 192.168.31.120:5555 uninstall com.fbs.im.pgTalk
```

### 安裝pgtalk
先將apk放到local的appium底下，pgtalk_apk為該apk檔案名稱
```
adb -s 192.168.31.120:5555 install $pgtalk_apk
```

### 用wifi連線本地真機
先將真機連接本身有adb的電腦，先執行以下確認該裝置有連線，連線後需要手機點選同意或允許連線，若沒出現需要手機開啟debug，連線後正常會是顯示一段英文字
```
adb devices
```

取得該裝置wifi ip
```
adb -s 裝置名稱 shell ip -f inet addr show wlan0
```

開啟手機TCP模式，允許用port存取，port號自訂
```
adb -s 裝置名稱 tcpip 自訂port
```

都做完後便可在容器內連線該真機，不過手機wifi需要跟本機同網段或是可相通
```
adb connect $wifi_ip:自訂port 
```

## 測試Testcase
在container內執行以下
先看網卡名稱並記下
```
ip a
```

執行以下執行testcase
d為device
v為安卓版本
a為pgtalk帳號
p為pgtalk密碼
i為網卡名稱
t為testcase資料夾名稱

如果是windows或mac，則網卡名固定為lo，測試過程中可開模擬器畫面看正不正常
### Windows前置處理
```
cd features
apt install -y dos2unix
dos2unix  -k -o *.sh
cd ../settings
dos2unix  -k -o *.sh
```
### ALL OS
跑BDD結果出報表
```
cd features
./test_case.sh -d 192.168.31.120:5555 -v 11 -a 0966000111 -p pgtalk6666 -i lo -t main-playgame-pay-pgp
```

單純測試yaml哪邊有問題，f為要測試的yaml檔
```
cd settings
./auto.sh -d 192.168.31.120:5555 -v 11 -a 0966000111 -p pgtalk6666 -i lo -f demo.yaml
```


## 本地端察看Report
### Linux
```
./gen_report.sh 0.0.0.0
```

### Windows/Mac

先用docker看container的ip，以此為例，ip為172.18.0.2
```
docker network inspect pgdev-net

"Containers": {
            "e2e621bac9a47d1936de5875ce5c7027fecf576c3fc48a0cf78e785ae76e5d53": {
                "Name": "pgdev",
                "EndpointID": "defabc3c5c1edb51db6c7846741da9ff358dcb1bfb739494a952949a0777c035",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            }

```

進入container
```
docker exec -ti pgdev bash
```

執行
```
cd features
./gen_report.sh 172.18.0.2
```

瀏覽器開啟http://本地ip:8883 或 http://localhost:8883