SlideShare a Scribd company logo
1 of 64
Download to read offline
Androidテスティング実践
②システムテスト編
本スライドは、NTTソフトウェア社内技術者育成研修(ソフト道場研修)テキストです。
【著作権・免責事項】
 本セミナーコースの内容、本資料のすべての著作権は、NTTソフトウェア株式会社に帰属します。
 無断での本資料の複写、複製、再利用、転載、転用を禁じます。
 本資料と演習等で利用するすべての教材は、NTTソフトウェア株式会社からの保証なしに提供されます。
 本書に記載されている会社名および製品名は、一般に各社の商標または登録商標です。
56
※ 演習問題に関するスライドは、一部を除き、本ファイルには含まれておりません。
また、演習に必要なソースコードも含まれておりません。ご了承ください。
Copyright © 2016, NTT Software Corporation.
2. システムテストの自動化
 この研修で紹介するツールの使い分け
 Robotium (座学+演習)
 Espresso (座学+演習)
 UI Automator (座学+演習)
 Appium (座学)
57Copyright © 2016, NTT Software Corporation.
この研修で紹介するツールの使い分け
画面単位のホワイトボックステストがしたい
Espresso
1アプリ内複数画面にまたがるブラックボックス
テストがしたい
Robotium・UI Automator・Appium
複数アプリにまたがる(ブラックボックス)
テストがしたい
UI Automator: 1テストケース内でEspressoと併用OK
Appium: Selenium WebDriver経験者向け。
iOSもテストOK
58Copyright © 2016, NTT Software Corporation.
59
Robotium
Copyright © 2016, NTT Software Corporation.
【Robotium】概要
UIテストを容易に自動化できるフレームワーク
ブラックボックステスト向け
Android 2.2以上対応
Instrumented Testとして実装
URL: https://github.com/RobotiumTech/robotium
Apache License 2.0
Copyright © 2016, NTT Software Corporation. 60
https://github.com/RobotiumTech/robotium よりロゴを引用
【Robotium】おすすめポイント
ネイティブアプリ・WebView両方ともテストできる
WebView対応はAndroid 4.0以降
テストシナリオの書き方が直感的で分かりやすい
画面のレイアウトヒエラルキーを気にせず、見た目だけで書ける。
「OKと表示されたButtonを押せ」
「画面上から6番目のEditTextに"Hello"と入力せよ」
etc.
複数画面(Activity)にまたがるテストができる
61Copyright © 2016, NTT Software Corporation.
【Robotium】注意点
Google公式ではない
Android最新バージョンへの追随が遅いことも
Androidの非公開APIを利用して実装されている
機種によっては動作しない可能性あり
うまく動かない場合はFAQ参照
https://goo.gl/nbWkTA
複数アプリにまたがったテストができない
Copyright © 2016, NTT Software Corporation. 62
【Robotium】環境設定
ATSLの設定に加えて、app/build.gradleに以下を追加
63
dependencies {
// ATSLの設定は省略
androidTestCompile ¥
'com.jayway.android.robotium:robotium-solo:5.5.4'
}
Copyright © 2016, NTT Software Corporation.
【Robotium】テストコードの書き方: setup
64
@RunWith(AndroidJUnit4.class)
public class MyRobotiumTest {
// ActivityTestRuleの宣言は省略
@Rule
public ActivityTestRule<...> activityTestRule = ...;
private Solo solo;
@Before
public void setUp() throws Exception {
solo = new Solo(InstrumentationRegistry.
getInstrumentation(),
activityTestRule.getActivity());
}
Robotiumの主要クラスSoloをインスタンス化する
Copyright © 2016, NTT Software Corporation.
【Robotium】テストコードの書き方: tear down
65
...
@After
public void tearDown() throws Exception {
solo.finishOpenedActivities();
}
}
Solo#finishOpenedActivities()を呼び出す
Copyright © 2016, NTT Software Corporation.
【Robotium】テスト用APIの紹介: 概要
Javadoc
http://recorder.robotium.com/javadoc/
Soloクラス
全てのテスト用APIは、Soloクラスのメソッドに集約
Copyright © 2016, NTT Software Corporation. 66
【Robotium】テスト用APIの紹介: 文字列指定操作
UI部品の表示文字列(正規表現)を指定してクリック
67
solo.clickOnText("Dialog");
solo.clickOnButton("Text Entry dialog");
「.」「+」「*」などの
メタキャラクタはエスケープが必要
Copyright © 2016, NTT Software Corporation.
【Robotium】テスト用APIの紹介: 位置指定操作
UI部品の番号を指定してクリック
68
⑦
②
③
④
⑤
⑥
①
solo.clickInList(4);
リストの4行目(1始まり)をクリック
⑦
②
③
④
⑤
⑥
①
⓪
index 7(0始まり)のボタンをクリック
solo.clickOnButton(7);
Copyright © 2016, NTT Software Corporation.
【Robotium】テスト用APIの紹介: 文字列取得・入力
表示文字列の取得・テキスト入力
69
メソッド(Soloクラス) 概要
searchText(String) 指定された正規表現にマッチする文字列を表示し
ているUI部品を探す。見付かればtrueを返す。
enterText(int, String) 指定されたindex(0始まり)に存在するEditText
に対して、指定された文字列を入力する。
getText(String) 指定された正規表現にマッチする文字列を表示し
ているTextViewを返す。
getEditText(int) 指定されたindex(0始まり)に存在するEditText
を返す。
画面のどこにでも良いから文字列が表示されているか確認する場合は
searchText()が便利
特定のViewに表示されている文字列を確認する場合は、
getText()・getEditText()でTextView・EditTextを取得してから
TextView#getText()・EditText#getText()を使う
Copyright © 2016, NTT Software Corporation.
【Robotium】テスト用APIの紹介: そのほか
そのほか
70
メソッド(Soloクラス) 概要
assertCurrentActivity(St
ring, Class)
現在の画面が指定されたActivity(クラス)
であることをassertする。
takeScreenshot() 画面のスクリーンショットを撮る。
/sdcard/Robotium-Screenshots/に保存。
clickOnWebElement(By) 指定された検索条件(Byオブジェクト)に合致した
WebView内HTML部品をクリックする。
typeTextInWebElement(By,
String)
指定された検索条件(Byオブジェクト)に合致した
WebView内HTML部品(フォーム)に対して、
指定された文字列を入力する。
※スクリーンショットを撮る場合は、テスト対象アプリ側に、以下のパー
ミッション宣言が必要
<uses-permission android:name=
"android.permission.WRITE_EXTERNAL_STORAGE" />
Copyright © 2016, NTT Software Corporation.
【Robotium】演習2-2
Robotiumを使って、以下のテストシナリオを実現してくだ
さい。
1つめのEditTextに「5」を入力する
2つめのEditTextに「8」に入力する
「この画面に表示」ボタンをクリックする
画面のどこかに「13」と表示されることを確認する
テストクラス名: RobotiumTest
参考スライド
①基礎編【演習1-1】ATSLのための設定
【Robotium】環境設定
【Robotium】テストコードの書き方
【Robotium】テスト用APIの紹介: 表示文字列の取得・テキスト入力
71Copyright © 2016, NTT Software Corporation.
72
Espresso
Copyright © 2016, NTT Software Corporation.
【Espresso】概要
Google謹製の、ホワイトボックステスト向けUI
テストフレームワーク
コードの簡潔さ、信頼性の高さに定評有り
APIレベル8, 10, 15-19, 21に対応
概ねAndroid 2.2以上(3.x除く)
Instrumented Testとして実装
URL: https://goo.gl/x8eP5C
https://goo.gl/lmrlJI
Apache License 2.0
Copyright © 2016, NTT Software Corporation. 73
https://google.github.io/android-testing-support-library/docs/espresso/cheatsheet/index.html よりロゴを引用
【Espresso】おすすめポイント
Google謹製なので最新バージョンへの素早い追随が期待
できる
Google社内で実際に使われている
テスト結果もRobotiumより安定
ネイティブアプリ・WebView両方ともテストできる
テストシナリオの書き方がシンプル
比較的実行速度が速い
74Copyright © 2016, NTT Software Corporation.
【Espresso】注意点
複数Activityにまたがったテストができない
複数アプリにまたがったテストもできない
APIが独特なので学習コストが高い
75Copyright © 2016, NTT Software Corporation.
【Espresso】環境設定
ATSLの設定に加えて、app/build.gradleに以下を追加
76
dependencies {
// ATSLの設定は省略
androidTestCompile ¥
'com.android.support.test.espresso:espresso-core:2.2.2'
}
モジュール名:バージョン 概要
espresso-intents:2.2.2 別Activity起動時に発行するIntentを確認できる
起動元Intentのモックを作成できる
espresso-web:2.2.2 WebView内部をテストできる
以下の追加モジュールもあり(詳細は省略)
Copyright © 2016, NTT Software Corporation.
【Espresso】テストコードの書き方: setup/tear down
77
@RunWith(AndroidJUnit4.class)
public class MyEspressoTest {
@Rule
public ActivityTestRule<...> activityTestRule = ...;
...
}
ATSLのための準備だけでOK
Copyright © 2016, NTT Software Corporation.
【Espresso】テスト用APIの紹介: 概要
78
概要
ViewMatcher Viewの検索条件を指定する。ViewMatchersクラス参照。
withId(), withClassName(), withText(), ...
※hamcrestのallOf(), not(), is(),なども使える
ViewAction Viewに対する操作を指定する。ViewActionsクラス参照。
clearText(), typeText(), click(), ...
ViewAssertion 確認条件を指定する。ViewAssertionsクラス参照。
doesNotExist(), matches(ViewMatcher), ...
onView(ViewMatcher)
.perform(ViewAction)
.check(ViewAssertion);
以下の基本形を理解する
※perform(), check()は省略可  「ViewMatcher」にあてはまる
Viewに対して
 「ViewAction」を実行した結果
 そのViewが「ViewAssertion」
を満たすことを確認する
Copyright © 2016, NTT Software Corporation.
【Espresso】テスト用APIの紹介: 概要
Javadoc
http://goo.gl/UwGTdf
(android.support.test.espresso.*パッケージ)
Espresso Cheat Sheet
https://goo.gl/6xcuqd
以下の3クラスが重要
android.support.test.espresso.matcher.ViewMatchers
android.support.test.espresso.action.ViewActions
android.support.test.espresso.assertion.ViewAssertions
Copyright © 2016, NTT Software Corporation. 79
【Espresso】テスト用APIの紹介: ViewMatchers
検索条件を表すメソッドが定義されている
80
メソッド 概要
withId(int) 指定されたIDを持つView
withText(String) 指定されたテキストが表示されている
View
withContentDescription(String) 指定されたcontentDescription属性を
持ったView
withClassName(Matcher<String>) 指定されたクラス名のView
※引数には「is(クラス名)」を指定する
hamcrestのmatcherを使うこともある(CoreMatchers)
allOf(条件1, 条件2, ...)
anyOf(条件1, 条件2, ...)
is()
not()
Copyright © 2016, NTT Software Corporation.
【Espresso】テスト用APIの紹介: ViewActions
onView()で特定したViewに対する操作を表すメソッド
が定義されている
81
メソッド 概要
click() クリックする
pressBack() 戻るキーを押す(どのViewに対して実行しても同じ)
typeText(String) 指定された文字列を入力する
scrollTo() onView()で指定されたViewまでスクロールする
Copyright © 2016, NTT Software Corporation.
【Espresso】テスト用APIの紹介: ViewAssertions
onView()で特定したViewに対してチェックするメソッ
ドが定義されている
82
メソッド 概要
doesNotExist() そのViewが存在しないことを確認する
matches(Matcher) そのViewが、引数で指定した条件を満たしていることを確
認する
maches()の引数には、任意のViewMatchersが指定できる
テキスト"text"が表示されているか確認する
matches(withText("text"))
Viewが画面に表示されていることを確認する
matches(isDisplayed())
Copyright © 2016, NTT Software Corporation.
【Espresso】実例紹介(1/2)
TextView (IDはR.id.textview)に"Hello"と表示されてい
ることを確認する。
83
onView(withId(R.id.textview))
.check(matches(withText("Hello")));
"Press Me"と書かれているボタンを押す。
onView(withText("Press Me")).perform(click());
"Hello"と書かれているボタンを押す。
ただし、"Hello"と書かれているTextViewも存在。
onView(allOf(withClassName(is(Button.class.getName())),
withText("Hello")))
.perform(click());
Copyright © 2016, NTT Software Corporation.
【Espresso】実例紹介(2/2)
EditText (IDはR.id.input)に"Hello"と入力してからソフ
トウェアキーボードを閉じる。
84
onView(withId(R.id.input))
.perform(typeText("Hello"), closeSoftKeyboard());
画面外にあるかも知れない"Press Me"と書かれているボ
タンを押す。
onView(withText("Press Me"))
.perform(scrollTo(), click());
※perform()の引数に複数ViewActionを並べると、左から順番に実行する。
Copyright © 2016, NTT Software Corporation.
【Espresso】そのほかの応用的な機能
AdapterView (ListViewなど)の中身を検索したいとき
onView()の代わりにonData()を使う
https://goo.gl/UFhj8h
WebViewの中身を検索したいとき
Espresso-Webを使う。APIも異なる。
https://goo.gl/X3hu4K
そのほかいろいろ
「Espresso Advanced Samples」
https://goo.gl/RN3vOc
Copyright © 2016, NTT Software Corporation. 85
【Espresso】演習2-3
Espressoを使って、以下のテストシナリオを
実現してください。
1つめのEditTextに「5」を入力する
2つめのEditTextに「8」に入力する
「この画面に表示」ボタンをクリックする
「結果:」の右にあるTextViewに「13」と表示されることを確認する
テストクラス名: EspressoTest
参考スライド
①基礎編【演習1-1】ATSLのための設定
【Espresso】環境設定
【Espresso】テストコードの書き方
【Espresso】テスト用APIの紹介
86Copyright © 2016, NTT Software Corporation.
87
UI Automator
Copyright © 2016, NTT Software Corporation.
【UI Automator】概要
Google謹製の、ブラックボックステスト向けUI
テストフレームワーク
別アプリにまたがったテストができる
他人が作ったアプリやプリインアプリでもOK
Android 4.3以上に対応
安定性の面でAndroid 5.0以上が無難
Instrumented Testとして実装
Espressoと混ぜて使うのもOK
URL: https://goo.gl/6ZFz89
Apache License 2.0
Copyright © 2016, NTT Software Corporation. 88
【UI Automator】おすすめポイント
3rd-party製アプリの試験ができる
apkが無くても試験可能
Espressoと共用できる
89Copyright © 2016, NTT Software Corporation.
【UI Automator】注意点
できることが限定されている
UI部品の操作と状態確認、表示文字列確認に限定
Instrumentation対象のアプリ以外が持つ
インスタンス(ActivityやViewなど)へのアクセス不可
明示的に同期を取る必要がある
EditTextに入力した直後だと、
まだ入力された文字列が取得できないことも。
同じ目的のAPIが複数ある
(動作仕様や、できることが微妙に違う)
UiObject: スクロールサポート充実。同期系APIが貧弱。
UiObject2: スクロールサポートなし。柔軟な同期系API。
90Copyright © 2016, NTT Software Corporation.
【UI Automator】環境設定
ATSLの設定に加えて、app/build.gradleに以下を追加
91
dependencies {
// ATSLの設定は省略
androidTestCompile ¥
'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'
}
Copyright © 2016, NTT Software Corporation.
【UI Automator】テストコードの書き方
92
@RunWith(AndroidJUnit4.class)
public class MyUiautomatorTest {
@Rule
public ActivityTestRule<...> activityTestRule = ...;
private UiDevice uiDevice;
@Before
public void setUp() throws Exception {
uiDevice = UiDevice.getInstance(InstrumentationRegistry
.getInstrumentation());
}
...
}
ATSLの設定に加えて
UiDeviceオブジェクトの初期化が必要
Copyright © 2016, NTT Software Corporation.
【UI Automator】テスト用APIの紹介: 検索(1/2)
条件にあったUI部品を検索する
93
UiObject uiObject = uiDevice.findObject(<検索条件1>)
// または
UiObject2 uiObject = uiDevice.findObject(<検索条件2>)
検索条件1はUiSelectorオブジェクトで表現
//検索条件1
new UiSelector().text("OK").className(Button.class)
検索条件2はBySelectorオブジェクトで表現
//検索条件2
By.text("OK").clazz(Button.class)
Copyright © 2016, NTT Software Corporation.
【UI Automator】テスト用APIの紹介: 検索(2/2)
94
UiSelector検索条件 (UiObject向け)
メソッド 概要
className(Class) Viewのクラス(EditTextやButtonなど)を条件に指定する
text(String) Viewの表示文字列を条件に指定する
description(String) ViewのcontentDescription属性値を条件に指定する
resourceId(String) ViewのリソースID(文字列表現)を条件に指定する
BySelector検索条件 (UiObject2向け)
メソッド 概要
clazz(Class) Viewのクラス(EditTextやButtonなど)を条件に指定する
text(String) Viewの表示文字列を条件に指定する
desc(String) ViewのcontentDescription属性値を条件に指定する
res(String) ViewのリソースID(文字列表現)を条件に指定する
Copyright © 2016, NTT Software Corporation.
【UI Automator】テスト用APIの紹介: UiObject系
UiObject/UiObject2で同名のメソッド
95
メソッド 概要
click() クリックする
setText(String) 指定された文字列を入力する
getText() 設定されている文字列を取得する
isFocused() フォーカスが当たっているかどうかを取得する
Copyright © 2016, NTT Software Corporation.
【UI Automator】テスト用APIの紹介: UiObject系
96
「OK」ボタンをクリックする例
// UiObjectを使う場合
UiObject okButton =
uiDevice.findObject(new UiSelector().text("OK").
className(Button.class));
okButton .click();
// UiObject2を使う場合
UiObject2 okButton2 =
uiDevice.findObject(By.text("OK").clazz(Button.class));
okButton2.click();
Copyright © 2016, NTT Software Corporation.
【UI Automator】テスト用APIの紹介: 同期系(1/4)
UiObjectを使うときはUiObjectのメソッドを呼ぶ
97
メソッド(引数はタイムアウト値) 概要
clickAndWaitForNewWindow(long) クリックしてから、新しい窓(ダイアログ
など)が表示されるまで待つ
waitForExists(long) このViewが表示されるまで待つ
// 「OK」ボタンを押して、ダイアログが表示されるまで待つ
UiObject okButton =
uiDevice.findObject(new UiSelector().text("OK").
className(Button.class));
// ダイアログが表示されるまで2000msec待つ。タイムアウト時はテスト失敗。
assertThat(okButton.clickAndWaitForNewWindow(2000L), is(true));
// ここから表示されたダイアログに対する操作を行う
サンプルコード
※タイムアウトした場合は、falseが返される
Copyright © 2016, NTT Software Corporation.
【UI Automator】テスト用APIの紹介: 同期系(2/4)
UiObject2は以下の汎用的なメソッドを使う
98
メソッド(引数は条件とタイムアウト値) 概要
clickAndWait(EventCondition,
long)
クリックしてから、指定された条件が満
たされるまで待つ
wait(SearchCondition, long)
※UiObject2とUiDeviceの両方に存在
指定された条件が満たされるまで待つ
wait(UiObject2Condition, long) 指定された条件が満たされるまで待つ
良く使う「条件」はUntilクラスに用意されている
Untilクラスのstaticメソッド 概要
newWindow() 新しい窓(ダイアログ)が表示されるまで
textEquals(String) 表示文字列が引数で指定された通りになるまで
gone(BySelector) 条件に合致するViewが見付からなくなるまで
※タイムアウトした場合は、null/0/falseが返される
Copyright © 2016, NTT Software Corporation.
【UI Automator】テスト用APIの紹介: 同期系(3/4)
99
サンプルコード
// 「OK」ボタンを押して、ダイアログが表示されるまで待つ
UiObject2 okButton2 =
uiDevice.findObject(By.text("OK").clazz(Button.class));
// ダイアログが表示されるまで2000msec待つ
boolean result = okButton2.clickAndWait(Until.newWindow(),
2000L);
// タイムアウトしたときはテストを失敗させる
assertThat(result, is(true));
// ここからダイアログの操作などを行う
Copyright © 2016, NTT Software Corporation.
【UI Automator】テスト用APIの紹介: 同期系(4/4)
同期APIを使えば使うほど遅くなる!
使いすぎ注意!
独立した複数のボタンやテキストボックスを
連続操作するような場合は同期不要
同期APIの使いどころ
一連の操作による、画面の変化を確認したい場合
→確認する直前で同期する
ある操作によって画面遷移・ダイアログ表示が発生する場合
→その操作の直後に同期する
100Copyright © 2016, NTT Software Corporation.
【UI Automator】テスト用APIの紹介: 検索契機
いつ部品を検索しに行くか?
UiObject系の場合
操作メソッド(click()など)呼び出し時に検索する
見付からなかったらUiObjectNotFoundException
同じ検索条件なら、複数画面で使い回しOK
UiObject2系の場合
findObject(BySelector)呼び出し時に検索する
見付からなかったらnullが返される
画面レイアウトが変わるとUiObject2は無効になる
→StaleObjectException
101Copyright © 2016, NTT Software Corporation.
【UI Automator】インスペクタの利用
Viewの検索条件は、画面の見た目だけでは分からない
調査ツール uiautomatorviewer を使う
1. Android Device Monitor起動
2. [Devices]タブで調査したい
デバイスを選ぶ
3. uiautomatorボタンを押す
102Copyright © 2016, NTT Software Corporation.
【UI Automator】Tips: UiScrollable
スクロールすれば現れる画面外の要素を操作できる
103
// 標準ホームアプリのアプリ一覧から、画面外にある
//「足し算アプリ」アイコンをタップして起動する。
UiScrollable appViews
= new UiScrollable(new UiSelector().
scrollable(true));
// スクロール方向を水平方向に設定
appViews.setAsHorizontalList();
// "足し算アプリ"アプリを起動する
UiObject myApp
= appViews.getChildByText(new UiSelector().
className(TextView.class),
"足し算アプリ");
myApp.clickAndWaitForNewWindow();
Copyright © 2016, NTT Software Corporation.
【UI Automator】Tips: 日本語入力
UiObject/UiObject2クラスの
setText(String)メソッド
Android 5.0以上: 日本語入力OK
Android 4.4以下: 指定できるのはASCII文字のみ
Android 4.4以下で日本語を使う場合は専用のIMEを使う
UIAutomator Unicode Input Helper
https://github.com/sumio/uiautomator-unicode-input-helper
Copyright © 2016, NTT Software Corporation. 104
// 上記IMEをインストールした状態で実行する。
// 「&」が含まれていないASCII文字の入力は今まで通り
UiObject editText = uiDevice.findObject(...);
editText.setText("Thank you");
// それ以外の文字を入力する時はUtf7ImeHelper.e()で文字列をラップする
editText.setText(Utf7ImeHelper.e("ありがとう"));
【UI Automator】演習2-4
UI Automatorを使って、以下のテストシナリオを
実現してください。
1つめのEditTextに「5」を入力する
2つめのEditTextに「8」に入力する
「この画面に表示」ボタンをクリックする
「結果:」の右「13」と表示されることを確認する
テストクラス名: UiautomatorTest
UiObject2系のAPIを使ってください
リソースIDの文字列表現はuiautomatorviewerで
調べましょう
105Copyright © 2016, NTT Software Corporation.
106
Appium
Copyright © 2016, NTT Software Corporation.
【Appium】概要
Copyright © 2016, NTT Software Corporation. 107
End2End UIテストフレームワーク
Android 2.3.3以上/iOS 6.0以上両対応
別アプリにまたがったテストができる
Selenium WebDriverと同様にテストが書ける
URL: http://appium.io/
Apache License 2.0
https://github.com/appium よりロゴを引用
【Appium】アーキテクチャ
Copyright © 2016, NTT Software Corporation. 108
http://www.atmarkit.co.jp/ait/articles/1504/27/news025.html より引用
Appiumサーバ: クライアント-テスト対象端末間のプロ
キシとして動作
テストスクリプトのプログラム言語は色々選べる
【Appium】おすすめポイント
Selenium WebDriver経験者にとって学習コストが低い
テストスクリプトの言語を選べる
Ruby, Python, Java, ...
ネイティブ・WebViewどちらもテスト可能
Android・iOS両方とも同じようなコードでテストが書ける
簡単にインストールできるGUI版が配布されている
(Mac/Windows)
109Copyright © 2016, NTT Software Corporation.
【Appium】注意点
アーキテクチャの性質上、実行速度が遅い
公式ドキュメントが最新化されていない・少ない
Appium 1.3.4向けの日本語解説記事あり
@IT「SeleniumのUIテスト自動化をiOS/Androidにもたらす
Appiumの基礎知識とインストール方法、基本的な使い方」
http://www.atmarkit.co.jp/ait/articles/1504/27/news025.html
テスト対象アプリのAndroidバージョンや、WebView利
用有無によって、テストスクリプトの書き方が変化する
書きはじめる前に確認が必要
Copyright © 2016, NTT Software Corporation. 110
【Appium】Appium Desktop Appのインストール
Appium ServerのGUI版
ダウンロードページ
https://bitbucket.org/appium/appium.app/downloads/
インストーラを実行するだけでOK
Android開発環境と同一PCにインストールすること
動作に必要なソフトウェア
.NET Framework 4.5再配布可能パッケージ (Windowsのみ)
JDK7以上
Android SDK
Copyright © 2016, NTT Software Corporation. 111
【Appium】テストプロジェクトのセットアップ
(Androidではない)通常のJavaプロジェクト
EclipseやIntelliJ IDEAなどで。
build.gradle
112
apply plugin: 'java'
// JavaソースコードのエンコーディングをUTF-8とする。
def defaultEncoding = 'UTF-8'
tasks.withType(AbstractCompile).each {
it.options.encoding = defaultEncoding
}
repositories { mavenCentral() }
dependencies {
// Appiumクライアントライブラリを利用するための宣言
testCompile 'io.appium:java-client:3.4.0'
testCompile 'junit:junit:4.12'
}
Copyright © 2016, NTT Software Corporation.
【Appium】テストコードの書き方: setup
AndroidDriverを初期化する
そのためにDesired Capabilityの指定が必要
113
public class AppiumTest {
private AndroidDriver<MobileElement> mDriver;
@Before
public void setUp() throws Exception {
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
...
mDriver =
new AndroidDriver<>(
new URL("http://localhost:4723/wd/hub"),
capabilities);
}
Copyright © 2016, NTT Software Corporation.
【Appium】テストコードの書き方: tear down
AndroidDriverを終了する
114
...
@After
public void tearDown() throws Exception {
mDriver.quit();
}
}
Copyright © 2016, NTT Software Corporation.
【Appium】テストコードの書き方: Desired Capabilities
テストが実行されるAppiumサーバの性質・機能を表す
詳細は
http://www.atmarkit.co.jp/ait/articles/1506/02/news017.html#021
参照
Copyright © 2016, NTT Software Corporation. 115
【Appium】テスト用APIの紹介: 概要
基本形
Copyright © 2016, NTT Software Corporation. 116
WebElement elem = mDriver.findElement(<検索条件>);
elem.<操作>
検索条件(Byクラス・MobileByクラス)
http://www.atmarkit.co.jp/ait/articles/1506/02/news017_2.html#031
操作(WebElementクラスのメソッド)
http://www.atmarkit.co.jp/ait/articles/1506/02/news017_2.html#034
状態取得(WebElementクラスのメソッド)
http://www.atmarkit.co.jp/ait/articles/1506/02/news017_2.html#035
【Appium】テスト用APIの紹介: 記述例
解説記事のサンプルプログラム https://goo.gl/chfSjz 参照
Appium最新版に対応するために以下の修正が必要
依存ライブラリバージョンの最新化(p.112参照)
AndroidDriverをAndroidDriver<MobileElement>に
MobileCapabilityTypeをAndroidMobileCapabilityTypeに
ChromeDriver関係のエラーが発生する場合
以下から古い(現時点でv2.20)chromedriverをダウンロード、展開
https://goo.gl/0lVlTE
展開した実行ファイルのフルパスを、Appiumの
「Chromedriver Path」に入力
Copyright © 2016, NTT Software Corporation. 117
https://www.ntts.co.jp/products/soft_dojyo/index.html

More Related Content

What's hot

オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
 
HttpClient詳解、或いは非同期の落とし穴について
HttpClient詳解、或いは非同期の落とし穴についてHttpClient詳解、或いは非同期の落とし穴について
HttpClient詳解、或いは非同期の落とし穴について
Yoshifumi Kawai
 

What's hot (20)

オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
 
失敗から学ぶAndroid設計話
失敗から学ぶAndroid設計話失敗から学ぶAndroid設計話
失敗から学ぶAndroid設計話
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
 
Appium 2.0 ではじめるモバイルアプリテスト
Appium 2.0 ではじめるモバイルアプリテストAppium 2.0 ではじめるモバイルアプリテスト
Appium 2.0 ではじめるモバイルアプリテスト
 
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
 
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったことPHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
 
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Springドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
 
HttpClient詳解、或いは非同期の落とし穴について
HttpClient詳解、或いは非同期の落とし穴についてHttpClient詳解、或いは非同期の落とし穴について
HttpClient詳解、或いは非同期の落とし穴について
 
Guide To AGPL
Guide To AGPLGuide To AGPL
Guide To AGPL
 
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 
Riverpodでテストを書こう
Riverpodでテストを書こうRiverpodでテストを書こう
Riverpodでテストを書こう
 
C# における Redis 徹底活用
C# における Redis 徹底活用C# における Redis 徹底活用
C# における Redis 徹底活用
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
 

Viewers also liked

JUnitテストを1日やってみた
JUnitテストを1日やってみたJUnitテストを1日やってみた
JUnitテストを1日やってみた
Mima Yuki
 
テストプラットフォームサービスの舞台裏
テストプラットフォームサービスの舞台裏テストプラットフォームサービスの舞台裏
テストプラットフォームサービスの舞台裏
Yuto Tachibana
 
UIAutomatorでボット作ってみた
UIAutomatorでボット作ってみたUIAutomatorでボット作ってみた
UIAutomatorでボット作ってみた
akkuma
 

Viewers also liked (20)

Androidアプリケーション開発中級研修 前編
Androidアプリケーション開発中級研修 前編Androidアプリケーション開発中級研修 前編
Androidアプリケーション開発中級研修 前編
 
20150319 testotipsio
20150319 testotipsio20150319 testotipsio
20150319 testotipsio
 
Appiumのテスト結果レポートをsahaginで作ってみる
Appiumのテスト結果レポートをsahaginで作ってみるAppiumのテスト結果レポートをsahaginで作ってみる
Appiumのテスト結果レポートをsahaginで作ってみる
 
JUnitテストを1日やってみた
JUnitテストを1日やってみたJUnitテストを1日やってみた
JUnitテストを1日やってみた
 
4時間で学ぶ、効率的な自動テストスクリプトのメンテナンス
4時間で学ぶ、効率的な自動テストスクリプトのメンテナンス4時間で学ぶ、効率的な自動テストスクリプトのメンテナンス
4時間で学ぶ、効率的な自動テストスクリプトのメンテナンス
 
はてなにおける Android アプリのソフトウェアテスト
はてなにおける Android アプリのソフトウェアテストはてなにおける Android アプリのソフトウェアテスト
はてなにおける Android アプリのソフトウェアテスト
 
テストプラットフォームサービスの舞台裏
テストプラットフォームサービスの舞台裏テストプラットフォームサービスの舞台裏
テストプラットフォームサービスの舞台裏
 
UIAutomatorでボット作ってみた
UIAutomatorでボット作ってみたUIAutomatorでボット作ってみた
UIAutomatorでボット作ってみた
 
CoreDataをバックグラウンドで扱うためのTips
CoreDataをバックグラウンドで扱うためのTipsCoreDataをバックグラウンドで扱うためのTips
CoreDataをバックグラウンドで扱うためのTips
 
Open STF Plugin 作ってみた
Open STF Plugin 作ってみたOpen STF Plugin 作ってみた
Open STF Plugin 作ってみた
 
第3回Ques ここからはじめる!Androidアプリのテスト自動化
第3回Ques ここからはじめる!Androidアプリのテスト自動化第3回Ques ここからはじめる!Androidアプリのテスト自動化
第3回Ques ここからはじめる!Androidアプリのテスト自動化
 
Testing android apps with espresso
Testing android apps with espressoTesting android apps with espresso
Testing android apps with espresso
 
フロントエンド開発者のためのJenkins
フロントエンド開発者のためのJenkinsフロントエンド開発者のためのJenkins
フロントエンド開発者のためのJenkins
 
Appium を使って iOS / Android の UI テストを共通化
Appium を使って iOS / Android の UI テストを共通化Appium を使って iOS / Android の UI テストを共通化
Appium を使って iOS / Android の UI テストを共通化
 
EC2とLinuxディストロ事情
EC2とLinuxディストロ事情EC2とLinuxディストロ事情
EC2とLinuxディストロ事情
 
Seleniumの薄っすい話 百八式 @ 第3回 日本Seleniumユーザーコミュニティ勉強会
Seleniumの薄っすい話 百八式 @ 第3回 日本Seleniumユーザーコミュニティ勉強会Seleniumの薄っすい話 百八式 @ 第3回 日本Seleniumユーザーコミュニティ勉強会
Seleniumの薄っすい話 百八式 @ 第3回 日本Seleniumユーザーコミュニティ勉強会
 
STFとAppiumをもちいたAndroidアプリの自動テスト
STFとAppiumをもちいたAndroidアプリの自動テストSTFとAppiumをもちいたAndroidアプリの自動テスト
STFとAppiumをもちいたAndroidアプリの自動テスト
 
20160913 cookpad ios_jp
20160913 cookpad ios_jp20160913 cookpad ios_jp
20160913 cookpad ios_jp
 
第3回日本seleniumユーザーコミュニティ勉強会
第3回日本seleniumユーザーコミュニティ勉強会第3回日本seleniumユーザーコミュニティ勉強会
第3回日本seleniumユーザーコミュニティ勉強会
 
WebサービスのソフトウェアQAと自動テスト戦略
WebサービスのソフトウェアQAと自動テスト戦略WebサービスのソフトウェアQAと自動テスト戦略
WebサービスのソフトウェアQAと自動テスト戦略
 

Similar to Androidテスティング実践2 システムテスト編

Agileツール適合化分科会(テスト自動化ツール)
Agileツール適合化分科会(テスト自動化ツール)Agileツール適合化分科会(テスト自動化ツール)
Agileツール適合化分科会(テスト自動化ツール)
masanori kataoka
 
【JaSST'11 Kansai】 開発者とテスト担当者に最適なコラボレーションと効率化を!
【JaSST'11 Kansai】 開発者とテスト担当者に最適なコラボレーションと効率化を!【JaSST'11 Kansai】 開発者とテスト担当者に最適なコラボレーションと効率化を!
【JaSST'11 Kansai】 開発者とテスト担当者に最適なコラボレーションと効率化を!
智治 長沢
 
Eclipse PDT + MakeGoodによるPHPコードのテスト
Eclipse PDT + MakeGoodによるPHPコードのテストEclipse PDT + MakeGoodによるPHPコードのテスト
Eclipse PDT + MakeGoodによるPHPコードのテスト
Atsuhiro Kubo
 

Similar to Androidテスティング実践2 システムテスト編 (20)

CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
 
ワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeployワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeploy
 
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
 
UIテストの実行時間の短縮の方法
UIテストの実行時間の短縮の方法UIテストの実行時間の短縮の方法
UIテストの実行時間の短縮の方法
 
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
 
初心者向けデバイスドライバ講座 (2)
初心者向けデバイスドライバ講座 (2) 初心者向けデバイスドライバ講座 (2)
初心者向けデバイスドライバ講座 (2)
 
ぼくのかんがえた iOSテスト戦略
ぼくのかんがえた iOSテスト戦略ぼくのかんがえた iOSテスト戦略
ぼくのかんがえた iOSテスト戦略
 
[3rd 長崎QDG] チームで、長期間で、たくさんのソフトウェアを快適に開発し、価値を生み続けるためのエンジニアリング
[3rd 長崎QDG] チームで、長期間で、たくさんのソフトウェアを快適に開発し、価値を生み続けるためのエンジニアリング[3rd 長崎QDG] チームで、長期間で、たくさんのソフトウェアを快適に開発し、価値を生み続けるためのエンジニアリング
[3rd 長崎QDG] チームで、長期間で、たくさんのソフトウェアを快適に開発し、価値を生み続けるためのエンジニアリング
 
Agileツール適合化分科会(テスト自動化ツール)
Agileツール適合化分科会(テスト自動化ツール)Agileツール適合化分科会(テスト自動化ツール)
Agileツール適合化分科会(テスト自動化ツール)
 
【JaSST'11 Kansai】 開発者とテスト担当者に最適なコラボレーションと効率化を!
【JaSST'11 Kansai】 開発者とテスト担当者に最適なコラボレーションと効率化を!【JaSST'11 Kansai】 開発者とテスト担当者に最適なコラボレーションと効率化を!
【JaSST'11 Kansai】 開発者とテスト担当者に最適なコラボレーションと効率化を!
 
テストマネジメントツールSquash TMを利用した継続的テスト改善
テストマネジメントツールSquash TMを利用した継続的テスト改善テストマネジメントツールSquash TMを利用した継続的テスト改善
テストマネジメントツールSquash TMを利用した継続的テスト改善
 
1時間で分かるSTA (Software Test Automation) #stac2014
1時間で分かるSTA (Software Test Automation) #stac20141時間で分かるSTA (Software Test Automation) #stac2014
1時間で分かるSTA (Software Test Automation) #stac2014
 
Eclipse PDT + MakeGoodによるPHPコードのテスト
Eclipse PDT + MakeGoodによるPHPコードのテストEclipse PDT + MakeGoodによるPHPコードのテスト
Eclipse PDT + MakeGoodによるPHPコードのテスト
 
OpManager導入事例 日テレITプロデュース様
OpManager導入事例 日テレITプロデュース様OpManager導入事例 日テレITプロデュース様
OpManager導入事例 日テレITプロデュース様
 
A 1-1 tfs on azure で始めるイマドキのソフトウェア開発
A 1-1 tfs on azure で始めるイマドキのソフトウェア開発A 1-1 tfs on azure で始めるイマドキのソフトウェア開発
A 1-1 tfs on azure で始めるイマドキのソフトウェア開発
 
Go azure tfs_service
Go azure tfs_serviceGo azure tfs_service
Go azure tfs_service
 
【Agile Conference tokyo 2011】 継続的フィードバック
【Agile Conference tokyo 2011】 継続的フィードバック【Agile Conference tokyo 2011】 継続的フィードバック
【Agile Conference tokyo 2011】 継続的フィードバック
 
Visual Studio Onlineを使ってみた
Visual Studio Onlineを使ってみたVisual Studio Onlineを使ってみた
Visual Studio Onlineを使ってみた
 
60分でわかった気になるISO29119 #wacate
60分でわかった気になるISO29119 #wacate60分でわかった気になるISO29119 #wacate
60分でわかった気になるISO29119 #wacate
 
Gui自動テストツール基本
Gui自動テストツール基本Gui自動テストツール基本
Gui自動テストツール基本
 

More from 株式会社 NTTテクノクロス

More from 株式会社 NTTテクノクロス (9)

ブロックチェーン活用事例
ブロックチェーン活用事例ブロックチェーン活用事例
ブロックチェーン活用事例
 
Open stack界でのコンテナの現状
Open stack界でのコンテナの現状Open stack界でのコンテナの現状
Open stack界でのコンテナの現状
 
ネットワークスイッチ構築実践 2.STP・RSTP・PortSecurity・StormControl・SPAN・Stacking編
ネットワークスイッチ構築実践 2.STP・RSTP・PortSecurity・StormControl・SPAN・Stacking編ネットワークスイッチ構築実践 2.STP・RSTP・PortSecurity・StormControl・SPAN・Stacking編
ネットワークスイッチ構築実践 2.STP・RSTP・PortSecurity・StormControl・SPAN・Stacking編
 
ネットワークスイッチ構築実践 1.VLAN・LinkAggregation編
ネットワークスイッチ構築実践 1.VLAN・LinkAggregation編ネットワークスイッチ構築実践 1.VLAN・LinkAggregation編
ネットワークスイッチ構築実践 1.VLAN・LinkAggregation編
 
ネットワーク構築訓練 入門
ネットワーク構築訓練 入門ネットワーク構築訓練 入門
ネットワーク構築訓練 入門
 
WebRTC研修
WebRTC研修WebRTC研修
WebRTC研修
 
Androidアプリケーション開発中級研修 後編
Androidアプリケーション開発中級研修 後編Androidアプリケーション開発中級研修 後編
Androidアプリケーション開発中級研修 後編
 
OpenStack入門 2016/06/27
OpenStack入門 2016/06/27OpenStack入門 2016/06/27
OpenStack入門 2016/06/27
 
OpenStack入門 2016/06/10
OpenStack入門 2016/06/10OpenStack入門 2016/06/10
OpenStack入門 2016/06/10
 

Recently uploaded

Recently uploaded (11)

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

Androidテスティング実践2 システムテスト編