22
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

グリーQAAdvent Calendar 2020

Day 1

STFでAirtestを動かしてみる

Last updated at Posted at 2020-11-30

#はじめに
AirtestIDE でスマホアプリ(ゲーム)のテスト自動化をしています。そこで実際に作成したスクリプトや環境をつくるために実施したことを綴ってみたいと思います。

#環境
macOS 10.15.7
Airtest IDE 1.2.6(Python)
Android 7.0(Xperia Z5 Premium)
#アクセストークンをつくる
スクリーンショット 2020-11-25 17.17.01.png
「設定」メニューから、「認証キー」タブを開いて「+」をクリック。
ここで、アクセストークンを作成します。

#STFの端末を取得するまで
###端末一覧を取得する

import requests
import pprint

def get_devices():
    response = requests.get(
        'https://stf.sample.net/api/v1/devices',
        headers = {
           'Authorization': 'Bearer <token>'
        },
        verify = False
        )
    res = response.json()

    pprint.pprint(res)

一覧を取得してどの端末を借りるか決めます。
スクリーンショット 2020-11-25 20.03.41.png
今回は、Xperia Z5 Premium にします。
スクリーンショット 2020-11-25 20.04.37.png
ここで、端末の serial を取得しておきます。

###端末を借りる

import json

def reserve_device(serial):
    payload = {
      'serial': serial
    }
    response = requests.post(
        'https://stf.sample.net/api/v1/user/devices',
        headers = {
          'Content-Type': 'application/json',
          'Authorization': 'Bearer <token>'
        },
        data = json.dumps(payload),
        verify = False
        )
    res = response.json()

    pprint.pprint(res)

先程の sereal を使って端末を借ります。

{'description': 'Device successfully added', 'success': True}

stf_reserve.png
端末の状態が使用中になります。(自身のアカウントからみているので「Stop Automation」の表記になっている)

###端末へのリモート接続を有効にする

def connect_device(serial):
    payload = {
      'serial': serial
    }
    response = requests.post(
        'https://stf.sample.net/api/v1/user/devices/' + serial + '/remoteConnect',
        headers = {
          'Content-Type': 'application/json',
          'Authorization': 'Bearer <token>'
        },
        data = json.dumps(payload),
        verify = False
        )
    res = response.json()

    pprint.pprint(res)
{'remoteConnectUrl': '<ip>:<port>', 'success': True}

当該端末への接続情報 <ip>:<port> が取得できます。

#STFの端末でAirtestのスクリプトを実行する

STFの端末を指定してAirtestIDEコマンドを実行します。

###コマンドラインから実行する

$ cd $PROJECT_HOME
$ /Applications/AirtestIDE.app/Contents/MacOS/AirtestIDE runner "<プロジェクト>.air" --device Android://127.0.0.1:5037/<ip>:<port> --log log

先程取得した接続情報 <ip>:<port> を使用します。
※複数台同時実行も可能です

###レポートを作成する

$ /Applications/AirtestIDE.app/Contents/MacOS/AirtestIDE reporter "<プロジェクト>.air" --log_root log --export exp

作成されたレポートは exp/<プロジェクト>.air/log.html から参照できます。

#端末を返却する


def release_device(serial):
    response = requests.delete(
        'https://stf.sample.net/api/v1/user/devices/' + serial,
        headers = {
          'Authorization': 'Bearer <token>'
        },
        verify = False
        )
    res = response.json()

端末が開放され、貸出のステータスが元に戻ります。

#おわりに
参考になった箇所などありましたでしょうか。実際にSTFでAirtestIDEコマンドを試そうとした際に、関連する情報が見つからず試行錯誤したことがありましたので、何かのお役に立てたなら幸いです。

#参考
OSSなリモートスマホサービス(STF)が素敵すぎる
https://qiita.com/tabbyz/items/5f6cec37e1d525a8e4d5
Airtestを使ってUIのテストを自動化する話
https://qiita.com/johro/items/b77f5a8c3c3cf00bde30
Welcome to Airtest documentation!
https://airtest.readthedocs.io/en/latest/index.html
STF API
https://github.com/openstf/stf/blob/master/doc/API.md

22
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?