2020年10月12日月曜日

OpenSTF を Windows の Docker 上で動かす

CEDEC での講演もあって OpenSTF を使い始めた人も多いようなのでメモ。



講演でもお話ありましたが、 OpenSTF は DeviceFarmer に変わったそうですね。 (DeviceFarm と似てて検索とかしづらそう) 

OpenSTF のセットアップについては以下の記事が参考になります。

筆者もネットの情報を参考に立ち上げました。

OpenSTF 便利
OpenSTF はリモート操作のためのツールの印象が強いですが、開発者がローカルで実機確認するときにも便利です。
なぜなら、わざわざ端末を操作して社内システムにログインするためのユーザーID/パスワードの入力が必要なかったり、スクリーンショットも簡単に PC 側で取れちゃうからです。

Docker の勉強がてらローカル環境に立ててみることをオススメします。

docker-compose.yml と起動手順
使っている docker-compose.yml がこちら。コメントに手順も書いてます。


version: '2'
services:
stfdb:
image: rethinkdb:2
restart: always
ports:
- 8082:8080
- 28015:28015
volumes:
- db_data:/data
command: rethinkdb --bind all
# db 起動後 Data Explorer で下記コマンド実行
# r.db('rethinkdb').table('users').get('admin').update({password:'admin'})
stf:
image: openstf/stf
restart: always
ports:
- 7100:7100
- 7110:7110
- 7400-7679:7400-7679
links:
- stfdb:stfdb
environment:
- RETHINKDB_PORT_28015_TCP=tcp://stfdb:28015
- RETHINKDB_ENV_DATABASE=stf
- RETHINKDB_ENV_AUTHKEY=admin
command: stf local --no-cleanup --allow-remote --public-ip host.docker.internal --adb-host host.docker.internal --provider-max-port 7679
volumes:
db_data:
external: true
# ※ 自分以外も使うなら --public-ip を適切なものに変えておく
# 1. docker volume create --name=db_data
# 2. docker-compose up -d stfdb
# 3. localhost:8082 をブラウザで開く
# 4. コメントの通りにコマンド実行
# 5. docker-compose up -d
# 6. localhost:7100 を確認
# 7. 端末接続
# 8. 認識しないようであれば adb start-server コマンドを実行してみる
メモ
Windows でボリュームマウント
Windows だとホストマシンでマウントできる場所が限られてたりして面倒くさかったので、ホストマシンに DB の永続化をするのではなく、docker volume create したボリュームに永続化するようにしてます。(今はなんか Docker Desktop がいい感じにマウントできるようにする?って聞いてくれるので面倒くささ減ったみたいだけど)
端末が認識しない場合
adb サーバーが起動してないかも。
adb start-server をしてみてください。

端末を返却した際にインストールしたアプリをアンイストールしないようにする
デフォルト設定だと、OpenSTF で端末操作して返却するとその間の変更がクリーンナップされます。これはこれで便利なのですが、個人環境で利用する場合は不便にもなります。
クリーンナップしなくない場合は stf の起動オプションに  --no-cleanup を追加しましょう。
使ってみて困っていること・知りたいこと
たまに操作できない状態になる
USBの抜き差しで復旧したりするが、リモートワークな昨今、物理的な挿抜は難しい。
adb kill-server / start-server で復旧したりもする。
リモートで電源の通電操作が可能な機材(リブーター)が存在するので、それを使って AC 給電な USB-HUB の電源切断で、USB 挿抜をエミュレートできないかと思っている。(未検証)

ポートフォワーディング機能の使い方
端末上で実行しているアプリと特定ポートでお話できるかな?と思っているのだが、うまくいってない。機能を勘違いしているのかもしれないし、使い方・設定の問題かもしれない。

最後に
利用者が増えて知見が増えていくと嬉しいですね。
Airtest も便利なんでそっちも情報増えると嬉しい。(Android 10 になって minitouch 使えなくてツラミ)
以上。

0 件のコメント:

コメントを投稿