Yenten(YTN)のマイニングプールを作ったので裏側公開!Stratumサーバー構築編(2)

Hatenablogへ移行しました

stratumuサーバー構築編(2)

Yenten(YTN)のマイニングプールを作ったので裏側公開!の続きになります。

円天恋な〜プールはこちら

yenten price

stratumの動作について

stratumサーバーはマイニングする人たちとマイニングプールを接続代行してくれるサービスです。

主な役割は3点 - ウォレットにRPCで問い合わせし、現在の難易度(diffculty)や次点の難易度・全体のハッシュレートなどを取得 - マイナーとマイニングプールの仲介 - 採掘の総当たりを実施

config設定

yenten5000/config/config_sample.pyをコピーして利用します。

$ cd yenten5000
$ cp config/config_sample.py  config/config.py

12行目に当たるCENTRAL_WALLETを自身のYentenアドレスに変更します。

$ yenten-cli -conf=/data/yenten/etc/yenten.conf getaddressesbyaccount ""
[
    "YT8cRWEdtNi4RoV8pH2tABTsdLBBemBfy5"
]
$ vim config/config.py
12: CENTRAL_WALLET = 'YT8cRWEdtNi4RoV8pH2tABTsdLBBemBfy5'

YentenウォレットにRPCで接続する情報を記述します。

/data/yenten/etc/yenten.conf の内容ですね。

 14: COINDAEMON_TRUSTED_HOST = '127.0.0.1'
 15: COINDAEMON_TRUSTED_PORT = 12000 #Yentenのポート
 16: COINDAEMON_TRUSTED_USER = '####' 
 17: COINDAEMON_TRUSTED_PASSWORD = '####'

algorithmをytn_yescryptに変更

 25: COINDAEMON_ALGO = 'ytn_yescrypt'

外部からの接続ポート

マイナーが接続するポートを記述します。

 76: LISTEN_SOCKET_TRANSPORT = 12100

SALTの設定

パスワードにsaltを負荷します。ランダムで分かりにくい文字列を入力してください

87: PASSWORD_SALT = '############'

DBの設定

DriverはMySQLを前提として進めます。 後ほどDBは作成するのでDB名称と接続ユーザー名、パスワードを任意で入力してください。

 90: DATABASE_DRIVER = 'mysql'
~~~~
102: DB_MYSQL_HOST = 'mysqlhost'
103: DB_MYSQL_DBNAME = 'yenten'
104: DB_MYSQL_USER = '#####'
105: DB_MYSQL_PASS = '#####'
106: DB_MYSQL_PORT = 3306            # Default port for MySQL

プール難易度の設定

マイニングプール側で難易度の自動設定を行う範囲を設定します。 まずは0.1から初めてみましょう。

以下の設定では0.1〜0.5の間でマイナーごとに自動調整する設定です

141: VDIFF_X2_TYPE = False
142: VDIFF_FLOAT = True #小数点単位を有効にします。
145: POOL_TARGET = 0.1 #まずは0.1から調整していきましょう
154: VDIFF_MIN_TARGET = 0.1
155: VDIFF_MAX_TARGET = 0.5

systemdの設定

DBの設定ができていないため、まだ起動はできませんが予め自動起動スクリプトを作成しましょう。

$ vim /etc/systemd/system/yenten@.service
[Unit]
Description=yenten%p Service
After=network.targetauditd.service

[Service]
Type=simple
User=root
ExecStart=/usr/bin/twistd -ny launcher.tac
WorkingDirectory=/usr/local/yenten%p
ExecReload=/bin/kill -HUP ${MAINPID}
#ExecStop=/bin/kill -WINCH ${MAINPID}
Restart=always
RestartSec=10s

[Install]
WantedBy=multi-user.target

$ system enable yenten5000 #自動起動を有効にする

ここまででstratumサーバーの設定は完了です。 次回はMPOSを設定して、フロントを表示し完了となります。

Yenten(YTN)のマイニングプールを作ったので裏側公開!Stratumサーバー構築編(1)

Hatenablogへ移行しました

stratumuサーバー構築編

Yenten(YTN)のマイニングプールを作ったので裏側公開!の続きになります。

円天恋な〜プールはこちら

yenten price

stratumの動作について

stratumサーバーはマイニングする人たちとマイニングプールを接続代行してくれるサービスです。

主な役割は3点 - ウォレットにRPCで問い合わせし、現在の難易度(diffculty)や次点の難易度・全体のハッシュレートなどを取得 - マイナーとマイニングプールの仲介 - 採掘の総当たりを実施

早速構築

GIT: stratum-mining

pythonモジュール/memcachedを使うので事前にインストール

$  sudo apt-get install python-dev
$  sudo apt-get install python-setuptools
$  sudo apt-get install memcached
$  easy_install stratum

stratum-miningをcloneしてビルド実行※yentenのあとの5000は後ほど使うsystemdでのポート設定suffixで使用します。

$ cd /usr/local/
$ git clone https://github.com/ahmedbodi/stratum-mining.git yenten5000
$ cd yenten
$ git submodule init 
$ git submodule update 
$ cd externals/litecoin_scrypt 
$ python setup.py install 
$ cd ../stratum

twistd呼び出し時の設定で一部不備があるので、以下の点を変更

$ vim /usr/local/lib/python2.7/dist-packages/stratum-0.2.13-py2.7.egg/stratum/websocket_transport.py

1行目のautobahn.websocketautobahn.twisted.websocket に変更

yenten module 追加

$ git clone https://github.com/xshsaku/yenten_python_module
$ cd yenten_python_module
$ sudo python setup.py install

yenten パッチ

※yentenのアルゴリズムを追加するためにパッチを当てます。

$ git clone https://github.com/xshsaku/yenten_stratum_patch 
$ yenten_stratum_patch
$ cp yenten_stratum_patch/stratum.patch stratum-mining/
$ cd stratum-mining/
$ patch -p1 < stratum.patch

ここまででstratumの基本的なインストール及びパッチを当てることができました。

続いての記事では実際にconfigの設定を動かし、stratumu+tcpで接続ができるかまでを確認します。

Yenten(YTN)のマイニングプールを作ったので裏側公開!ウォレット構築編

ウォレット構築編

Yenten(YTN)のマイニングプールを作ったので裏側公開!の続きになります。

円天恋な〜プールはこちら

yenten price

マイニングプールに置けるウォレットの動作は

マイニングプールを構築する上で重要な鍵となるウォレットの構築を行います。 ウォレットの動作としては、マイニングに必要な情報「ネットワークブロック」、「難易度」などの情報を保持しており、これらに合わせてstratumというサーバーで採掘(暗号化解読)を始めることができます。

もちろんウォレットと呼ばれていますので、採掘したコインを保有するストレージでもあります。

円天のウォレットの構築

  • 利用環境
  • conoha vps 2GB
  • Ubuntu 16.04 ※ウォレット単体であれば十分なスペックになります。

構築手順

$ mkdir -p /data/yenten/{etc,data,bin}
$ sudo apt-get install build-essential git
$ sudo apt-get install libtool autotools-dev autoconf
$ sudo apt-get install libssl-dev libboost-all-dev pkg-config
$ sudo add-apt-repository ppa:bitcoin/bitcoin
$ sudo apt-get update
$ sudo apt-get install libdb4.8-dev libdb4.8++-dev
$ cd /data
$ git clone https://github.com/conan-equal-newone/yenten
$ cd yenten
$ ./autogen.sh
$ ./configure --enable-upnp-default --without-gui --disable-tests
$ make

上記手順でバイナリの構築が完了です。

必要なバイナリを扱いやすいように /usr/bin/ 直下に配置します。

$ cp src/yentend /usr/bin/
$ cp src/yenten-cli /usr/bin/

configの設定(同期先の設定含む)

ウォレットはこれまでの取引履歴を読み込む必要があります。 初期設定だけですと、接続するサーバーが少なくいつまでも同期が終わらない現象が出てしまいますので以下のように設定してください。

server=1 
rpcallowip=127.0.0.1/24
rpcuser=########
rpcpassword=#######
rpcport=12000
gen=0
addnode=47.29.155.80:57528
addnode=125.69.147.144:61645
addnode=183.253.139.88:9160
addnode=136.243.147.111:41352
addnode=213.178.10.210:9981
addnode=195.181.212.125:53646
addnode=154.49.213.96:9981
addnode=94.23.219.192:42982
addnode=86.25.213.40:9981
addnode=118.241.6.219:9981
addnode=123.50.6.235:61485
addnode=14.9.241.0:34109
addnode=153.226.149.144:9981
addnode=157.7.197.33:62230
addnode=180.13.97.8:9981
addnode=180.59.215.222:50669
addnode=39.111.177.2:9981
addnode=145.130.171.229:62519
addnode=84.25.150.200:55342
addnode=82.102.25.82:53989
addnode=89.155.132.101:52469
addnode=109.172.77.244:52058
addnode=176.104.163.133:35514
addnode=217.114.146.245:57117
addnode=31.173.34.61:56183
addnode=46.0.204.114:25777
addnode=5.44.169.227:50622
addnode=83.171.116.199:40145
addnode=95.189.26.184:54914
addnode=118.172.238.159:50338
addnode=185.46.251.115:62097
addnode=185.5.107.48:49718
addnode=23.243.150.102:52689
addnode=45.126.211.106:35082
addnode=45.47.66.69:9981
addnode=67.171.51.123:54472
addnode=68.69.39.112:56641

最新同期先リストは以下から参照ください https://cryptoservices.net/en/nodes-yenten

設定の項目にある、以下の点を説明します。

  • server=1 #1を設定することでjsonrpc apiが利用できる
  • rpcallowip=127.0.0.1/24 #apiの利用範囲の設定
  • rpcuser=######## #jsonrpcユーザー名
  • rpcpassword=####### #jsonrpcパスワード
  • rpcport=12000 #listenポート(firewallは許可いらない)
  • gen=0 #ここは必ず0と覚えておく(詳細不明です)

wallet起動用の簡易スクリプトの設置

#!/bin/bash
yentend -conf=/data/yenten/etc/yenten.conf -datadir=/data/yenten/data -daemon

bash /data/yenten/bin/yenstart.sh と叩くと、yenten walletを起動することが可能です。

もう一つ、現在どのブロック数まで進んでいるかのチェックスクリプト

#!/bin/sh
yenten-cli -conf=/data/yenten/etc/yenten.conf getinfo

bash /data/yenten/bin/yencli.shを叩いて以下のように返ってくればOKです。

{
    "version" : 1030100,
    "protocolversion" : 70006,
    "walletversion" : 60000,
    "balance" : 0.00000000,
    "blocks" : 62813,
    "timeoffset" : 0,
    "connections" : 8,
    "proxy" : "",
    "difficulty" : 0.10875373,
    "testnet" : false,
    "keypoololdest" : 1516251766,
    "keypoolsize" : 101,
    "paytxfee" : 0.00000000,
    "relayfee" : 0.00001000,
    "errors" : ""
}

以上までウォレットの構築となります。

次回は「Stratumサーバーの構築」を公開いたします。

~~

  1. 仮想通貨ウォレットの構築~~
  2. Stratumサーバーというウォレットの操作、マイニング(アルゴリズム計算)を行うサーバーの構築
  3. MPOS PHPで作られたフロントエンドの構築

Donation

寄付いただくと記事を書くスピードが上がるかもしれませんw

BTC: 3MHwSRfFwUtJJ1ZMDitFfvx1n7FffFvXRu

ETH: 0xEa00632a438dc250136f5d40cf80EcB1fA24E027

ZNY: Zkub2vUJYeURsqnad81dE7R4S5bYWNgnm8

ZEC: t1RKPqQtUHZPMPVfdt34Fd6PKLWcP2kMGL2

仮想通貨技術を使ったシステムの(構築など)相談をされたい方は、プロフィールのメールまでご連絡ください。

その他

銭プールの運営が安定してきました。現在稼働ワーカー数が常時200越え・500KH/sの高い数値が出ており、採掘率も向上しています。 是非いらしてくださいませ

スマホでマイニングする場合は、WEBからのマイニングまたはAndroid用マイニングをご利用ください

WEBマイニング

銭プールApp版

Yenten(YTN)のマイニングプールを作ったので裏側公開! 序章(マイニング編)

Yenten(YTN)のマイニングプールを作ったので裏側公開!

円天恋な〜プール

まず初めにYentenとは

yenten price

円天公式サイト

「円天詐欺」についてはググってください。無関係ですが。

仮想通貨として、突如現れたYenten(YTN) 発行日は2017/10となっています。 ネタでしかない通貨ですが、日本のみならず、海外マイナー(採掘者)にも人気が高く値段も高騰しています。 ※本家サイトもところどころジョークが入っている。

相場は1/19時点で 1YTN=40円台

ホワイトペーパーというほどでもないですが、 本プロジェクトはASICマイニングを撲滅することによってCO2排出を制限しより良い環境を作っていこう という記載があります。

ASIC耐性とは

ASICは一定のアルゴリズムに対し、優れた計算能力をもつ機械です。対応するアルゴリズム専用に作られているためアルゴリズム変更となるとASIC機器はほぼ電気代だけを使うゴミになります。

Yenten(YTN) のアルゴリズムyescryptr16 と呼ばれる仕組みでASICといったマイナー専用機器を排他するように設計されています。※可変的にアルゴリズムが変わる。

またアルゴリズムを計算する際の必要メモリ大きくGPUでは困難な設計となっているため、高度なサーバースペックは要求されません。

そのため、みなさんが利用しているPCもしくはラズパイ、スマートフォンでも採掘は可能です。

※注意:Bitzenyも同じくCPUマイニングとなっている yescrypt ですがアルゴリズム方式は異なります。

マイニングプールを作るには

早速本題に入ります。

マイニングプールを作るには以下の手順を踏む必要があります。

  1. 仮想通貨ウォレットの構築
  2. Stratumサーバーというウォレットの操作、マイニング(アルゴリズム計算)を行うサーバーの構築
  3. MPOS PHPで作られたフロントエンドの構築

の3点から成り立ちます。

マイニングプールを作る前にまずマイニング(採掘)をしてみよう

円天恋な〜プール

こちらに現在手数料かからないプールを作っていますので、登録してマイニングを実施してみましょう。

Git

Windowsの方は cpuminer-opt-3.7.9-windows.zipLinux/Macソースコードをダウンロードしコンパイルします。

$ wget 'https://github.com/JayDDee/cpuminer-opt/archive/v3.7.10.tar.gz'
$ tar xzf v3.7.10.tar.gz
$ cd cpuminer-opt-3.7.10
$ chmod 700 autogen.sh
$ touch  ChangeLog
$ ./autogen.sh
$ ./configure CFLAGS="-O3 -march=native -funroll-loops -fomit-frame-pointer"
$ make

これでマイニングに必要なバイナリが出来るはずです。 実際に動かす際はカレントディレクトリで以下のようにコマンドを実行します。

$ ./minerd -a yescryptr16 -o stratum+tcp://ytn.coiner.site:12100 -u `User`.`worker` -p `password`

実行すると以下のようにログが出てきます。 yay!!!が出てくればOK!

[2018-01-19 21:30:27] accepted: 1307/1307 (100.00%), 0.10 khash/s (yay!!!)
[2018-01-19 21:30:41] thread 0: 1432 hashes, 0.11 khash/s
[2018-01-19 21:30:41] accepted: 1308/1308 (100.00%), 0.11 khash/s (yay!!!)
[2018-01-19 21:30:41] thread 0: 15 hashes, 0.14 khash/s
[2018-01-19 21:30:41] accepted: 1309/1309 (100.00%), 0.14 khash/s (yay!!!)

ずっと稼働させたい時には、nohupをつけて実行するといいでしょう。他にもsystemdに登録するなど

$ echo "./minerd -a yescryptr16 -o stratum+tcp://ytn.coiner.site:12100 -u `User`.`worker` -p `password`" > mining.sh
$ nohup bash mining.sh &

ログをみたい時はnohup.outをtailするなりしてください。

次回はマイニングプールを作るには?に記載した以下3点を掲載していきますー。 余力があれば。

TODO

  1. 仮想通貨ウォレットの構築
  2. Stratumサーバーというウォレットの操作、マイニング(アルゴリズム計算)を行うサーバーの構築
  3. MPOS PHPで作られたフロントエンドの構築

寄付いただくと記事を書くスピードが上がるかもしれませんw

BTC: 3MHwSRfFwUtJJ1ZMDitFfvx1n7FffFvXRu ETH: 0xEa00632a438dc250136f5d40cf80EcB1fA24E027 ZNY: Zkub2vUJYeURsqnad81dE7R4S5bYWNgnm8 ZEC: t1RKPqQtUHZPMPVfdt34Fd6PKLWcP2kMGL2

仮想通貨技術を使ったシステムの(構築など)相談をされたい方は、プロフィールのメールまでご連絡ください。

マイニングプールの自動切り替えをした

TL;DR

マイニングプールが落ちた時に自動的に切り替わるといいなぁ haproxyを使って各マイニングプールを自動で切り替えよう

#!/bin/bash

minerd -a yescrypt -o stratum+tcp://mproxy.coiner.site:11000 -u User.worker -p password

振り分け先

名称 stratum接続先
銭プール(ZNY) stratum+tcp://zny.coiner.site:19666
bunnymining stratum+tcp://mining.bunnymining.work:19332

※ポートは変わっても大丈夫。ユーザー名とワーカー名・パスワードは同一!

手順書 haproxyをインスコ

環境:Ubuntu16.04TLS

$ sudo apt-get install haproxy
$ sudo mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.org
$ vim /etc/haproxy/haproxy.cfg

config書くよ

global
        maxconn 32768 # concurrent connections limit
        user nobody 
        spread-checks 5

defaults
        timeout connect 50000
        #timeout client 5000ms
        timeout server 50000

frontend http-in
       bind *:80
       mode http
       stats enable
       stats uri /admin?stats   

frontend stratum-in
        # proxy stratum
        bind *:11000
        default_backend stratums
    
backend stratums
       balance source
       hash-type consistent
       server stratum1 zny.coiner.site:19666 check inter 20s rise 5 fall 2
       server stratum2 mining.bunnymining.work:19332 check inter 20s rise 5 fall 2

※check inter 20sやtimeoutの部分はstratum (yay!!!) の出る秒数以上に設定!

接続テストする(Failoverテスト)

./minerd -a yescrypt -o stratum+tcp://mproxy.coiner.site:11000 -u User.worker -p password
$ nc -U /tmp/haproxy-cli.sock
prompt
> set weight stratums/stratum1 0 #接続先が変わるか確認
> set weight stratums/stratum1 1 #元に戻す

作った理由

しばしば自分のサーバーが落ちてしまうのでマイニングのダウンタイムを減らすためにLB導入した。

悩んだ点

初回はroundrobinで設定をしていましたが、server1に接続、server2に接続と繰り返すとリクエスト<=>レスポンスの宛先がおかしくなり正常稼働せず。 出来る限り、スティッキーセッションのように接続されるようにしました。

参考

HAProxy Configuration Manual

間宮さんのさくっと仮想通貨

暗号通貨BitZenyまとめWiki bunnymining

追記

マイニングプール、各種コインに対応したよ!

名称 stratum接続先
円天恋なープール stratum+tcp://ytn.coiner.site:19000
Riecoin マイニングプール stratum+tcp://ric.coiner.site:12100
Zcashほしいなー(ZNY) stratum+tcp://zec.coiner.site:11100
ドージ鯉なープール stratum+tcp://doge.coiner.site:19000

Bitzenyが人気なので、プール作ってマイニングしてみた

久々の記事です。

ここ最近、新しい技術などの勉強をしていなかったのですが。 以下の記事を見て久々に徹夜しました><

’’’引用

イケダハヤトさんが気づいてしまった。これは多くの人がBitZenyに興味を持つことになるでしょう。 Mac で 大注目仮想通貨 『BitZeny』 をマイニングする簡単5ステップ

これはやって見るしかない。 現在のZNYの円換算は40円代、CPUで(GPUは不可)マイニングが出来ることが特徴で、コミュニティ問わず人気です。

とりあえず、現在ベータ版で稼働しているのでURLをはっつけます。

銭プール

※diffは0.1となっており、弱いスペックPCでも参加可能です。 ※注意:現在検証中なので不具合が起きる可能性がございます。検証に付き合って頂けると幸いです^ ^

マイニングプールの構成は以下で構築しました

  • ubuntu 16.04
  • zenyd (ウォレット)
  • stratum、stratum-mining
  • LAMP/Memcache

CPUマイニングの方法

ウォレット導入編

オンラインのウォレットもありますが、アプリケーション用ウォレットの使い方を説明します。

BitZeny

f:id:s-shota:20180129162850p:plain

上記のページにアクセスし、お使いのOSのバージョンを確認しインストールします。 ※SSE4.1はintelの対応のようで、もし別のCPUを利用していましたら、オンラインウォレットに登録してくださいませm( )m

ウォレットインストール

無事ダウンロードとウォレットをインストールしたら、下記の画面が出てくると思います。

f:id:s-shota:20180129162930p:plain

ウォレットをインストール直後、BitZeny Coreが初めて取引データをインポートします。

下記の画面でも記しているところですが、初期設定では取引データを取得するノードの設定がされていないため、同期されません。以下の内容をbitzenyウォレットのコンフィグ設定をする必要があります。

addnode=113.153.209.203
addnode=118.241.118.74
addnode=119.245.16.219
addnode=157.7.222.158
addnode=203.178.132.125
addnode=220.217.202.90
addnode=27.120.112.59
addnode=27.96.51.15
addnode=58.191.220.12
  • 移動する位置は(C:\Users\ユーザー名\AppData\Roaming\BitZeny)の中にbitzeny.confを放り込んでbitzenyを再起動!

ネットワーク環境にもよりますが、1-2日寝かす必要があります。。

BitZenyのアドレスを取得

  1. BitZenyCoreの「受信」から「Request payment」を押下
  2. Zから始まるアドレスをコピー

※この手順はウォレット同期完了する前でも可能です

f:id:s-shota:20180129163056p:plain

マイニングプールに参加登録しよう

  1. 銭プール にアクセスし、左側メニューの「その他」から「サインアップ」をクリック
  2. 下記の図にある通り、「ユーザー名、コインアドレス(先ほどコピーしたもの)、パスワード、メールアドレス」を入力。 ※普段見慣れない「PIN」というものがありますが、2段階認証がわりのパスコードのようなものです。

f:id:s-shota:20180129163146p:plain

※登録した後、メールが届きます(場合によっては迷惑メールフォルダかも)その中のリンクをクリックして登録が完了です。

マイニングしてみよう!

マイニングする際にはcpuminerと言ったCUIツールが必要になります。

MacでもWindowsでもLinuxでも同じようにマイニングしたいと思い、簡単なDockerfileを作成しました。

FROM ubuntu:16.04
  
RUN apt-get update -y \
 && apt-get install -y git automake build-essential libcurl4-openssl-dev

RUN git clone https://github.com/bitzeny/cpuminer.git

WORKDIR cpuminer

RUN ./autogen.sh \
 && ./configure CFLAGS="-O3 -march=native -funroll-loops -fomit-frame-pointer" \
 && make \
 && make install

※Docker for windowsインストールされていない方は下記から Docker for windows

デスクトップのminerというフォルダにDockerfileというものを置いた前提で進めます。 コマンドプロンプトから、以下コマンドを叩いてください

cd Desktop/docker
Desktop¥docker> docker build -t minerd .
Desktop¥docker> docker run --rm -it minerd /bin/bash
root@a2c5f8ed0f75:/cpuminer#

上記rootの画面に入ればあとはマイニングプールの設定値を入れ、実行します。

root@a2c5f8ed0f75:/cpuminer# ./minerd -a yescrypt -o \
stratum+tcp://zny.coiner.site:19666 -u User.Worker -p Password

Userの部分は、「銭プール」ログイン時のユーザー名を入れてください Workerの部分は「銭プール」の「マイアカウント->私のワーカー」から作成したワーカー名を入れてください Passwordの部分は上記のワーカーのパスワードを入れてください。

参考までに1日の採掘量ですが、60ZNY入りました><

f:id:s-shota:20180129163252p:plain

まだ検証過程のプール環境ですが、是非ともお試しください〜

参考

Mac で 大注目仮想通貨 『BitZeny』 をマイニングする簡単5ステップ

BitZeny(ZNY)マイニング開始から1日!初日の採掘数を公開します

暗号通貨BitZenyまとめWiki

AppiumとSTFを使ったAndroid実機テスト

この記事はSelenium/Appium Advent Calendar 2016の17日目の記事です。

はじめに

WEBアプリのエンジニアをしている @xshsaku です。 RonRやReactjsなどWEBアプリケーション側のエンジニアですが、個人的にアプリ開発にも興味を持ったので、STFを利用してデバッグが出来ないか探してみました。

利用環境

Appiumについて

AppiumはiOSAndroid実機をUSBで接続して、ブラウザテスト・アプリテストが実行できる優れものです。

STFについて

STFはリモートでもAndroid実機をブラウザ上で操作・端末管理出来るソリューションです。

早速、インストール

STFのインストール

$ git clone https://github.com/openstf/stf.git
$ cd stf
$ brew install rethinkdb graphicsmagick zeromq protobuf yasm pkg-config
$ npm install -g stf #globalでインストール
$ npm install
$ npm link

STFの起動

$ rethinkdb &
##rethinkdbが起動するまで待つ
$ stf local --public-ip 192.168.0.** #公開IPを設定
$ open http://192.168.0.**:7100/

この画面が出ていればSTFの起動成功

f:id:s-shota:20180129162150p:plain

Appiumと接続できるようにアクセストークンを取得

f:id:s-shota:20180129162340p:plain

実機を一台繋いでおきましょう

f:id:s-shota:20180129162420p:plain

テスト実施

stf-appiumのサンプルコードをダウンロード

$ git clone https://github.com/openstf/stf-appium-example 
$ cd stf-appium-example
$ npm install
$ bundle install --path=bundler/vendor

STFのアクセストークンとURLを記述

  • script/stf_connect.js
  • script/stf_disconnect.js

上記ファイルのSWAGGER_URL/AUTH_TOKENを書き換え

テスト実行

# DEVICE_SERIALにはSTF上で表示されているシリアルをセット
$ DEVICE_SERIAL=00a5edaf****** ./scripts/run_integration_test.sh 
connected to 192.168.0.*:7401
Running all tests
/Users/**/.rbenv/versions/2.3.1/bin/ruby -I/Users/**/Desktop/development/stf-appium-example/bundler/vendor/ruby/2.3.0/gems/rspec-core-3.4.1/lib:/Users/**/Desktop/development/stf-appium-example/bundler/vendor/ruby/2.3.0/gems/rspec-support-3.4.1/lib /Users/**/Desktop/development/stf-appium-example/bundler/vendor/ruby/2.3.0/gems/rspec-core-3.4.1/exe/rspec --pattern spec/\*\*\{,/\*/\*\*\}/\*_spec.rb

Calculator
  addition
    add two numbers

Calculator
  division
    divide two numbers

Calculator
  addition
    multiply two numbers

Calculator
  subtraction
    subtract two numbers (FAILED - 1)

Failures:

  1) Calculator subtraction subtract two numbers
     Failure/Error: expect(result_text).to eq(expected_result)
     
       expected: "15.00 - 5.00 = 10.00"
            got: "15.00 - 5.00 = 20.00"
     
       (compared using ==)
     # ./spec/features/subtraction_spec.rb:29:in `block (3 levels) in <top (required)>'

Finished in 1 minute 10.37 seconds (files took 0.60632 seconds to load)
4 examples, 1 failure

結果をhtmlで確認

$ open result.html

f:id:s-shota:20180129162456p:plain

まとめ

Androidバイスを複数台同時にやリモートで接続検証したい時のSTFとUSB接続での実機テストを行いたい時のAppium。

CIに組み込むと更にデバッグ作業が捗るかもしれません。