Android 는 Espresso 를 이용 하여 UI 자동화 테스트 를 진행 하 는 방법 에 대해 자세히 설명 합 니 다.
9007 단어 androidui 자동화 테스트espresso
저 는 반복 되 는 일 에 대해 절 차 는 모두 대체 할 수 있다 는 관점 이 있 습 니 다.이것 은 프로그래머 로 서 의 기본 적 인 소양 이 라 고 생각 합 니 다.UI 자동화 테스트 는 반복 되 는 작업 에 대처 하기 위해 서 입 니 다.예 를 들 어 특정한 기능 을 테스트 하기 위해 서 입 니 다.그러면 응용 클릭 을 한 다음 에 일련의 클릭 페이지 를 거 쳐 야 이 페이지 에 도착 할 수 있 습 니 다.그리고 테스트 를 할 수 있 습 니 다.그러면 우 리 는 코드 를 써 서 app 을 자동 으로 뛰 게 하고 자동 으로 그 인터페이스 에 와 서 테스트 할 수 있 습 니까?답 은 긍정 적 이다.이것 이 바로 본 고 에서 말 하고 자 하 는 자동화 테스트 이다.
머리말
구 글 은 2013 년 에 에 스프 레 스 를 시 작 했 는데 구 글 의 사고방식 은 충분히 성숙 하고 안 정 된 후에 안 드 로 이 드 SDK 로 옮 기 는 것 을 보면 그 에 대한 중 시 를 알 수 있다.구 글 은 G+,Maps,Drive 를 포함 한 30 개 이상 의 애플 리 케 이 션 을 Espresso 로 테스트 했다.
Espresso 테스트 는 매우 쉽게 이 루어 집 니 다.세 단계 로 구성 되 어 있 습 니 다.
onView(withId(R.id.my_view)) // withId(R.id.my_view) is a ViewMatcher
.perform(click()) // click() is a ViewAction
.check(matches(isDisplayed())); // matches(isDisplayed()) is a ViewAssertion
에 스프 레 소 프레임 워 크 는 구 글 이 공식 적 으로 추천 하 는 테스트 프레임 워 크 이기 때문에 어떻게 든 배 워 야 합 니 다.또한 안 드 로 이 드 Studio 2.2 버 전부터 구 글 은 에 스프 레 소 프레임 워 크 에 그래 픽 인터페이스 를 내장 하여 유닛 테스트 코드 를 자동 으로 생 성 합 니 다.다음은 데모 테스트 를 써 서 에 스프 레 소 에 대해 깊이 알 아 보 겠 습 니 다.
준비 하 다.
Espresso 지원:
dependencies {
...
testCompile 'junit:junit:4.12'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
}
}
dependencies 에 추 가 됩 니 다.일반적으로 기본적으로 testCompile'junit:junit:4.12'가 있 기 때문에 다른 한 마디 만 추가 하면 됩 니 다.
defaultConfig{
...
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
default Config 에 위 와 같은 문 구 를 추가 하여 테스트 실행 을 지원 합 니 다.Test 클래스 만 들 기
특히 이 종 류 는 androidTest 폴 더 아래 에 있어 야 합 니 다.
@RunWith(AndroidJUnit4.class)
@LargeTest
public class MainActivityInstrumentationTest {
@Rule
public ActivityTestRule mActivityRule = new ActivityTestRule<>(
MainActivity.class);
@Test
public void sayHello(){
onView(withText("Say hello!")).perform(click());
onView(withId(R.id.textView)).check(matches(withText("Hello, World!")));
}
}
@Rule
public ActivityTestRule mTestRule = new ActivityTestRule<>(MainActivity.class);
이 말 은 테스트 규칙 을 정의 합 니 다.구조 방법의 매개 변수 에 MainActivity.class 가 지정 되 어 있 습 니 다.구체 적 인 표현 은 이 테스트 코드 를 실행 할 때 app 은 MainActivity 인터페이스 를 직접 열 고 정 의 된 테스트 사례 를 진행 하 는 것 입 니 다.그래서 특정한 화면 을 직접 테스트 하고 싶 을 때 그 화면 을 이 매개 변수 에 채 워 서 지정 한 화면 을 열 어 테스트 할 수 있 습 니 다.@Test
@Test
public void testLogin() {
...
}
테스트 방법 을 정의 합 니 다.테스트 클래스 가 실 행 될 때 실 행 된 코드 는 Test 주해 의 방법 입 니 다.(Espresso 는 다른 주 해 를 제 공 했 습 니 다.예 를 들 어@After,@Before 등 구체 적 인 용법 은 제 가 위 에 쓴 android 홈 페이지 에서 볼 수 있 습 니 다)물론 위의 코드 에 대응 하 는 것 은 testLogin 테스트 방법 입 니 다.테스트 로그 인 방법 에서 정 의 된 것 은 테스트 할 내용 입 니 다.View Machers 찾기 View
onView 방법 으로 view 를 찾 을 수 있 습 니 다.그 중에서 매개 변 수 는 withId(자원 id 를 통 해 찾 을 수 있 습 니 다)이 고 withText(내용 표시 로 찾 을 수 있 습 니 다)가 여러 개의 제약 조건 이 있 을 때 allOf 를 사용 할 수 있 습 니 다. 예 를 들 어
allOf(withText("Hello")
,withId(R.id.hello))
주의:withText()
을 통 해 컨트롤 을 찾 든 다른 방식,예 를 들 어 withClassName()
,withResourceName()
,withTagKey()
등 방법 을 통 해 찾 는 컨트롤 이 현재 페이지 에 확실히 존재 하고 볼 수 있 도록 해 야 합 니 다.onView()
방법 을 사용 하 는 것 은 무효 입 니 다.AdapterView 의 레이아웃 item 은 동태 적 으로 나타 나 서 직접 지정 할 수 없 기 때문에 AdapterView 를 테스트 하려 면 onView()
방법 을 onData()
방법 으로 바 꾸 십시오.onView()
방법 과 ViewInteraction 으로 돌아 가 는 것 과 유사 합 니 다.onData()
방법 은 DataInteraction 으로 돌아 가 는데 이들 의 용법 은 대체적으로 같다.View 조작:
perform()
방법 방식 은 onView(...).perform()
.하나의 perform 에서 perform(click(),clearText())
과 같은 여러 작업 을 수행 할 수 있 습 니 다.모든 조작 에는 하나의 전제 가 있다.즉,실행 하려 는 view 는 현재 인터페이스 에 표시 되 어야 한다(있 고 볼 수 있다).
방법
속뜻
click()
클릭 하여 보기
clearText()
텍스트 내용 지우 기
swipeLeft()
오른쪽 에서 왼쪽으로 미끄러지다
swipeRight()
왼쪽 에서 오른쪽으로 미끄러지다
swipeDown()
위 에서 아래로 내려가다
swipeUp()
아래 에서 위로 미끄러지다
click()
클릭 하여 보기
closeSoftKeyboard()
소프트 키보드 닫 기
pressBack()
물리 반환 키 를 누르다
doubleClick()
더 블 클릭
longClick()
길 게 누르다
scrollTo()
굴러가다
replaceText()
텍스트 바 꾸 기
openLinkWithText()
지정 한 하이퍼링크 열기
View Assertions 검사 결과
check()방법 을 사용 하여 View 가 우리 의 기대 에 부합 되 는 지 확인 합 니 다.
onView(...).check()
view 에 텍스트 “hello” check(matches(withText("hello")))
이 있 는 지 확인 합 니 다.제 가 쓴 예 를 보 겠 습 니 다.
저 희 는 기본적으로 모든 app 에 로그 인 기능 이 있 습 니 다.사용자 이름과 비밀 번 호 를 불 러 야 합 니 다.로그 인 을 누 르 기 전에 사용자 이름과 비밀 번 호 를 비 어 있 거나 형식 등 검증 해 야 합 니 다.
다음 예제 에서 로그 인 단 추 를 누 르 면 먼저 입력 한 사용자 이름과 비밀 번 호 를 검증 합 니 다.인증 은 TextView 에 해당 하 는 원인 을 표시 하지 않 고 인증 에 문제 가 없 으 면'로그 인 성공'을 표시 합 니 다.
Activity 인터페이스 및 논리
@Override
public void onClick(View view) {
if (view.getId() == R.id.bt_login) {
login();
}
}
/**
*
*/
private void login() {
String name = et_name.getText().toString().trim();
String pwd = et_pwd.getText().toString().trim();
if (TextUtils.isEmpty(name)) {
tv_login_result.setText(" ");
return;
}
if (name.length() < 6 ) {
tv_login_result.setText(" ");
return;
}
if (TextUtils.isEmpty(pwd)) {
tv_login_result.setText(" ");
return;
}
if (pwd.length() < 6 ) {
tv_login_result.setText(" ");
return;
}
tv_login_result.setText(" ");
}
기타 코드 무시.
@RunWith(AndroidJUnit4.class)
@LargeTest
public class MainActivityTest {
private String[] names = {"", "a", "123123"};
private String[] pwds = {"", "a", "123123"};
@Rule
public ActivityTestRule mTestRule = new ActivityTestRule<>(MainActivity.class);
@Before
public void init() {
Log.e("TAG", "init: ");
}
@Test
public void testLogin() {
// ,
onView(allOf(withId(R.id.bt_login), isDisplayed())).perform(click());
onView(allOf(withId(R.id.tv_login_result), isDisplayed())).check(matches(withText(" ")));
// ,
onView(allOf(withId(R.id.et_name), isDisplayed())).perform(replaceText(names[0]), closeSoftKeyboard());
onView(allOf(withId(R.id.bt_login), isDisplayed())).perform(click());
onView(allOf(withId(R.id.tv_login_result), isDisplayed())).check(matches(withText(" ")));
// ,
onView(allOf(withId(R.id.et_name), isDisplayed())).perform(replaceText(names[1]), closeSoftKeyboard());
onView(allOf(withId(R.id.bt_login), isDisplayed())).perform(click());
onView(allOf(withId(R.id.tv_login_result), isDisplayed())).check(matches(withText(" ")));
// ,
onView(allOf(withId(R.id.et_name), isDisplayed())).perform(replaceText(names[2]), closeSoftKeyboard());
onView(allOf(withId(R.id.et_pwd), isDisplayed())).perform(replaceText(pwds[2]), closeSoftKeyboard());
onView(allOf(withId(R.id.bt_login), isDisplayed())).perform(click());
onView(allOf(withId(R.id.tv_login_result), isDisplayed())).check(matches(withText(" ")));
}
}
여기 서 저 희 는 테스트 데 이 터 를 미리 정 의 했 습 니 다.Espresso 를 사용 하여 여러 가지 상황 을 모 의 입력 과 클릭 을 하여 저희 가 기대 하 는 바 에 부합 되 는 지 테스트 합 니 다.에 스프 레 소 에 대한 소 개 는 아마 이 정도 일 것 이 니 많은 조언 과 함께 발전 해 주시 기 바 랍 니 다.
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.