
聴衆
QAエンジニア、モバイルアプリケーションのテスター、自動化。
問題
Android用アプリケーションのテスト中(だけでなく、このプラットフォームのみに焦点を合わせます)、テストした製品の多くのアセンブリをインストールする必要があります。 このプロセスには時間と労力がかかり、バグの発見に費やす方が効率的です。
この記事では、既存のソリューションを調べ、Pythonで独自のソリューションを作成して比較します。
ターンキーソリューション
おそらく、現時点でこの問題に対する最も一般的なソリューションは、ベータ版インストーラーを含むCrashlyticsサービスによって提供されています。
Crashlytics Betaを使用した典型的なアプリケーションのインストールプロセスを考えてみましょう。
- ベータアイコンが見つかりました(1)→タップします(2)=アプリケーションが起動します。
- 目的のプロジェクトを見つけます(3)→タップ(4)=アセンブリのリストを含む画面が開きます。
- 目的のアセンブリを見つけます(5)→「ダウンロード」をタップします(6)=インストールファイルがデバイスにダウンロードされます。
- アプリケーションのインストールを求める画面が表示されます。→「インストール」をタップします(7)=インストール画面が表示されます。
- インストールされているアプリケーションを見つけます(8)→タップ(9)=アプリケーションを開始します; テストの準備ができました。
したがって、Crashlytics Betaを使用して1つのアプリケーションビルドをインストールして実行するには、合計で少なくとも9つのアクションを実行する必要があります。 これらの指標に焦点を当て、同様の問題を解決するために必要なアクションが少ないインストーラーの作成を試みます。
カスタムソリューション
Pythonをプログラミング言語として選択します。Pythonがタスクに適しており、QAエンジニアの間でも非常に人気があるためです。
Androidと対話するには、標準のAndroid SDKの一部であるadbを使用します。
ファイルをダウンロードするには-Wget。
この場合、アセンブリはTeamCityで実行されます。
次に、コードの記述に移りましょう。
まず、 サブプロセスモジュールをプロジェクトにインポートします。wgetおよびadbコマンドを実行する必要があります。
import subprocess
Wgetに必要な設定を追加します。
settings = {'user': '—user=__teamcity', 'password': '—password=__teamcity', 'way': '____'}
ビルド番号でアプリケーションをインストールするので、このパラメーターを要求するようスクリプトに教えます。
number = input(' № : ')
テストと戦闘の2つのアセンブリを一度にインストールする必要があるとしましょう。 TeamCityからダウンロードします。 これを行うには、サービスページを開き、アーティファクトでアセンブリを見つけることにより、ファイルへのフルパスを見つけます。 事前アセンブリURLは次のようになります。
https://teamcity.mysite.com/repository/app/_/_/myapp-_-_.apk
アドレスには、ビルド番号の代わりにidが表示されます(例:/ 1234:id /)。 ここでは、IDではなくアセンブリ番号を示します。
特定のアセンブリをダウンロードするための関数を作成します。
def download(type_b): url = 'http://teamcity.mysite.com/repository/app/{0}/{1}/myapp-{0}-{1}.apk'.format(number, type_b)
アプリケーションをインストールして実行する関数を作成します。 まず、以前にインストールしたアセンブリを削除します。 少なくとも1つのアプリケーションがデバイス上にない場合、スクリプトがエラーで終了することを忘れないでください。 これを避けるため、エラーは無視します。
この架空の例では、2つのパッケージがあります。
- com.myapp.prod
- com.myapp.test
開始アクティビティ:
- com.myapp.prod/com.myapp.StartActivity
- com.myapp.test / com.myapp.StartActivity
パッケージ名とアクティビティ名は異なります。
def install(type_b): try:
必要なすべての機能が記述されています。 これで適用できます。
さらに、指定したアセンブリがTeamCityにない場合のハンドラーを追加します。
while True: try:
スクリプトの準備ができました。 たとえば、installer.pyという名前で保存します
エイリアスを追加します、例: alias inst = 'python〜/ scripts / installer.py'
確認する
したがって、Crashlytics Betaを使用して1つのアセンブリをインストールするには、9つのアクションを実行する必要があります。 比較のために、スクリプトでこのインジケーターを測定します。
- inst(1)コマンドでスクリプトを実行します=ビルド番号を設定するためのプロンプトが表示されます。
- アセンブリ番号を設定(2)=古いアセンブリは削除されます。 新しいものをダウンロード、インストール、起動します。 アプリケーションをテストする準備ができました。
結果
ベータ(1ビルド)-9アクション(古いビルドの削除を除く)。
スクリプト(必要な数のアセンブリ)-2アクション。
カスタムソリューションの追加のボーナスは、スケーリング(複数の製品のインストールを多数のデバイスに追加するなど)であり、自動テストのタスクにも簡単に適応できることです。
ソース