Xem mẫu

  1. Hà Thị Minh Phương 259 Tái cấu trúc mã Javascript trong kiểm thử tự động trên Selenium Framework Hà Thị Minh Phương Khoa Công nghệ Thông tin và Truyền thông, Đại học Đà Nẵng htmphuong@sict.udn.vn Tóm tắt. Kịch bản kiểm tra tự động đóng một vai trò quan trọng trong kiểm thử tự động. Kiểm thử tự động đã trở thành một chủ đề nghiên cứu nóng trong ứng dụng Web để tăng chất lượng kiểm thử. Để tái cấu trúc mã JavaScript của ứng dụng Web được thuận tiện hơn, một cách tiếp cận tạo ra các kịch bản tự động từ trường hợp kiểm thử - test case được xác định sẽ giới thiệu trong bài báo này. Trước tiên, nó mô tả các trường hợp kiểm thử sử dụng định dạng XML. Sau đó, Selenium là một framework - nền tảng hỗ trợ nhiều trình duyệt kiểm thử, một phương pháp để chuyển đổi mô tả XML vào các tập lệnh kiểm tra dựa trên khung Selenium cũng được đề xuất để phục vụ cho việc kiểm thử tự động trên ứng dụng Web. Từ khóa: kiểm thử tự động, tái cấu trúc, XML, JavaScript, Selenium. 1 Đặt vấn đề Hiện nay các ứng dụng Web đang dần dần được phổ biến nhiều hơn hơn các ứng dụng Winform, các trình duyệt Web dựa trên các chuẩn của HTML5 và CSS3. Điều này cho việc lập trình giao diện người dùng trong các ứng dụng Web trở nên dễ dàng và thuận lợi hơn. Mặc dù sự phát triển nhanh chóng của công nghệ, nếu chương trình vẫn được lập trình bằng tay thay vì tự động tạo ra, mã phải được sắp xếp lại, điều này đòi hỏi sự cải thiện chất lượng phần mềm phải được tăng lên. Để phát hiện và sửa những lỗi, các kỹ sư có ít lựa chọn để thông qua kịch bản kiểm thử sử dụng các trình gỡ lỗi [1]. Tuy nhiên, vấn đề tương thích của nhiều trình duyệt vẫn gây phiền hà cho các nhà phát triển và người kiểm thử, khi thiết kế và lập trình các trang web bằng kỹ thuật JavaScript với mỗi trình duyệt có thể phải có bộ phân tích HTML / CSS và công cụ JavaScript của chính nó. Đây một thách thức lớn đối với đảm bảo chất lượng và bảo trì phần mềm, cần thiết phải ứng dụng web để tái cấu trúc mã JavaScript khi xem xét việc chuyển ứng dụng web giữa các trình duyệt. Martin Fowler [2] đã chỉ ra unit test – kiểm thử đơn vị là điều kiện tiên quyết cho việc tái cấu trúc ứng dụng Web. Đối với việc tái cấu trúc mã, bước quyết định là xây dựng một bộ hệ thống unit test hoàn chỉnh, nếu không thì không có sự thay đổi của các hàm chương trình trước và sau khi tái cấu trúc, đây sự khó khăn để đảm bảo cho lập trình hiệu quả. Để đảm bảo chất lượng phần mềm khi tái cấu trúc, unit test là một phần tất yếu. Tuy nhiên, functional function – kiểm thử chức năng hiệu quả và có ích hơn đối với JavaScript hơn là unit test [3]. Các lý do để giải thích cho việc này như sau: Một là các unit test được sử dụng trong các mô-đun logic mà các thuật toán được thực hiện. Unit test chỉ chỉ giám sát kết quả kiểm tra và đánh giá nó đúng hay sai giá trị từ kết quả mong đợi, trong khi mã JavaScript có thể thực hiện hiệu quả trong các trang Web. Hai là, mã JavaScript nên được tương thích với mỗi trình duyệt khác nhau. Một trang Web có thể hiển thị trong các trình duyệt khác nhau. Kết luận ở đây là trước khi bắt đầu tái cấu trúc lại JavaScript, chúng ta cần phải xây dựng và tích hợp hệ thống kiểm thử chức năng cho ứng dụng Web.
  2. 260 KỶ YẾU HỘI THẢO KHOA HỌC QUỐC GIA CITA 2017 “CNTT VÀ ỨNG DỤNG TRONG CÁC LĨNH VỰC” Bài viết này được tổ chức như sau phần I đặt vấn đề, phần II giới thiệu về kiểm thử ứng dụng Web và tự động hóa dựa trên Selenium. Phần III trình bày ngắn gọn quá trình tự động tạo các tập lệnh chức năng. Phần IV thảo luận về thuật toán chính và chuyển đổi về việc thay đổi biểu thức thống nhất thành các tập lệnh thực thi. Phần V đưa ra kết luận và các công trình trong tương lai. 2 Giới thiệu kiểm thử tự động Công cụ kiểm thử tự động là cực kỳ quan trọng trong kiểm thử tự động. Các chức năng của các công cụ này là tương tự. Bên cạnh việc ghi lại hành động của người dùng, cần phải thực hiện nhiều tính năng hơn, chẳng hạn như thực hiện các kịch bản hành động và tạo ra các kịch bản kiểm thử. Kiểm thử tự động ứng dụng Web hiện nay chỉ được sử dụng để kiểm tra hồi quy trong ngành công nghiệp để thực hiện giảm chi phí [4]. Rất nhiều công cụ kiểm tra tự động đã được xuất bản cho các ứng dụng Web, chẳng hạn như QTP, Win Runner, Robot và Silk Test [5] .etc. Trong lĩnh vực nghiên cứu của MBT, Tuomas, Tommi và Mika đã thực hiện một framework làm việc bởi cơ chế hướng theo từ khóa, chúng kết hợp mô hình thử nghiệm trừu tượng với các tập lệnh kiểm tra tại lần đầu tiên[7]. Trên thực tế, họ tập trung vào những điểm khác nhau với ngữ cảnh kiểm thử hoặc mục đích ứng dụng. Hình 1 mô tả cấu trúc của framework kiểm thử tự động Selenium ứng dụng Web bao gồm Selenium Core, Selenium IDE, Selenium RC và Selenium Web Driver. Nó không chỉ mô phỏng một loạt các hành động của người dùng mà còn phát lại các sự kiện mà người kiểm tra đã thực hiện trong quá trình thử nghiệm. Hình 1. Kiến trúc của Selenium framework 1) Selenium Core là công cụ lõi của toàn bộ framework, là một thư viện chức năng, lập trình bởi JavaScript. Các mô-đun khác của Selenium đều phụ thuộc vào nó. Trong kiến trúc ở trên, Selenium Core là nền tảng mà nó đưa vào các trang Web kiểm thử hướng dẫn cho các test được thực thi. 2) Selenium IDE là một trình duyệt plugin trên Firefox. Nó ghi lại và thực hiện các lệnh Selenium. Các lệnh Selenium có thể dễ dàng chuyển đổi thành tất cả các ngôn ngữ lập trình được hỗ trợ, giúp người kiểm tra dễ dàng sửa đổi và sử dụng lại các trường hợp kiểm thử hiện tại. 3) Selenium RC, viết tắt của Remote Control, là một khung hỗ trợ các ngôn ngữ tiên tiến để gọi Selenium Core, được gọi là API. Nó có một máy chủ Selenium giám sát và nhận các hướng dẫn được gửi bởi Selenium Client. Sau khi nhận được lệnh, Selenium RC sẽ chuyển đổi các hướng dẫn vào mã JavaScript cho các trình duyệt khác nhau. Như thể hiện trong hình 2,
  3. Hà Thị Minh Phương 261 Selenium RC gọi hàm lõi bằng cách chèn mã vào các trang Web. Remote Control hỗ trợ tính toán lưới. Hơn nữa, kiểm thử Selenium được điều khiển bởi Server cục bộ, trong đó các lệnh song song có thể được gửi đến các máy chủ sử dụng thuật toán song song khi bạn triển khai nhiều máy chủ. Hình 2. Hoạt động của Selenium Remote Control 4) Selenium Web Driver là phiên bản mới nhất (v2.0), khác với Selenium Remote Control. Vì trình điều khiển Web không đưa các tập lệnh vào các trang Web, việc gọi trình duyệt cần sự trợ giúp của các API bản địa [6]. Nó được khuyến cáo bởi các tài liệu chính thức hiện tại vì tính ổn định và hiệu năng của nó tốt hơn Selenium RC. Ngoài ra, người kiểm tra có thể từ bỏ sử dụng Selenium Server trong kiểm thử tự động mà không cần thuật toán song song. 3 Định nghĩa và mô tả cho các test case 3.1 Định nghĩa cấu trúc XML cho các Test Case Selenium framework có cú pháp riêng của nó để xác định các test case. Mỗi Selenese biểu diễn cho một bước kiểm tra và một danh sách của chúng có thể được lưu như là một trường hợp kiểm thử dưới định dạng HTML. Tuy nhiên, thông tin trong Selenese là không đủ. Cần thiết đề xuất một cú pháp mạnh hơn và linh hoạt, kết hợp những lợi thế của định dạng dữ liệu XML và Selenese. Nó được gọi là Extension Selenium Command Line (ESCL) hoặc XSelenese. Các tính năng của XML đưa ra một giải pháp tốt hơn. Lý do mở rộng các biểu thức lệnh Selenium bằng XML thay vì HTML là như sau - Sử dụng tổ hợp thẻ và tham chiếu để chỉ ra mối quan hệ giữa các test case với việc tái sử dụng lại. - Sử dụng lược đồ XML để chuẩn hóa kiểu dữ liệu XML và xác nhận hợp lệ các tệp XML Hai tính năng trên làm người dùng có thể tùy chỉnh cú pháp của mình cho các yêu cầu kiểm tra khác nhau. Và chỉ cần một vài quy tắc và cấu hình nên được sửa đổi khi tái sử dụng các test case mà hệ thống thế hệ vẫn hoạt động. Lược đồ XML cho test case đơn được xác định như sau: Hình 3. Cấu trúc Tag của Test Case XML Root Element
  4. 262 KỶ YẾU HỘI THẢO KHOA HỌC QUỐC GIA CITA 2017 “CNTT VÀ ỨNG DỤNG TRONG CÁC LĨNH VỰC” Hình 4 mô tả chi tiết của mỗi bước kiểm thử. Mỗi nút bước phải chứa một số thẻ selenese, được sử dụng để mô tả một vài hành động của người dùng trước khi xác nhận kết quả đầu ra. Lưu ý ở đây nút xác minh có một thuộc tính có tên "ref". Nó có thể liên kết đến nút khác đã được xác định đã có trong cùng một hệ thống kiểm thử cho việc tái sử dụng. Và nút selenese cũng có nút con của nó, chúng là các tag command, tag locator và giá trị tương ứng của các tag. Ba nút con tương ứng với ba phần của Selenese. 3.2 Định nghĩa cấu trúc XML cho các Test Suites Bản đặc tả dựa trên XML của test case ở trên có một số khiếm khuyết là làm thế nào để hiển thị mối quan hệ giữa các test case là không tường minh. Cụ thể, mỗi loại test case là độc lập và tách rời. Đó là một ý tưởng tốt để xây dựng một bảng đăng ký trong test suite, nếu không nút xác thực tham chiếu không thể được tìm thấy trong hệ thống kiểm thử hiện tại. Do đó, một tệp XML khác được sử dụng để hiển thị các test suites. Hình 4. Cấu trúc XML của Test Suites Trong hình 4, test suit chứa các test case. Nhưng nó giới thiệu tham số mới "reverse-case ". Hình 5 mô tả một test suite đơn giản bằng cấu trúc XML và thứ tự của các test case được sắp xếp bởi cái nút test case. Test suit chứa 4 test case bao gồm “register”, “login”, “change password” và “log out”. Thuộc tính name của mỗi tag test-case là định danh của nó. Hình 5. Test Suite XML Demo 3.3 Thực thi kịch bản kiểm thực tự động Hình 6. Mô hình lớp của các test case được tạo ra
  5. Hà Thị Minh Phương 263 Làm thế nào để trích xuất dữ liệu và phân tích các định dạng dữ liệu tương ứng mã tương ứng. Test case là cần thiết để thể hiện đơn vị kiểm thử nhỏ nhất và mỗi test suite phải phù hợp với phạm vi mã lập trình được tạo ra. Đối với các trình bày trong phần trước, có ít nhất ba lớp bên trong một kịch bản kiểm thử được tạo ra tự động điều hướng đến trang chính của CPMISS, nhập thông tin đăng nhập của người dùng, nhấp vào nút đăng nhập và sau đó xác minh ngữ cảnh sau khi đăng nhập. Trong sơ đồ lớp như hình 6 trên, mỗi test case được coi là một lớp độc lập trong kịch bản kiểm tra và mỗi bước kiểm tra là một lớp bên trong của nó. Sử dụng lớp này có thể cải thiện khả năng đọc và sử dụng lại mã lập trình. "Test-suite.xml" và "test-case.xml" trong Sơ đồ Lớp (Hình 6) cho biết hai tệp tin cấu hình XML. Các đối tượng phân tích chuyển đổi các thẻ XML thành mã kịch bản. Các API Selenium RC dễ dàng hơn Web Driver nếu người kiểm thử muốn gọi một đối tượng tĩnh, nó có thể thực thi Selenese mà không có bất kỳ chuyển đổi nào. Trong thực tế, công việc chính là trích xuất các đối số lệnh từ tệp cấu hình XML và đặt chúng vào các lớp của các test case theo thứ tự. Sau khi phân tích tất cả các tệp cấu hình các test case và test suite, các mối quan hệ và tham chiếu cần được trích cấu trúc dữ liệu của test suite và các nút xác nhận trong XML. Như demo trong hình 7, lớp "TestLoginCPMISS" là một mã test case thực thi được tạo ra bởi tất cả phương pháp trên. Tất cả các kịch bản test case được tạo tự động bởi công cụ có các tính năng chung như sau: - Tất cả các lớp test case được mở rộng từ các lớp cha trừu tượng "DefaultTestCase". - Tất cả các bước kiểm thử là lớp bên trong và mỗi bước đều có loại riêng của bản thân nó để phân biệt dù nó có phải là bước xác minh hay không. - Mỗi bước xác minh là một lớp bên trong phải được đăng ký trong lớp test suite của nó. - Khởi tạo các vector kiểm thử các bước thực hiện theo thuộc tính id trong XML. Bây giờ mã giả của kịch bản kiểm thử chuyển đổi tự động là được đưa ra như sau: Thuật toán 1: Phân tích XML và dữ liệu kịch bản Như thuật toán được hiển thị ở trên, quá trình phân tích cú pháp các test case dựa trên XML vào các kịch bản kiểm thử được mã hoá bởi JAVA. Nó có thể được chia thành ba phần. Mỗi phần ánh xạ tới một thẻ XML tag trong test case tệp. Trước và sau khi phân tích nội dung của Selenese, các xác thực trước và xác thực sau khi đăng nhập phải được xử lý và truy vấn đối
  6. 264 KỶ YẾU HỘI THẢO KHOA HỌC QUỐC GIA CITA 2017 “CNTT VÀ ỨNG DỤNG TRONG CÁC LĨNH VỰC” tượng tham chiếu nếu nó có thuộc tính tham chiếu. Thuật toán cốt lõi của việc tạo mã là phân tíchdữ liệu lệnh từ XML vì các tệp cấu hình chứa tất cả thông tin của kịch bản kiểm thử tự sinh ra. Và sau đó, thông tin tương ứng về dòng lệnh Selenium sẽ được trích xuất. Nếu Selenese nhận được, Selenium cung cấp một loạt của các API để chuyển đổi nội dung thành các phần mã tương đồng. Những điểm quan trọng là tạo ra một bảng lập bản đồ ánh xạ và tìm kiếm nó nhanh chóng. Ngoài những tính năng này, nội dung của từng bước được chuyển đổi trực tiếp từ các đối số trong lệnh của Selenium, được trích xuất bởi trình đọc XML sử dụng DOM. Sau đó, nếu script cần phải được chạy, một số thư viện * .jar và JDK môi trường phải được thiết lập. Kết quả phân tích của test case Login như sau Hình 7. Script Login Test Case tự động được tạo ra Bây giờ kịch bản kiểm thử có thể chạy liên tục và tạo ra các báo cáo, từ đó kết quả của mỗi bước thực hiện sẽ được hiển thị. Trong danh sách hiển thị kết quả này, mỗi mục tương ứng với một lệnh kiểm tra và kết quả thực hiện của nó được hiển thị trong một ô của bảng kết quả. Bên cạnh đó, thời gian và số dòng lập trình cũng có thể được được trình bày giúp người kiểm thử đánh giá hiệu suất và xác định nguyên nhân của các lỗi một cách nhanh chóng. Hình 8. Kết quả kiểm tra Như kết quả hình 8 cho thấy, trang kết quả kiểm tra là một tệp định dạng HTML ghi lại từng kết quả của các tập lệnh kiểm tra thực thi. Tiêu đề của tệp hiển thị thông tin ngữ cảnh kiểm tra,
  7. Hà Thị Minh Phương 265 bao gồm phiên bản trình duyệt Web, phiên bản Selenium và thời gian chạy... Dưới tiêu đề, mỗi mục trong danh sách log là một bản ghi thực hiện của Selenese. Màu nền được đánh dấu là kết quả hiển thị OK hoặc Failure cho biết kết quả hiện tại của kịch bản kiểm thử. 3.4 Đánh giá Selenium framework Selenium là công cụ mã nguồn mở, chúng hoạt động trên môi trường và nền tảng rộng lớn. Điều này tạo ra sự dễ dàng cho bất kỳ người nào mà chưa có kinh nghiệm cũng có thể hiểu được nội dung thực hiện Nó là một cây cầu nối giữa nhóm công nghệ và nhóm nghiệp vụ làm việc trong một nhóm dự án kiểm thử. Khả năng sử dụng lại mã nguồn là một điểm nổi bật trong framework Selenium này. Chúng ta có thể thực hiện các test case khác mà có các bước thực thi tương tự. Khi dữ liệu kiểm thử thay đổi thì không cần phải làm việc lại với các kịch bản Selenium mà đã được viết. 4 Kết luận Bài báo này đưa ra một cách tiếp cận mới của kịch bản kiểm thử tự động tạo mã JavaScript tái cấu trúc ứng dụng Web. Selenium là framework cốt lõi, cung cấp các API linh hoạt để kiểm thử tự động hóa. Mô tả định dạng XML của các test case và test suite là nghiên cứu chính đầu tiên. Chi phí kiểm tra và việc tái cấu trúc mã JavaScript sẽ giảm đi và ít tương tác thủ công hơn. Để nâng cao hiệu quả kiểm tra và giảm sự can thiệp của người kiểm thử, chúng tôi sẽ tập trung vào làm thế nào để tạo ra các kịch bản kiểm thử tự động với các mô hình dựa trên kỹ thuật kiểm thử. References 1. S. Roy Choudhary, D. Zhao, H. Versee, and A. Orso. Water: Web application test repair. In Proc. of the 1st Int. Workshop on End-to-End Test Script Engineering, 2011. 2. Martin Fowler, Kent Beck, John Brant, Refactoring: Improving the Design of Existing Code, U.S., 1999, pp. 11-21. 3. Antawan Holmes and Marc Kellogg, Automating Functional Tests Using Selenium, Proceedings of AGILE 2006 Conference, 2006. 4. McMahon, C, History of a Large Test Automation Project Using Selenium, 2009. 5. Zhenghua Feng, Ju Gao, Hongwei Zeng, Research of Web Application Test Automation, Computer Engineering and Design, 2010. 6. Web Site, http://docs.seleniumhq.org/docs/ 7. Tuomas Pajumen, Tommi Takala and Mika Katara. Model-Based Testing a General Purpose Keyword-Driven Test Automation Framework. International Conference on Software Testing. Verification and Validation Workshops. 2011.
nguon tai.lieu . vn