Cách sử dụng Airmobi
Hướng dẫn tích hợp Appium
Tổng quan
Appium là một trong những khung thử nghiệm để thực hiện tự động hóa thử nghiệm cho điện thoại thông minh và máy tính bảng. Airmobi trước đây có thể tự động hóa các thử nghiệm bằng môi trường Appium được xây dựng trên PC cục bộ bằng cách sử dụng chức năng ADB ảo và trình kết nối Xcode. Với Airmobi Appium Cloud mới, giờ đây có thể dễ dàng thực thi các tập lệnh kiểm thử Appium mà không cần xây dựng môi trường máy chủ Appium và giờ đây có thể dễ dàng liên kết với môi trường CI.
*Airmobi Appium Cloud chỉ khả dụng cho những khách hàng đã đăng ký gói Flat 3 trở lên.
Giới thiệu về tích hợp Appium được Airmobi hỗ trợ
■Môi trường Appium khi không sử dụng Airmobi
Để thực hiện kiểm thử tự động với Appium, thông thường cần chuẩn bị một môi trường thực thi bao gồm Node.js và Appium Server trên PC cá nhân, sau đó tạo và thực thi các kịch bản kiểm thử như hình vẽ minh họa. Ngoài ra, thiết bị sử dụng trong kịch bản kiểm thử thường chỉ giới hạn ở những thiết bị thực tế được kết nối với PC cá nhân, và trong nhiều trường hợp cũng buộc phải sử dụng các máy giả lập Android/iOS.
■ Môi trường Appium sử dụng chức năng adb ảo/liên kết Xcode của Airmobi
Airmobi theo truyền thống có thể xây dựng môi trường Appium bằng thiết bị dựa trên đám mây bằng cách sử dụng chức năng ADB ảo và trình kết nối Xcode. Cấu hình này có ưu điểm là có thể hoạt động với các khung thử nghiệm khác ngoài Appium vì nó hoạt động với các thiết bị trên đám mây ở lớp thấp.
*Đối với thiết bị iOS, có một số hạn chế về chức năng khi gỡ lỗi bằng Xcode.
■Môi trường ứng dụng sử dụng Airmobi Appium Cloud
Sử dụng Airmobi Appium Cloud, trong kiểm thử tự động với Appium, người dùng chỉ cần chuẩn bị kịch bản kiểm thử là có thể thực hiện mà không cần phải thiết lập môi trường thực thi như Node.js hay Appium server. Ngoài ra, tính năng này còn giúp việc liên kết với môi trường CI nội bộ và bên ngoài trở nên dễ dàng, cho phép tập trung vào việc phát triển kịch bản kiểm thử như là một phần của công việc chính. Môi trường Appium sử dụng tính năng mới được minh họa như trong hình vẽ.
※Hiện tương thích với các thiết bị chạy Android 4.4 trở lên hoặc iOS 10.3 trở lên
※Airmobi Appium Cloud chỉ khả dụng cho những khách hàng đã đăng ký gói Flat 3 trở lên.
So sánh với các môi trường Appium khác nhau
Bảng so sánh ba môi trường nêu trên được thể hiện trong bảng bên dưới.
Môi trường sử dụng Airmobi Appium Cloud | Môi trường sử dụng chức năng adb ảo Airmobi/liên kết Xcode | Môi trường không có Airmobi | |
---|---|---|---|
Xây dựng môi trường máy chủ Server | Không cần thiết | Cần thiết | Cần thiết |
Thư viện Client | Cần thiết | Cần thiết | Cần thiết |
Thiết bị smartphone thật | Không cần thiết | Không cần thiết | Cần thiết |
Nơi thực thi tập lệnh kiểm thử | PC cục bộ | PC cục bộ | PC cục bộ |
Liên kết ngoài Appium | Không thể | Khả thi | Khả thi |
Tích hợp với môi trường CI | Đơn giản | Yêu cầu tích hợp qua ThriftAPI | Liên kết với máy thực tế hơi khó khăn |
Airmobi giúp giải quyết vấn đề
Một vấn đề mà các doanh nghiệp đang đối mặt khi thực hiện kiểm thử tự động là việc xác minh trên thiết bị thực tế trong môi trường CI (Continuous Integration – Tích hợp liên tục). Phần lớn các dịch vụ CI trên thị trường hiện nay đều là của nước ngoài, và chủ yếu cung cấp các thiết bị phổ biến ở nước ngoài. Mặt khác, khi xây dựng môi trường CI nội bộ sử dụng Jenkins hoặc các công cụ khác, việc chuẩn bị và quản lý môi trường kiểm thử trên thiết bị thực tế là rất khó khăn. Bằng cách sử dụng tính năng Appium mới của Airmobi vừa được phát hành, việc xác minh trên thiết bị thực tế từ môi trường CI trở nên tương đối dễ dàng.
Quy trình tích hợp Appium bằng Airmobi Appium Cloud
Để tích hợp với Appium thông qua Airmobi Appium Cloud, bạn chỉ cần thay đổi cài đặt Capabilities của kịch bản kiểm thử chạy trên môi trường Appium local trên PC của bạn. Dưới đây là một ví dụ về kịch bản kiểm thử sử dụng ngôn ngữ Ruby. Đầu tiên, hãy chuẩn bị một PC có thể thực thi Ruby.
Cài đặt thư viện Appium Client
Cài đặt thư viện Appium Client bằng các bước bên dưới.
gem install selenium-webdriver -v 3.142.7
gem install appium_lib -v 11.2.0
gem install appium_lib_core -v 4.7.1
Để chạy tập lệnh kiểm thử bằng ngôn ngữ Python, hãy cài đặt tập lệnh bằng các bước bên dưới.
pip3 install Appium-Python-Client==1.3.0
もしくは
pip install Appium-Python-Client==1.3.0
Hướng dẫn kết nối
Trong cài đặt của Appium client (kịch bản kiểm thử), phần địa chỉ kết nối thường được đặt là “http://localhost:4723/wd/hub” khi bạn chạy trên PC cá nhân. Để sử dụng Airmobi Appium Cloud, bạn cần thay đổi địa chỉ này thành “https://gwjp.appkitbox.com/wd/hub”.
・Mã ví dụ trong Ruby
@driver = Appium::Driver.new(
caps: {
...
},
appium_lib: {
#server_url: 'http://localhost:4723/wd/hub',
server_url: 'https://gwjp.appkitbox.com/wd/hub',
wait: 60
}
).start_driver
Xác thực người dùng
Để xác thực khi kết nối ứng dụng Appium client, hãy chỉ định tên người dùng và mật khẩu Airmobi trong “Capabilities ” hoặc chỉ định mã thông báo truy cập trong “Capabilities “. Access Token có thể được tạo trong menu của phiên bản phần mềm.
Tên Capabilities | Giá trị |
---|---|
userName | Tên người dùng Airmobi |
password | Mật khẩu Airmobi |
accessToken | Token của Airmobi |
・Mã ví dụ trong Ruby (để xác thực tên người dùng/mật khẩu)
@driver = Appium::Driver.new(
caps: {
userName: "Airmobiのユーザ名",
password: "Airmobiのパスワード",
...
},
appium_lib: {
...
}
).start_driver
・Mã ví dụ trong Ruby (để xác thực mã thông báo truy cập)
@driver = Appium::Driver.new(
caps: {
accessToken: "Airmobiのアクセストークン",
...
},
appium_lib: {
...
}
).start_driver
・Cách nhận access token
Bạn có thể tạo access token trong menu của phiên bản phần mềm. Bằng cách nhấp vào thiết lập access token từ menu ở góc phải trên của phiên bản phần mềm, bạn có thể lấy được access token. Nếu muốn tạo lại access token, hãy nhấp vào nút “Tạo lại”.
Phiên bản chỉ định của Appium
Các phiên bản Appium có thể được chỉ định cho thiết bị Android là:
1.7.2, 1.8.0, 1.8.1, 1.9.0, 1.9.1, 1.10.0, 1.10.1, 1.11.0, 1.11.1, 1.12.0, 1.12.1, 1.13.0, 1.14.0, 1.14.2, 1.15.1, 1.16.0, 1.17.0, 1.17.1, 1.18.0, 1.18.1, 1.18.2, 1.18.3, 1.19.0, 1.19.1, 1.20.0, 1.20.1, 1.20.2, 1.21.0, 1.22.0, 1.22.1, 1.22.2, 1.22.3, 2.0.0, 2.0.1, 2.1.3
Không thể chỉ định phiên bản cho thiết bị iOS. Đây là phiên bản cố định phụ thuộc vào phiên bản Appium được đặt trên máy chủ mà thiết bị iOS được kết nối.
Tên Capabilities | Giá trị |
---|---|
appiumVersion | 1.7.2,1.8.0,1.8.1,1.9.0,1.9.1,1.10.0,1.10.1,1.11.0,1.11.1,1.12.0,1.12.1,1.13.0,1.14. 0,1.14.2,1.15.1,1.16.0,1.17.0,1.17.1,1.18.0,1.18.1,1.18.2,1.18.3,1.19.0,1.19.1,1.20.0, Chỉ định một trong các phiên bản: 1.20.1,1.20.2,1.21.0,1.22.0,1.22.1,1.22.2,1.22.3,2.0.0,2.0.1,2.1.3 |
Chỉ định cho thiết bị chạy
Bạn có thể chỉ định thiết bị chạy Appium theo hai cách: chỉ định bằng “Tên Model” hoặc “Tên Model & Phiên bản”. Bạn cũng có thể sử dụng biểu thức chính quy để chỉ định tên model. Thiết bị cụ thể để chỉ định có thể được kiểm tra qua web client hoặc PC client.
- Trường hợp chỉ định bằng “Tên Model”
Tên Capabilities | Giá trị |
---|---|
platformName | Chỉ định Android hoặc iOS |
deviceName | Khi bạn chỉ định tên model, hệ thống sẽ xác định dựa trên một loạt ưu tiên như sau: “Khớp toàn bộ” → “Khớp phía trước với khoảng trắng” → “Biểu thức chính quy khớp phía trước”, mà không phân biệt chữ hoa hay chữ thường. |
・Ví dụ về mã trong Ruby (chỉ định Nexus 5)
@driver = Appium::Driver.new(
caps: {
...
platformName: 'Android',
deviceName: 'Nexus 5X',
},
appium_lib: {
...
}
).start_driver
- Trường hợp chỉ định bằng “Tên Model & Phiên bản”
Tên Capabilities | Giá trị |
---|---|
platformName | Chỉ định Android hoặc iOS |
deviceName | Khi bạn chỉ định tên model, hệ thống sẽ xác định dựa trên một loạt ưu tiên như sau: “Khớp toàn bộ” → “Khớp phía trước với khoảng trắng” → “Biểu thức chính quy khớp phía trước”, mà không phân biệt chữ hoa hay chữ thường. |
platformVersion | Khi bạn chỉ định phiên bản, bạn nên chỉ định phần không bao gồm “Android” hoặc “iOS” trong cột OS của PC client. Hệ thống sẽ xác định dựa trên ưu tiên từ “Khớp toàn bộ” đến “Biểu thức chính quy khớp phía trước”. |
udid | Khi chỉ định ID thiết bị của thiết bị, hệ thống sẽ xác định dựa trên “Khớp toàn bộ”. |
・Ví dụ về đoạn mã trong Ruby (chỉ định version 8 của Nexus 5X)
@driver = Appium::Driver.new(
caps: {
...
platformName: 'Android',
deviceName: 'Nexus 5X',
platformVersion: '8',
},
appium_lib: {
...
}
).start_driver
・Ví dụ về đoạn mã trong Ruby (chỉ định phiên bản và ID thiết bị của iPhone 7)
@driver = Appium::Driver.new(
caps: {
...
platformName: 'iOS',
deviceName: 'iPhone 7',
platformVersion: '11.1',
udid: 'aea01650edff7cf42bc72c73e882b8ade545db85',
},
appium_lib: {
...
}
).start_driver
Tải ứng dụng lên bộ nhớ dùng chung bằng API
Airmobi cung cấp tính năng gọi là App Storage, cho phép bạn tải lên các tệp ứng dụng vào lưu trữ từ menu của PC client. Thay cho việc sử dụng menu, bạn cũng có thể tải ứng dụng lên lưu trữ thông qua dòng lệnh sử dụng REST API. Đây là tính năng thuận tiện cho khách hàng sử dụng trong môi trường CI.
Tổng quan
Tải tệp apk/ipa lên bộ lưu trữ của Airmobi bằng API.
URL
https://gwjp.appkitbox.com/storage/xxxxxxxx
Vui lòng chỉ định tên tệp sẽ được tải lên “xxxxxxxx.”
Loại phương thức
POST
Ví dụ về thực thi bằng lệnh curl
RTK_USERNAME=xxxxxxxx
RTK_ACCESSTOKEN=xxxxxxxx
RTK_FILENAME=xxxxxxxx
curl -u $RTK_USERNAME:$RTK_ACCESSTOKEN -X POST -H 'Content-Type: application/octet-stream' https://gwjp.appkitbox.com/storage/$RTK_FILENAME --data-binary @/some/path/to/file
Ghi chú
Bạn vui lòng lưu ý những điểm sau khi sử dụng dịch vụ này.
- Bạn không thể đặt tên tệp bằng tiếng Nhật.
- Bạn không thể tải lên các tệp có cùng hàm hash.
Cài đặt ứng dụng
Phương pháp 1: Cài đặt từ máy chủ của riêng bạn
Bạn có thể tải file apk hoặc ipa lên một máy chủ công cộng của riêng mình mà Airmobi có thể truy cập, và sau đó chỉ định các Capabilities dưới đây. Nếu cần, hãy thêm cài đặt cho phép truy cập từ Airmobi vào cấu hình tường lửa của công ty bạn. Địa chỉ IP nguồn truy cập được tìm thấy trong FAQ.
Tên Capabilities | Giá trị |
---|---|
app | Bạn cần chỉ định URL nơi bạn đã tải lên tệp apk hoặc ipa. |
bundleId | Đối với tệp ipa, bắt buộc bạn phải chỉ định tên bundleId. |
・Mã ví dụ trong Ruby
@driver = Appium::Driver.new(
caps: {
...
app: "https://appkitbox.com/test/sample.apk",
},
appium_lib: {
...
}
).start_driver
Phương pháp 2: Cài đặt từ kho lưu trữ chung của Airmobi
Sau khi đăng nhập vào phiên bản client của Airmobi, sử dụng tính năng lưu trữ ứng dụng từ menu để tải lên tệp apk hoặc ipa, rồi chỉ định các Capabilities dưới đây.
Tên Capabilities | Giá trị |
---|---|
app | Chỉ định tên của tệp apk hoặc ipa bạn đã tải lên. Nếu có nhiều tệp cùng tên đã được tải lên, tệp được tải lên mới nhất sẽ được sử dụng. |
・Mã ví dụ trong Ruby
@driver = Appium::Driver.new(
caps: {
...
app: "sample.apk",
},
appium_lib: {
...
}
).start_driver
Chỉ định chức năng ký lại chữ ký số tự động
Khi cài đặt tệp ipa, một quá trình ký lại tự động sẽ được thực hiện. Bạn có thể tắt chức năng tự động ký lại bằng cách chỉ định các Capabilities dưới đây theo nhu cầu.
Tên Capabilities | Giá trị |
---|---|
resigningEnabled | True hoặc False (※Trong TH: False – OFF:để tắt chữ ký lại tự động) |
Kiểm tra màn hình đang chạy
Sau khi kết nối với máy chủ Appium, các URL cho snapshotUrl và screenUrl sẽ được cung cấp. Bạn có thể sử dụng capability để lấy snapshotUrl hoặc screenUrl và mở chúng trong trình duyệt để xem màn hình đang chạy hiện tại. snapshotUrl cung cấp khả năng lấy một hình ảnh tĩnh một lần, trong khi screenUrl cung cấp khả năng cập nhật hình ảnh tĩnh định kỳ, cho phép bạn xem màn hình như một video. Sử dụng chức năng snapshotUrl khi bạn muốn lấy hình ảnh từ chương trình, và sử dụng chức năng screenUrl khi bạn muốn xem qua trình duyệt sẽ rất thuận tiện.
・Mã ví dụ trong Ruby
snapshotUrl = @driver.capabilities['snapshotUrl']
Kiểm tra log thực thi Appium trong quá trình chạy
Để lấy log thực thi từ máy chủ Appium, bạn cần chỉ định mức độ log trong Capabilities và sử dụng capability để lấy serverLogUrl, sau đó mở nó trong trình duyệt hoặc phần mềm tương tự. Log Appium có thể lấy bao gồm tất cả các log từ khi bắt đầu phiên cho đến thời điểm lấy log, và có thể được truy cập trong vòng 10 phút sau output cuối cùng (thường là log kết thúc phiên).
Tên Capabilities | Giá trị |
---|---|
logLevel | Chỉ định một trong các thông tin: “info”, “warn”, “error”, “debug”. Giá trị default: “info” |
・Mã ví dụ trong Ruby
serverLogUrl = @driver.capabilities['serverLogUrl']
Xóa cưỡng chế session Appium
Khi thực thi các trường hợp kiểm thử với Appium và gặp lỗi, hoặc nếu ứng dụng client bị buộc kết thúc mà không xóa phiên làm việc một cách bình thường, phiên làm việc sẽ còn tồn tại. Nếu bạn thực hiện kiểm thử lại với cùng một điều kiện chỉ định thiết bị, bạn có thể ghi đè phiên và thực hiện kiểm thử trên cùng một thiết bị. Tuy nhiên, trong trường hợp này, bạn không thể thực hiện kiểm thử đồng thời trên nhiều thiết bị với cùng một cấu hình capabilities. Nếu bạn muốn kiểm thử đồng thời trên nhiều thiết bị, hãy chỉ định giá trị true cho capability “noSessionOverwriting”. Điều này sẽ ngăn chặn việc ghi đè phiên bằng cách loại bỏ thiết bị đang được sử dụng trong phiên Appium Gateway khỏi việc chọn thiết bị, do đó phiên không bị ghi đè.
Tên Capabilities | Giá trị |
---|---|
noSessionOverwriting | Chỉ định true, false. Giá trị default: false |
・Mã ví dụ trong Ruby
@driver = Appium::Driver.new(
caps: {
...
noSessionOverwriting: true,
},
appium_lib: {
...
}
).start_driver
Tự động trả lại thiết bị thuê
Nếu không có truy cập nào đến cùng một thiết bị qua máy chủ Appium trong khoảng thời gian đã chỉ định, thiết bị sẽ được tự động trả lại. Nếu không có thời gian được chỉ định, thiết bị sẽ được tự động trả lại sau 10 phút.
Tên Capabilities | Giá trị |
---|---|
deviceKeepingTimeout | Ký hiệu “300000 đến 1800000” [ms]. Chỉ định thời gian từ 5 đến 30 phút. |
Tự động gia hạn thuê thiết bị
Nếu thời gian còn lại của việc thuê bao là ít hơn 10 phút mà có truy cập đến cùng một thiết bị qua máy chủ Appium, việc thuê bao sẽ được tự động gia hạn thêm 30 phút nữa một cách tự động.
Trả lại cưỡng chế thiết bị thuê
Thiết bị sẽ tự động được trả lại nếu không sử dụng, nhưng nếu bạn muốn thực hiện ngay việc xác minh tự động trên thiết bị khác, bạn có thể buộc trả lại thiết bị. returnDeviceUrl được phát ra khi chạy mã kiểm tra. Bạn có thể buộc trả lại thiết bị bằng cách sử dụng khả năng lấy returnDeviceUrl và truy cập URL tương ứng trong mã kiểm tra.
・Mã ví dụ trong Ruby
returnDeviceUrl = @driver.capabilities['returnDeviceUrl']
system("curl #{returnDeviceUrl}")
Chạy với Trình điều khiển Chrome mới nhất
Nếu bạn gặp sự cố khi sử dụng phiên bản mới nhất của Chrome Driver, bạn cần thêm cài đặt sau vào Capabilities của bạn.
・Trích ví dụ thiết lập trong Ruby
caps: {
'chromeOptions': {'w3c': false},
},
Tập lệnh kiểm tra Ruby thực hiện tìm kiếm trên Google
Lưu tập lệnh bên dưới trên PC cục bộ của bạn với tên như test.rb.
require 'rubygems'
require 'test/unit'
require 'selenium-webdriver'
require 'appium_lib'
# get userName, password from Environment variable
RTK_USERNAME = ENV['RTK_USERNAME']
RTK_PASSWORD = ENV['RTK_PASSWORD']
unless RTK_USERNAME && RTK_PASSWORD then
puts "Environment variable error"
exit(0)
end
class OpenUrlTest < Test::Unit::TestCase
def setup
opts = {
caps: {
userName: RTK_USERNAME,
password: RTK_PASSWORD,
deviceName: 'Nexus 5',
platformName: 'Android',
browserName: 'Chrome',
chromeOptions: {'w3c': false}
},
appium_lib: {
server_url: 'https://gwjp.appkitbox.com/wd/hub',
wait: 60
}
}
@driver = Appium::Driver.new(opts).start_driver
end
def teardown
@driver.quit()
end
def test_google_search
puts @driver.capabilities['snapshotUrl']
# Open URL
url = "https://www.google.com/"
puts "Open URL: " + url
@driver.get(url)
element = @driver.find_element(:name, 'q')
sleep(5)
@driver.save_screenshot('capture_01.png')
# Input keys
word = "Airmobi"
puts "Input Keys: " + word
element.send_keys(word)
element.send_keys(:enter)
sleep(5)
@driver.save_screenshot('capture_02.png')
# Get value
value = @driver.find_element(:name, 'q').value
puts "Text field value=" + value
assert_equal true, value == "Airmobi"
end
end
Tập lệnh kiểm thử Ruby để thực hiện phép tính trên máy tính của iPhone.
Lưu tập lệnh bên dưới trên PC cục bộ của bạn với tên như test.rb.
# gem install selenium-webdriver
# gem install appium_lib
# export RTK_USERNAME=xxxx
# export RTK_PASSWORD=xxxx
require 'rubygems'
require 'test/unit'
require 'selenium-webdriver'
require 'appium_lib'
# get userName, password from Environment variable
RTK_USERNAME = ENV['RTK_USERNAME']
RTK_PASSWORD = ENV['RTK_PASSWORD']
unless RTK_USERNAME && RTK_PASSWORD
puts 'Environment variable error'
exit(0)
end
class ContactsIOsTests < Test::Unit::TestCase
def setup
opts = {
caps: {
# get userName, password from Environment variable
userName: RTK_USERNAME,
password: RTK_PASSWORD,
deviceName: 'iPhone 8.*',
platformName: 'iOS',
platformVersion: '14.0.1',
bundleId: 'com.apple.calculator'
},
appium_lib: {
server_url: 'https://gwjp.appkitbox.com/wd/hub',
wait: 60
}
}
@driver = Appium::Driver.new(opts).start_driver
end
def teardown
@driver.quit
end
def test_google_search
puts @driver.capabilities['snapshotUrl']
@driver.save_screenshot('capture_01.png')
el1 = @driver.find_element(:accessibility_id, '1')
el1.click
@driver.save_screenshot('capture_02.png')
is_lang_english = true
begin
el2 = @driver.find_element(:accessibility_id, 'multiply')
el2.click
rescue StandardError
is_lang_english = false
el2 = @driver.find_element(:accessibility_id, '乗算')
el2.click
end
@driver.save_screenshot('capture_03.png')
el3 = @driver.find_element(:accessibility_id, '3')
el3.click
@driver.save_screenshot('capture_04.png')
el2.click
@driver.save_screenshot('capture_05.png')
el3.click
@driver.save_screenshot('capture_06.png')
if is_lang_english
el4 = @driver.find_element(:accessibility_id, 'equals')
el4.click
@driver.save_screenshot('capture_07.png')
el5 = @driver.find_element(:accessibility_id, 'Result')
value = el5.attribute('value')
puts 'Text field value=' + value
assert_equal(value, '9')
el6 = @driver.find_element(:accessibility_id, 'clear')
el6.click
@driver.save_screenshot('capture_08.png')
else
el4 = @driver.find_element(:accessibility_id, '計算実行')
el4.click
@driver.save_screenshot('capture_07.png')
el5 = @driver.find_element(:accessibility_id, '結果')
value = el5.attribute('value')
puts 'Text field value=' + value
assert_equal(value, '9')
el6 = @driver.find_element(:accessibility_id, '消去')
el6.click
@driver.save_screenshot('capture_08.png')
end
end
end
Khi chạy tập lệnh kiểm tra này, hãy đặt tên người dùng và mật khẩu Airmobi trong các biến môi trường. Thực hiện như sau từ thiết bị đầu cuối.
export RTK_USERNAME=xxxx
export RTK_PASSWORD=xxxx
Nếu bạn muốn kết nối với Appium Cloud thông qua Proxy
Hỗ trợ proxy khác nhau tùy thuộc vào thư viện chứa tập lệnh kiểm thử.
Ví dụ: Python không có hỗ trợ proxy theo tiêu chuẩn, vì vậy hãy sử dụng MonkeyPatch như hiển thị bên dưới.
Vui lòng đặt PROXY_URL trong mã mẫu tùy theo môi trường của riêng bạn.
import os
import sys
import unittest
from time import sleep
from appium import webdriver
# ------------------------------------------------------------------------------------------
# The original selenium.webdriver.remote.remote_connection is not implemented to access
# the endpoint via proxy. So We wrote a monkey patch for the proxy.
import certifi
import urllib3
from selenium.webdriver.remote.remote_connection import RemoteConnection
RemoteConnection.__org__init__ = RemoteConnection.__init__
def patch_init(self, remote_server_addr, keep_alive=False, resolve_ip=True):
print("\nMonkey patch version: selenium.webdriver.remote.remote_connection")
RemoteConnection.__org__init__(self, remote_server_addr, keep_alive=keep_alive, resolve_ip=resolve_ip)
if keep_alive:
# Define proxy. Default value is squid port.
PROXY_URL = "http://localhost:3128"
self._conn = urllib3.ProxyManager(proxy_url=PROXY_URL, timeout=self._timeout)
# If basic authentication is required, uncomment the following and define it.
# headers = urllib3.util.make_headers(proxy_basic_auth="userid:password")
# self._conn = urllib3.ProxyManager(
# proxy_url=PROXY_URL, proxy_headers=headers, cert_reqs='CERT_REQUIRED', ca_certs=certifi.where())
RemoteConnection.__init__ = patch_init
# ------------------------------------------------------------------------------------------
# Specify userName, password to Environment variable
RTK_ACCESSTOKEN = os.environ.get('RTK_ACCESSTOKEN')
if not RTK_ACCESSTOKEN:
print("Environment variable error")
sys.exit()
class OpenUrlTest(unittest.TestCase):
def setUp(self):
caps = {
'accessToken': RTK_ACCESSTOKEN,
'deviceName': 'Pixel',
'platformName': 'Android',
'browserName': 'Chrome',
'chromeOptions': {'w3c': False}
}
# Specify the endpoint
self.driver = webdriver.Remote('https://gwjp.appkitbox.com/wd/hub', caps)
print(f"command_executor={self.driver.command_executor}")
print(f"proxy={self.driver.command_executor._conn.proxy}")
def tearDown(self):
self.driver.quit()
def test_google_search(self):
# print(self.driver.capabilities['snapshotUrl'])
# Open URL
url = "https://www.google.com/"
print("Open URL: " + url)
self.driver.get(url)
element = self.driver.find_element_by_name('q')
sleep(5)
self.driver.save_screenshot('capture_01.png')
# Input keys
word = "Airmobi"
print("Input Keys: " + word)
element.send_keys(word)
element.submit
sleep(5)
self.driver.save_screenshot('capture_02.png')
# Get value
value = self.driver.find_element_by_name('q').get_attribute('value')
print("Text field value=" + value)
self.assertEqual(value, "Airmobi")
if __name__ == '__main__':
suite = unittest.TestLoader().loadTestsFromTestCase(OpenUrlTest)
unittest.TextTestRunner(verbosity=2).run(suite)
Mã mẫu khác
Để biết mã mẫu của các ngôn ngữ khác và tập lệnh thử nghiệm, vui lòng tham khảo kho lưu trữ bên dưới.
https://github.com/remotetestkit/sample-code
Thông số kỹ thuật và hạn chế
Kể từ tháng 10 năm 2021, có những hạn chế sau.
- *Airmobi Appium Cloud là một tính năng có thể được sử dụng miễn phí bởi những người dùng đã đăng ký gói Flat 3 trở lên.
- Do thông số kỹ thuật của Appium, các thiết bị mục tiêu được giới hạn ở các thiết bị chạy Android 4.4 trở lên hoặc iOS 10.3 trở lên hỗ trợ UiAutomator2.
- Thư viện máy khách Appium, dựa trên máy khách Selenium Phiên bản 4, sẽ không hoạt động, vì vậy vui lòng sử dụng phiên bản cũ hơn tương ứng của thư viện máy khách.
- Đối với thiết bị iOS, phiên bản Appium tối ưu cho phiên bản iOS thuê sẽ được chọn lọc và không thể chỉ định theo khả năng. Vui lòng triển khai tập lệnh kiểm thử phía máy khách mà bạn tạo có lưu ý đến phiên bản tương ứng.
- Nếu không chỉ định thời gian trả lại tự động cho việc thuê thiết bị, việc trả lại tự động sẽ xảy ra nếu cùng một thiết bị không được truy cập qua máy chủ Appium trong 10 phút. Ngoài ra, vì nó không được tự động trả về trong 10 phút nên bạn có thể chạy nhiều tập lệnh trên cùng một thiết bị đầu cuối.
- Các quy trình đặt tải lên máy chủ hoặc yêu cầu lượng bộ nhớ lớn có thể bị buộc phải chấm dứt.
- Nếu cần, vui lòng thêm cài đặt quyền truy cập từ Airmobi vào cài đặt tường lửa của công ty bạn, v.v. Địa chỉ IP nguồn truy cập được liệt kê trongFAQ câu hỏi thường gặp.
- Hoạt động trong môi trường proxy không được hỗ trợ.