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 một bài kiểm thử phía máy chủ lưu trữ không yêu cầu thiết bị, chẳng hạn như một bài kiểm thử chạy trên một phiên bản Linux GCE. (Để biết thông tin chi tiết về cách viết một chương trình kiểm thử dựa trên máy chủ lưu trữ 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ử dựa trên máy chủ lưu trữ trong Trade Federation.)

Các loại kiểm thử phía máy chủ

Bạn có thể chạy một số loại kiểm thử phía máy chủ thông qua Trade Federation (TF).

Kiểm thử gốc (gtest)

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

Đây là một 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ột máy chủ. Bạn có thể tự động tạo cấu hình kiểm thử mẫu. Trừ phi quy trình kiểm thử của bạn cần một chế độ 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ự động tạo cấu hình kiểm thử để tạo các 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 một kiểm thử gốc, hãy xem phần Thêm ví dụ về kiểm thử gốc mới.

Kiểm thử máy chủ JAR

Kiểm thử máy chủ lưu trữ JAR (Java), chẳng hạn như JUnit, là những kiểm thử không cần chạy trên thiết bị và cung cấp mức độ phù hợp của mã cho dự án Java của bạn. Bạn có thể định cấu hình các kiểm thử như vậy để chạy trên một 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 một bài kiểm thử JUnit phía máy chủ của HelloWorldHostTest. Xin lưu ý rằng bạn có thể tạo tự động cấu hình kiểm thử ở trên. Trừ phi hoạt động kiểm thử của bạn cần có chế độ thiết lập hoặc dọn dẹp đặc biệt, hãy dựa vào quá trình 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 về cách viết mộ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 riêng biệt

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

  • Đây là trình chạy mặc định được dùng cho các kiểm thử đơn vị Robolectric và JUnit
  • Tradefed chỉ hỗ trợ các kiểm thử JUnit trong môi trường biệt lập.
  • 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 cách ly chỉ đặt trình chạy shim và jar kiểm thử của bạn trên đường dẫn lớp.
  • Có một số lượng chi phí 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 (riêng 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 một 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ủ lưu trữ riêng biệt, với một số lựa 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 quy trình con. Mặc dù 2 lựa chọn còn lại là các phương pháp hay nhất, nhưng lựa chọn này là bắt buộc để chạy thử nghiệm Robolectric thành công.
  • Lựa chọn java-folder cho phép thay đổi 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 mà hệ thống máy chủ lưu trữ ưu tiên.
  • Lựa chọn exclude-paths cho phép trình chạy quy trình con hoàn toàn tránh tải các mô-đun cụ thể. Điều này hữu ích khi một JAR đi kèm với các lớp không cần thiết 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 đưa ra 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 một 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",
}

Thử nghiệm 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 một 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ộ thử nghiệm

Để 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 mô-đun kiểm thử `test_suites` thành `general-tests`:

test_suites: ["general-tests"],

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