Google Espresso hoặc Robotium [đã đóng cửa]


115

Tôi phải sử dụng công cụ kiểm tra giao diện người dùng tự động và tôi đang phân vân giữa việc sử dụng Robotium và Google Espresso.

Sự khác biệt chính giữa hai là gì? Có những tính năng nào tồn tại trong cái này mà không tồn tại ở cái kia không?


19
Tôi thực sự ghét khi mọi người phản đối mà không viết bất kỳ bình luận nào. Tôi sẽ đánh giá cao nếu người downvoting ghi một số ý kiến như trong lý do tại sao anh / cô ấy đang làm điều đó
Androidme

8
Tôi nghĩ rằng câu hỏi rất hữu ích. Rất nhiều nhà phát triển đang tự hỏi điều này. Sự khác biệt là gì? Tôi nghĩ vấn đề là cách bạn đang hỏi. Bạn nên hỏi nó chi tiết hơn chứ không chỉ hỏi sử dụng cái nào.
tasomaniac

8
Đây là câu hỏi chính xác mà tôi muốn trả lời. Cảm ơn cho đăng tải
Richard Fung

8
Tôi không thích thực tế là điều này là lạc đề theo StackOverflow. Tôi biết rằng nếu chúng ta phải so sánh từng thư viện và công cụ thì có thể có rất nhiều câu trả lời dựa trên ý kiến, nhưng một câu hỏi như thế này yêu cầu sự khác biệt giữa hai tài nguyên là rất hữu ích.
David Argyle Thacker

Câu trả lời:


175

Tiết lộ đầy đủ: Tôi là một trong những tác giả của Espresso.

Cả Espresso và Robotium đều là các khuôn khổ dựa trên thiết bị đo, có nghĩa là chúng sử dụng Android Instrumentation để kiểm tra và tương tác với các Hoạt động đang được thử nghiệm.

Tại Google, chúng tôi bắt đầu bằng cách sử dụng Robotium vì nó tiện lợi hơn so với thiết bị đo đạc cổ phiếu (xin cảm ơn các nhà phát triển Robotium đã làm như vậy). Tuy nhiên, nó không đáp ứng được nhu cầu của chúng tôi về một khuôn khổ giúp các nhà phát triển dễ dàng viết các bài kiểm tra đáng tin cậy .

Những tiến bộ lớn trong Espresso so với Robotium:

  1. Đồng bộ hóa. Theo mặc định, logic kiểm tra thiết bị chạy trên một luồng (thiết bị đo đạc) khác với các hoạt động giao diện người dùng (được xử lý trên luồng giao diện người dùng). Nếu không đồng bộ hóa các hoạt động kiểm tra với các bản cập nhật giao diện người dùng, các bài kiểm tra sẽ dễ bị bong tróc - tức là sẽ thất bại ngẫu nhiên vì các vấn đề về thời gian. Hầu hết các tác giả thử nghiệm bỏ qua thực tế này, một số thêm cơ chế ngủ / thử lại và thậm chí ít triển khai mã an toàn luồng phức tạp hơn. Không ai trong số này là lý tưởng. Espresso quan tâm đến an toàn luồng bằng cách đồng bộ hóa liền mạch các hành động thử nghiệm và xác nhận với giao diện người dùng của ứng dụng đang thử nghiệm. Robotium cố gắng giải quyết vấn đề này bằng các cơ chế ngủ / thử lại, cơ chế này không chỉ không đáng tin cậy mà còn khiến các bài kiểm tra chạy chậm hơn mức cần thiết.

  2. API. Espresso có một API nhỏ, được xác định rõ ràng và có thể dự đoán được, có thể tùy chỉnh. Bạn cho khung công tác biết cách xác định vị trí một phần tử giao diện người dùng bằng cách sử dụng các trình so khớp hamcrest tiêu chuẩn và sau đó hướng dẫn nó thực hiện một hành động hoặc kiểm tra xác nhận trên phần tử đích. Bạn có thể đối chiếu điều này với API của Robotium, nơi tác giả thử nghiệm dự kiến ​​sẽ chọn từ hơn 30 phương pháp nhấp chuột. Hơn nữa, Robotium tiết lộ các phương thức nguy hiểm như getCurrentActivity (hiện tại có nghĩa là gì?) Và getView, cho phép bạn hoạt động trên các đối tượng bên ngoài luồng chính (xem điểm ở trên).

  3. Xóa thông tin lỗi. Espresso cố gắng cung cấp thông tin gỡ lỗi phong phú khi xảy ra lỗi. Hơn nữa, bạn có thể tùy chỉnh cách xử lý lỗi của Espresso bằng trình xử lý lỗi của riêng bạn. Tôi đã không thử nó trong một thời gian, nhưng các phiên bản trước của Robotium bị lỗi xử lý không nhất quán (ví dụ: phương thức clickOnView sẽ nuốt SecurityExceptions).

Trái ngược với câu trả lời trước đó, Espresso được hỗ trợ trên tất cả các phiên bản API với số lượng người dùng đáng kể (xem: http://developer.android.com/about/dashboards/index.html ). Nó hoạt động trên một số phiên bản cũ hơn, nhưng thử nghiệm trên những phiên bản đó sẽ rất lãng phí tài nguyên. Nói về thử nghiệm ... Espresso được kiểm tra mọi thay đổi bằng bộ thử nghiệm toàn diện (với độ phủ hơn 95%) cũng như phần lớn các ứng dụng Android do Google phát triển.


Chào ! Cảm ơn câu trả lời của bạn, Espresso có cung cấp khả năng kiểm tra nhiều ứng dụng trong cùng một trường hợp thử nghiệm không? Tôi phải kiểm tra ứng dụng của mình gọi một hoạt động từ ứng dụng khác (ứng dụng khác của tôi chia sẻ cùng sharedUserId) và sau đó truy xuất kết quả. Tôi không thể làm điều đó với Robotium, nhưng có thể với Espresso? :-)
nbe_42

1
Không - bạn không thể tương tác với giao diện người dùng bên ngoài quy trình của bạn với Espresso. Đây là một hạn chế của khung thiết bị đo đạc.
ValeraZakharov

1
@ValeraZakharov :: Hii ... !! Như bạn đã nói, espresso sẽ đảm nhận tính năng Đồng bộ hóa chuỗi giao diện người dùng và không cần đặt Sleeps. Nhưng trong trường hợp của tôi, tôi đã viết một vài testcase và tất cả các testcase đang hoạt động trong máy cục bộ của tôi (Với một lần ngủ cho mỗi TestSuite khi bắt đầu). Nhưng gần như 99% testcase gặp lỗi khi tôi chạy với jenkins cục bộ / máy chủ. Tôi đã tắt tất cả các hoạt ảnh trong trình giả lập jenkins. Hầu hết thời gian tôi nhận được AppNotIdleException. Tôi không thể tìm ra nguyên nhân gốc rễ. Bạn có thể vui lòng giúp tôi không.
Naresh Gunda

@Radu Đã làm được. Nhận xét của bạn là vô hiệu và không có lời giải thích thích hợp có vẻ như là một nỗ lực điên rồ để thu hút sự chú ý.
Rakib

9

Espresso nhanh hơn nhiều so với Robotium, nhưng chỉ hoạt động trên một số phiên bản SDK.

Vì vậy, nếu bạn muốn một bài kiểm tra hoạt động trên tất cả các thiết bị, hãy sử dụng Roboitum. Nếu không, hãy thưởng thức cà phê espresso, và đừng quên rằng bạn sẽ là người thử nghiệm bản beta trong một thời gian nữa.


Một ủng hộ sẽ giúp tôi tạo từ đồng nghĩa cho thẻ này ..;)
Snicolas

2
Liên kết ở trên đã thay đổi, đây là liên kết mới: google.github.io/android-testing-support-library/docs/espresso/…
Evin1_
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.