Viết mã kiểm thử không cần thiết bị phía máy chủ trong TF

Trang này hướng dẫn bạn cách viết kiểm thử phía máy chủ không yêu cầu thiết bị, chẳng hạn như kiểm thử chạy trên phiên bản GCE Linux. (Để biết thông tin chi tiết về cách viết chương trình kiểm thử do máy chủ điều khiển yêu cầu thiết bị, hãy tham khảo bài viết Viết chương trình kiểm thử do máy chủ điều khiển trong Trade Federation.)

Các loại kiểm thử phía máy chủ lưu trữ

Bạn có thể chạy một số loại kiểm thử phía máy chủ lưu trữ thông qua Liên minh thương mại (TF).

Kiểm thử gốc (gtest)

Tạo Kiểm thử gốc (gtests) để kiểm thử một nền tảng. Nếu kiểm thử không yêu cầu thiết bị, hãy chạy kiểm thử trên máy chủ; kiểm thử sẽ chạy nhanh hơn nhiều. Để định cấu hình các chương trình kiểm thử như vậy chạy trên máy chủ kiểm thử, hãy sử dụng trình chạy TF HostGTest.

Đây là cấu hình kiểm thử TradeFed mẫu:

<configuration description="Runs hello_world_test.">
    <option name="null-device" value="true" />
    <test class="com.android.tradefed.testtype.HostGTest" >
        <option name="module-name" value="hello_world_test" />
    </test>
</configuration>

Cấu hình kiểm thử chạy một kiểm thử gtest (hello_world_test) trên máy chủ. Bạn có thể tự động tạo cấu hình kiểm thử mẫu. Trừ phi kiểm thử của bạn cần thiết lập hoặc dọn dẹp đặc biệt, bạn có thể dựa vào tính năng tạo cấu hình kiểm thử tự động để tạo cấu hình kiểm thử TF phù hợp.

Để định cấu hình gtest phía máy chủ và bật tính năng tự động tạo cấu hình kiểm thử, hãy đặt host_supported thành true trong Android.bp, như trong hello_world_test.

Để biết thêm thông tin về cách viết kiểm thử gốc, hãy xem phần Thêm ví dụ mới về kiểm thử gốc.

Kiểm thử máy chủ JAR

Kiểm thử máy chủ JAR (Java), chẳng hạn như JUnit, là các chương trình kiểm thử không cần chạy trên thiết bị và cung cấp phạm vi mã của dự án Java. Bạn có thể định cấu hình các chương trình kiểm thử như vậy để chạy trên máy chủ kiểm thử bằng cách sử dụng trình chạy HostTest.

Cấu hình kiểm thử TradeFed mẫu

<configuration description="Executes HelloWorldHostTest">
    <test class="com.android.tradefed.testtype.HostTest" >
        <option name="jar" value="HelloWorldHostTest.jar" />
    </test>
</configuration>

Cấu hình kiểm thử chạy kiểm thử JUnit phía máy chủ của HelloWorldHostTest. Xin lưu ý rằng cấu hình kiểm thử ở trên có thể được tạo tự động. Trừ phi kiểm thử của bạn cần thiết lập hoặc dọn dẹp đặc biệt, hãy dựa vào tính năng tạo cấu hình kiểm thử tự động để tạo cấu hình kiểm thử TradeFed phù hợp.

Để biết thêm thông tin chi tiết về cách viết kiểm thử máy chủ lưu trữ JAR, hãy tham khảo trang Kiểm thử máy chủ lưu trữ JAR (Java).

Kiểm thử máy chủ Java tách biệt

Bạn có thể chạy các chương trình kiểm thử Java không cần thiết bị trong một môi trường tách biệt với chi phí hiệu suất không đáng kể. Tuy nhiên, bạn cần cân nhắc một số yếu tố chính trước khi chọn sử dụng môi trường này.

  • Đây là trình chạy mặc định dùng cho kiểm thử đơn vị Robolectric và JUnit
  • Tradefed chỉ hỗ trợ kiểm thử JUnit trong môi trường tách biệt.
  • Chỉ hỗ trợ các phần phụ thuộc được liên kết tĩnh. Không có phần phụ thuộc nào được khai báo bằng lib được đưa vào đường dẫn lớp.
  • Trình chạy tách biệt chỉ đặt trình chạy shim và tệp jar kiểm thử của bạn vào đường dẫn lớp.
  • Có một số mức hao tổn cố định cho mỗi lần chạy kiểm thử được thực thi bằng trình chạy này.

Cấu hình kiểm thử Tradefed mẫu (được tách biệt)

<configuration description="Executes HelloWorldHostTest">
    <test class="com.android.tradefed.testtype.IsolatedHostTest" >
        <option name="jar" value="HelloWorldHostTest.jar" />
    </test>
</configuration>

Cấu hình Soong mẫu để tự động tạo

Thay vì tạo cấu hình kiểm thử theo cách thủ công như ở trên, Soong có thể tự động tạo cấu hình bằng cách sử dụng nội dung khai báo như ví dụ này.

java_test_host {
    name: "HelloWorldHostTest",

    test_options: {
        unit_test: true,
    },

    test_suites: ["general-tests"],

    srcs: ["test/**/*.java"],

    static_libs: [
        "junit",
    ],
}

Kiểm thử Robolectric

Các kiểm thử Robolectric sử dụng cùng một trình chạy với các kiểm thử máy chủ riêng biệt, với một vài tuỳ chọn đặc biệt.

  • Tuỳ chọn robolectric-resources cho phép truyền một số tuỳ chọn dòng lệnh dành riêng cho Robolectric vào quy trình con cũng như thêm bản dựng cây của android-all vào đường dẫn lớp của quy trình con. Mặc dù hai phương pháp còn lại là các phương pháp hay nhất, nhưng tuỳ chọn này là bắt buộc để chạy các kiểm thử Robolectric thành công.
  • Tuỳ chọn java-folder cho phép thay đổi môi trường thời gian chạy Java mà quy trình con sử dụng. Điều này là cần thiết do Robolectric ưu tiên các phiên bản Java cụ thể có thể không phù hợp với JVM ưu tiên của hệ thống máy chủ.
  • Tuỳ chọn exclude-paths cho phép trình chạy quy trình con tránh tải các mô-đun cụ thể. Điều này rất hữu ích khi tệp JAR đi kèm với các lớp không liên quan có thể gây ra lỗi tải. java. là một trường hợp loại trừ phổ biến để tránh gửi các ngoại lệ SecurityException.

Cấu hình Robolectric mẫu

<configuration description="Executes a Sample Robolectric Test">
    <option name="java-folder" value="prebuilts/jdk/jdk9/linux-x86/" />
    <option name="exclude-paths" value="java" />
    <option name="use-robolectric-resources" value="true" />
    <test class="com.android.tradefed.testtype.IsolatedHostTest">
        <option name="jar" value="RobolectricExampleTest.jar" />
    </test>
</configuration>

Cấu hình Soong mẫu để tự động tạo Robolectric

Thay vì tạo cấu hình kiểm thử theo cách thủ công như ở trên, Soong có thể tự động tạo cấu hình bằng cách sử dụng nội dung khai báo như ví dụ này.

android_robolectric_test {
    name: "HelloWorldRoboTest",
    srcs: [
        "src/**/*.java",
    ],

    // Include the testing libraries
    static_libs: [
        "mockito-robolectric-prebuilt",
        "platform-test-annotations",
        "testng",
        "truth-prebuilt",
    ],

    instrumentation_for: "HelloWorldApp",
}

Kiểm thử Python

Nếu logic kiểm thử được viết bằng Python, hãy sử dụng loại bản dựng python_test_host để tạo tệp par mà TF PythonBinaryHostTest có thể chạy.

Cấu hình kiểm thử TradeFed mẫu

<configuration description="Config to run atest unittests">
    <test class="com.android.tradefed.testtype.python.PythonBinaryHostTest" >
        <option name="par-file-name" value="atest_unittests" />
        <option name="test-timeout" value="2m" />
    </test>
</configuration>

Chế độ cài đặt bộ kiểm thử

Để TF có thể truy cập vào kiểm thử phía máy chủ cho một bản dựng nhất định, hãy đặt chế độ cài đặt `test_suites` của mô-đun kiểm thử thành `general-tests`:

test_suites: ["general-tests"],

Với chế độ cài đặt này, kiểm thử được đóng gói vào general-tests.zip trên mục tiêu test_suites.