3
1

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 1 year has passed since last update.

JenkinsとAppiumを用いてpipeline実行する

Last updated at Posted at 2022-11-25

はじめに

docker上のJenkinsからpytestを実行し、appiumサーバを用いてモバイルテストのpipeline実行を行う。
Jenkinsの起動はyamlを使用し、Appiumサーバはpythonコード上から実行する。
また、Jenkinsfileの作成例と、pythonコード上からAppiumを起動する場合の使用例を記載する。

システム概要

システム構成図.drawio.png

実行環境

  • 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の作成方法は省略する。

      • ただし、pipelineの定義は"Pipeline script from SCM"として、テスト対象のあるリポジトリ、ブランチの指定を行う。
        pipelineの定義.png

      • "Script Path"の欄にGitにおいたJenkinsfileまでのpathを記入する。
        script_pathの定義.png

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
      

list_of_devices.png
List of devicesの値が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,  # 書き換える
            },
        )

参考

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?