Xin chào, Hackernoon! Tên tôi là Alexander Karpenko và tôi làm việc với tư cách là Kỹ sư QA tại inDrive . Tôi đã chuẩn bị bài viết này cho các chuyên gia QA mới làm quen. Dưới đây, tôi sẽ cho bạn biết cách sử dụng Android Debug Bridge (ADB) trong thử nghiệm ứng dụng dành cho thiết bị di động và tại sao nó lại cần ngay từ đầu.
Tôi tưởng tượng bạn đã có kiến thức cơ bản về các nguyên tắc cơ bản về kiểm thử nên tôi sẽ bỏ qua quá trình chuẩn bị và thiết lập dự án.
Khả năng của ADB không ngừng được mở rộng, nhưng tôi sẽ chia sẻ một số kỹ thuật có giá trị sẽ cải thiện quy trình làm việc hàng ngày của bạn. Vì câu chuyện của tôi là về thử nghiệm ứng dụng dành cho thiết bị di động, tôi sẽ tập trung vào macOS, cho phép bạn làm việc hiệu quả với tất cả các nền tảng di động phổ biến. Đối với các hệ điều hành khác, các ví dụ có thể hơi khác một chút, nhưng hy vọng rằng người dùng Windows sẽ không chống lại tôi.
Để bắt đầu, hãy liên hệ với các lệnh cơ bản nhất để đảm bảo các điểm sau này được trình bày theo một trình tự hợp lý.
Thông thường, chúng tôi làm việc với một thiết bị, nhưng đôi khi một số thiết bị được kết nối, ví dụ: qua TCP / IP. Trong trường hợp này, chúng ta phải chỉ định thiết bị mà chúng ta muốn chạy lệnh theo cách thủ công.
adb devices
- hiển thị danh sách các thiết bị được kết nối (sử dụng công tắc -l
kéo lên danh sách các thuộc tính mở rộng). Điều này rất hữu ích nếu nhiều thiết bị được kết nối và không rõ chúng ta cần thiết bị nào.
Để cho ADB biết thiết bị nào cần nhắm mục tiêu, số sê-ri của thiết bị phải được chỉ định sau công tắc -s
:
adb -s <serial_number> <command>
, trong đó <serial_number>
là số sê-ri của thiết bị từ danh sách và <command>
là lệnh thực thi trên thiết bị.
Ví dụ: cài đặt một ứng dụng trên một thiết bị cụ thể từ danh sách:
adb -s 32312b96 install user/download/app.apk
Một tình huống thường xuyên khác là khi hoạt động đồng thời liên quan đến một thiết bị thực và một trình giả lập, ví dụ, cho các vai trò khác nhau của người thực thi / người khởi tạo. Trong trường hợp này, các thiết bị có thể dễ dàng phân biệt không phải bằng số sê-ri của chúng mà dựa trên các chuyển đổi —d —e
sau lệnh quảng cáo. Thí dụ:
adb —d install user/download/app.apk
- lệnh sẽ được thực thi trên thiết bị thực, với công tắc —е
trên trình giả lập.
Chúng tôi cũng có thể kết nối với thiết bị qua TCP / IP khi thiết bị sử dụng cùng một mạng Wi-Fi. Để thực hiện việc này, hãy kết nối thiết bị với PC bằng cáp và thay đổi chế độ hoạt động trên thiết bị từ USB sang TCP / IP bằng cách sử dụng lệnh:
adb tcpip 5555
Ví dụ: thông qua cài đặt điện thoại trong Thông tin chung hoặc bằng lệnh:
adb shell ifconfig wlan0
Nếu thiết bị của bạn đã bị ngắt kết nối khỏi PC tại thời điểm này, hãy nhớ chỉ định thêm S / N của thiết bị. Tiếp theo, chúng tôi kết nối với nó:
adb connect ip_address:5555
Có thể tắt thiết bị bằng lệnh:
adb disconnect ip_address:5555
adb disconnect
- để tắt tất cả các thiết bị TCP / IP của chúng tôi.
Để quay lại chế độ USB, hãy sử dụng lệnh:
adb usb
(chữ thường là quan trọng).
Ứng dụng được cài đặt bằng lệnh:
adb install <apk_path>
, trong đó <apk_path>
là đường dẫn tuyệt đối đến tệp ứng dụng APK của chúng tôi.
Dưới đây là một số công tắc hữu ích sau lệnh cài đặt thường được sử dụng:
—d
- cài đặt lại với phiên bản đã hạ cấp. Nếu không, sẽ xảy ra lỗi (lỗi) [INSTALL_FAILED_VERSION_DOWNGRADE]
).
—r
- cài đặt lại ứng dụng đã lưu dữ liệu.
—g
- cấp tất cả các quyền được chỉ định trong tệp kê khai ứng dụng trong quá trình cài đặt.
Ví dụ: một ứng dụng được cài đặt bằng công tắc này sẽ không yêu cầu bạn cho phép truy cập vào vị trí địa lý hoặc không gian lưu trữ để tải ảnh xuống.
Ứng dụng được gỡ cài đặt dựa trên tên của gói. Để làm được điều này, bạn cần biết ứng dụng được đăng ký vào hệ thống như thế nào. Sử dụng Shell và Trình quản lý gói (chiều).
Chạy lệnh sau để hiển thị danh sách tất cả các ứng dụng đã cài đặt:
adb shell pm list packages
Danh sách có thể được lọc theo tên ứng dụng. Bạn sẽ cần điều này nếu danh sách khá lớn, nhưng chúng tôi biết từ nào được chứa trong tên của gói:
adb shell pm list packages | grep com.myApp
Bạn cũng có thể xuất ra một tệp riêng biệt và tìm gói cần thiết ở đó:
adb shell pm list packages > /Users/username/packages.txt
Bây giờ chúng ta đã biết cách tìm ra tên của gói ứng dụng, hãy quay lại cách xóa nó khỏi thiết bị. Điều này có thể được thực hiện bằng cách sử dụng lệnh:
adb uninstall com.myApp
adb uninstall -k com.myApp
- xóa ứng dụng nhưng lưu dữ liệu và tệp bộ nhớ cache.
Tôi sẽ trình bày riêng một lệnh thường có thể hữu ích:
adb shell pm clear com.myApp
- dọn dẹp bộ nhớ cache và dữ liệu của ứng dụng.
Tôi nghĩ đây là một tình huống hiếm gặp. Nhưng điều này có thể hữu ích cho ai đó, giống như nó đã từng làm với tôi. Tất cả các ứng dụng đã cài đặt đều lưu trữ các tệp APK của chúng trong thư mục / data / appfolder. Vì bạn biết tên của gói, bạn có thể tìm thấy nơi ứng dụng được cài đặt và tải xuống APK của nó từ đó. Để thực hiện việc này, hãy chạy lệnh sau:
adb shell pm path com.myApp
- hiển thị thư mục cài đặt của ứng dụng.
Đây có thể không phải là tất cả những gì dễ thấy:
package:/data/app/~~YcTsnr19yQR6ENa0q2EMag==/com.myApp—IHasf91SDB0erQLagc8j0Q==/base.apk
Nhưng đây chính xác là cách chúng ta cần con đường này để xem xét. Chúng ta hãy bỏ qua một chút trước và xem cách chúng ta có thể sao chép tệp chúng ta cần vào PC từ điện thoại. Điều này có thể được thực hiện bằng cách sử dụng lệnh:
adb pull <crazyPath> /Users/username/
, trong đó <crazyPath>
là đầu ra của lệnh trước đó của chúng tôi, /Users/username/
là đường dẫn trên PC mà bạn muốn sao chép tệp của chúng tôi vào.
Hãy nói ngắn gọn về việc kiểm tra các trường văn bản. Ví dụ: bạn phải kiểm tra giới hạn số ký tự tối đa có thể được nhập vào một trường văn bản. Nếu bạn sử dụng một thiết bị, các tập dữ liệu đã chuyển khác nhau có thể được lưu trữ trên điện thoại hoặc trên đám mây. Tuy nhiên, nếu thử nghiệm phải được thực hiện trên các thiết bị khác nhau, dữ liệu thử nghiệm có thể được lưu trữ trên PC và được chuyển đến các thiết bị thông qua các lệnh sau:
adb shell input text <text>
Thí dụ:
adb shell input text test%stest
- chuỗi "test test" sẽ được nhập. Thay thế khoảng trắng bằng các ký tự đặc biệt %s
, nếu không, chỉ phần trước khoảng trắng sẽ được gửi đến thiết bị. Nếu chúng ta sử dụng các ký tự đặc biệt như !@#
Trong văn bản đang được truyền, chúng phải được đánh dấu bằng cách chèn dấu gạch chéo ngược ( \
) trước chúng.
Ví dụ, lệnh:
adb shell input text test\!\@\#\$%stest
sẽ hiển thị “test!@#$ test”
trên màn hình
(ADB không hoạt động với các ký tự Cyrillic và tạo ra lỗi NullPointerException).
Nội dung của khay nhớ tạm có thể được chuyển theo cách này:
adb shell input text $(pbpaste)
Hãy nhớ rằng một số ký tự có thể không được truyền khi chúng xuất hiện trên PC. Vấn đề có thể được giải quyết bằng cách sử dụng trình soạn thảo văn bản trực tuyến (sed). Dưới đây là một ví dụ về lệnh mở rộng trong đó chúng tôi thay thế tất cả các khoảng trắng trong bộ đệm bằng các ký tự đặc biệt mà chúng tôi cần để đảm bảo văn bản được chuyển đến thiết bị theo đúng cách:
adb shell input text $(pbpaste | sed -e 's/ /\%s/g')
pbpaste
là văn bản được chứa trong bộ đệm.
Công ”—e”
cho phép bạn thực hiện các lệnh cần thiết để chỉnh sửa văn bản.
“s/take this/change_it_to/option”
là mẫu (mẫu) để sử dụng.
/g
là cờ để thay thế tất cả các kết quả phù hợp cho một mẫu cụ thể, không có ngoại lệ.
Hãy nhớ rằng tốt nhất là khi thử nghiệm được thực hiện trong môi trường gần với cuộc sống thực nhất có thể, nhưng sẽ rất hữu ích khi biết rằng tùy chọn này cũng có sẵn.
Chiến lược này sẽ giúp bạn kiểm tra các liên kết sâu đến các màn hình cần thiết, khi nhiều màn hình được sử dụng hoặc nếu chúng tôi gặp sự cố với cơ sở hạ tầng và không có thông báo đẩy nào đi qua hoặc nếu chưa có thông báo nào đến nhưng bạn cần kiểm tra xem ứng dụng hoạt động.
Bạn cũng có thể kiểm tra xem ứng dụng có hoạt động chính xác hay không và không bị lỗi nếu một liên kết sâu không hợp lệ xuất hiện trong cảnh báo thông báo đẩy. Hoặc khi xử lý tình huống mà chúng tôi đi theo một liên kết sâu đến một màn hình không còn tồn tại hoặc trạng thái của nó đã thay đổi, hoặc nếu ngay từ đầu chúng tôi không nên có quyền truy cập vào màn hình đó, bởi vì cảnh báo đẩy đã ở thông báo trong một thời gian dài. Có thể có rất nhiều tình huống như thế này.
Trong Shell ADB, chúng ta có thể sử dụng Trình quản lý Hoạt động (AM) để thực thi các lệnh.
Chúng tôi bắt đầu hoạt động của mình và gửi liên kết sâu mà chúng tôi muốn kiểm tra. Liên kết sâu thường chứa ký tự “&”, ngăn cách giữa các màn hình. Do đó, khi mở qua một thiết bị đầu cuối, một dấu gạch chéo ngược (\) phải được chèn trước nó.
adb shell am start -W -a android.intent.action.VIEW -d “myApp://open/client/trip\&last_trip=test” com.myApp
am
- gọi Người quản lý hoạt động.
W
- chờ tải xuống trước khi thực hiện lệnh.
a
- xác định hành động nào sẽ được thực hiện. Trong trường hợp này, đó là action.View .
d
- dữ liệu cần thiết cho quá trình chạy. Trong trường hợp này, chúng ta đang nói về bản thân liên kết sâu và sau đó là ứng dụng sẽ được sử dụng để mở nó.
Bạn có thể phải chèn lại dấu ngoặc kép theo cách thủ công hoặc thay thế chúng bằng dấu ngoặc kép khi chuyển lệnh đến thiết bị đầu cuối. Nếu có lỗi cú pháp, bạn có thể nhận được một thông báo thích hợp.
Sử dụng lệnh này để chụp ảnh màn hình:
adb shell screencap -p <device_path/screenshot_name.png>
Thí dụ:
adb shell screencap -p /sdcard/screencap.png
- chụp ảnh màn hình và lưu tệp có tên screencap.png
trên thiết bị vào thư mục /sdcard/screencap.png
.
Bạn có thể lưu ảnh chụp màn hình trên máy tính của mình như sau:
adb pull /sdcard/screencap.png
- theo mặc định, tệp được sao chép vào thư mục của người dùng hiện tại, tức là /Users/username/screencap.png
.
Hoặc bạn có thể chạy toàn bộ lệnh cùng một lúc:
adb shell screencap -p /sdcard/screencap.png && adb pull /sdcard/screencap.png
Trong các phiên bản mới nhất của ADB, lệnh sau có thể được sử dụng để lấy ảnh chụp màn hình:
adb exec—out screencap —p > screen.png
- tệp ảnh chụp màn hình cũng sẽ xuất hiện trong thư mục của người dùng hiện tại trên PC.
Đường dẫn mặc định có thể được thay đổi theo cách thủ công bằng cách được thêm vào cuối lệnh:
adb exec—out screencap -p > downloads/test/screen.png
- và ảnh chụp màn hình sẽ xuất hiện trong thư mục /Users/username/downloads/test/screen.png
.
Nếu quan tâm, bạn cũng có thể tự động hóa quá trình này một chút bằng cách thêm bí danh vào bash_profile
. Trong macOS, bạn có thể sử dụng Dịch vụ Automator để tạo và thiết lập các phím nóng.
Sử dụng lệnh này để quay video:
adb shell screenrecord device_path
.
Thí dụ:
adb shell screenrecord /sdcard/screenrecord.mp4
- sử dụng lệnh này để bắt đầu quay màn hình thiết bị dựa trên cài đặt mặc định trong ba phút và lưu kết quả vào tệp /sdcard/screenrecord.mp4
trên thiết bị.
Bạn có thể chỉ định thời gian ghi theo cách thủ công bằng cách sử dụng công tắc —time—limit time
(tính bằng giây, nhưng thời lượng ghi vẫn bị giới hạn ở 180 giây).
Có thể dừng quá trình ghi trước thời hạn bằng cách nhấn CTRL + C
Tệp cũng có thể được sao chép bằng cách sử dụng lệnh kéo, theo cách tương tự như quy trình chụp ảnh màn hình.
Bạn cũng có thể kiểm tra các tính năng bổ sung của tiện ích này bằng cách sử dụng --help
tắc - trợ giúp. Ngẫu nhiên, nó có thể thay đổi độ phân giải ghi và tốc độ bit, cũng như thêm dữ liệu bổ sung cho báo cáo lỗi.
Sẽ rất hữu ích khi sử dụng công tắc -bugreport
để bổ sung thông tin về hệ thống được sử dụng để ghi dưới dạng khung hình đầu tiên trong video.
Bây giờ chúng ta đã trình bày cách tải xuống một số nội dung từ thiết bị, hãy tập trung một chút vào cách tải nội dung lên đó.
Chúng tôi đã mở ứng dụng trên PC, điều chỉnh định dạng và nội dung, tải xuống điện thoại và kiểm tra để đảm bảo rằng ứng dụng phản hồi chính xác với các định dạng không xác định và giới hạn quá khổ. Để tải tệp lên điện thoại từ PC, bạn có thể sử dụng lệnh sau:
adb push /Users/username/file <device_path>
Hãy chạy lệnh:
adb push /Users/username/screen.png sdcard
- điều này sẽ sao chép tệp screen.png
của chúng tôi vào thẻ SD của điện thoại.
Một ví dụ khác từ kinh nghiệm liên quan đến việc kiểm tra xem trạng thái của ứng dụng đã được khôi phục sau khi hệ thống xóa hay chưa. Thu gọn ứng dụng, hủy quá trình - hành động này mô phỏng tình huống khi hệ thống dừng quá trình do không có đủ bộ nhớ:
adb shell am kill com.myApp
Chạy lại và kiểm tra xem mọi thứ có hoạt động tốt hay không.
Chúng tôi đã gặp tình huống này: người dùng thu nhỏ một ứng dụng khi đang ở trên một màn hình nhất định. Sau một thời gian, hệ thống làm chậm quá trình và lưu vào bộ nhớ cache trạng thái của nó. Khi người dùng cố gắng mở rộng ứng dụng, nó sẽ bị treo. Điều này xảy ra khi dữ liệu từ bộ nhớ cache được truy cập, vì các phân đoạn đang khôi phục lại ngăn xếp và trạng thái của chúng, nhưng bộ nhớ cache đã trống. Thật không may, lỗi này đã bị bỏ qua trong giai đoạn thử nghiệm, bởi vì chúng tôi đã không gặp phải nó trước đây, và vì vậy nó đã được đưa vào sản xuất. Bây giờ bạn biết điều đó là có thể, bạn có thể đảm bảo rằng bạn không lặp lại những sai lầm của chúng tôi.
Bạn nên kiểm tra nhật ký khi cố gắng tìm ra nguyên nhân khiến ứng dụng gặp sự cố. Nếu bạn muốn lưu nội dung bộ đệm nhật ký hiện tại, điều này có thể được thực hiện bằng cách sử dụng lệnh sau:
adb logcat
- hiển thị nhật ký trong thời gian thực.
adb logcat —d
- hiển thị thông tin nhật ký tại thời điểm lệnh được chạy mà không cần thêm các sự kiện thực trên thiết bị. Cũng có thể xuất nhật ký ra một tệp riêng biệt bằng cách sử dụng lệnh: adb logcat —d > file.log
(tệp được tạo trong thư mục của người dùng hiện tại).
Và lệnh adb logcat >> file.log
sẽ ghi nhật ký trực tiếp vào tệp, thêm tất cả các sự kiện thực trên thiết bị.
Có một số cấp độ theo thứ tự ưu tiên tăng dần: V - Verbose, D - Debug, I - Info, W - Warn, E - Error, F - Fatal, S - Silent, chẳng hạn:
adb logcat '*:E'
- sẽ xuất ra các bản ghi có lỗi và cấp cao hơn.
Bây giờ chúng ta hãy tìm hiểu sơ lược về định dạng và bộ lọc đầu ra. Bạn có thể thay đổi định dạng của đầu ra cho bảng điều khiển bằng cách sử dụng công tắc -v, ví dụ:
adb logcat -v time
- xuất các bản ghi tuần tự bằng cách ghi lại các mốc thời gian.
adb logcat -v color
- hiển thị từng cấp độ của nhật ký bằng một màu khác nhau (rất hữu ích khi đọc).
adb logcat -v brief
- hiển thị ưu tiên quy trình, thẻ và PID.
Mỗi thông báo nhật ký có một thẻ và mức độ ưu tiên liên quan của nó. Bạn có thể sử dụng chúng để giảm lượng đầu ra cho bảng điều khiển:
adb logcat SwrveSDK:I '*:S'
- sẽ hiển thị các sự kiện phân tích mà chúng tôi gửi qua dịch vụ swrve. Tham số *:S (-s)
chỉ ra rằng đầu ra nhật ký bị giới hạn trong biểu thức bộ lọc mà chúng tôi đã chỉ định rõ ràng.
Và như mọi khi, bạn có thể sử dụng tiện ích grep để lọc đầu ra:
adb logcat '*:E' —v color | grep com.myApp
Theo truyền thống, để biết thêm thông tin, bạn luôn có thể chuyển sang trợ lý của mình adb logcat --help
Ví dụ: nếu một lỗi được tái tạo trong khi thiết bị không được kết nối, bạn có thể kết nối nó ngay lập tức và chuyển hướng nhật ký đến một tệp.
Để gỡ lỗi thêm, trước khi thu thập nhật ký, bạn có thể xóa trước bộ đệm nhật ký trước khi tạo lại lỗi để loại bỏ dữ liệu thừa. Điều này có thể được thực hiện thông qua lệnh:
adb logcat —c
, sau đó chúng tôi tái tạo lỗi và chạy adb logcat —d
Đối với những người thích tìm hiểu hàng đống nhật ký, có một công cụ khác cần xem xét - báo cáo lỗi của ADB. Công cụ này cho phép bạn tạo các kho lưu trữ zip với đầy đủ thông tin gỡ lỗi ở định dạng văn bản thuần túy ( .txt
).
adb bugreport /Users/username
- tạo một kho lưu trữ zip trong thư mục được chỉ định.
Sao chép tất cả thông tin về thiết bị, chẳng hạn nhưdumpstate, kết xuất và dữ liệu logcat vào thư mục được chỉ định. Theo mặc định, các báo cáo lỗi được lưu trữ trong / bugreports và có thể được xem qua:
adb shell ls /bugreports/
Thông tin quan trọng nhất đối với chúng tôi được lưu trữ trong bugreport-BUILD_ID-DATE.txt
Giám sát sự cố và ANR (Ứng dụng không phản hồi) là một công cụ thú vị khác để làm việc với sự cố. Chạy nó bằng cách sử dụng lệnh này:
adb shell am monitor
, và sau đó chúng tôi tái tạo sự cố của mình. Bảng điều khiển sẽ hiển thị thông tin về sự cố mà không có bất kỳ chi tiết thừa nào và ba tùy chọn để tiếp tục nỗ lực giám sát của chúng tôi: (c)ontinue: show crash dialog, (k)ill: immediately kill app, (q)uit: finish monitoring
.
Hiển thị danh sách các trình giả lập đã định cấu hình:
emulator -list-avds
Chạy trình giả lập chúng ta cần:
emulator @avdname
Khi làm việc với trình giả lập, đôi khi cần phải khởi động lại các dịch vụ và máy chủ phải được đặt lại sau khi trình giả lập được khởi động, nhưng thường thì chỉ cần một lệnh là đủ: adb kill-server
. Nếu điều này không hữu ích, hãy chạy toàn bộ tập lệnh:
emulator -list-avds
- hiển thị danh sách các trình giả lập đã định cấu hình.
adb kill-server
- dừng máy chủ.
emulator -avd avdname
(hoặc emulator @avdname
) - trong đó avdname
là tên của trình giả lập.
adb start—server
- khởi động lại máy chủ.
adb devices
- hiển thị danh sách các thiết bị được kết nối nơi trình giả lập bị mất của chúng tôi sẽ xuất hiện.
Đối với những người lười nhất trong số các bạn, một trình giả lập có thể được tạo từ dòng lệnh. Ví dụ: lệnh sau tạo một trình giả lập có tên "test" bằng cách sử dụng hình ảnh hệ thống x86 với API 25 :):
avdmanager create avd —n test —k "system—images;android—25;google_apis;x86"
Nếu không có hình ảnh mong muốn, bạn có thể cài đặt trước bằng lệnh:
sdkmanager --install "system—images;android—25;google_apis;x86"
sdkmanager --list | grep system—images
- hiển thị danh sách hình ảnh có sẵn để tải xuống
Với trình giả lập, đôi khi cũng xảy ra sự cố “ảo” trong quá trình hoạt động và một lệnh được sử dụng thường xuyên giúp ích ở đây là “khởi động lạnh” trình giả lập mà không cần kéo ảnh chụp nhanh tự động lên. Ảnh chụp nhanh được thực hiện ở đầu ra sẽ như sau:
emulator @avdname —no—snapshot—load
Dưới đây là một số công tắc hữu ích hơn cần xem xét khi khởi động trình mô phỏng:
-no-snapshot-save
- sẽ không có ảnh chụp nhanh tự động nào được lưu
-no-snapshot
- sẽ không có ảnh chụp nhanh nào được tải xuống hoặc lưu
Nếu trình giả lập vẫn không hoạt động bình thường, nó có thể được xóa bằng cách sử dụng nút chuyển để đưa trình giả lập về trạng thái ban đầu: -wipe-data
Tạo ảnh chụp nhanh là một tính năng rất hữu ích để lưu các trạng thái khác nhau của thiết bị. Theo cách thủ công, điều này có thể được thực hiện thông qua cài đặt trình giả lập hoặc bằng cách chạy lệnh này:
adb emu avd snapshot save test
- lưu trạng thái của trình giả lập trong đó test là tên của ảnh chụp nhanh sẽ được lưu trữ trên thiết bị
emulator @avdname —snapshot—list
- chạy trình mô phỏng của chúng tôi có tên @avd và hiển thị danh sách ảnh chụp nhanh trong bảng điều khiển
Tiếp theo, bạn có thể tải một ảnh chụp nhanh đã lưu trước đó bằng cách sử dụng lệnh này:
adb emu avd snapshot load test
- trong đó kiểm tra là tên của ảnh chụp nhanh đã lưu trước đó
adb emu avd snapshot delete test
- xóa test có tên snapshot
Cũng có thể chạy ngay trình giả lập với ảnh chụp nhanh mà chúng tôi cần:
emulator @avdname -snapshot test
Bạn cũng có thể sử dụng lệnh pull
để lấy ảnh chụp nhanh từ thiết bị:
adb emu avd snapshot pull test /Users/username/
Trình giả lập của chúng tôi có thể được vận hành thông qua bảng điều khiển telnet
. Nhưng trước tiên bạn phải cài đặt nó. Cách dễ nhất để làm điều đó là thông qua trình quản lý gói brew
, nếu bạn có. Nếu không, thì đã đến lúc tìm hiểu nó là gì và làm thế nào để sử dụng nó. Vì vậy, hãy cài đặt telnet
bằng cách sử dụng lệnh: brew install telnet.
Tiếp theo, chạy trình mô phỏng của chúng tôi và trong một tab khác của thiết bị đầu cuối, kết nối với nó bằng lệnh: telnet localhost port,
Ví dụ:
telnet localhost 5554
- kết nối với trình giả lập của chúng tôi sử dụng cổng 5554
Sau khi hoàn thành lệnh, chúng tôi có thể thực hiện tất cả các loại công việc hữu ích với trình mô phỏng của mình, bao gồm cả làm việc với địa lý (ví dụ: lệnh geo fix 40.748840 -73.984279
sẽ đặt vị trí mong muốn của chúng tôi tại các tọa độ được chỉ định), mạng hoặc pin, trong khi danh sách đầy đủ các lệnh như mọi khi có thể được tìm thấy thông qua trợ giúp.
Ví dụ, quy trình tương tự với ảnh chụp nhanh được đơn giản hóa đôi chút, trong khi các lệnh được nêu trong phần trước được rút gọn thành avd snapshot <command>
.
Trình quản lý cửa sổ (wm) có một số lệnh hữu ích để đảm bảo các thành phần trên màn hình của thiết bị được hiển thị chính xác. Chúng cho phép bạn điều chỉnh độ phân giải mật độ pixel để bạn có thể xem qua tất cả các tùy chọn cần thiết cho kích thước màn hình và xem ứng dụng của chúng tôi sẽ thích ứng với chúng như thế nào mà không cần có sẵn số lượng thiết bị thích hợp:
adb shell wm size 1080x1920
- đặt độ phân giải màn hình tùy chỉnh, với chiều rộng 1080 và chiều cao là 1920.
adb shell wm size reset
- đặt lại tất cả các cài đặt đã thay đổi của chúng tôi.
adb shell wm density X
- thay đổi mật độ điểm ảnh, trong đó giá trị nhỏ nhất là 72. Giá trị càng lớn, các phần tử trên màn hình càng lớn.
adb shell wm density reset
- đặt lại tất cả các cài đặt đã thay đổi của chúng tôi.
Nếu chúng tôi chạy các lệnh của mình mà không có bất kỳ đối số nào, chúng tôi sẽ lấy lại độ phân giải màn hình hiện tại và mật độ điểm ảnh của thiết bị / trình mô phỏng được kết nối.
Riêng biệt, chúng ta có thể đề cập đến Monkey - một công cụ tạo ra các sự kiện ngẫu nhiên của người dùng trên trình giả lập hoặc thiết bị, chẳng hạn như nhấp chuột, chạm và cử chỉ, cũng như một số sự kiện cấp hệ thống giống như chuyển động của một con khỉ ngớ ngẩn. Monkey có thể được sử dụng để kiểm tra căng thẳng.
adb shell monkey
Monkey - hiển thị tất cả các thông số Monkey.
Ví dụ về một kịch bản hoàn chỉnh:
adb shell monkey ——throttle 100 ——pct—syskeys 0 —p com.myApp —v 10
--throttle
- đặt độ trễ giữa các hành động tính bằng mili giây. Khi Monkey thực hiện tất cả các thao tác một cách nhanh chóng, công tắc (phím) này thường được sử dụng khi chúng ta muốn kiểm soát trực quan những gì đang xảy ra trên màn hình.
--pct-syskeys
- xác định tỷ lệ phần trăm các nút hệ thống sẽ được nhấn trong một kịch bản. Trong ví dụ này, nó được đặt thành 0, có nghĩa là không có nút hệ thống nào được nhấn.
Công tắc -p
- tên của gói được truyền đi
Công tắc -v
- số lượng hành động được thực hiện
Thông thường, các hoạt động liên quan ở đây ngụ ý thu hồi quyền ứng dụng, vì quyền thường được cấp thông qua yêu cầu ứng dụng - điều có thể được thực hiện nhanh chóng và dễ dàng - trong khi việc thu hồi quyền được thực hiện thông qua cài đặt hệ thống.
adb shell dumpsys package com.MyApp | grep permission
- hiển thị danh sách các quyền ứng dụng có sẵn, ví dụ: install permissions
bắt buộc được cấp khi cài đặt ứng dụng, runtime permissions
- quyền được yêu cầu tại một thời điểm cụ thể, ví dụ: khi truy cập vào bộ lưu trữ tệp. Lưu ý rằng nếu thiếu quyền trong danh sách quyền được yêu cầu, bạn sẽ không thể cấp quyền truy cập cho quyền đó.
Vì vậy, lệnh sau phải được chạy để thu hồi quyền của ứng dụng của chúng tôi:
adb shell pm revoke packageName permissionName
, ví dụ:
adb shell pm revoke com.MyApp android.permission.CAMERA
- thu hồi quyền truy cập của com.myApp
vào máy ảnh. Khi chúng tôi quay lại ứng dụng và cố gắng sử dụng máy ảnh thông qua nó, chúng tôi sẽ thấy một yêu cầu cấp quyền mới.
Lệnh cấp cấp quyền cho ứng dụng, ví dụ:
adb shell pm grant com.myApp android.permission.CAMERA
- cấp quyền truy cập vào camera của điện thoại cho ứng dụng của chúng tôi.
Ở đây chúng ta hãy cùng tìm hiểu sơ qua về pin và chế độ chờ.
adb shell dumpsys battery
- hiển thị thông tin pin.
adb shell dumpsys battery set level X
- đặt mức sạc pin, trong đó X là phần trăm mức sạc.
adb shell dumpsys battery unplug
- mô phỏng cách rút pin.
adb shell dumpsys battery reset
- đặt lại tất cả các cài đặt đã thay đổi của chúng tôi.
Bây giờ chúng ta hãy xem xét các chế độ chờ. Bắt đầu từ Android 6, có một chức năng được gọi là Doze Mode, để tiết kiệm pin và kéo dài tuổi thọ pin bằng cách hạn chế hoạt động ứng dụng sau khi người dùng không tương tác với thiết bị trong một thời gian và khi thiết bị không được sạc.
Hệ thống định kỳ thoát Chế độ ngủ gật để hoàn thành các tác vụ nền đang chờ xử lý. Chế độ chờ ứng dụng là một tính năng tương tự khác của Android. Không giống như Doze Mode, nó theo dõi trạng thái của một ứng dụng cụ thể đã không hoạt động trong một khoảng thời gian nhất định và sau đó kích hoạt chế độ chờ. Công việc của chúng tôi là đảm bảo rằng ứng dụng phục hồi bình thường sau khi thoát khỏi hai chế độ tiết kiệm năng lượng này, không bị lỗi, thông báo tiếp tục đến, v.v.
Để chuyển thiết bị sang Chế độ Ngừng, hãy chạy các lệnh sau:
adb shell dumpsys battery unplug
pin.
adb shell dumpsys deviceidle step
- lệnh có thể phải được thực hiện nhiều lần cho đến khi được hiển thị: Stepped to deep: IDLE
.
Sau khi tất cả các quy trình chúng tôi đã hoàn thành với pin, tốt nhất là chạy lệnh:
adb shell dumpsys battery reset
- đưa nó về trạng thái ban đầu.
Lệnh này cũng có thể được sử dụng để buộc thiết bị vào Chế độ Doze:
adb shell dumpsys deviceidle force—idle
- đôi khi, trước đó, bạn phải chạy lệnh: adb shell dumpsys deviceidle enable.
Bạn có thể kích hoạt lại nó từ Chế độ Doze bằng lệnh:
adb shell dumpsys deviceidle unforce
- và đừng quên đặt lại tình trạng pin:
adb shell dumpsys battery reset
.
Bây giờ một chút về Chế độ chờ của ứng dụng. Để triển khai ứng dụng ở chế độ này, cần chạy các lệnh sau:
adb shell dumpsys battery unplug
- ngắt pin như trường hợp trước.
adb shell am set—inactive com.myApp true
- không hoạt động - triển khai ứng dụng ở chế độ Chờ ứng dụng.
Tiếp theo, chuyển ứng dụng của chúng tôi ra khỏi chế độ Chờ ứng dụng bằng cách sử dụng lệnh sau:
adb shell am set—inactive com.myApp false
.
Bạn có thể kiểm tra trạng thái ứng dụng bằng cách chạy lệnh sau:
adb shell am get—inactive com.myApp
adb reboot
- khởi động lại thiết bị (cũng có liên quan đến thiết bị thực).
adb shell dumpsys package com.myApp
- hiển thị đầy đủ thông tin về một ứng dụng cụ thể.
adb shell dumpsys meminfo com.myApp
- để kiểm tra mức sử dụng bộ nhớ của ứng dụng trên thiết bị, từ dung lượng chiếm đến việc hiển thị cơ sở dữ liệu được ứng dụng này sử dụng, cũng như đường dẫn đến chúng.
adb shell getprop
- hiển thị danh sách các thuộc tính thiết bị có sẵn (nhà sản xuất, kiểu thiết bị, thông số kỹ thuật phần cứng, v.v.)
Hiển thị danh sách các hoạt động có thể truy cập được cho ứng dụng:
adb shell dumpsys package com.myApp | grep —i Activity
.
Hiển thị tên của hoạt động đang chạy:
adb shell dumpsys window | grep Focused
.
Chạy hoạt động ứng dụng đã chọn:
adb shell am start —n com.myApp/.ActivityClass
- bằng cách này, bạn có thể chạy bất kỳ ứng dụng nào đã cài đặt, bao gồm cả các ứng dụng hệ thống. Ví dụ: adb shell am start -n com.android.settings / .Settings hiển thị cài đặt điện thoại của chúng tôi.
Thực hiện cuộc gọi đến số điện thoại được chỉ định:
adb shell am start —a android.intent.action.CALL tel:+790900000XX
.
Mở một trang trong trình duyệt web của bạn:
adb shell am start —a android.intent.action.VIEW 'https://indriver.com'
Tôi muốn chỉ ra rằng không thể nhồi nhét tất cả các tính năng của Android Debug Bridge vào một bài báo hoặc tiến hành nghiên cứu kỹ lưỡng về chúng. Những thay đổi liên tục xảy ra: những gì hoạt động ngày hôm nay có thể đột ngột ngừng hoạt động vào ngày mai và nhu cầu kiến thức về các công cụ nhất định sẽ phát sinh khi chúng ta tìm kiếm giải pháp cho các vấn đề cụ thể. Nhưng tôi có thể tự tin nói rằng tài liệu mà chúng tôi đã đề cập ngày hôm nay đủ để giúp bạn bắt đầu và sau đó tiếp tục một thời gian.
Chúc bạn may mắn với những nỗ lực của mình và tôi hy vọng bạn sẽ thích khám phá thế giới thú vị của kiểm thử phần mềm!