Báo cáo thực tậptốt nghiệp đề tài kiểm thử ứng dụng web với phần mềm selenium

34 7 0
Báo cáo thực tậptốt nghiệp đề tài kiểm thử ứng dụng web với phần mềm selenium

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

ĐẠI HỌC THÀNH ĐÔ KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO THỰC TẬP TỐT NGHIỆP Đề tài: KIỂM THỬ ỨNG DỤNG WEB VỚI PHẦN MỀM SELENIUM Họ tên: Lớp: Ngành: Thời gian thực tập: Giảng viên hướng dẫn: HÀ NỘI 12/2016 MỤC LỤC LỜI MỞ ĐẦU CHƯƠNG I: TỔNG QUAN VỀ KIỂM THỬ PHẦN MỀM 1.1 Khái niệm 1.2 Các cấp độ kiểm thử phần mềm .5 1.2.1 Kiểm thử đơn vị (Unit Test) .6 1.2.2 Kiểm thử tích hợp (Integration Test) 1.2.3 Kiểm thử hệ thống (System Test) 1.2.4 Kiểm thử chấp nhận sản phẩm (Acceptance Test) 1.3 Kỹ thuật kiểm thử phần mềm 1.3.1 Kỹ thuật kiểm thử hộp đen (Black – box Testing) 1.3.2 Kỹ thuật kiểm thử hộp trắng (White – box Testing) 10 1.3.2.1 Kiểm thử đường dẫn sở 10 CHƯƠNG 2: CÔNG CỤ KIỂM THỬ TỰ ĐỘNG SELENIUM .11 2.1 Tổng quan Selenium 11 2.1.1 Selenium gì? 11 2.1.2 Các thành phần Selenium .11 2.2 Selenium IDE 12 2.2.1 Cài đặt Selenium IDE 13 2.2.2 Các icon Selenium IDE 14 2.2.3 Các thao tác thực kiểm thử tự động với Selenium .16 2.2.3.1 Recording_Thực thu kịch với Selenium IDE 16 2.2.3.2 Thêm lệnh khẳng định xác nhận với menu ngữ cảnh 18 2.2.3.3 Các thao tác chỉnh sửa 18 2.2.3.4 Mở lưu lại test case .19 2.2.3.5 Chạy test case 19 CHƯƠNG 3: KẾT QUẢ KIỂM THỬ 21 3.1 Bài toán thử nghiệm 21 3.2 Sự khác kịch kiểm thử tự động kịch kiểm thử thủ công 21 3.3 Kịch kiểm thử thủ công 22 3.3.1 Chức đăng nhập 22 3.3.2 Chức kiểm tra thứ hạng từ khóa .23 3.4 Kịch kiểm thử tự động 23 3.5 Kết thử nghiệm 28 3.5.1 Chức đăng nhập 28 3.5.2 Chức check thứ hạng từ khóa .29 KẾT LUẬN 30 TÀI LIỆU THAM KHẢO 31 LỜI MỞ ĐẦU Kiểm thử phần mềm hoạt động giữ vai trò quan trọng để bảo đảm chất lượng phần mềm hoạt động mang tính sống cịn dự án sản xuất gia cơng phần mềm Vì vậy, kiểm thử phần mềm trở thành qui trình bắt buộc dự án phát triển phần mềm giới Ở Việt Nam, ngành cơng nghiệp phần mềm phát triển khơng thể xem nhẹ việc kiểm thử phần mềm xác suất thất bại cao, nữa, hầu hết cơng ty phần mềm có uy tín đặt yêu cầu nghiêm ngặt phần mềm tài liệu kiểm thử kèm khơng chấp nhận Tuy nhiên, hoạt động kiểm thử thường gặp nhiều khó khăn:  Thứ nhất, kiểm thử hệ thống phức tạp đòi hỏi nhiều nguồn tài ngun chi phí cao  Thứ hai, tiến trình phát triển phần mềm trải qua nhiều hoạt động biến đổi thông tin, mát thông tin q trình biến đổi yếu tố làm cho hoạt động kiểm thử khó khăn   Thứ ba, kiểm thử chưa trọng đào tạo người Cuối cùng, không tồn kỹ thuật kiểm thử cho phép khẳng định phần mềm hoàn toàn đắn hay khơng chứa lỗi Với mục đích phát lỗi, kiểm thử phần mềm thường phải trải qua bước: tạo liệu thử, thực thi phần mềm liệu thử quan sát kết nhận Trong bước này, bước tạo liệu đóng vai trị quan trọng nhất, khơng thể tạo liệu từ miền vào chương trình, mà tạo liệu thử có khả phát lỗi cao Vấn đề đặt làm để đánh giá khả phát lỗi liệu thử? Một kinh nghiệm để giúp giải vấn đề này, sử dụng khái niệm chất lượng liệu thử phương tiện để đánh giá liệu thử “tốt” kiểm thử chương trình Ở đây, “tốt” đánh giá liên quan đến tiêu chuẩn chất lượng định trước, thường số dấu hiệu bao phủ chương trình Ví dụ, tiêu chuẩn bao phủ dòng lệnh đòi hỏi liệu thử thực dịng lệnh chương trình lần Nếu liệu thử tìm thấy khơng chất lượng liên quan đến tiêu chuẩn (tức tất câu lệnh thực lần), kiểm thử bắt buộc Do đó, mục tiêu tạo tập kiểm thử thực đầy đủ tiêu chuẩn chất lượng Tiêu chuẩn chất lượng tiêu biểu bao phủ câu lệnh kiểm thử định (thực tất đường dẫn sai qua chương trình) dựa vào việc thực chương trình với số lượng kiểm thử tăng dần để nâng cao độ tin cậy chương trình Tuy nhiên, chúng khơng tập trung vào nguyên nhân thất bại chương trình gọi lỗi Kiểm thử đột biến tiêu chuẩn Tiêu chuẩn tạo phiên chương trình có chứa lỗi đơn giản sau tìm kiểm thử để dấu hiệu lỗi Nếu tìm thấy liệu thử chất lượng làm lộ dấu hiệu tất phiên bị lỗi, tin tưởng vào tính đắn chương trình tăng Kiểm thử đột biến áp dụng cho nhiều ngơn ngữ lập trình kỹ thuật kiểm thử hộp trắng CHƯƠNG I: TỔNG QUAN VỀ KIỂM THỬ PHẦN MỀM 1.1 Khái niệm Kiểm thử phần mềm trình thực thi hệ thống phần mềm để xác định xem phần mềm có với đặc tả khơng thực mơi trường mong đợi hay khơng Mục đích kiểm thử phần mềm tìm lỗi chưa phát hiện, tìm cách sớm bảo đảm lỗi sửa Mục tiêu kiểm thử phần mềm thiết kế tài liệu kiểm thử cách có hệ thống thực cho có hiệu quả, tiết kiệm thời gian, cơng sức chi phí 1.2 Các cấp độ kiểm thử phần mềm Cấp độ kiểm thử phần mềm thể hình 1.1 [25]: Kiểm thử mức đơn vị lập trình (Unit test) Các phận đơn lẻ Kiểm thử mức tch hợp đơn vị (Integra琀椀on test) Các nhóm phận Kiểm thử mức h ệ thốống, sau tch hợp (System test) Ki m ể th ửđ ểchấốp nhận sản phẩm (Acceptance test) Toàn h ệthốống Tồn b ộh ệthốống nhìn từ khách hàng Hình 1.1- Bốốn cấốp độ kiểm thử phấần mềầm 1.2.1 Kiểm thử đơn vị (Unit Test) 1.1.1 Một đơn vị (Unit) thành phần phần mềm nhỏ mà ta kiểm thử được, ví dụ: hàm (Function), thủ tục (Procedure), lớp (Class), phương thức (Method) Kiểm thử đơn vị thường lập trình viên thực Cơng đoạn cần thực sớm tốt giai đoạn viết code xuyên suốt chu kỳ phát triển phần mềm Mục đích kiểm thử đơn vị bảo đảm thông tin xử lý kết xuất (khỏi Unit) xác, mối tương quan với liệu nhập chức xử lý Unit Điều thường đòi hỏi tất nhánh bên Unit phải kiểm tra để phát nhánh phát sinh lỗi Cũng mức kiểm thử khác, kiểm thử đơn vị đòi hỏi phải chuẩn bị trước ca kiểm thử (hay trường hợp kiểm thử) (test case) kịch (test script), định rõ liệu vào, bước thực liệu mong muốn xuất Các test case test script giữ lại để sử dụng sau 1.2.2 Kiểm thử tích hợp (Integration Test) Kiểm thử tích hợp kết hợp thành phần ứng dụng kiểm thử ứng dụng hoàn thành Trong kiểm thử đơn vị kiểm tra thành phần Unit riêng lẻ kiểm thử tích hợp kết hợp chúng lại với kiểm tra giao tiếp chúng Kiểm thử tích hợp có hai mục tiêu là:  Phát lỗi giao tiếp xảy Unit  Tích hợp Unit đơn lẻ thành hệ thống (gọi subsystem) cuối nguyên hệ thống hoàn chỉnh chuẩn bị cho kiểm thử mức hệ thống (system test) Có loại kiểm thử kiểm thử tích hợp sau:  Kiểm thử cấu trúc (Structure test): Kiểm thử nhằm bảo đảm thành phần bên chương trình chạy đúng, trọng đến hoạt động thành phần cấu trúc nội chương trình, chẳng hạn lệnh nhánh bên  Kiểm thử chức (Functional test): Kiểm thử trọng đến chức chương trình, khơng quan tâm đến cấu trúc bên trong, khảo sát chức chương trình theo yêu cầu kỹ thuật  Kiểm thử hiệu (Performance test): Kiểm thử việc vận hành hệ thống  Kiểm thử khả chịu tải (Stress test): Kiểm thử giới hạn hệ thống 1.2.3 Kiểm thử hệ thống (System Test) 1.1.2 Mục đích kiểm thử hệ thống kiểm thử xem thiết kế tồn hệ thống (sau tích hợp) có thỏa mãn u cầu đặt hay khơng Kiểm thử hệ thống kiểm tra hành vi chức phần mềm lẫn yêu cầu chất lượng độ tin cậy, tính tiện lợi sử dụng, hiệu bảo mật Kiểm thử hệ thống bắt đầu tất phận phần mềm tích hợp thành cơng Thơng thường loại kiểm thử tốn nhiều công sức thời gian Trong nhiều trường hợp, việc kiểm thử đòi hỏi số thiết bị phụ trợ, phần mềm phần cứng đặc thù, đặc biệt ứng dụng thời gian thực, hệ thống phân bố, hệ thống nhúng Ở mức độ hệ thống, người kiểm thử tìm kiếm lỗi, trọng tâm đánh giá hoạt động, thao tác, tin cậy yêu cầu khác liên quan đến chất lượng toàn hệ thống Điểm khác then chốt kiểm thử tích hợp kiểm thử hệ thống kiểm thử hệ thống trọng hành vi lỗi tồn hệ thống, cịn kiểm thử tích hợp trọng giao tiếp đơn thể đối tượng chúng làm việc Thông thường ta phải thực kiểm thử đơn vị kiểm thử tích hợp để bảo đảm Unit tương tác chúng hoạt động xác trước thực kiểm thử hệ thống Sau hoàn thành kiểm thử tích hợp, hệ thống phần mềm hình thành với thành phần kiểm tra đầy đủ Tại thời điểm này, lập trình viên kiểm thử viên (Tester) bắt đầu kiểm thử phần mềm hệ thống hoàn chỉnh Việc lập kế hoạch cho kiểm thử hệ thống nên giai đoạn hình thành phân tích u cầu Địi hỏi nhiều cơng sức, thời gian tính xác, khách quan, kiểm thử hệ thống thực nhóm kiểm tra viên hồn tồn độc lập với nhóm phát triển dự án để đảm bảo tính xác khách quan Kiểm thử hệ thống thường có loại kiểm thử sau:  Kiểm thử chức (Functional test): Bảo đảm hành vi hệ thống thỏa mãn yêu cầu thiết kế  Kiểm thử khả vận hành (Performance test): Bảo đảm tối ưu việc phân bổ tài nguyên hệ thống (ví dụ nhớ) nhằm đạt tiêu thời gian xử lý hay đáp ứng câu truy vấn,  Kiểm thử khả chịu tải (Stress test hay Load test): Bảo đảm hệ thống vận hành áp lực cao (ví dụ nhiều người truy xuất lúc) Stress test tập trung vào trạng thái tới hạn, "điểm chết", tình bất thường giao dịch ngắt kết nối (xuất nhiều test thiết bị POS, ATM),  Kiểm thử cấu hình (Configuration test): Đảm bảo hệ thống hoạt động tương thích với loại phần cứng khác  Kiểm thử khả bảo mật (Security test): Bảo đảm tính tồn vẹn, bảo mật liệu hệ thống  Kiểm thử khả phục hồi (Recovery test): Bảo đảm hệ thống có khả khơi phục trạng thái ổn định trước tình tài ngun liệu; đặc biệt quan trọng hệ thống giao dịch ngân hàng trực tuyến 1.2.4 Kiểm thử chấp nhận sản phẩm (Acceptance Test) Mục đích kiểm thử chấp nhận kiểm thử khả chấp nhận cuối để chắn sản phẩm phù hợp thỏa mãn yêu cầu khách hàng khách hàng chấp nhận sản phẩm Trong giai đoạn kiểm thử chấp nhận người kiểm tra khách hàng Khách hàng đánh giá phần mềm với mong đợi theo thao tác sử dụng quen thuộc họ Việc kiểm tra giai đoạn có ý nghĩa quan trọng tránh cho việc hiểu sai yêu cầu mong đợi khách hàng Gắn liền với giai đoạn kiểm thử chấp nhận thường nhóm dịch vụ tài liệu kèm, phổ biến hướng dẫn cài đặt, sử dụng, v.v…Tất tài liệu kèm phải cập nhật kiểm tra chặt chẽ 1.3 Kỹ thuật kiểm thử phần mềm Mục tiêu kiểm thử phải thiết kế trường hợp kiểm thử có khả cao việc phát nhiều lỗi với thời gian cơng sức tối thiểu Do chia kỹ thuật kiểm thử thành hai loại:  Kỹ thuật kiểm thử hộp đen (Black – box Testing) hay gọi kỹ thuật kiểm thử chức (Functional Testing)  Kỹ thuật kiểm thử hộp trắng (White – box Testing) hay gọi kỹ thuật kiểm thử cấu trúc (Structural Testing) 1.3.1 Kỹ thuật kiểm thử hộp đen (Black – box Testing) Kiểm thử hộp đen gọi kiểm thử hướng liệu (data - driven) kiểm thử hướng vào/ra (input/output driven) Trong kỹ thuật này, người kiểm thử xem phần mềm hộp đen Người kiểm thử hồn tồn khơng quan tâm đến cấu trúc hành vi bên chương trình Người kiểm thử cần quan tâm đến việc tìm tượng mà phần mềm không hành xử theo đặc tả Do đó, liệu kiểm thử xuất phát từ đặc tả Như vậy, cách tiếp cận kiểm thử hộp đen tập trung vào yêu cầu chức phần mềm Kiểm thử hộp đen cho phép người kiểm thử xây dựng nhóm giá trị đầu vào thực thi đầy đủ tất yêu cầu chức chương trình Kiểm thử hộp đen khơng thay kỹ thuật kiểm thử hộp trắng, bổ sung khả phát lớp lỗi khác với phương pháp hộp trắng Kiểm thử hộp đen cố gắng tìm loại lỗi sau:  Các chức thiếu không  Các lỗi giao diện  Các lỗi cấu trúc liệu truy cập sở liệu bên  Các lỗi thực  Các lỗi khởi tạo kết thúc  Và lỗi khác Không giống với kiểm thử hộp trắng thực sớm trình kiểm thử, kiểm thử hộp đen áp dụng giai đoạn sau kiểm thử Vì kiểm thử hộp đen khơng để ý có chủ đích cấu trúc điều khiển, quan tâm tập trung miền thông tin Nếu người kiểm thử muốn sử dụng phương pháp để tìm tất lỗi chương trình điều kiện bắt buộc phải kiểm thử tất đầu vào, tức  Chèn vào mã nguồn: Chọn vị trí test case mà bạn muốn chèn lệnh Trong ô test case, chuột trái vào vị trí muốn chèn lệnh Vào tag HTML, cần tạo dòng chứa lệnh bao gồm tham số (nếu lệnh yêu cầu có tham số), tham số thứ hai (nếu có) Lưu test case trước chọn lại table view - Chèn comment: Các comment thêm vào cho test case dễ hiểu Những comment bỏ qua chạy test case Comment sử dụng để thêm vào khoảng trống dọc (một nhiều dòng trắng) vào test case chúng ta, tạo comment trắng Một lệnh trắng tạo lỗi thực thi cịn comment trắng khơng tạo lỗi thực thi  Chèn vào bảng: Chọn vị trí test case muốn comment Click chuột phải chọn Insert Comment Sử dụng trường Command để nhập comment  Chèn vào mã nguồn: Chọn vị trí test case muốn chèn comment Thêm comment có dạng HTML Ví dụ: - Chỉnh sửa comment hay lệnh:  Chỉnh sửa qua giao diện: Chọn dịng cần chỉnh sửa chỉnh sửa trường Command, Target, Value  Chỉnh sửa qua mã nguồn: Vào mã nguồn, chỉnh sửa trực tiếp vào dòng comment hay lệnh muốn chỉnh sửa 2.2.3.4 Mở lưu lại test case - Chọn tập tin/ Open Save Tuy nhiên Selenium có khác biệt test case test suite Để lưu lại bước kiểm thử Selenium- IDE sau sử dụng, bạn lưu lại test case riêng lẻ, hay lưu nhiều test case dạng test suite Nếu test case test suite không lưu Chương trình nhắc nhở ta lưu chúng trước lưu test suite Khi mở test case test suite có, Selenium-IDE hiển thị câu lệnh ô test case 2.2.3.5 Chạy test case Selenium IDE có nhiều lựa chọn để chạy test case Bạn chạy test case, dừng chạy tiếp, chạy dòng lệnh riêng lẻ, hay chạy test suite - Chạy test case: Chọn test case sau click vào nút Run để chạy test case - Stop and Start: Nút Pause dùng để tạm dừng test case 19 chạy Để tiếp tục chạy test case bị tạm dừng, click nút Resume - Tạm dừng giữa: Bạn chọn điểm test case để tạm dừng câu lệnh đặc biệt Điều có ích việc gỡ lỗi test case Để chọn điểm dừng cho test case, chọn câu lệnh, chuột phải, chọn Set/Clear Start Point - Bắt đầu từ giữa: Chúng ta bắt đầu chạy test case từ điểm xác định test case, thao tác sử dụng gỡ lỗi Để gán điểm bắt đầu, ta chọn câu lệnh làm điểm bắt đầu, chuột phải, chọn Set/Clear Start Point - Chạy câu lệnh đơn lẻ bất kỳ: Double-Click câu lệnh muốn chạy Việc có ích viết câu lệnh đơn lẻ 20 CHƯƠNG 3: KẾT QUẢ KIỂM THỬ 3.1 Bài toán thử nghiệm - Vấn đề đặt kiểm thử hai chức cho ứng dụng Web kiểm tra thứ hạng từ khóa cơng cụ tìm kiếm goole - Link ứng dụng: http://ranking.helu.vn - Ứng dụng kiểm thử trình duyệt: Mozilla Firefox - Chức đăng nhập: Chức chức đăng nhập túy vào ứng dụng eb thông thường giống ứng dụng khác yahoo, google, forum Các yếu tố cần kiểm tra:  Nếu đăng nhập tên mật tải đến trang chủ ứng dụng email  Nếu đăng nhập sai tên mật đưa thơng báo: “Tên đăng nhập mật đăng nhập không đúng”  Nếu nhập thiếu tên đăng nhập đưa thơng báo: “Bạn phải nhập tên đăng nhập”  Nếu nhập thiếu mật đưa thông báo: “Bạn phải nhập mật khẩu” - Chức kiểm tra thứ hạng từ khóa: Ứng dụng web kiểm tra thứ hạng từ khóa website: thutucgiahanvisa.com, để kiểm tra từ khóa đứng thứ hạng Google 3.2 Sự khác kịch kiểm thử tự động kịch kiểm thử thủ công Trước thực kiểm thử ứng dụng, cần phải nói thêm khác kịch kiểm thử thủ công kịch kiểm thử tự động Với kiểm thử thủ công, kịch kiểm thử chức thông thường chia thành ba phần chính: - Phần giao diện - Phần chức 21 Với kiểm thử tự động, có hai phần mà ta cần quan tâm test case liệu kiểm thử Trong đó: - Test case: Có thể lớp hàm lớp ghi lại chuỗi kiện mà ta thao tác với ứng dụng cần kiểm thử Khác với khái niệm test case thực kiểm thử thủ công giá trị đầu vào khác tạo thành testcase - Dữ liệu kiểm thử: Là liệu nhập vào để kiểm thử 3.3 Kịch kiểm thử thủ công 3.3.1 Chức đăng nhập - Ở chức đăng nhập, ba phần cần kiểm tra là:  Giao diện: Kiểm thử yếu tố giao diện chung kiểm tra giao diện theo thiết kế, kiểm tra ấn tab, shift-tab, kiểm tra việc bị vỡ giao diện hay không, giá trị mặc định textbox  Chức năng: Có bốn trường hợp chức cần cần kiểm thử: o Kiểm tra đăng nhập thành công với Tên đăng nhập/ Mật hợp lệ o Kiểm tra đăng nhập không thành công sử dụng sai Tên đăng nhập/ Mật o Kiểm tra thông báo không nhập Tên đăng nhập o Kiểm tra thông báo không nhập mật  Kiểm thử an tồn bảo mật: Vì chức đăng nhập không nhập số liệu vào sở liệu ta bỏ qua khơng kiểm tra số lỗi an tồn thơng tin cần kiểm tra số lỗi sau: o Lỗi SQL Injection o Lỗi User Enumeration o Kiểm tra lỗ hổng cho phép dị đốn mật 22 3.3.2 Chức kiểm tra thứ hạng từ khóa Kiểm tra thứ hạng từ khóa bước quan trọng quy trình làm SEO đánh giá kết SEO bạn có thành cơng hay khơng để từ giúp ta khắc phục kịp thời Trong viết liệt kê số cách giúp bạn kiểm tra thứ hạng từ khóa website nhanh chóng xác Chức kiểm tra từ khóa:  Giao diện: K iểm tra giao diện chung  Chức năng: phải kiểm tra trường hợp chính: o Kiểm tra thành cơng xếp hạng từ khóa o Kiểm tra thông báo lỗi không nhập từ khóa vào kiểm tra - Các chức chính:  Giao diện: K iểm tra giao diện chung, kiểm tra combo-box  Chức năng: Kịch kiểm thử phải đáp ứng bao quát số chức năng: o Kiểm tra check thứ hạng từ khóa phải nhập thơng tin tên miền, danh sách từ khóa o Kiểm tra check thứ hạng từ khóa khơng nhập thông tin báo lỗi o Kiểm tra nhập 10 từ khóa ứng dụng tự loại bỏ từ khóa thừa kiểm tra 10 từ cịn lại o Kiểm tra việc kiểm tra nhiều từ khóa 3.4 Kịch kiểm thử tự động 23 Do hạn chế kinh nghiệm thời gian tìm hiểu tool phức tạp ứng dụng check thứ hạng từ khóa, báo cáo trình bày demo số case chức đăng nhập hai công cụ Selenium IDE Selenium RC thực báo cáo kết dựa framework kiểm thử JUnit - Đăng nhập thành công firefox import com.thoughtworks.selenium.*; import org.junit.After; import org.junit.Before; import org.junit.Test; public class DangNhapFirefox { public Selenium selenium; @Before public void setUp() throws Exception { selenium = new DefaultSelenium("localhost", "*firefox", "https://mail.viettel.com.vn/"); selenium.start(); } @Test public void testDangnhapjunit4() throws Exception { selenium.open("/"); selenium.type("name=user", "trangnh7"); selenium.type("name=password", "meo@Dien07"); selenium.click("id=button"); selenium.waitForPageToLoad("30000"); } @After public void tearDown() throws Exception { selenium.stop(); } } Hình 3.1: Test case đăng nhập Firefox 24 4444, Báo cáo kiểm thử: Mã nguồn sinh báo cáo: 1 1 open / clickAndWait link=Đăng nhập type name=customer_email thunguyen5995@gmail.com type name=customer_password 123456 25 clickAndWait name=login Test case Đăng nhập 2 2 open / type id=url 26 thutucgiahanvisa.com type id=keyword Gia hạn visa            Visa tháng Gia hạn visa tháng Gia hạn visa tháng nhiều lần Xin visa sân bay Gia hạn visa du lịch />Xin visa du lịch giá rẻ

Ngày đăng: 11/08/2023, 13:24

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan