Detox: Công cụ kiểm thử E2E React Native siêu nhanh
Trong những năm gần đây, React Native đã trở thành một công nghệ rất phổ biến trong cuộc đua phát triển ứng dụng di động đa nền tảng nhưng việc lựa chọn một công cụ kiểm tra giao diện người dùng cho các ứng dụng React Native có thể khá khó khăn. Có hai công cụ kiểm tra giao diện người dùng tuyệt vời cho các ứng dụng React Native là Appium và Detox. Appium được sử dụng rộng rãi để kiểm tra giao diện người dùng nhưng Detox là một công cụ kiểm thử hộp xám, nhanh hơn và dễ học để kiểm tra giao diện người dùng của các ứng dụng React Native. Trong hướng dẫn này, chúng ta sẽ tìm hiểu về các thiết lập một số thử nghiệm Detox cho một ứng dụng React Native mới, đơn giản.
Detox:
Kiểm tra giao diện di động End – to – End
Như bạn có thể biết, các vấn đề chính trong kiểm thử
giao diện người dùng trên di động là độ chậm và tính không ổn định. Các công cụ
như Appium hoàn toàn là hộp đen và sử dụng kiến trúc máy khách – máy chủ, điều
này gây ra lỗi trong các bài kiểm tra giao diện người dùng. Detox được thiết kế
để giải quyết các vấn đề về độ chậm và hoạt động không ổn định cho kiểm thử
giao diện người dùng di động. Một số tính năng tuyệt vời của Detox là:
· Detox là một công cụ kiểm tra hộp xám, nó có thể truy cập mã và dữ liệu từ các ứng dụng dành cho thiết bị di động. Đây là một công cụ không sử dụng kiến trúc máy chủ - máy khách để thực thi kiểm thử, vì vậy nó nhanh hơn Appium hoặc các công cụ kiểm thử di động của bên thứ ba khác.
· Detox dễ dàng được kết nối với bất kỳ hệ thống CI nào và các dịch vụ kiểm tra đám mây phổ biến.
· Detox có phản hồi nhanh về thử nghiệm E2E mà không cần kết nối với thiết bị thật.
· Các nhà phát triển React Native rất thích Detox vì nó nhanh hơn, có thể gỡ lỗi và có thể được sử dụng với bất kỳ công cụ nào như Jest hoặc Mocha.
Detox hiện có hỗ trợ hạn chế cho thử nghiệm trên thiết
bị iOS thực nhưng nếu ứng dụng của bạn không có giao diện phần cứng thì bạn có
thể dễ dàng bỏ qua phần đó để thực hiện quá trình kiểm tra giao diện người dùng
nhanh hơn và ít rung hơn.
Cài
đặt Detox cho kiểm thử E2E
Quá trình thiết lập Detox cho ứng dụng React Native hiện
có khá là đơn giản. Nếu bạn đang chạy ứng dụng React Native thì các yêu cầu cơ
bản để chạy ứng dụng iOS và Android trong mô phỏng này phải được đáp ứng. Trong
hướng dẫn này, tôi sẽ tập chung vào iOS nhưng thiết lập dành cho Android sẽ khá
là đơn giản khi bạn bắt đầu sử dụng iOS. Điều kiện tiên quyết là bạn cần có
macOS với Xcode được cài đặt trên đó. Bạn cũng cần cài đặt Node và Homebrew để
tải xuống các gói cần thiết để chạy các ứng dụng React Native. Tóm lại, bạn sẽ
cần những thứ sau:
· Homebrew
· Node
· React Native CLI và ứng dụng React Native
Trong hướng dẫn này, tôi sẽ tạo một ứng dụng React
Native đơn giản với HelloDetox và bật hỗ trợ kiểm tra giao diện người dùng bằng
Detox.
Tạo
ứng dụng React Native
React Native có tài liệu tuyệt vời để bắt đầu với ứng
dụng cơ bản. Tôi có thể dễ dàng tạo ra một ứng dụng mẫu bằng cách cài đặt một số
phụ thuộc từ macOS. Chúng ta cần một gói node và watchman để bắt đầu với React
Native. Bạn có thể dễ dàng cài đặt các gói đó với Homebrew.
$ brew install node
$ brew install watchman
Sau khi cài đặt xong node, bạn sẽ có thể truy cập các
lệnh ‘npm’ từ terminal. Giờ đây, bạn có thể cài đặt React Native trên toàn cầu
và tạo ứng dụng HelloDetox đầu tiên của mình.
$ npm install -g react-native-cli
$ react-native init HelloDetox
Tại thời điểm này, React Native sẽ tạo mã soạn sẵn để
xây dựng cả ứng dụng Android và iOS. Bạn có thể chạy ứng dụng bên trong trình
giả lập Android hoặc iOS nếu bạn mở bất kỳ trình mô phỏng nào.
Hãy chạy ứng dụng bên trong trình mô phỏng iOS bằng lệnh
sau:
$ cd HelloDetox
$ react-native run-ios
Ngoài ra, bạn có thể khởi chạy Metro Bundler trong nền
và chạy ứng dụng từ Xcode. Bây giờ chúng ta có thể chỉnh sửa tệp app.js để hiển
thị nội dung trên màn hình. Trong hướng dẫn này, hãy tạo một vài nút bằng cách
thêm mã này. Khi bạn tạo lại ứng dụng bằng CMD + R, bạn sẽ thấy ứng dụng trong
trình mô phỏng. Ứng dụng này có một văn bản chào mừng với một vài nút liên kết
đến màn hình khác. Bây giờ tôi có một ứng dụng React Native cơ bản đã sẵn sàng
để kiểm thử giao diện người dùng.
Định
cấu hình Detox
Các công cụ như Appium cho phép các nhà phát triển thử
nghiệm tạo các kho lưu trữ riêng biệt cho code kiểm thử mà không phải lúc nào
nó cũng phù hợp với những đường truyền CI/CD. Để kích hoạt hỗ trợ cho Detox,
chúng ta phải cài đặt thư viện appleimutils và các công cụ cho Detox bằng các lệnh
sau.
$ brew tap wix/brew
$ brew install applesimutils
$ npm install -g detox-cli
Detox đi kèm với các công cụ CLI tuyệt vời, nó có thể
được sử dụng để thiết lập và thực hiện các bài kiểm tra giao diện người dùng từ
dòng lệnh hoặc từ máy chủ CI.
Dự án React Native có tệp package.json nên tôi có thể
thêm thư viện Detox vào dự án của mình bằng lệnh sau.
npm install detox --save-dev
Lệnh này sẽ mất một lúc để thêm Detox vào ứng dụng HelloDetox. Sau khi Detox được thêm vào tệp package.json, chúng ta cần định cấu hình ứng dụng HelloDetox của mình để sử dụng khung kiểm thử giao diện người dùng Detox.
"detox": { "configurations": { "ios.sim.debug": { "binaryPath": "ios/build/Build/Products/Debug-iphonesimulator/HelloDetox.app", "build": "xcodebuild -project ios/HelloDetox.xcodeproj -scheme HelloDetox -configuration Debug -sdk iphonesimulator -derivedDataPath ios/build", "type": "ios.simulator", "name": "iPhone Xʀ" } } }
thường được tạo trong các thư mục ios/build. Tham số ‘build’ là một lệnh được
chạy khi thực hiện “detox build” từ dòng lệnh. Đây là lệnh xcodebuild từ công cụ
dành cho các nhà phát triển của Apple, một số dự án iOS sử dụng không gian làm
việc nên có thể cần điều chỉnh lệnh cho phù hợp. Cuối cùng, bạn phải chỉ định
mô phỏng nào cần thiết để thực hiện kiểm thử.
Đó là cấu hình ban đầu để bật kiểm tra giao diện người
dùng Detox trong các ứng dụng React Native.
Thêm
kiểm thử Detox cho các ứng dụng React Native
Detox có thể được sử dụng với bất kỳ trình chạy kiểm
thử nào trong JavaScript. Có Jest và Mocha chính thức được hỗ trợ bởi Detox
nhưng Detox lại không kết hợp chặt chẽ với chúng. Vì Jest là trình chạy thử
nghiệm được đề xuất cho React Native nên tôi sẽ sử dụng Jest để thiết lập các
thử nghiệm Detox trong ứng dụng React Native của mình. Detox có một dòng lệnh để
tạo code đoạn đầu. Chạy lệnh sau từ thư mục gốc của dự án.
$ detox init -r jest
Lệnh này sẽ ra một thư mục “e2e” với code thử nghiệm mẫu
Tại thời điểm này, bạn có thể sửa đổi các bài kiểm tra
theo yêu cầu của ứng dụng. Hãy nhớ rằng, để kích hoạt kiểm tra ứng dụng React
Native, bạn cần thêm ID kiểm tra cho từng phần tử giao diện người dùng trong ứng
dụng của mình. Bạn có thể tham khảo tệp app.js, nơi tôi nhận được ID kiểm thử
cho các phần tử giao diện người dùng mà tôi cần tương tác.
Viết
kiểm thử Detox đầu tiên cho kiểm thử giao diện người dùng
Bây giờ chúng ta đã có tất cả code để thực hiện bài kiểm
tra Detox đầu tiên, hãy đổi tên tệp e2e/firstTest.spec.jest với một tên khác,
ví dụ: helloDetox.spec.jest và viết bài kiểm tra đầu tiên để xác thực rằng nếu
nhấp vào nút hoạt động và điều hướng đến đúng màn hình.
Tài liệu chính thức của Detox có một hướng dẫn về việc
chuẩn bị bài kiểm tra Detox tại đây. Tóm lại, chúng ta phải ghi nhớ những điều
sau đây:
· Đảm bảo bạn đã thêm ID kiểm tra để kích hoạt kiểm tra của ứng dụng React Native
· Xác định phần tử giao diện người dùng duy nhất trên màn hình và khẳng định phần tử đó có tồn tại trên màn hình
· Reset ứng dụng giữa các tình huống nếu cần
Bạn có thể đọc hướng dẫn chuẩn bị đầy đủ tại đây. Trong trường hợp này, tôi phải thêm code sau để xác thực các yêu cầu của mình.
describe('HelloDetoxTest', () => {
beforeEach(async () => {
await device.reloadReactNative();
});
it('should have welcome screen', async () => {
await expect(element(by.id('welcome'))).toBeVisible();
});
it('should show hello Rect after tap', async () => {
await element(by.id('hello_react')).tap();
await expect(element(by.text('React!!!'))).toBeVisible();
});
it('should show Detox screen after tap', async () => {
await element(by.id('detox_button')).tap();
await expect(element(by.text('Detox!!!'))).toBeVisible();
});
});
Thử nghiệm này xác nhận việc chạm vào nút “Hello
React” sẽ điều hướng đến màn hình “React !!!” và chạm vào “Hello Detox” sẽ điều
hướng tới màn hình “Detox !!!”.
Ở giai đoạn này, tôi đã bắt đầu và sử dụng Detox đầu
tiên. Để thực hiện các bài kiểm tra Detox, trước tiên chúng ta phải xây dựng một
ứng dụng bằng lệnh.
$ detox build
Thao tác này sẽ thực thi lệnh xcodebuild mà tôi đã định
cầu hình trong phần ‘build’ của cấu hình detox. Lệnh này có thể mất vài phút nếu
bạn xây dụng ứng dụng trong lần đầu tiên. Khi ứng dụng được tạo thành công,
chúng ta đã sẵn sàng thực hiện các kiểm thử của mình bằng cách sử dụng lệnh sau.
$ detox test
Lệnh này sẽ thực hiện tất cả các bài kiểm tra bên
trong thư mục e2e của mình và nếu tất cả các bài kiểm tra đều pass, bạn sẽ thấy
kết quả kiểm tra được định dạng độc đáo.
Xin chúc mừng!. Bạn đã thực hiện bài kiểm tra giao diện
đầu tiên của mình bằng Detox.
Ưu
và nhược điểm của Detox cho kiểm tra giao diện người dùng
Ưu điểm
· Detox có thể được tích hợp dễ dàng trong bất kỳ ứng dụng React Native nào. Chi phí và nỗ lực ban đầu ít hơn nhiều so với bất kỳ công cụ nào khác.
· Detox nhanh hơn Appium hoặc bất kỳ công cụ bên thứ ba nào khác vì nó đồng bộ hóa với ứng dụng.
· Detox rất dễ học và có tài liệu API tuyệt vời để viết và mở rộng bộ thử nghiệm.
· Cộng đồng đang phát triển nhanh chóng.
Nhược điểm
· Không có thử nghiệm thực tế cho iOS.
· Chế độ xem web và ứng dụng kết hợp không được hỗ trợ.
· Thiếu một số phương pháp hữu ích như lấy văn bản khỏi phần tử hoặc tìm tọa độ.
· Khả năng báo cáo kiểm thử và ảnh chụp màn hình không tốt.
Bạn có thể thấy rằng Detox có ưu và nhược điểm nhưng nếu
nó phù hợp với yêu cầu dự án của bạn thì Detox là một sự lựa chọn nhanh hơn và
đáng tin cậy cho kiểm thử tự động giao diện người dùng.
Điều
gì tiếp theo
Bây giờ tôi đã có và chạy kiểm thử Detox đầu tiên. Bước
tiếp theo sẽ là thêm một vài kiểm thử giao diện người dùng khác của ứng dụng.
Kiểm tra giao diện người dùng bao gồm kiểm tra từ đầu tới cuối có thể đem lại rất
nhiều sự tự tin cho ứng dụng. Các kỹ thuật được sử dụng trong bài này có thể được
sử dụng cho bất kỳ ứng dụng React Native nào khác. Detox có thể tăng tốc độ kiểm
thử và sự tự tin cần thiết để triển khai bất kỳ ứng dụng React Native nào.
Tổng
kết
Để cải thiện độ tin cậy và tốc độ kiểm thử, bạn cần phải
giải quyết tình trạng rung và chậm trong kiểm thử giao diện người dùng. Các
công cụ như Detox có thể đáp ứng tốc độ và độ tin cậy của các bài kiểm tra giao
diện người dùng để thực hiện kiểm tra từ đầu tới cuối của các ứng dụng React
Native.