Xem báo cáo mức độ sử dụng mã (bằng tác nhân trên thiết bị)

Trình bổ trợ Android cho Gradle (AGP) có thể tạo báo cáo mức độ sử dụng mã cho bài kiểm thử đo lường bằng một tác nhân đo lường trên thiết bị. Theo mặc định, AGP sẽ đo lường các lớp của ứng dụng bằng JaCoCo khi tạo ứng dụng, tức là AGP sẽ thêm mã ghi lại những phần của ứng dụng mà chương trình kiểm thử chạy. Với tác nhân đo lường mức độ sử dụng trên thiết bị, AGP sẽ tạo ứng dụng mà không cần mã bổ sung này và tác nhân sẽ đo lường các lớp của ứng dụng trên thiết bị kiểm thử trong khi chạy kiểm thử. Trang này mô tả cách bật mức độ sử dụng mã trên thiết bị và tạo báo cáo.

So với mức độ sử dụng mã trong thời gian xây dựng, mức độ sử dụng mã trên thiết bị mang lại những lợi ích sau:

  • Bản dựng nhanh hơn: AGP không chạy bước đo lường JaCoCo trên các lớp của ứng dụng và các phần phụ thuộc của chúng, nhờ đó có thể giảm thời gian tạo bản dựng từ 10% đến 20%.
  • Tệp APK gỡ lỗi nhỏ hơn: AGP không thêm mã theo dõi mức độ sử dụng vào các lớp của ứng dụng, nhờ đó có thể giảm 20-25% kích thước tệp APK gỡ lỗi.
  • Không có lớp được tạo không dùng đến trong báo cáo: Các lớp được tạo mà kiểm thử không dùng đến sẽ không làm giảm số liệu về mức độ phù hợp.

Mức cải thiện thực tế về thời gian tạo bản dựng và kích thước APK phụ thuộc vào dự án của bạn.

Điều kiện tiên quyết

Để sử dụng mức độ sử dụng mã trên thiết bị, hãy đảm bảo rằng dự án và thiết bị thử nghiệm của bạn đáp ứng các yêu cầu sau:

  • AGP 9.6.0-alpha01 trở lên.
  • Thiết bị hoặc trình mô phỏng chạy Android 9 (cấp độ API 28) trở lên.
  • Loại bản dựng có thể gỡ lỗi cho biến thể mà bạn kiểm thử, chẳng hạn như loại bản dựng debug mặc định. Tác nhân chỉ có thể đính kèm vào các ứng dụng có thể gỡ lỗi.
  • Các chương trình kiểm thử đo lường chạy bằng AndroidJUnitRunner hoặc một trình chạy kiểm thử tuỳ chỉnh mở rộng trình chạy này.

Bật mức độ sử dụng mã trên thiết bị

Mức độ sử dụng mã trên thiết bị sử dụng cùng một thuộc tính enableAndroidTestCoverage như mức độ sử dụng mã tại thời điểm xây dựng. Đặt enableAndroidTestCoverage thành true trong tệp bản dựng cấp mô-đun cho mỗi biến thể mà bạn muốn nhận báo cáo mức độ phù hợp:

Kotlin

android {
    // ...
    buildTypes {
        debug {
            // Enable coverage for instrumentation tests
            enableAndroidTestCoverage = true
        }
    }
}

Groovy

android {
    // ...
    buildTypes {
        debug {
            // Enable coverage for instrumentation tests
            enableAndroidTestCoverage true
        }
    }
}

Sau đó, hãy bật tác nhân mức độ phù hợp trên thiết bị và tổng hợp báo cáo trong tệp gradle.properties của dự án:

android.experimental.androidTest.coverage.useOnDeviceAgent=true
android.experimental.reportAggregationSupport=true

Mức độ sử dụng mã trên thiết bị tạo báo cáo HTML bằng cùng một trình kết xuất như báo cáo mức độ sử dụng mã hợp nhất, vì vậy, báo cáo này yêu cầu cả hai thuộc tính.

Tạo báo cáo mức độ sử dụng mã trên thiết bị

Để chạy kiểm thử đo lường và tạo báo cáo mức độ phù hợp, hãy kết nối thiết bị hoặc khởi động trình mô phỏng, sau đó chạy tác vụ sau:

Phạm vi bảo hiểm Lệnh Báo cáo vị trí
Một biến thể ./gradlew :module-name:createVariantNameAndroidTestCoverageReport path-to-your-project/module-name/build/reports/coverage/androidTest/variant/connected/index.html

Sự khác biệt so với mức độ sử dụng mã trong thời gian xây dựng

Báo cáo mức độ phù hợp trên thiết bị và thời gian xây dựng có thể cho thấy các kết quả khác nhau cho cùng một chương trình kiểm thử. Hãy lưu ý những điểm khác biệt sau đây khi bạn so sánh hai báo cáo hoặc khi bạn chuyển ngưỡng mức độ phù hợp từ báo cáo này sang báo cáo kia:

Khu vực Mức độ sử dụng mã trong thời gian xây dựng Mức độ sử dụng mã trên thiết bị
Khi các lớp được đo lường Khi AGP tạo ứng dụng của bạn, việc sử dụng JaCoCo Trên thiết bị kiểm thử trong khi chạy kiểm thử, sử dụng tác nhân mức độ phù hợp
Các lớp trong báo cáo Tất cả các lớp trong mô-đun của bạn Chỉ những lớp trong không gian tên của mô-đun tải trong khi kiểm thử chạy, vì vậy, tỷ lệ phần trăm mức độ phù hợp có thể cao hơn
Số lượng lệnh Lệnh mã byte Java Hướng dẫn về mã byte DEX
Số lượng nhánh Nhánh trong mã byte Java Các nhánh trong mã byte DEX. D8 có thể biên dịch các điều kiện thành nhiều nhánh và mỗi công cụ sẽ bỏ qua các nhánh khác nhau do trình biên dịch tạo, vì vậy, số lượng có thể khác nhau.
Bộ đếm Hướng dẫn, nhánh, dòng, độ phức tạp, phương thức và lớp Lệnh, nhánh, dòng, phương thức và lớp. Chưa hỗ trợ bộ đếm độ phức tạp.
Thiết bị thử nghiệm Tất cả cấp độ API mà ứng dụng của bạn hỗ trợ Android 9 (API cấp 28) trở lên
Dữ liệu thô về mức độ phù hợp .ec tệp coverage_metadata.pb và coverage_hits.pb tệp

Để chuyển về mức độ sử dụng mã trong thời gian xây dựng, hãy đặt android.experimental.androidTest.coverage.useOnDeviceAgent=false hoặc xoá thuộc tính. Bạn không cần thay đổi tệp bản dựng hoặc các tác vụ mà bạn chạy.

Vấn đề đã biết

Mức độ sử dụng mã trên thiết bị có các vấn đề đã biết sau đây:

  • Lớp không tải: Các lớp không bao giờ tải trong khi chạy kiểm thử sẽ không xuất hiện trong báo cáo. Báo cáo mức độ sử dụng mã trong thời gian xây dựng sẽ liệt kê các tệp này với mức độ sử dụng là 0%.
  • Báo cáo tổng hợp: Nếu dự án của bạn cũng thu thập mức độ phù hợp từ các kiểm thử máy chủ lưu trữ, chẳng hạn như kiểm thử đơn vị, thì báo cáo mức độ phù hợp tổng hợp mà các tác vụ testAllSuites và testAllSuitesWithDependencies tạo ra sẽ kết hợp số lượng mã byte Java từ các kiểm thử đó với số lượng mã byte DEX từ tác nhân. Do sự khác biệt giữa hai loại này, nên số lượng lệnh và nhánh tổng hợp có thể khác với số lượng trong báo cáo mức độ sử dụng mã tại thời điểm xây dựng.

Báo cáo mọi ý kiến phản hồi và vấn đề khác thông qua Trình theo dõi sự cố.