12/08/2018, 16:23

End to End Test with Espresso in Android (P1)

Là một dev thì chắc bạn đã quá quen thuộc với Unittest rồi, nhưng còn với End to End test thì sao? Chắc không phải ai cũng biết đến cái này mặc dù trong quá trình làm việc chúng ta luôn thực hiện liên tục công việc này. Thuật ngữ "End to End Testing" được định nghĩa như một phương pháp test nhằm ...

Là một dev thì chắc bạn đã quá quen thuộc với Unittest rồi, nhưng còn với End to End test thì sao? Chắc không phải ai cũng biết đến cái này mặc dù trong quá trình làm việc chúng ta luôn thực hiện liên tục công việc này. Thuật ngữ "End to End Testing" được định nghĩa như một phương pháp test nhằm xác định liệu việc thực hiện các ứng dụng có theo yêu cầu hay không. Nó được thực hiện từ đầu đến cuối theo các kịch bản như trong thế giới thực ví dụ như: thông tin liên lạc của các ứng dụng với phần cứng, mạng, cơ sở dữ liệu và các ứng dụng khác. Để hiểu rõ hơn về e2e test thì bạn có thể đọc thêm ở đây. Còn trong bài viết này mình sẽ giới thiệu cách để thực hiệnEnd to End automatic test với Espresso trong Android.

Đế viết e2e test thì việc đầu tiên ta cần là cài đặt Espresso

Thiết lập test environment

Để tránh flakiness, bạn nên tắt system animations của thiết bị hay máy ảo được sử dụng để test. Trên thiết bị test vào Setting -> Developer options rồi disable những setting này đi:

  • Window animation scale.
  • Transition animation scale.
  • Animator duration scale.

Add Espresso dependencies

Thêm Espresso vào project của bạn. Tại app/build.gradle ta thêm:

androidTestCompile 'com.android.support.test.espresso:espresso-core:3.0.1'
androidTestCompile 'com.android.support.test:runner:1.0.1'

Set the instrumentation runner

Tại app/build.gradle ta thêm config trong defaultConfig

defaultConfig {
        ...

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

rồi sync lại project là ok.

Analytics

Để đảm bảo rằng chúng ta đi đúng hướng với mỗi lần release, test runner sẽ thực hiện thu thập và phân tích. Cụ thể, nó sẽ tải lên một hash của tên package của ứng dụng đang được test trong mỗi lần gọi. Điều này cho phép chúng ta đo số lượng gói duy nhất sử dụng Espresso cũng như lượng mà nó sử dụng. Nếu bạn ko muốn tải lên dữ liệu này, ta có thể tùy chỉnh disableAnalytics bằng các sử dụng lệnh:

adb shell am instrument -e disableAnalytics true

Thực hiện first test

Sau khi đã cài đặt xong, chúng ta có thể thử thực hiện một test nào đó. Mặc định chúng ta sẽ tạo các lớp test trong src/androidTest/java/..../.... đó là mặc định thôi còn thích thì... Sau đây chúng ta sẽ thực hiện kiểm tra một dòng text với nội dung nào đó có được hiển thị trên màn hình của chúng ta hay không, cụ thể ở đây mình sẽ check dòng text "Hello world!" xem nó có được hiển thị trên MainActivity hay ko.

@RunWith(AndroidJUnit4.class)
@LargeTest
public class HelloWorldEspressoTest {

    @Rule
    public ActivityTestRule<MainActivity> mActivityRule =
            new ActivityTestRule(MainActivity.class);

    @Test
    public void helloWorld() {
        onView(withText("Hello world!")).check(matches(isDisplayed()));
    }
}

Vậy là có Class test đầu tiên rồi, giờ run nó thôi.

Running tests

Sau khi viết class test xong, bạn có thể thực hiện run test. Có 2 cách để run test:

Sử dụng Android Studio

Ở đây mình xài android studio 3.0 (hàng mới nhất             </div>
            
            <div class=

0