はじめに
docker上のJenkinsからpytestを実行し、appiumサーバを用いてモバイルテストのpipeline実行を行う。
Jenkinsの起動はyamlを使用し、Appiumサーバはpythonコード上から実行する。
また、Jenkinsfileの作成例と、pythonコード上からAppiumを起動する場合の使用例を記載する。
システム概要
実行環境
- docker : 20.10.17
- jenkins : 2.373
- appium : 2.3.0
- python : 3.10.4
実行方法
1.Jenkinsの起動とjobの作成
-
dockerデーモンの起動
$ sudo service docker start
-
jenkinsの起動
$ cd "docker-compose.yamlまでのパス" $ docker-compose up --build
*
docker-compose up
時に--build
オプションを付けないと最新のjenkinsを起動できないため注意。 -
jobの作成と設定
-
pipeline jobの作成方法についてはこちらのサイト等がわかりやすいため、この記事では詳しいpipeline jobの作成方法は省略する。
-
2.ノードの起動
- PCをjenkinsのノードとして起動する。
$ curl -sO http://localhost:[指定したポート番号]/jnlpJars/agent.jar $ java -jar agent.jar -jnlpUrl http://localhost:[指定したポート番号]/computer/[ノード名]/jenkins-agent.jnlp -workDir [ワークディレクトリまでのパス]
3.エミュレータの起動
-
Android Studioを用いて複数端末を起動する。
-
コマンドラインから各端末のUDIDを取得しておく。
- git bashなどのコマンドラインから以下のコマンドを実行し、UDIDを控えておく。
$ adb devices
- git bashなどのコマンドラインから以下のコマンドを実行し、UDIDを控えておく。
4.実行
- Jenkinsから”ビルドの実行”を実行。
その他
Jenkinsfileの作成例
pipeline {
agent {
node {
label 'mypc-label' // jenkins上でPCにつけたノードラベル
}
}
stages {
stage('test') {
parallel{
stage("Android-Pixel-3"){
steps {
sh '''
export PORT=4723 // Android端末(Pixel3)に紐づくappiumサーバのポート番号
export UDID=emulator-hoge // Android端末(Pixel3)のUDID
pytest test_android_hogefuga.py
'''
}
}
stage("Android-Pixel-4"){
steps {
sh '''
export PORT=4724 // Android端末(Pixel4)に紐づくappiumサーバのポート番号
export UDID=emulator-fuga // Android端末(Pixel4)のUDID
pytest test_android_hogefuga.py
'''
}
}
}
}
}
}
pythonコードからappiumサーバを起動する
import os
@classmethod
def setup_class(cls):
apk_path = r"テスト対象までの絶対パス" # 相対パスでは動かない
cls.appium_server = AppiumService()
cls.appium_server.start(args=['-a','localhost', '-p', str(os.environ['PORT'])])
cls.driver = webdriver.Remote(
command_executor="http://localhost:" + str(os.environ['PORT']) + "/wd/hub",
desired_capabilities={
"deviceName": "Android_test",
"platformName": "Android",
"udid": os.environ['UDID'], # 端末の識別
"app": apk_path, # 書き換える
},
)