QTP - Hướng dẫn nhanh

QTP là viết tắt của QuickTest Professional, một sản phẩm của Hewlett Packard (HP). Công cụ này giúp người kiểm tra thực hiện kiểm tra chức năng tự động một cách liền mạch, không cần giám sát, sau khi quá trình phát triển tập lệnh hoàn tất.

HP QTP sử dụng Visual Basic Scripting (VBScript)để tự động hóa các ứng dụng. Scripting Engine không cần được cài đặt riêng vì nó có sẵn như một phần của Hệ điều hành Windows. Phiên bản hiện tại của VBScript là 5.8, có sẵn như một phần của Win 7. VBScript KHÔNG phải là một ngôn ngữ hướng đối tượng mà là một ngôn ngữ dựa trên đối tượng.

Công cụ kiểm tra

Các công cụ từ bối cảnh kiểm thử phần mềm, có thể được định nghĩa là một sản phẩm hỗ trợ một hoặc nhiều hoạt động kiểm thử ngay từ khi lập kế hoạch, yêu cầu, tạo bản dựng, thực thi thử nghiệm, ghi nhật ký lỗi và phân tích thử nghiệm.

Phân loại công cụ

Các công cụ có thể được phân loại dựa trên một số tham số. Nó bao gồm -

  • Mục đích của công cụ
  • Các hoạt động được hỗ trợ trong công cụ
  • Loại / mức độ kiểm tra mà nó hỗ trợ.
  • Loại giấy phép (nguồn mở, phần mềm miễn phí, thương mại)
  • Công nghệ được sử dụng

Các loại công cụ

Sr.No. Loại công cụ Được dùng cho Được sử dụng bởi
1 Công cụ quản lý kiểm tra Kiểm tra Quản lý, lập lịch, ghi nhật ký lỗi, theo dõi và phân tích. Người kiểm tra
2 Công cụ quản lý cấu hình Để triển khai, thực hiện, theo dõi các thay đổi Tất cả các thành viên trong nhóm
3 Công cụ phân tích tĩnh Kiểm tra tĩnh Nhà phát triển
4 Công cụ chuẩn bị dữ liệu thử nghiệm Phân tích và thiết kế, tạo dữ liệu thử nghiệm Người kiểm tra
5 Kiểm tra công cụ thực thi Thực hiện, Thực hiện Người kiểm tra
6 Kiểm tra so sánh So sánh kết quả mong đợi và thực tế Tất cả các thành viên trong nhóm
7 Các công cụ đo lường phạm vi Cung cấp kết cấu bao phủ Nhà phát triển
số 8 Các công cụ kiểm tra hiệu suất Giám sát hiệu suất, thời gian phản hồi Người kiểm tra
9 Công cụ theo dõi và lập kế hoạch dự án Lập kế hoạch Quản lý dự án
10 Công cụ quản lý sự cố Để quản lý các bài kiểm tra Người kiểm tra

QTP phù hợp với ở đâu?

QTP là một công cụ kiểm tra chức năng, phù hợp nhất để kiểm tra hồi quy các ứng dụng. QTP là một công cụ được cấp phép / thương mại do HP sở hữu, là một trong những công cụ phổ biến nhất hiện có trên thị trường. Nó so sánh kết quả thực tế và kết quả mong đợi và báo cáo kết quả trong bản tóm tắt thực hiện.

QTP - Lịch sử và sự phát triển

HP Quick Test Professional ban đầu thuộc sở hữu của Mercury Interactive và nó đã được HP mua lại. Tên ban đầu của nó là Astra Quick Test và sau đó được đặt tên là Quick Test Professional nhưng phiên bản mới nhất được gọi là Unified Function Tester (UFT).

Lịch sử phiên bản

Bây giờ chúng ta hãy xem lịch sử phiên bản của QTP.

Phiên bản Dòng thời gian
Thử nghiệm nhanh Astra v1.0 đến v5.5 - Mercury Interactive Tháng 5 năm 1998 đến tháng 8 năm 2001
QuickTest Professional v6.5 đến v9.0 - Mercury Interactive Tháng 9 năm 2003 đến tháng 4 năm 2006
Hp-QuickTest Professional v9.1 đến v11.0 - HP mua lại và phát hành Tháng 2 năm 2007 đến tháng 9 năm 2010
Kiểm tra chức năng hợp nhất Hp v11.5 đến v11.53 2012 đến tháng 11 năm 2013

Ưu điểm

  • Việc phát triển các bài kiểm tra tự động bằng VBScript không yêu cầu lập trình viên có kỹ năng cao và tương đối dễ dàng khi so sánh với các ngôn ngữ lập trình hướng đối tượng khác.

  • Dễ sử dụng, dễ điều hướng, xác thực kết quả và tạo Báo cáo.

  • Tích hợp dễ dàng với Công cụ Quản lý Kiểm tra (Trung tâm Chất lượng Hp) cho phép dễ dàng lập lịch và giám sát.

  • Cũng có thể được sử dụng để Kiểm tra Ứng dụng Di động.

  • Vì là sản phẩm của HP nên HP và các diễn đàn của HP cung cấp hỗ trợ đầy đủ để giải quyết các vấn đề kỹ thuật.

Nhược điểm

  • Không giống như Selenium, QTP chỉ hoạt động trong hệ điều hành Windows.

  • Không phải tất cả các phiên bản Trình duyệt đều được hỗ trợ và người thử nghiệm cần đợi bản vá được phát hành cho từng phiên bản chính.

  • Phải nói rằng nó là một công cụ thương mại, chi phí cấp phép rất cao.

  • Mặc dù thời gian viết tập lệnh ít hơn nhưng thời gian thực thi tương đối cao hơn vì nó đặt tải lên CPU và RAM.

Đối với bất kỳ triển khai công cụ tự động nào, sau đây là các giai đoạn / giai đoạn của nó. Mỗi một trong các giai đoạn tương ứng với một hoạt động cụ thể và mỗi giai đoạn có một kết quả xác định.

  • Test Automation Feasibility Analysis- Bước đầu tiên là kiểm tra xem ứng dụng có thể được tự động hóa hay không. Không phải tất cả các ứng dụng đều có thể được tự động hóa do những hạn chế của nó.

  • Appropriate Tool Selection- Bước quan trọng nhất tiếp theo là lựa chọn dụng cụ. Nó phụ thuộc vào công nghệ mà ứng dụng được xây dựng, các tính năng và cách sử dụng.

  • Evaluate the suitable framework- Sau khi chọn công cụ, hoạt động tiếp theo là chọn một khuôn khổ phù hợp. Có nhiều loại khuôn khổ khác nhau và mỗi khuôn khổ có ý nghĩa riêng của nó. Chúng tôi sẽ đề cập chi tiết đến các framework ở phần sau trong hướng dẫn này.

  • Build Proof of Concept- Proof of Concept (POC) được phát triển với một kịch bản end-to-end để đánh giá xem công cụ có thể hỗ trợ tự động hóa ứng dụng hay không. Nó được thực hiện với một kịch bản end-to-end, đảm bảo rằng các chức năng chính có thể được tự động hóa.

  • Develop Automation Framework- Sau khi xây dựng POC, việc phát triển khung được thực hiện, đây là bước quan trọng cho sự thành công của bất kỳ dự án tự động hóa thử nghiệm nào. Framework nên được xây dựng sau khi phân tích kỹ lưỡng về công nghệ được ứng dụng sử dụng và cả các tính năng chính của nó.

  • Develop Test Script, Execute, and Analyze- Sau khi hoàn thành phát triển tập lệnh, các tập lệnh sẽ được thực thi, kết quả được phân tích và ghi lại các khiếm khuyết, nếu có. Tập lệnh thử nghiệm thường được kiểm soát phiên bản.

QTP là một công cụ thương mại và phiên bản dùng thử có thể được tải xuống trực tiếp từ trang web của HP. Chỉ có phiên bản hiện tại là Thử nghiệm chức năng hợp nhất (11,5x) có sẵn để tải xuống. Sau đây là URL từ nơi có thể tải xuống phiên bản dùng thử.

URL tải xuống - QTP

Thủ tục cài đặt

Step 1 - Nhấp vào liên kết "Thử nghiệm và Trình diễn" và chọn "Kiểm tra Chức năng Hợp nhất HP 11.50 CC English SW E-Media Assessment" như hình dưới đây -

Step 2- Sau khi chọn "Kiểm tra chức năng hợp nhất của HP 11.50", trình hướng dẫn tải xuống sẽ mở ra. Điền vào các chi tiết cá nhân và nhấp vào Tiếp theo.

Step 3 - Đọc 'Điều khoản Sử dụng' và nhấp vào "TIẾP THEO".

Step 4- Cửa sổ Tải xuống mở ra. Bây giờ, hãy nhấp vào nút "Tải xuống".

Step 5- Tập tin tải về sẽ có định dạng .RAR. Bây giờ bạn cần giải nén kho lưu trữ và nội dung thư mục sẽ như được hiển thị bên dưới và thực thi Setup.exe.

Step 6 - Sau khi thực thi tệp cài đặt, để cài đặt, hãy chọn "Thiết lập kiểm tra chức năng hợp nhất" từ danh sách như hình dưới đây -

Step 7 - Sau đó nhấn Next để tiếp tục.

Step 8- Trong Cửa sổ Thiết lập Tùy chỉnh, chọn các plugin cần thiết cho quá trình tự động hóa của bạn, tức là bạn nên chọn các plugin dựa trên công nghệ của ứng dụng đang được thử nghiệm. Ví dụ: nếu ứng dụng của bạn dựa trên .NET thì bạn nên đảm bảo rằng bạn chọn .NET.

Step 9- Sau khi chọn các plugin cần thiết để cài đặt, hãy nhấp vào Tiếp theo. Sau khi hoàn tất quá trình cài đặt, bạn sẽ thấy một Cửa sổ nút Kết thúc.

Step 10- Sau khi bạn hoàn tất cài đặt của mình, hộp thoại "Yêu cầu cài đặt bổ sung" sẽ mở ra. Chọn mọi thứ trong danh sách ngoài "Chạy trình hướng dẫn cài đặt giấy phép" và nhấp vào "CHẠY". Chúng tôi KHÔNG cần chọn "Chạy Trình hướng dẫn Cài đặt Giấy phép" vì chúng tôi đang cài đặt phiên bản dùng thử, theo mặc định, sẽ cung cấp giấy phép trong 30 ngày.

Step 11- Sau khi hoàn thành các Yêu cầu Cài đặt Bổ sung, một dấu tích được hiển thị, lần lượt cho biết các thành phần đã được cài đặt thành công. Bây giờ, hãy nhấp vào Đóng.

Khởi chạy UFT và Thêm trang

Step 1 - Sau khi cài đặt, ứng dụng có thể được khởi chạy từ Start Menu như trong hình.

Step 2- Trang giấy phép xuất hiện. Bạn có thể nhấp vào Tiếp tục vì chúng tôi đã cài đặt giấy phép dùng thử.

Step 3 - Hộp thoại Add-in mở ra để người dùng chọn các add-in cần thiết.

Note - Không tải tất cả các phần bổ trợ mà chỉ tải các phần bổ trợ cần thiết và bấm OK.

Step 4 - Sau khi tải các phần bổ trợ cần thiết, công cụ UFT 11.5 sẽ mở ra cho người dùng và cái nhìn đầu tiên về giao diện của UFT, như hình dưới đây -

Việc ghi lại một bài kiểm tra tương ứng với việc ghi lại các hành động của người dùng đối với ứng dụng đang được kiểm tra để UFT tự động tạo các tập lệnh có thể được phát lại. Ghi và Phát lại có thể cho chúng ta ấn tượng đầu tiên về công cụ, cho dù nó có thể hỗ trợ công nghệ hay không, nếu các cài đặt ban đầu được thực hiện đúng.

Các bước ghi và phát lại như sau:

Step 1 - Nhấp vào kiểm tra "Mới" từ Trang Bắt đầu như hình dưới đây -

Step 2- Nhấp vào Liên kết "Mới", một cửa sổ kiểm tra mới sẽ mở ra và người dùng cần chọn loại kiểm tra. Chọn "Kiểm tra GUI", đặt tên cho bài kiểm tra và vị trí nơi nó cần được lưu.

Step 3- Khi một bài kiểm tra Mới được tạo, màn hình bài kiểm tra mới sẽ mở ra như hình dưới đây. Bây giờ, hãy nhấp vào tab "Action1", tab này được tạo bằng 1 hành động theo mặc định.

Step 4 - Nhấp vào Menu "Record" và chọn "Record and Run Settings" như hình bên dưới -

Step 5- Hộp thoại Cài đặt Ghi và Chạy mở ra và dựa trên loại ứng dụng, người ta có thể chọn Ứng dụng Web, Java hoặc Windows. Ví dụ, ở đây, chúng tôi sẽ ghi lại Ứng dụng dựa trên web (http://easycalculation.com/).

Step 6- Nhấp vào Ghi. Internet Explorer tự động mở bằng địa chỉ webhttps://www.easycalculation.com/theo cài đặt. Nhấp vào liên kết "Số" trong "Đại số" và nhập một số và nhấn "Tính toán". Sau khi hoàn thành hành động, nhấp vào nút "Dừng" trong bảng ghi. Bạn sẽ nhận thấy rằng tập lệnh được tạo như hình dưới đây -

Step 7- Bây giờ phát lại kịch bản bằng cách nhấp vào nút phát lại. Script replay và kết quả được hiển thị.

Step 8 - Cửa sổ kết quả được mở, theo mặc định, hiển thị chính xác dấu thời gian của các bước thực hiện, vượt qua và không thành công.

Tầm quan trọng của Ghi và Phát lại

  • Nó được sử dụng làm phương pháp điều tra sơ bộ để xác minh xem UFT có thể hỗ trợ công nghệ / ứng dụng hay không.

  • Được sử dụng để tạo thử nghiệm một chức năng cơ bản của ứng dụng hoặc tính năng không yêu cầu bảo trì lâu dài.

  • Nó có thể được sử dụng để ghi lại cả chuyển động chuột và đầu vào bàn phím.

Các chế độ ghi

  • Normal Recording - Đây là chế độ Ghi mặc định ghi lại các đối tượng và các hoạt động được thực hiện trên ứng dụng đang được kiểm tra.

  • Analog Recording - Điều này không chỉ ghi lại các thao tác trên bàn phím mà còn ghi lại các chuyển động của chuột liên quan đến màn hình hoặc cửa sổ ứng dụng.

  • Low-Level Recording- Điều này ghi lại tọa độ chính xác của các đối tượng độc lập với thực tế là UFT có nhận ra đối tượng hay KHÔNG. Nó chỉ ghi lại các tọa độ, do đó KHÔNG ghi lại các chuyển động của chuột.

  • Insight Recording - UFT ghi lại các hoạt động, dựa trên sự xuất hiện của nó và không dựa trên các thuộc tính gốc của nó.

Cách chọn chế độ ghi

Sau khi nhấp vào nút Ghi, người dùng có thể chọn chế độ ghi từ ngăn ghi xuất hiện trên màn hình sau khi bắt đầu ghi. Lựa chọn có thể được thực hiện từ bất kỳ lựa chọn nào đã được thảo luận ở trên.

Bạn sẽ thấy rằng tình huống sau được ghi lại trong tất cả các chế độ và hành động tương tự đã được ghi lại trong các trường hợp khác nhau.

  • Khởi chạy IE - https://www.easycalculation.com/
  • Nhấp vào "Số" trong "Đại số"
  • Nhấp vào liên kết "Căn bậc hai"
  • Nhập một giá trị để tính căn bậc hai. Hãy để chúng tôi nói 10
  • Lượt tính toán

Tập lệnh được ghi trong chế độ ghi Mặc định, Tương tự và Mức thấp được đưa ra dưới đây:

' DEFAULT RECORDING MODE 
Browser("Free Online Math Calculator").Page("Free Online Math 
Calculator").Link("Numbers").Click 

Browser("Free Online Math Calculator").Page("Numbers Calculator - 
Math").Link("Square Root").Click 

Browser("Free Online Math Calculator").Page("Square Root 
Calculator").WebEdit("n").Set "10" 

Browser("Free Online Math Calculator").Page("Square Root 
Calculator").WebButton("calculate").Click 

' ANALOG RECORDING MODE 
Desktop.RunAnalog "Track1" 

' LOW LEVEL RECORDING MODE 
Window("Windows Internet Explorer").WinObject("Internet Explorer_Server").Click 
235,395 

Window("Windows Internet Explorer").WinObject("Internet Explorer_Server").Click 
509,391 

Window("Windows Internet Explorer").WinObject("Internet Explorer_Server").Click 
780,631 

Window("Windows Internet Explorer").WinObject("Internet Explorer_Server").Type 
"10" 

Window("Windows Internet Explorer").WinObject("Internet Explorer_Server").Click 
757,666

Các bản ghi sử dụng chế độ ghi thông tin chi tiết sẽ như hình dưới đây -

Kho lưu trữ đối tượng

Kho lưu trữ đối tượng là một tập hợp các đối tượng và thuộc tính mà QTP sẽ có thể nhận ra các đối tượng và hành động trên đó. Khi người dùng ghi lại một bài kiểm tra, các đối tượng và thuộc tính của nó được ghi lại theo mặc định. Nếu không hiểu các đối tượng và thuộc tính của nó, QTP sẽ KHÔNG thể phát lại các tập lệnh.

Nhấp vào từng chủ đề sau để biết thêm về Kho lưu trữ đối tượng và các tính năng liên quan của nó.

Sr.No. Chủ đề Mô tả
1 Đối tượng gián điệp và các tính năng của nó

Để hiểu cách sử dụng gián điệp đối tượng và các chức năng liên quan của nó.

2 Làm việc với Kho lưu trữ đối tượng

Thêm, chỉnh sửa, xóa đối tượng khỏi Kho lưu trữ đối tượng và các chức năng liên quan của nó.

3 Các loại kho lưu trữ đối tượng

Giao dịch với Đối tượng được chia sẻ và Kho lưu trữ đối tượng cục bộ và bối cảnh của chúng liên quan đến kịch bản.

4 Đối tượng do người dùng xác định

Giải quyết các trường hợp để sử dụng Đối tượng do người dùng xác định.

5 Kho lưu trữ đối tượng trong XML

Giao dịch với việc chuyển đổi OR sang XML và sử dụng Kho lưu trữ đối tượng dưới dạng XML.

6 So sánh và Hợp nhất HOẶC

Các hoạt động như So sánh OR ', Hợp nhất OR để làm việc hiệu quả với Kho lưu trữ đối tượng.

7 Số nhận dạng thông thường

Các trường hợp sử dụng số nhận dạng thứ tự và ưu điểm của nó.

số 8 Đối tượng con

Sử dụng Đối tượng con để tạo tập lệnh hiệu quả

Các thao tác giúp người kiểm thử phân chia các tập lệnh thành các nhóm câu lệnh QTP. Các hành động tương tự như các chức năng trong VBScript; tuy nhiên, có một vài khác biệt. Theo mặc định, QTP tạo một bài kiểm tra với một hành động.

Hành động Chức năng
Hành động là một tính năng được tích hợp sẵn của QTP. Các chức năng VBScript được hỗ trợ bởi cả VBScript và QTP.
Các tham số hành động chỉ được truyền theo giá trị. Các tham số của hàm được truyền theo giá trị hoặc theo tham chiếu.
Các hành động có đuôi .mts Các hàm được lưu dưới dạng .vbs hoặc .qfl
Các hành động có thể được sử dụng lại hoặc không. Các chức năng luôn có thể sử dụng lại.

Các thuộc tính của hành động có thể được truy cập bằng cách nhấp chuột phải vào Cửa sổ Trình chỉnh sửa Tập lệnh và chọn "Thuộc tính".

Thuộc tính hành động chứa thông tin sau:

  • Tên hành động
  • Location
  • Cờ tái sử dụng
  • Thông số đầu vào
  • Thông số đầu ra

Các loại hành động

Có ba loại hành động -

  • Non-reusable action - Một hành động chỉ có thể được gọi trong thử nghiệm cụ thể mà nó đã được thiết kế và chỉ có thể được gọi một lần.

  • Reusable action - Một hành động có thể được gọi nhiều lần, bất kỳ thử nghiệm nào mà nó cư trú và cũng có thể được sử dụng bởi bất kỳ thử nghiệm nào khác.

  • External Reusable action- Đó là một hành động có thể tái sử dụng được lưu trữ trong một bài kiểm tra khác. Hành động bên ngoài là chỉ đọc trong kiểm tra gọi, nhưng nó có thể được sử dụng cục bộ với bản sao có thể chỉnh sửa của thông tin Bảng dữ liệu cho hành động bên ngoài.

Làm việc với các Hành động

Có ba tùy chọn để chèn một hành động. Nhấp vào từng hành động đó để biết thêm về loại hành động đã chọn.

Sr.No. Loại Hành động & Mô tả
1 Chèn lời kêu gọi hành động mới

Chèn một Hành động mới từ hành động hiện có

2 Chèn lời kêu gọi để sao chép hành động

Chèn bản sao của một hành động hiện có

3 Chèn lời kêu gọi cho hành động hiện tại

Chèn lời gọi đến hành động có thể sử dụng lại hiện tại

DataTable, tương tự như Microsoft Excel, giúp người kiểm tra tạo các trường hợp kiểm tra theo hướng dữ liệu có thể được sử dụng để chạy một Hành động nhiều lần. Có hai loại Datatable -

  • Local DataTable - Mỗi hành động có dữ liệu riêng của nó, còn được gọi là dữ liệu cục bộ, cũng có thể được truy cập qua các hành động.

  • Global DataTable - Mỗi bài kiểm tra có một bảng dữ liệu chung có thể truy cập qua các hành động.

Bảng dữ liệu có thể được truy cập từ Tab "Dữ liệu" của QTP như hình dưới đây -

Để thực hiện một trường hợp thử nghiệm cho một số lần lặp được chỉ định, người ta có thể đặt số lần lặp lại của dữ liệu toàn cục trong hộp thoại Cài đặt Kiểm tra, có thể được truy cập bằng cách sử dụng Tệp → Cài đặt → Chạy (Tab) như hình dưới đây -

Thí dụ

Ví dụ: nếu người dùng muốn tham số hóa "Lãi kép" của http://easycalculation.com/ có thể được truy cập bằng cách sử dụng http://easycalculation.com/compound-interest.php. Các tham số có thể được tạo như hình dưới đây. Hầu hết các chức năng của Excel cũng có thể được sử dụng trong bảng Dữ liệu.

Hoạt động DataTable

Có ba loại đối tượng để truy cập DataTable. Các hoạt động của DataTable có thể được hiểu rõ bằng cách duyệt qua các phần sau:

Sr.No. Loại đối tượng & Mô tả
1 Phương pháp bảng dữ liệu

Cung cấp thông tin chi tiết về các phương pháp bảng dữ liệu.

2 Phương pháp đối tượng DTParameter

Cung cấp thông tin chi tiết về các phương pháp DTParameter.

3 Phương thức đối tượng DTSheet

Cung cấp thông tin chi tiết về các phương pháp DTSheet.

Điểm kiểm tra, như cái tên đã nói lên tất cả, là điểm xác thực so sánh giá trị hiện tại của các thuộc tính được chỉ định hoặc trạng thái hiện tại của một đối tượng với giá trị mong đợi, có thể được chèn vào bất kỳ thời điểm nào trong tập lệnh.

Các loại trạm kiểm soát

Sr.No. Loại & Mô tả
1

Standard Checkpoint

Xác minh các giá trị thuộc tính của một đối tượng trong ứng dụng đang được thử nghiệm và được hỗ trợ bởi tất cả các môi trường bổ trợ.

2

Bitmap Checkpoint

Xác minh một khu vực trong ứng dụng của bạn dưới dạng bitmap

3

File Content Checkpoint

Xác minh văn bản trong tệp được tạo động hoặc được truy cập như .txt, .pdf

4

Table Checkpoint

Xác minh thông tin trong bảng. Không phải tất cả các môi trường đều được hỗ trợ.

5

Text Checkpoint

Xác minh xem văn bản được hiển thị trong một khu vực xác định trong ứng dụng dựa trên Windows, theo tiêu chí đã chỉ định.

6

Text Area Checkpoint

Xác minh xem chuỗi văn bản có được hiển thị trong một khu vực xác định trong ứng dụng dựa trên Windows hay không, theo tiêu chí đã chỉ định.

7

Accessibility Checkpoint

Xác minh trang và báo cáo các khu vực của trang web có thể không tuân theo Nguyên tắc về khả năng truy cập nội dung web của World Wide Web Consortium (W3C)

số 8

Page Checkpoint

Xác minh các đặc điểm của một trang Web. Nó cũng có thể kiểm tra các liên kết bị hỏng.

9

Database Checkpoint

Xác minh nội dung của cơ sở dữ liệu được ứng dụng đang thử nghiệm truy cập.

10

XML Checkpoint

Xác minh nội dung của tài liệu .xml hoặc tài liệu .xml trong các trang Web và khung.

Chèn CheckPoint

Khi người dùng muốn chèn một điểm kiểm tra, người ta phải đảm bảo rằng hầu hết các điểm kiểm tra chỉ được hỗ trợ trong các phiên ghi. Khi người dùng ngừng ghi, các trạm kiểm soát sẽ không được bật.

Dưới đây là menu điểm kiểm tra, khi người dùng KHÔNG ở chế độ ghi.

Dưới đây là menu điểm kiểm tra, khi người dùng đang ở chế độ ghi.

Thí dụ

Các điểm kiểm tra được thêm vào ứng dụng đang được kiểm tra - "http://easycalculation.com/"

' 1. Inserted Standard Checkpoint
Status = Browser("Math Calculator").Page("Math 
   Calculator").Link("Numbers").Check CheckPoint("Numbers")

If Status Then
   print "Checkpoint Passed"
Else
   Print "Checkpoint Failed"
End if

' 2. Inserted BitMap Checkpoint
imgchkpoint = Browser("Math Calculator").Page("Math 
   Calculator").Image("French").Check CheckPoint("French")

If imgchkpoint Then
   print "Checkpoint Passed"
Else
   Print "Checkpoint Failed"
End if

Xem thuộc tính điểm kiểm tra

Sau khi chèn, trong trường hợp người kiểm tra muốn thay đổi các giá trị, chúng tôi có thể thực hiện việc này bằng cách nhấp chuột phải vào từ khóa 'điểm kiểm tra' của tập lệnh và điều hướng đến "Thuộc tính điểm kiểm tra" như hình dưới đây -

Bạn cũng có thể xác định vị trí các điểm kiểm tra giống nhau trong kho lưu trữ đối tượng, như được hiển thị bên dưới. Nó hiển thị chính xác loại điểm kiểm tra nào được sử dụng và đâu là giá trị mong đợi và giá trị thời gian chờ.

Điểm đồng bộ hóa là giao diện thời gian giữa Công cụ và Ứng dụng đang được thử nghiệm. Điểm đồng bộ là một tính năng để chỉ định thời gian trễ giữa hai bước của tập lệnh thử nghiệm.

Ví dụ, nhấp vào một liên kết có thể tải trang là 1 giây, đôi khi là 5 giây hoặc thậm chí có thể mất 10 giây để tải hoàn toàn. Nó phụ thuộc vào các yếu tố khác nhau như thời gian phản hồi ứng dụng-máy chủ, băng thông mạng và khả năng của hệ thống máy khách.

Nếu thời gian thay đổi thì tập lệnh sẽ không thành công, trừ khi người kiểm tra xử lý các chênh lệch thời gian này một cách thông minh.

Các cách để chèn điểm đồng bộ hóa

  • WaitProperty
  • Exist
  • Wait
  • Đồng bộ hóa (chỉ dành cho các ứng dụng dựa trên web)
  • Chèn các điểm đồng bộ hóa sẵn có của QTP.

Giả sử, chúng ta cần chèn một điểm đồng bộ giữa việc nhấp vào liên kết "số" và nhấp vào máy tính "Lãi suất đơn giản" trong " www.easycalculation.com ". Bây giờ chúng ta sẽ xem xét tất cả năm cách để chèn điểm đồng bộ cho trường hợp trên.

Phương pháp 1 - WaitProperty

WaitProperty là một phương thức lấy tên thuộc tính, Giá trị và giá trị Thời gian chờ làm đầu vào để thực hiện đồng bộ hóa. Đó là một sự chờ đợi năng động và do đó, lựa chọn này được khuyến khích.

' Method 1 - WaitProperty with 25 seconds
Dim obj
Set obj = Browser("Math Calculator").Page("Math Calculator")
obj.Link("Numbers").Click

obj.Link("Simple Interest").WaitProperty "text", "Simple Interest",25000
obj.Link("Simple Interest").Click

Phương pháp 2 - Tồn tại

Exist là một phương thức lấy giá trị Timeout làm đầu vào để thực hiện đồng bộ hóa. Một lần nữa, đó là một sự chờ đợi năng động và do đó tùy chọn này được khuyến khích.

' Method 2 : Exist Timeout - 30 Seconds
Dim obj
Set obj = Browser("Math Calculator").Page("Math Calculator")
obj.Link("Numbers").Click

If obj.Link("Simple Interest").Exist(30) Then
   obj.Link("Simple Interest").Click

Else
   Print "Link NOT Available"
End IF

Phương pháp 3 - Chờ

Wait là một điểm đồng bộ được mã hóa cứng, điểm chờ này không phụ thuộc vào sự kiện đã xảy ra hay KHÔNG. Do đó, việc sử dụng Wait không được khuyến khích và có thể được sử dụng trong thời gian chờ ngắn hơn, chẳng hạn như 1 hoặc 2 giây.

' Method 3 : Wait Timeout - 30 Seconds
Dim obj
Set obj = Browser("Math Calculator").Page("Math Calculator")
obj.Link("Numbers").Click
wait(30)
Browser("Math Calculator").Page("Math Calculator").Link("Simple Interest").Click

Phương pháp 4 - Phương pháp đồng bộ hóa

Phương pháp Đồng bộ hóa chỉ có thể được sử dụng cho các ứng dụng web nơi luôn có độ trễ giữa các lần tải trang.

' Method 4 : 
Dim obj
Set obj = Browser("Math Calculator").Page("Math Calculator")
obj.Link("Numbers").Click

Browser("Math Calculator").Sync
Browser("Math Calculator").Page("Math Calculator").Link("Simple Interest").Click

Phương pháp 5 - Chèn các điểm đồng bộ hóa sẵn có QTP

Step 1- Vào Chế độ ghi. Tùy chọn này sẽ bị vô hiệu hóa nếu người dùng KHÔNG ở Chế độ ghi.

Step 2 - Vào "Thiết kế" → "Điểm đồng bộ hóa".

Step 3- Chúng ta cần chọn đối tượng, mà chúng ta muốn làm Điểm đồng bộ. Sau khi chọn đối tượng, cửa sổ đối tượng sẽ mở ra như hình dưới đây:

Step 4- Bấm OK; "Thêm cửa sổ đồng bộ hóa" sẽ mở ra. Chọn giá trị Thuộc tính, Giá trị và Thời gian chờ và nhấp vào OK như hình dưới đây -

Step 5 - Tập lệnh sẽ được tạo như hình bên dưới, giống như tập lệnh của WaitProperty (Phương pháp 1) mà chúng ta đã thảo luận -

Browser("Math Calculator").Page("Math Calculator").Link("Numbers").Click

Browser("Math Calculator").Page("Math Calculator").Link("Simple 
   Interest").WaitProperty "text", "Simple Interest", 10000

Đồng bộ hóa mặc định

Khi người dùng không sử dụng bất kỳ phương pháp đồng bộ nào ở trên, QTP vẫn có thời gian chờ đồng bộ hóa đối tượng được tích hợp sẵn mà người dùng có thể điều chỉnh.

Điều hướng đến "File" >> "Settings" >> Run Tab >> Object Synchronization Time out như hình dưới đây.

Đôi khi, QTP không thể tìm thấy bất kỳ đối tượng nào phù hợp với mô tả đối tượng được nhận dạng hoặc nó có thể tìm thấy nhiều đối tượng phù hợp với mô tả, sau đó QTP bỏ qua mô tả được nhận dạng và sử dụng cơ chế Nhận dạng Thông minh để nhận dạng đối tượng.

Nhận dạng Thông minh của QTP sử dụng hai loại thuộc tính:

  • Base Filter Properties - Các thuộc tính cơ bản của một lớp đối tượng thử nghiệm cụ thể mà giá trị của nó không thể thay đổi nếu không thay đổi bản chất của đối tượng ban đầu.

  • Optional Filter Properties - Các thuộc tính khác cũng hỗ trợ việc xác định các đối tượng của một lớp cụ thể mà các thuộc tính của nó không có khả năng thay đổi thường xuyên nhưng có thể bị bỏ qua nếu chúng không còn áp dụng được nữa.

Bật nhận dạng thông minh cho một đối tượng

Step 1- Điều hướng đến "Công cụ" → "Nhận dạng đối tượng". Hộp thoại Nhận dạng Đối tượng mở ra.

Step 2 - Chọn Môi trường, Lớp đối tượng và BẬT "Bật Nhận dạng Thông minh" như hình dưới đây -

Step 3 - Nhấp vào Cấu hình và chọn Cơ sở và Thuộc tính Bộ lọc Tùy chọn.

Step 4- Thêm Thuộc tính trong Thuộc tính Cơ sở ngoài thuộc tính mặc định và cũng có thể thêm / xóa Thuộc tính Bộ lọc Tùy chọn. Xin lưu ý rằng các thuộc tính giống nhau không thể là một phần của cả Thuộc tính Bắt buộc và Hỗ trợ và hãy nhấp vào "OK".

Step 5- Xác minh xem Nhận dạng Thông minh có được bật hay không sau khi thêm đối tượng thuộc loại đó vào Kho lưu trữ Đối tượng. Nhận dạng Thông minh được đặt thành ĐÚNG. Chúng tôi cũng có thể biến nó thành Sai trong trường hợp chúng tôi không muốn bật Nhận dạng thông minh.

Step 6 - Chúng tôi thậm chí có thể vô hiệu hóa Cấp thử nghiệm bằng cách áp dụng ở cấp tập lệnh thử nghiệm trong "Cài đặt" của Menu "Tệp" như hình dưới đây -

Step 7 - Nếu Nhận dạng thông minh bị vô hiệu hóa theo Bước # 6 thì nó sẽ không áp dụng nhận dạng thông minh cho bất kỳ đối tượng nào trong quá trình thực thi tập lệnh.

Step 8 - Trong trường hợp các đối tượng được thêm Nhận dạng Thông minh ở dạng Tắt, QTP sẽ không sử dụng Nhận dạng Thông minh để nhận dạng trong tương lai, mặc dù chúng tôi đã bật tính năng này sau đó.

Gỡ lỗi, trong ngữ cảnh kiểm thử tự động hóa, là một quá trình có hệ thống để phát hiện và sửa chữa các vấn đề mã hóa trong tập lệnh tự động hóa để tập lệnh sẽ mạnh mẽ hơn và có thể phát hiện ra các khiếm khuyết trong ứng dụng.

Có nhiều cách khác nhau để thực hiện gỡ lỗi bằng cách sử dụng các điểm ngắt trong QTP. Các điểm ngắt có thể được chèn chỉ bằng cách nhấn "F9" hoặc bằng cách sử dụng tùy chọn Menu "Chạy" → "Chèn / Xóa Điểm ngắt".

Sau khi Chèn điểm Ngắt, Chấm "Màu Đỏ" và đường kẻ sẽ được tô màu ĐỎ như hình dưới đây -

phương pháp Đường tắt Sự miêu tả
Bước vào F11 Được sử dụng để thực hiện từng bước. Các bước vào Chức năng / Hành động và thực hiện từng dòng một. Nó tạm dừng trên mỗi dòng sau khi thực hiện.
Bước qua F10 Được sử dụng để Bước qua Chức năng. Step Over chỉ chạy bước hiện tại trong tài liệu đang hoạt động.
Bước ra khỏi Shift + F11 Sau chức năng Step Into, bạn có thể sử dụng lệnh Step Out. Step Out tiếp tục chạy đến cuối chức năng và sau đó tạm dừng phiên chạy ở dòng tiếp theo.

Tùy chọn trong điểm ngắt

Có thể truy cập nhiều tùy chọn khác nhau trong Break Point bằng cách Điều hướng thông qua Menu 'Run'.

Sr.No. ShortCut & Description
1

F9

Chèn / Xóa BreakPoint

2

Ctrl+F9

Bật / Tắt BreakPoint

3

Ctrl+Shift+F9

Xóa tất cả BreakPoint

4

Use Only Menu

Bật / Tắt tất cả BreakPoints

Ngăn gỡ lỗi

Sau đây là các ngăn trong cửa sổ gỡ lỗi -

  • Output - Tab này hiển thị tất cả đầu ra của các câu lệnh in.

  • Watch - Tab này hiển thị đầu ra Boolean của Biểu thức đã cho.

  • LocalVariables - Tab này hiển thị đầu ra của các biến cục bộ.

Thí dụ

Bảng đồng hồ hiển thị biểu thức đầu ra như hình dưới đây:

Ngăn biến cục bộ hiển thị các giá trị được giữ bởi các biến cục bộ như được hiển thị bên dưới:

Có nhiều cách khác nhau để xử lý lỗi trong QTP. Có ba loại lỗi có thể xảy ra, một lỗi sẽ gặp phải khi làm việc với QTP. Họ là -

  • Lỗi cú pháp
  • Lỗi logic
  • Lỗi thời gian chạy

Các loại lỗi

Lỗi cú pháp

Lỗi cú pháp là lỗi chính tả hoặc một đoạn mã không xác nhận với ngữ pháp ngôn ngữ VBscripting. Lỗi cú pháp xảy ra tại thời điểm biên dịch mã và không thể được thực thi cho đến khi lỗi được sửa.

Để xác minh cú pháp, hãy sử dụng phím tắt Ctrl + F7 và kết quả được hiển thị như hình dưới đây. Nếu cửa sổ không được hiển thị, người ta có thể điều hướng đến "Xem" → "Lỗi".

Lỗi logic

Nếu tập lệnh đúng về mặt cú pháp nhưng nó tạo ra kết quả không mong muốn thì nó được gọi là lỗi logic. Lỗi logic thường không làm gián đoạn việc thực thi nhưng lại tạo ra kết quả không chính xác. Lỗi logic có thể xảy ra do nhiều lý do, giả định sai hoặc hiểu sai về yêu cầu và đôi khi không chính xác về logic của chương trình (sử dụng do-while thay vì do-Until) hoặc Infinite Loops.

Một trong những cách để phát hiện lỗi logic là thực hiện đánh giá ngang hàng và cũng xác minh tệp kết quả / tệp đầu ra QTP để đảm bảo rằng công cụ đã thực hiện theo cách mà nó được cho là phải làm.

Lỗi RunTime

Như tên đã nêu, loại lỗi này xảy ra trong Thời gian chạy. Lý do cho các loại lỗi như vậy là kịch bản cố gắng thực hiện một cái gì đó không thể thực hiện được và kịch bản thường dừng lại, vì nó không thể tiếp tục thực hiện. Ví dụ cổ điển cho Lỗi thời gian chạy là -

  • Tệp KHÔNG tìm thấy nhưng tập lệnh đang cố đọc tệp
  • KHÔNG tìm thấy đối tượng nhưng tập lệnh đang cố gắng hoạt động trên đối tượng cụ thể đó
  • Chia một số cho 0
  • Chỉ mục mảng ngoài giới hạn khi truy cập các phần tử mảng

Xử lý lỗi thời gian chạy

Có nhiều cách khác nhau để xử lý lỗi trong mã.

1. Using Test Settings- Xử lý lỗi bạn có thể xác định Cài đặt kiểm tra bằng cách Điều hướng đến Tab "Tệp" >> "Cài đặt" >> "Chạy" như hình bên dưới. Chúng tôi có thể chọn bất kỳ cài đặt nào được chỉ định và nhấp vào "OK".

2. Using On Error Statement - Câu lệnh 'On Error' được sử dụng để thông báo cho công cụ VBScript về ý định xử lý các lỗi trong thời gian chạy của người thử nghiệm, thay vì cho phép công cụ VBScript hiển thị thông báo lỗi không thân thiện với người dùng.

  • On Error Resume Next - On Error Resume Next thông báo cho công cụ VBScript để xử lý việc thực thi dòng mã tiếp theo khi gặp lỗi.

  • On error Goto 0 - Điều này giúp người kiểm tra tắt chế độ xử lý lỗi.

3. Using Err Object - Đối tượng lỗi là một đối tượng được tích hợp sẵn trong VBScript ghi lại số lỗi thời gian chạy và mô tả lỗi mà chúng tôi có thể gỡ lỗi mã dễ dàng.

  • Err.Number- Thuộc tính Number trả về hoặc đặt một giá trị số xác định một lỗi. Nếu giá trị Err.Number là 0 thì Không có lỗi nào xảy ra.

  • Err.Description - Thuộc tính Mô tả trả về hoặc đặt mô tả ngắn gọn về lỗi.

  • Err.Clear - Phương thức Clear đặt lại đối tượng Err và xóa tất cả các giá trị trước đó được liên kết với nó.

Thí dụ

'Call  the function to Add two Numbers Call Addition(num1,num2) 

Function Addition(a,b)  
   On error resume next  
      If NOT IsNumeric(a) or IsNumeric(b) Then 
         Print "Error number is  " &  err.number & " and description is : 
            " &  err.description 
         Err.Clear 
         Exit Function 
      End If 
   Addition = a+b 

   'disables error handling  
   On Error Goto 0 
End function

4. Using Exit Statement- Exit Statements có thể được sử dụng cùng với đối tượng Err để thoát khỏi thử nghiệm hoặc hành động hoặc lặp lại dựa trên giá trị Err.Number. Hãy để chúng tôi xem chi tiết từng câu lệnh Exit đó.

  • ExitTest - Thoát khỏi toàn bộ kiểm tra QTP, bất kể cài đặt lặp thời gian chạy là gì.

  • ExitAction - Thoát khỏi hành động hiện tại.

  • ExitActionIteration - Thoát khỏi sự lặp lại hiện tại của hành động.

  • ExitTestIteration - Thoát khỏi vòng lặp hiện tại của kiểm tra QTP và chuyển sang lần lặp tiếp theo.

5. Recovery Scenarios - Khi gặp lỗi, các kịch bản khôi phục được kích hoạt dựa trên các điều kiện nhất định và nó được giải quyết chi tiết trong một chương riêng biệt.

6. Reporter Object- Đối tượng Phóng viên giúp chúng tôi báo cáo một sự kiện với kết quả chạy. Nó giúp chúng tôi xác định xem hành động / bước liên quan có đạt / không.

'Syntax: Reporter.ReportEventEventStatus, ReportStepName, Details, 
[ImageFilePath] 

'Example 
Reporter.ReportEvent micFail, "Login", "User is unable to Login."

Các tình huống khôi phục

Trong khi thực thi các tập lệnh QTP, chúng tôi có thể gặp một số lỗi không mong muốn. Để khôi phục các bài kiểm tra và tiếp tục thực hiện phần còn lại của tập lệnh khỏi những lỗi không mong muốn này, Kịch bản khôi phục được sử dụng. Trình quản lý tình huống khôi phục có thể được truy cập bằng cách Điều hướng đến "Tài nguyên" → Trình quản lý tình huống khôi phục như được hiển thị bên dưới -

Các bước tạo kịch bản khôi phục

Step 1- Nhấp vào nút Kịch bản khôi phục "Mới"; Trình hướng dẫn Tình huống Khôi phục sẽ mở ra như hình dưới đây -

Step 2- Chọn Sự kiện kích hoạt. Nó tương ứng với sự kiện, có thể phát sinh trong bất kỳ sự kiện nào trong bốn sự kiện sau:

  • Cửa sổ bật lên
  • Trạng thái đối tượng
  • Lỗi chạy thử nghiệm
  • Sự cố ứng dụng

Step 3- Cửa sổ Hoạt động Phục hồi mở ra. Thao tác khôi phục có thể thực hiện bất kỳ Thao tác nào sau đây như được hiển thị trong ảnh chụp màn hình bên dưới -

Step 4 - Sau khi chỉ định Thao tác khôi phục thích hợp, chúng ta cũng cần chỉ định Thao tác sau khôi phục, như hình dưới đây -

Step 5 - Sau khi chỉ định Thao tác khôi phục sau, kịch bản khôi phục nên được đặt tên và thêm vào Thử nghiệm để nó có thể được kích hoạt.

Step 6 - Việc tạo Recovery Scenario đã hoàn tất và cần được ánh xạ đến Test hiện tại bằng cách đánh dấu vào tùy chọn "Add Scenario to the current Test" và nhấp vào "Hoàn tất".

Step 7 - Kịch bản khôi phục đã thêm sẽ như hình dưới đây và nhấp vào nút "Đóng" để tiếp tục.

Step 8- Sau khi nhấp vào nút Đóng, QTP sẽ nhắc người dùng lưu kịch bản Khôi phục đã tạo. Nó sẽ được lưu với phần mở rộng .qrs và trình hướng dẫn sẽ đóng lại.

xác minh

Kịch bản khôi phục đã tạo nên là một phần của thử nghiệm ngay bây giờ và có thể được xác minh bằng cách điều hướng đến tab "Tệp" → "Cài đặt" → "Khôi phục".

Biến môi trường QTP là các loại biến đặc biệt có thể được truy cập bằng tất cả các hành động, thư viện hàm và kịch bản khôi phục. Có các biến môi trường tích hợp sẵn cho Windows khả dụng cho tất cả các ứng dụng đang chạy trên hệ thống cụ thể đó, nhưng các biến môi trường QTP chỉ có sẵn cho tập lệnh thử nghiệm cụ thể đó trong thời gian chạy.

Các loại biến môi trường

Built-in Environment Variables- cung cấp một loạt các tham số môi trường có thể cung cấp thông tin như tên thử nghiệm, tên hành động, đường dẫn thử nghiệm, tên máy chủ cục bộ, tên hệ điều hành, loại và phiên bản của nó. Có thể truy cập tên Biến môi trường bằng cách điều hướng đến Tab "Tệp" → "Cài đặt thử nghiệm" → "Môi trường".

User defined Internal- Các biến do người dùng xác định có thể được lưu bằng cách chọn "Người dùng xác định" trong Cửa sổ tab môi trường. Nút "+" được nhấp để nhập Tên và Giá trị Thông số như hình dưới đây -

User Defined External- Các biến do người dùng xác định có thể được lưu trữ trong tệp bên ngoài dưới dạng tệp .xml và có thể được tải vào thử nghiệm như thể hiện trong hình bên dưới. Nó cũng có thể được tải động trong thời gian chạy như được giải thích bên dưới trong một trong các ví dụ.

Biến môi trường - Phương pháp được hỗ trợ

1. ExternalFileName Property- Trả về tên của tệp biến môi trường bên ngoài đã tải được chỉ định trong tab Môi trường của hộp thoại Cài đặt Kiểm tra. Nếu không có tệp biến môi trường bên ngoài nào được tải, thuộc tính này trả về một chuỗi trống.

x = Environment.ExternalFileName 
print x

2. LoadFromFile Method- Tải động tệp biến môi trường được chỉ định (.xml) trong thời gian chạy. Khi sử dụng phương pháp này, các biến môi trường không cần phải được thêm theo cách thủ công vào Tab Môi trường.

Environment.LoadFromFile "D:\config.xml"
b = Environment.Value("Browser")
print b

3. Value Property- Lấy giá trị của các biến môi trường. Chúng tôi cũng có thể đặt giá trị của các biến môi trường nội bộ do người dùng xác định bằng cách sử dụng thuộc tính này.

' Get the Value of the InBuilt Environment Variables
a = Environment.Value("OS")
print a
b = Environment.Value("ActionName")
print b
  
'Loaded from External File
Environment.LoadFromFile "D:\config.xml"
c = Environment.Value("Browser")
print c

Để mô-đun hóa tập lệnh, các tệp thư viện được thêm vào Tập lệnh QTP. Nó chứa khai báo biến, Hàm, Lớp, v.v. Chúng cho phép khả năng tái sử dụng có thể được chia sẻ trên các tập lệnh thử nghiệm. Chúng được lưu bằng đuôi mở rộng .vbs hoặc .qfl

Tệp Thư viện mới có thể được tạo bằng cách điều hướng đến "Tệp" >> "Thư viện chức năng".

Liên kết các thư viện chức năng

Method 1- Bằng cách sử dụng tùy chọn "Tệp"> "Cài đặt"> Tài nguyên> Thư viện Chức năng Liên kết. Nhấp vào nút "+" để thêm tệp Thư viện chức năng và thêm tệp bằng đường dẫn thực hoặc đường dẫn tương đối như hình dưới đây -

Method 2 - Sử dụng phương thức ExecuteFile.

'Syntax : ExecuteFile(Filepath)
ExecuteFile "C:\lib1.vbs" 
ExecuteFile "C:\lib2.vbs"

Method 3 - Sử dụng phương thức LoadFunctionLibrary.

'Syntax : LoadFunctionLibrary(Filepath)
LoadFunctionLibrary "C:\lib1.vbs" 
LoadFunctionLibrary "C:\lib2.vbs"

Method 4- Mô hình đối tượng tự động hóa (AOM) - Nó là một cơ chế, sử dụng nó, chúng ta có thể kiểm soát các hoạt động QTP khác nhau bên ngoài QTP. Sử dụng AOM, chúng ta có thể khởi chạy QTP, Mở thử nghiệm, Thư viện chức năng liên kết, v.v. VbScript sau sẽ được lưu với Phần mở rộng .vbs và khi thực thi tương tự, QTP sẽ được khởi chạy và thử nghiệm sẽ bắt đầu thực thi. AOM sẽ được thảo luận chi tiết trong các chương sau.

'Launch QTP
Set objQTP = CreateObject("QuickTest.Application")
objQTP.Launch
objQTP.Visible = True
  
'Open the test
objQTP.Open "D:\GUITest2", False, False
Set objLib = objQTP.Test.Settings.Resources.Libraries
  
'Associate Function Library if NOT associated already.
If objLib.Find("C:\lib1.vbs") = -1 Then 
  objLib.Add "C:\lib1.vbs", 1 
End

Kết quả kiểm tra

Cửa sổ kết quả kiểm tra cung cấp cho chúng tôi đầy đủ thông tin để hiển thị các bước đã vượt qua, không thành công, v.v. Cửa sổ kết quả tự động mở sau khi thực hiện kiểm tra (theo cài đặt mặc định). Thông tin sau được hiển thị:

  • Các bước đã qua
  • Các bước không thành công
  • Tham số môi trường
  • Thống kê đồ họa

Các hoạt động được thực hiện trong Kết quả Kiểm tra

Chuyển đổi kết quả sang HTML

Trong cửa sổ Trình xem kết quả, điều hướng đến "Tệp" → "Xuất sang tệp". Hộp thoại Export Run Results mở ra như hình dưới đây -

Chúng tôi có thể chọn loại báo cáo sẽ được xuất. Nó có thể là kết quả ngắn, kết quả chi tiết hoặc thậm chí, chúng ta có thể chọn các nút. Sau khi chọn Tên tệp và xuất nó, tệp được lưu dưới dạng Tệp .HTML

Lọc kết quả

Kết quả có thể được lọc dựa trên Trạng thái, Loại nút và Số lần lặp lại. Nó có thể được truy cập bằng cách sử dụng nút Bộ lọc trong "Cửa sổ kết quả kiểm tra".

Nâng cao khiếm khuyết

Các khiếm khuyết có thể được đăng nhập vào QC trực tiếp từ ngăn Cửa sổ kết quả kiểm tra bằng cách truy cập "Công cụ" → "Thêm khiếm khuyết" mở ra kết nối với ALM như hình dưới đây -

Kết quả kiểm tra

Cửa sổ Kết quả Kiểm tra Tự động có thể được cấu hình trong Tab "Công cụ" → "Tùy chọn" → "Chạy phiên". Chúng tôi có thể TẮT nó, nếu cần, và chúng tôi cũng có thể BẬT "Tự động xuất kết quả khi phiên kết thúc".

Ảnh chụp màn hình hoặc phim có thể được ghi lại dựa trên cài đặt. Bạn có thể cấu hình tương tự trong Tab "Công cụ" → "Tùy chọn" → "Chụp màn hình". Chúng tôi có thể lưu ảnh chụp màn hình hoặc phim dựa trên ba điều kiện sau:

  • Đối với lỗi
  • Always
  • Đối với các lỗi và cảnh báo

Có nhiều đối tượng GUI khác nhau, mà QTP tương tác, trong quá trình thực thi tập lệnh. Do đó, điều quan trọng là phải biết các phương pháp cơ bản cho các đối tượng GUI chính mà chúng ta sẽ có thể làm việc trên đó một cách hiệu quả.

Làm việc với Hộp văn bản

Sau đây là các phương pháp sử dụng mà chúng tôi truy cập hộp văn bản trong Thời gian chạy:

  • Set - Giúp người thử nghiệm đặt giá trị vào hộp văn bản

  • Click - Nhấp vào Hộp văn bản

  • SetSecure - Được sử dụng để đặt văn bản trong các hộp mật khẩu một cách an toàn

  • WaitProperty - Chờ cho đến khi giá trị tài sản trở thành true

  • Exist - Kiểm tra sự tồn tại của Hộp văn bản

  • GetROProperty("text") - Nhận giá trị của hộp văn bản

  • GetROProperty("Visible") - Trả về giá trị Boolean nếu hiển thị

Thí dụ

Browser("Math Calculator").Sync
Set Obj = Browser("Math Calculator").Page("SQR Calc").WebEdit("n")

'Clicks on the Text Box
Obj.Click

'Verify if the Object Exist - Returns Boolean value
a = obj.Exist
print a

'Set the value
obj.Set "10000" : wait(2)

'Get the Runtime Object Property - Value of the Text Box
val = obj.GetROProperty("value")
print val

'Get the Run Time Object Property - Visiblility - Returns Boolean Value
x = Obj.GetROProperty("visible")
print x

Làm việc với Hộp kiểm

Sau đây là một số phương pháp chính mà một phương pháp có thể làm việc với Hộp kiểm -

  • Set - Giúp người thử nghiệm Đặt giá trị hộp kiểm "BẬT" hoặc "TẮT"

  • Click- Nhấp vào hộp kiểm. Ngay cả khi kiểm tra BẬT hoặc TẮT nhưng người dùng sẽ không chắc chắn về trạng thái

  • WaitProperty - Chờ cho đến khi giá trị tài sản trở thành true

  • Exist - Kiểm tra sự tồn tại của Hộp kiểm

  • GetROProperty("name") - Lấy tên của hộp kiểm

  • GetROProperty("Visible") - Trả về giá trị Boolean nếu hiển thị

Thí dụ

'To Check the Check Box
Set Obj = Browser("Calculator").Page("Gmail").WebCheckBox("PersistentCookie")
Obj.Set "ON"

'To UnCheck the Check Box
Obj.Set "OFF"

'Verifies the Existance of the Check box and returns Boolean Value
val = Obj.Exist
print val

'Fetches the Name of the CheckBox
a = Obj.GetROProperty("name")
print a

'Verifies the visible property and returns the boolean value.
x = Obj.GetROProperty("visible")
print x

Làm việc với nút Radio

Sau đây là một số phương pháp chính mà người ta có thể làm việc với Radio Button -

  • Select(RadioButtonName) - Giúp người thử nghiệm Đặt Hộp Radio "BẬT"

  • Click- Nhấp vào nút Radio. Ngay cả nút radio BẬT hoặc TẮT nhưng người kiểm tra không thể nhận được trạng thái

  • WaitProperty - Chờ cho đến khi giá trị tài sản trở thành true

  • Exist - Kiểm tra sự tồn tại của Nút radio

  • GetROProperty("name") - Lấy tên của nút radio

  • GetROProperty("Visible") - Trả về giá trị Boolean nếu hiển thị

Thí dụ

'Select the Radio Button by name "YES"
Set Obj = Browser("Calculator").Page("Forms").WebRadioGroup("group1")
Obj.Select("Yes")

'Verifies the Existance of the Radio Button and returns Boolean Value
val = Obj.Exist
print val

'Returns the Outerhtml of the Radio Button
txt = Obj.GetROProperty("outerhtml")
print text

'Returns the boolean value if Radio button is Visible.
vis = Obj.GetROProperty("visible")
print vis

Làm việc với Hộp kết hợp

Sau đây là một số phương pháp chính mà người ta có thể làm việc với Combo Box:

  • Select(Value) - Giúp người thử nghiệm chọn giá trị từ ComboBox

  • Click - Nhấp vào đối tượng

  • WaitProperty - Chờ cho đến khi giá trị tài sản trở thành true

  • Exist - Kiểm tra sự tồn tại của Combo Box

  • GetROProperty("Text") - Nhận Giá trị đã chọn của Hộp Tổ hợp

  • GetROProperty("all items") - Trả lại tất cả các vật phẩm trong Hộp kết hợp

  • GetROProperty("items count") - Trả về số lượng vật phẩm trong Hộp kết hợp

Thí dụ

'Get the List of all the Items from the ComboBox
Set ObjList = Browser("Math Calculator").Page("Statistics").WebList("class")
x = ObjList.GetROProperty("all items")
print x

'Get the Number of Items from the Combo Box
y = ObjList.GetROProperty("items count")
print y

'Get the text value of the Selected Item
z = ObjList.GetROProperty("text")
print z

Làm việc với các nút

Sau đây là một số phương pháp chính mà người ta có thể làm việc với Buttons -

  • Click - Nhấp vào nút

  • WaitProperty - Chờ cho đến khi giá trị tài sản trở thành true

  • Exist - Kiểm tra sự tồn tại của Nút

  • GetROProperty("Name") - Lấy tên của nút

  • GetROProperty("Disabled") - Trả về giá trị Boolean nếu được bật / tắt

Thí dụ

'To Perform a Click on the Button
Set obj_Button = Browser("Math Calculator").Page("SQR").WebButton("Calc")
obj_Button.Click

'To Perform a Middle Click on the Button
obj_Button.MiddleClick

'To check if the button is enabled or disabled.Returns Boolean Value
x = obj_Button.GetROProperty("disabled")
print x

'To fetch the Name of the Button
y = obj_Button.GetROProperty("name")
print y

Làm việc với webTables

Trong ứng dụng dựa trên web ngày nay, webTables đã trở nên rất phổ biến và người kiểm tra cần hiểu cách hoạt động của WebTable và cách thực hiện một hành động trên webTables. Chủ đề này sẽ giúp bạn làm việc với webTables một cách hiệu quả.

Sr.No. Tuyên bố & Mô tả
1

if statement

An if câu lệnh bao gồm một biểu thức boolean theo sau bởi một hoặc nhiều câu lệnh.

2

if...else statement

An if elsecâu lệnh bao gồm một biểu thức boolean theo sau bởi một hoặc nhiều câu lệnh. Nếu điều kiện là Đúng. Các tuyên bố dướiifcác câu lệnh được thực thi. Nếu điều kiện sai.Else một phần của tập lệnh được thực thi

3

if..elseif...else statement

Một câu lệnh if được theo sau bởi một hoặc nhiều Elseif câu lệnh, bao gồm các biểu thức boolean và sau đó là một tùy chọn else statement, thực thi khi tất cả điều kiện trở thành sai.

4

nested if statements

An nếu hoặc elseif tuyên bố bên trong khác if hoặc là elseif các câu lệnh).

5

switch statement

A switch câu lệnh cho phép một biến được kiểm tra đối với một danh sách các giá trị như nhau.

  • html id - Nếu bảng có thẻ id thì tốt nhất bạn nên sử dụng thuộc tính này.

  • innerText - Đầu bảng.

  • sourceIndex - Tìm nạp Chỉ mục nguồn của Bảng

  • ChildItemCount - Nhận số lượng ChildIte có trong Hàng được chỉ định

  • RowCount - Nhận số lượng hàng trong bảng

  • ColumnCount - Nhận số lượng cột trong bảng

  • GetcellData - Nhận giá trị của ô dựa trên cột và chỉ mục hàng

Thí dụ

Browser("Tutorials Point").Sync
' WebTable 
Obj = Browser("Tutorials Point").Page("VBScript Decisions").WebTable("Statement")
' Fetch RowCount
x = Obj.RowCount
print x

' Fetch ColumnCount
y = Obj.ColumnCount(1)
print y

' Print the Cell Data of the Table
For i = 1 To x Step 1
   
   For j = 1 To y Step 1
      z = Obj.GetCellData(i,j)
      print "Row ID : " & i & " Column ID : " & j & " Value : " & z
   Next
Next

'Fetch the Child Item count of Type Link in a particular Cell
z = Obj.ChildItemCount(2,1,"Link")
print z

Đối tượng ảo là gì?

Đôi khi, một ứng dụng đang được thử nghiệm có thể chứa đối tượng cửa sổ tiêu chuẩn nhưng không được QTP nhận dạng. Trong trường hợp này, các đối tượng có thể được định nghĩa là đối tượng ảo (VO) của loại nút, liên kết, v.v. để các hành động của người dùng có thể được mô phỏng trên các đối tượng ảo trong quá trình thực thi.

Thí dụ

Giả sử chúng tôi đang tự động hóa một kịch bản trong Microsoft Word. Tôi đã kích hoạt ứng dụng MS word và nhấp vào bất kỳ biểu tượng nào trong ruy-băng. Ví dụ: trên Ribbon, tab Chèn được nhấp và sau đó người dùng nhấp vào nút "Hình ảnh". Một nút được công nhận là WinObject; do đó, tầm quan trọng của các đối tượng ảo được rõ rệt.

Window("Microsoft Word").WinObject("Ribbon").Click 145,45
Window("Microsoft Word").WinObject("Ribbon").WinObject("Picture...").Click 
170,104

Tạo một đối tượng ảo

Step 1 - Trong các tình huống như vậy, các Đối tượng ảo được tạo bằng Trình quản lý Đối tượng Ảo hoặc Đối tượng Ảo Mới từ "Công cụ" >> "Đối tượng Ảo" >> "Đối tượng Ảo Mới" và nhấp vào nút "Tiếp theo".

Step 2 - Ánh xạ Đối tượng với Loại Lớp và nhấp vào "Tiếp theo".

Step 3- Nhấp vào nút "Đánh dấu đối tượng". Một con trỏ hình chữ thập sẽ xuất hiện và đánh dấu đối tượng mà bạn muốn lập bản đồ và nhấp vào "Tiếp theo".

Step 4 - Chọn cha của đối tượng Virtual và nhấp vào "Next".

Step 5 - Đặt tên cho bộ sưu tập mà bạn muốn lưu trữ đối tượng ảo và nhấp vào "Hoàn tất".

Trình quản lý đối tượng ảo

Trình quản lý đối tượng ảo quản lý tập hợp các đối tượng Ảo. Người kiểm tra có thể thêm hoặc xóa Đối tượng ảo khỏi trình quản lý Đối tượng ảo.

Điều hướng đến Trình quản lý đối tượng ảo: "Công cụ" >> "Trình quản lý đối tượng ảo" như hình dưới đây -

Sử dụng các đối tượng ảo

Sau khi tạo Đối tượng Ảo, đối tượng được tạo có thể được sử dụng như hình dưới đây:

Window("Microsoft Word").WinObject("Ribbon").VirtualButton("button").Click

Giới hạn đối tượng ảo

  • QTP không hỗ trợ các đối tượng ảo để ghi tương tự hoặc mức thấp.

  • Không thể thêm điểm kiểm tra trên Đối tượng ảo.

  • Đối tượng Ảo không được kiểm soát bởi Kho lưu trữ đối tượng.

  • Mặc dù chúng tôi ánh xạ một đối tượng đến một lớp cụ thể (nút hoặc Danh sách), tất cả các phương thức của các đối tượng gốc không được hỗ trợ bởi Đối tượng ảo.

  • Object Spy không thể được sử dụng trên Virtual Object.

  • Việc thực hiện kiểm tra sẽ không thành công nếu độ phân giải màn hình thay đổi khi tọa độ thay đổi.

  • Cửa sổ ứng dụng phải có cùng kích thước màn hình để các đối tượng Ảo được chụp chính xác.

Do đó, QTP không cung cấp bất kỳ hỗ trợ tích hợp nào để kết nối với cơ sở dữ liệu, tuy nhiên bằng cách sử dụng VBScript, người kiểm tra sẽ có thể kết nối và tương tác với cơ sở dữ liệu bằng các đối tượng ADODB.

ADODB có 4 thuộc tính hoặc phương thức mà chúng tôi sẽ có thể làm việc với cơ sở dữ liệu. Họ là -

  • ADODB.Connection - Được sử dụng để thiết lập kết nối với Cơ sở dữ liệu

  • ADODB.Command - Được sử dụng để thực hiện một lệnh SQL (Truy vấn hoặc Thủ tục được lưu trữ)

  • ADODB.Fields - Được sử dụng để tìm nạp một cột cụ thể từ một tập hợp bản ghi sau khi thực hiện một truy vấn / proc được lưu trữ

  • ADODB.Recordset - Được sử dụng để tìm nạp dữ liệu từ cơ sở dữ liệu

Làm thế nào để kết nối với Cơ sở dữ liệu?

Cơ sở dữ liệu có thể được kết nối bằng cách sử dụng Chuỗi kết nối. Mỗi cơ sở dữ liệu khác nhau về cách chúng tôi kết nối với chúng. Tuy nhiên, các chuỗi kết nối có thể được xây dựng với sự trợ giúp của www.connectionstrings.com

Hãy để chúng tôi xem cách kết nối với cơ sở dữ liệu với các tham số sau:

  • Database Type - MÁY CHỦ MSSQL

  • Server Name - SQLEXPRESS

  • Database Name - Thử nghiệm

  • User Id - sa

  • password - Mật khẩu123

Kết quả của Truy vấn được hiển thị trong SQL Server Management Studio như sau:

Dim objConnection 
'Set Adodb Connection Object
Set objConnection = CreateObject("ADODB.Connection")     
Dim objRecordSet 
 
'Create RecordSet Object
Set objRecordSet = CreateObject("ADODB.Recordset")     
 
Dim DBQuery 'Query to be Executed
DBQuery = "Select NAME from dbo.EMPLOYEE where AGE = 29"
 
'Connecting using SQL OLEDB Driver
objConnection.Open "Provider = sqloledb.1;Server =.\SQLEXPRESS;
User Id = sa;Password=Password123;Database = Trial"
 
'Execute the Query
objRecordSet.Open DBQuery,objConnection
 
'Return the Result Set
Value = objRecordSet.fields.item(0)				
msgbox Value
 
' Release the Resources
objRecordSet.Close        
objConnection.Close		
 
Set objConnection = Nothing
Set objRecordSet = Nothing

Kết quả

Khi thực hiện tập lệnh trên, đầu ra được hiển thị trong hộp thông báo như hình dưới đây:

XML là một ngôn ngữ đánh dấu được thiết kế để lưu trữ dữ liệu ở một định dạng mà người và máy đều có thể đọc được. Sử dụng XML, dữ liệu cũng có thể dễ dàng trao đổi giữa máy tính và hệ thống cơ sở dữ liệu.

XML mẫu và các phần tử chính của chúng được trình bày bên dưới:

Truy cập XML

Const XMLDataFile = "C:\TestData.xml"
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
xmlDoc.Async = False
xmlDoc.Load(XMLDataFile)

' Getting the number of Nodes (books)
Set nodes = xmlDoc.SelectNodes("/bookstore/book")
Print "Total books: " & nodes.Length    ' Displays 2

' get all titles
Set nodes = xmlDoc.SelectNodes("/Booklib/book/value/text()")

' get their values
For i = 0 To (nodes.Length - 1)
   Title = nodes(i).NodeValue
   Print "Title is" & (i + 1) & ": " & Title
Next

So sánh XML

Chúng ta có thể so sánh hai XML đã cho -

Dim xmlDoc1
Dim xmlDoc2

' Load the XML Files
Set xmlDoc1 = XMLUtil.CreateXMLFromFile ("C:\File1.xml")
Set xmlDoc2 = XMLUtil.CreateXMLFromFile ("C:\File2.xml")

'Use the compare method of the XML to check if they are equivalent
Comp = xmlDoc1.Compare (xmlDoc1, xmlDoc2)

'Returns 1 if the two files are the same
If Comp = 1 Then
   Msgbox "XML Files are the Same"
Else
   Msgbox "XML Files are Different"
End if

Tập lệnh QTP chỉ có thể thực thi nếu các đối tượng có trong Kho lưu trữ đối tượng. Mô tả của các Đối tượng được tạo bằng lập trình Mô tả -

  • Khi người kiểm tra muốn thực hiện một thao tác trên một đối tượng không có trong kho đối tượng

  • Khi các đối tượng trong ứng dụng có bản chất rất động.

  • Khi Kho lưu trữ đối tượng phát triển lớn, nó dẫn đến Hiệu suất kém khi kích thước của Kho lưu trữ đối tượng tăng lên.

  • Khi khung công tác được xây dựng, nó đã được quyết định không sử dụng Kho lưu trữ đối tượng.

  • Khi người kiểm tra muốn thực hiện một hành động trên ứng dụng trong thời gian chạy mà không có kiến ​​thức về các thuộc tính duy nhất của đối tượng.

Cú pháp

Có hai cách để tạo kịch bản bằng kỹ thuật Lập trình mô tả. Họ là -

  • Đối tượng mô tả
  • Chuỗi mô tả

Đối tượng mô tả

Tập lệnh được phát triển bằng cách sử dụng Đối tượng mô tả phụ thuộc vào các thuộc tính được sử dụng và giá trị tương ứng của chúng. Sau đó, những mô tả này được sử dụng để xây dựng kịch bản.

'Creating a description object
Set btncalc = Description.Create()

'Add descriptions and properties
btncalc("type").value = "Button"
btncalc("name").value = "calculate"
btncalc("html tag").value = "INPUT"

' Use the same to script it
Browser("Math Calc").Page("Num Calculator").WebButton(btncalc).Click

Chuỗi mô tả

Mô tả của các đối tượng được phát triển bằng cách sử dụng các thuộc tính và giá trị dưới dạng chuỗi như hình dưới đây.

Browser("Math Calc").Page("Num Calculator").WebButton("html 
tag:=INPUT","type:=Button","name:=calculate").Click

Đối tượng con

QTP cung cấp phương thức ChildObjects, cho phép chúng ta tạo một tập hợp các đối tượng. Các đối tượng cha đứng trước ChildObjects.

Dim oDesc
Set oDesc = Description.Create
oDesc("micclass").value = "Link"

'Find all the Links
Set obj = Browser("Math Calc").Page("Math Calc").ChildObjects(oDesc)

Dim i
'obj.Count value has the number of links in the page

For i = 0 to obj.Count - 1	 
   'get the name of all the links in the page			
   x = obj(i).GetROProperty("innerhtml") 
   print x 
Next

Số nhận dạng thông thường

Lập trình mô tả được sử dụng để viết tập lệnh dựa trên số nhận dạng thứ tự, điều này sẽ cho phép QTP hoạt động trên các đối tượng đó khi hai hoặc nhiều đối tượng có cùng thuộc tính.

' Using Location
Dim Obj
Set Obj = Browser("title:=.*google.*").Page("micclass:=Page")
Obj.WebEdit("name:=Test","location:=0").Set "ABC"
Obj.WebEdit("name:=Test","location:=1").Set "123"
 
' Index
Obj.WebEdit("name:=Test","index:=0").Set "1123"
Obj.WebEdit("name:=Test","index:=1").Set "2222"
 
' Creation Time
Browser("creationtime:=0").Sync
Browser("creationtime:=1").Sync
Browser("creationtime:=2").Sync

Bản thân QTP có thể được tự động hóa bằng giao diện COM do HP-QTP cung cấp. Mô hình đối tượng tự động hóa là một tập hợp các đối tượng, phương thức và thuộc tính giúp người kiểm tra kiểm soát cài đặt cấu hình và thực thi các tập lệnh bằng giao diện QTP. Các cấu hình / hành động chính có thể được kiểm soát (nhưng không giới hạn ở) được liệt kê bên dưới:

  • Tải tất cả các phần bổ trợ bắt buộc để thử nghiệm
  • Làm cho QTP hiển thị trong khi thực thi
  • Mở Kiểm tra bằng cách sử dụng vị trí được chỉ định
  • Thư viện chức năng liên kết
  • Chỉ định thời gian hết thời gian đồng bộ đối tượng chung
  • Bắt đầu và Kết thúc Lặp lại
  • Bật / Tắt Nhận dạng Thông minh
  • On Error Settings
  • Data Table Path
  • Recovery Scenario Settings
  • Log Tracking Settings

QTP 11.5x provides an exclusive documentation on Automation Object model that can be referred by navigating to "Start" >> "All Programs" >> "HP Software" >> "HP Unified Functional Testing" >> "Documentation" >> "Unified Functional Testing Automation Reference".

Generate AOM Script

A tester can generate AOM script from QTP itself, using the "Generate Script" option. Navigate to "Run" >> "Settings" >> "Properties" Tab >> "Generate Script" as shown below −

Example

' A Sample Script to Demostrate AOM
Dim App 'As Application
Set App = CreateObject("QuickTest.Application")
App.Launch
App.Visible = True

App.Test.Settings.Launchers("Web").Active = False
App.Test.Settings.Launchers("Web").Browser = "IE"
App.Test.Settings.Launchers("Web").Address = "http://easycalculation.com/"
App.Test.Settings.Launchers("Web").CloseOnExit = True

App.Test.Settings.Launchers("Windows Applications").Active = False
App.Test.Settings.Launchers("Windows Applications").Applications.RemoveAll
App.Test.Settings.Launchers("Windows Applications").RecordOnQTDescendants = True
App.Test.Settings.Launchers("Windows Applications").RecordOnExplorerDescendants = False
App.Test.Settings.Launchers("Windows Applications").RecordOnSpecifiedApplications = True

App.Test.Settings.Run.IterationMode = "rngAll"
App.Test.Settings.Run.StartIteration = 1
App.Test.Settings.Run.EndIteration = 1
App.Test.Settings.Run.ObjectSyncTimeOut = 20000
App.Test.Settings.Run.DisableSmartIdentification = False
App.Test.Settings.Run.OnError = "Dialog"

App.Test.Settings.Resources.DataTablePath = "<Default>"
App.Test.Settings.Resources.Libraries.RemoveAll

App.Test.Settings.Web.BrowserNavigationTimeout = 60000
App.Test.Settings.Web.ActiveScreenAccess.UserName = ""
App.Test.Settings.Web.ActiveScreenAccess.Password = ""

App.Test.Settings.Recovery.Enabled = True
App.Test.Settings.Recovery.SetActivationMode "OnError"
App.Test.Settings.Recovery.Add "D:\GUITest2\recover_app_crash.qrs", 
   "Recover_Application_Crash", 1
App.Test.Settings.Recovery.Item(1).Enabled = True 

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' System Local Monitoring settings
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
App.Test.Settings.LocalSystemMonitor.Enable = false
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Log Tracking settings
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
With App.Test.Settings.LogTracking
   .IncludeInResults = False
   .Port = 18081 
   .IP = "127.0.0.1"
   .MinTriggerLevel = "ERROR"
   .EnableAutoConfig = False
   .RecoverConfigAfterRun = False
   .ConfigFile = ""
   .MinConfigLevel = "WARN" 
End With

A Framework defines a set of guidelines/best practices that enforces a set of standards, which makes it easy to use for the end users to work with. There are different types of automation frameworks and the most common ones are listed below −

  • Keyword-Driven Framework
  • Data-Driven Framework
  • Hybrid Framework

Keyword-Driven Framework

Keyword driven testing is a type of functional automation testing framework which is also known as table-driven testing or action word based testing.

In Keyword-driven testing, we use a table format, usually a spreadsheet, to define keywords or action words for each function that we would like to execute.

Advantages

  • It is best suited for novice or a non-technical tester.

  • Enables writing tests in a more abstract manner using this approach.

  • Keyword driven testing allows automation to be started earlier in the SDLC even before a stable build is delivered for testing.

  • There is a high degree of reusability.

Disadvantages

  • Initial investment in developing the keywords and its related functionalities might take longer.

  • It might act as a restriction to the technically abled testers.

Data Driven Framework

Data-driven testing is creation of test scripts where test data and/or output values are read from data files instead of using the same hard-coded values each time the test runs. This way, the testers can test how the application handles various inputs effectively. It can be any of the following data files −

  • datapools
  • Excel files
  • ADO objects
  • CSV files
  • ODBC sources

Flow Diagram

Data Driven Testing can be best understood by the following diagram −

Advantages

  • Data driven framework results in less amount of code
  • Offers greater flexibility for maintaining and fixing the scripting issues
  • Test Data can be developed

Disadvantages

  • Each script needs to be different to understand different sets of data.

Hybrid Framework

Hybrid Framework is a combination of Keyword driven and data Driven framework that can be best described using the following flow diagram.

Affecting Factors

Following are the parameters one should take into account while developing the framework. The affects factors are listed below −

  • Framework files should support versioning controlling software such as SVN, CVS, MS Source Control

  • Framework should support executing the scripts in different environments viz- QA, SAT, DEV

  • Upon Object changes, scripts should execute with minimal changes.

  • Framework should configure itself and take care of prerequisite such as creating folders/databases.

  • Framework should have robust reporting structure so that issues in the script/application can be easily spotted

  • Framework should have greater flexibility so that it should be easy to use

  • Framework should follow coding standards so that files, functions, and history of changes are maintained correctly.

In the next chapter, we will learn how to design a simple framework.

Let us design a simple framework by taking a sample application. We will automate a few scenarios of the application under test and write reusable functions.

The sample application under test is "Calculator", a default application that is available as a part of Windows. Let us now create different components of a framework. Here, we will develop a hybrid framework and use Object Repository as it is fairly a simple application. However, this framework can be scaled to support a complex application as well.

The folder structure of the Framework is as shown below −

Explanation of the folder structure −

  • Master Driver Script − The Script that drives the entire execution. It performs prerequisite and initial settings that are required for the execution.

  • Library Files − The Associated Functions that forms the Function Library.

  • Data Table − The Test Data that is required for the Execution.

  • Object Repository − The Objects and its properties that enable QTP to recognize the objects seamlessly.

  • Execution Logs − The Folder contains the execution log file with user functions and function execution history.

Master Driver Script

'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 
' MASTER DRIVER SCRIPT NAME    : Calculator 
' DESCRIPTION                  : Drivers Script to Execute Automated Test for 
   the Calculator  
' AUTHOR                       : Tutorials Point 
' DATE CREATED                 : 30-Dec-2013 
' OBJECT REPOSITORY ASSOCIATED : Calc.tsr 
' LIBRARY FILES ASSOCIATED     : calculator.qfl, Common.qfl 
' MODIFICATION LOG

' ---------------------------------------------------- 
' First Version       Tutorials point 
'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =  
Option Explicit  

Public ExecDrive  

' Get the Root folder of the Test  so that we can make use of relative paths. 
Dim x : x = Instr(Environment.Value("TestDir"),"Driver")-2 
ExecDrive = mid(Environment.Value("TestDir"),1,x)  

' Get the path of Libraries using relative to the current Drive 
Dim LibPath : LibPath = ExecDrive+"\Libraries\"  

' Dynamically Load the Function Libraries 
LoadFunctionLibrary LibPath + "Calculator.qfl", LibPath + "common_utils.qfl"   

' Capturing the Start Time 
' clscommon is the class object created in common.qfl library file 
clscommon.StartTime = Time()  

' Launching the Application 
SystemUtil.Run "C:\Windows\System32\Calc.exe" : wait (2)  

' Initialize the Data Table Path  
Dim FileName : FileName  = ExecDrive+"\TestData\Calculator.xls" 
Dim SheetSource : SheetSource  = "Calc_test" 
Dim SheetDest : SheetDest = "Global"  

' Import the DataTable into the QTP Script 
DataTable.ImportSheet  FileName , SheetSource , SheetDest   

' Object Repository Path 
Dim RepPath : RepPath = ExecDrive+"\Object_Repository\Calc.tsr" 
RepositoriesCollection.RemoveAll()  
RepositoriesCollection.Add(RepPath)   

' To Keep a Count on iteration 
Dim InttestIteration                   
Dim InttestRows : InttestRows = datatable.GetRowCount   

'  Fetching Date-TimeStamp which will be unique for Naming the Execution Log File 
clscommon.StrDateFormatted = day(date()) & "_" &  MonthName(Month(date()),true) &  
 "_" & YEAR(date())& "_"&hour(now)&"_"&minute(now)  

 ' Name the LogFile  
clscommon.StrLogFile = ExecDrive & "\Execution Logs\" &  
clscommon.StrDateFormatted & ".txt"   

' Create the Execution LogFile which captures the result 
clscommon.Fn_FileCreate(clscommon.StrLogFile)  

' Iniitialize the Parameters and all the relevant Test Details 
Call Fn_InitializeLogFile()  

' Kill all the previous calculator process  
Call fn_Kill_Process("calc.exe")  

For InttestIteration = 1 to InttestRows 
   datatable.SetCurrentRow InttestIteration  
   Dim StrExecute : StrExecute = Ucase(Trim(datatable.Value("Run","Global"))) 
   If StrExecute = "Y" Then  
      clscommon.Number1 = Trim(datatable.Value("Number_1","Global"))  
      clscommon.Number2 = Trim(datatable.Value("Number_2","Global"))  
      clscommon.Number3 = Trim(datatable.Value("Number_3","Global"))  
   
      clscommon.Number4 = Trim(datatable.Value("Number_4","Global"))  
      clscommon.Number5 = Trim(datatable.Value("Number_5","Global"))  
      clscommon.Number6 = Trim(datatable.Value("Number_6","Global"))  
   
      clscommon.Test_Case_ID  = 
         Trim(datatable.Value("Test_Case_ID","Global"))' 
            : clscommon.LogWrite "The Test Case Data is Located at :: " & tcDataPath 
      clscommon.tcScenario = 
         Trim(datatable.Value("Scenario","Global"))' 
            : clscommon.LogWrite "The Test Case Data is Located at :: " & tcDataPath 
      Dim  Expected_Val :  Expected_Val = 
         Trim(datatable.Value("Expected_Val","Global"))'                        
            :  clscommon.LogWrite "The Test Case Data is Located at :: " & tcDataPath 
   
      Select case clscommon.tcScenario  
         Case "Add" 
            clscommon.LogWrite "=== Inside the Test Set :: " & 
               clscommon.tcScenario & " ===" 
                  Call fnCalculate("+",Expected_Val) 
    
         Case "Subtract"   
            clscommon.LogWrite "=== Inside the Test Set :: " & 
               clscommon.tcScenario & " ===" 
                  Call fnCalculate("-",Expected_Val) 
    
         Case "Multiply"   
            clscommon.LogWrite "=== Inside the Test Set :: " & 
               clscommon.tcScenario & " ===" 
                  Call fnCalculate("*",Expected_Val) 
    
         Case "Divide"   
            clscommon.LogWrite "=== Inside the Test Set :: " & 
               clscommon.tcScenario & " ===" 
                  Call fnCalculate("/",Expected_Val) 
    
         Case "Sqrt"   
            clscommon.LogWrite "=== Inside the Test Set :: " & 
               clscommon.tcScenario & " ===" 
                  Call fnCalculate("sqt",Expected_Val) 
      End Select 
   End If  
Next  

' Calling the End Test to Add the result Footer in exec log file. 
Call fn_End_test()  

'  =====================  End of Master Driver Script =====================

Library Files

The Calculator Functions are written in a separate function file saved with the extension .qfl or .vbs. These functions are reusable across actions.

'  Calculator. Qfl File :: Associated Function Library for Calculator Master Driver  

'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =  
' FUNCTION NAME     : Fn_InitializeLogFile 
' DESCRIPTION       : Function to Write the Initial Values in the Log File 
' INPUT PARAMETERS  : varExecDrive,StrDB,StrUId,Strpwd,StrNewDB 
' OUTPUT PARAMETERS : NIL 
' RETURN VALUE      : Pass or Fail message 
' DATE CREATED      : 30-Dec-2013 
'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =  
Public Function Fn_InitializeLogFile() 
   clscommon.LogWrite "********************************************" 
   clscommon.LogWrite "Calc Automation Started" 
End Function 
'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =  
' FUNCTION NAME     : fnCalculate 
' DESCRIPTION       : Function to perform Arithmetic Calculations 
' INPUT PARAMETERS  : operator,Expected_Val 
' OUTPUT PARAMETERS : NIL 
' RETURN VALUE      : Pass or Fail message 
' DATE CREATED      : 30-Dec-2013 
'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =    
Function fnCalculate(operator,Expected_Val) 
   clscommon.LogWrite "Executing the Function 'fnCalculate' " 

   Window("Calculator").Activate 
    
   If Trim(clscommon.Number1) <> ""  Then
      Window("Calculator").WinButton(clscommon.Number1).Click 
   If Trim(clscommon.Number2) <> ""  Then 
      Window("Calculator").WinButton(clscommon.Number2).Click 
   If Trim(clscommon.Number3) <> ""  Then 
      Window("Calculator").WinButton(clscommon.Number3).Click 

   Window("Calculator").WinButton(operator).Click 
   If Trim(clscommon.Number4) <> ""  Then 
      Window("Calculator").WinButton(clscommon.Number4).Click 
   If Trim(clscommon.Number5) <> ""  Then 
      Window("Calculator").WinButton(clscommon.Number5).Click 
   If Trim(clscommon.Number6) <> ""  Then 
      Window("Calculator").WinButton(clscommon.Number6).Click 

   Window("Calculator").WinButton("=").Click 
   Dim ActualVal : ActualVal  = 
      Window("Calculator").WinEdit("Edit").GetROProperty("text") 
   clscommon.LogWrite "The Actual Value after the Math Operation is "& ActualVal 
  
   If Trim(ActualVal) = Trim(Expected_Val) Then 
      clscommon.WriteResult "Pass",  clscommon.Test_Case_ID , 
         clscommon.tcScenario , " Expected Value matches with Actual Value :: " 
            & ActualVal 
    
   Else 
      clscommon.WriteResult "Fail",  clscommon.Test_Case_ID , 
         clscommon.tcScenario , " Expected Value - " & Expected_Val & " Does NOT matches 
            with Actual Value :: " & ActualVal 
   End If 
    
   Window("Calculator").WinButton("C").Click 
    
   If Err.Number <> 0  Then 
      clscommon.LogWrite  "Execution Error : The Error Number is ::  " & 
         Err.Number & " The Error Description is " & Err.Description 
      Err.Clear 
   End If 
    
   clscommon.LogWrite "Exiting the Function 'fnCalculate' " 
End Function  

'= = = = = = = = = = = = = = = = = = = = = = = = = = = 
' FUNCTION NAME     : fn_Kill_Process 
' DESCRIPTION       : Function to Kill the process by name 
' INPUT PARAMETERS  : Application name to be killed 
' OUTPUT PARAMETERS : NIL 
' RETURN VALUE      : NIL 
' DATE CREATED      : 30-Dec-2013 
'= = = = = = = = = = = = = = = = = = = = = = = = = = =  
Function fn_Kill_Process(process) 
   Dim strComputer ,  strProcessToKill , objWMIService , colProcessstrComputer = "." 
   strProcessToKill = process 
    
   Set objWMIService = GetObject("winmgmts:" _& 
      "{impersonationLevel=impersonate}!\\" _& strComputer & "\root\cimv2") 
    
   Set colProcess = objWMIService.ExecQuery _("Select * from Win32_Process 
      Where Name = '" & strProcessToKill & "'") 
    
   count = 0 
   For Each objProcess in colProcess 
      objProcess.Terminate() 
      count = count + 1 
   Next 
End Function  

'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =  
' FUNCTION NAME     : fn_End_test 
' DESCRIPTION       : Function to finish the test Execution process 
' INPUT PARAMETERS  : Application name to be killed 
' OUTPUT PARAMETERS : NIL 
' RETURN VALUE      : NIL 
' DATE CREATED      : 20/Dec/2013 
'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 
Function fn_End_test() 
   clscommon.LogWrite "Status Message - Executing the Function 'fn_End_test' " 
    
   Window("Calculator").Close 
   On Error Resume Next 
    
   clscommon.StopTime = Time() 
   clscommon.ElapsedTime = DateDiff("n",clscommon.StartTime,clscommon.StopTime) 
   Dim Totaltests  
   Totaltests = clscommon.gintPassCount+ clscommon.gintFailCount
   clscommon.LogWrite "## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
   clscommon.LogWrite "##  The Execution Start Time  ::  " & clscommon.StartTime 
   clscommon.LogWrite "##  The Execution End Time   ::  " & clscommon.StopTime 
   clscommon.LogWrite "##  The Time Elapsed ::   " & clscommon.ElapsedTime & " Minutes " 
   clscommon.LogWrite "##  The OS ::  " & Environment.Value("OS") 
   clscommon.LogWrite "##  The Total No of Test Cases Executed  ::  " & Totaltests 
   clscommon.LogWrite "##  The No. of Test Case Passed ::  " & clscommon.gintPassCount 
   clscommon.LogWrite "##  The No. of Test Case Failed ::  " & clscommon.gintFailCount 
   clscommon.LogWrite "## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
   SystemUtil.CloseDescendentProcesses 
End Function  
'  ===============   End of Calculator. Qfl   ============================= '

The other library file, which is 'common_utils.qfl' that contains the functions, which enables us to write the output to a text file.

Set clscommon = New OS_clsUtils  

'Creating a class file to handle global variables. 
Class OS_clsUtils 
   Dim StrLogFile 
   Dim StrDateFormatted 
   Dim Result 
    
   Dim  Number1, Number2 , Number3  
   Dim  Number4, Number5 , Number6  
   Dim Test_Case_ID , tcScenario 
   Dim StartTime, StopTime, ElapsedTime 
   
   Dim gintPassCount , gintFailCount , gintWarningCount ,  gintdoneCount,  
      gintinfoCount 
    
   Function Fn_FileCreate(strFileName) 
      Dim objFSO:  Set objFSO = CreateObject("Scripting.FileSystemObject") 
      On Error Resume Next 
      
      Dim objTextFile : Set objTextFile = objFSO.CreateTextFile(strFileName) 
      objTextFile.Close 
       
      Set objTextFile = Nothing 
      Set objFSO = Nothing 
   End Function 
    
   Function LogWrite(sMsg) 
      Const ForAppending = 8 
       
      Dim objFSO : Set objFSO = CreateObject("scripting.FileSystemObject") 
      
      Dim objTextFile : Set objTextFile = objFSO.OpenTextFile 
         (clscommon.StrLogFile, ForAppending, True) 
       
      objTextFile.WriteLine day(date()) & "/" &  MonthName(Month(date()),true) 
         &  "/" & YEAR(date()) & " " & time & ": " & sMsg 
      objTextFile.Close 
       
      Set objTextFile = Nothing 
      Set objFSO = Nothing 
   End Function 
    
   Function WriteResult(strStatus,functionName,functionDescription,Result) 
      Const ForAppending = 8 
      Dim objFSO : Set objFSO = CreateObject("scripting.FileSystemObject") 
      Dim objTextFile : Set objTextFile = objFSO.OpenTextFile 
         (clscommon.StrLogFile, ForAppending, True) 
       
      objTextFile.WriteLine day(date()) & "/" &  MonthName(Month(date()),true) 
         &  "/" & YEAR(date()) & " " & time & ": " & "  
            * * * * * * Test Case Exec Details  * * * * * " 
      
      objTextFile.WriteLine day(date()) & "/" &  MonthName(Month(date()),true) 
         &  "/" & YEAR(date()) & " " & time & ": " & " Test staus :: " & strStatus 
      objTextFile.WriteLine day(date()) & "/" &  MonthName(Month(date()),true) 
         &  "/" & YEAR(date()) & " " & time & ": " & " Tese ID ::  " & functionName 
      objTextFile.WriteLine day(date()) & "/" &  MonthName(Month(date()),true) 
         &  "/" & YEAR(date()) & " " & time & ": " & " Test Description :: " 
            & functionDescription 
      objTextFile.WriteLine day(date()) & "/" &  MonthName(Month(date()),true) 
         &  "/" & YEAR(date()) & " " & time & ": " & " Test Result Details :: " & Result 
      objTextFile.WriteLine day(date()) & "/" &  MonthName(Month(date()),true) 
         &  "/" & YEAR(date()) & " " & time & ": " & "  
            * * * * * * * * * * * * * * * * * * * * * * * *  * * * * * * * * * * * " 
      objTextFile.Close 
       
      Set objTextFile = Nothing  
      Set objFSO = Nothing 
       
      Select Case Lcase(strStatus) 
         Case "pass" 
            gintPassCount = gintPassCount + 1 
          
         Case "fail" 
            gintFailCount = gintFailCount+1 
      End Select 
   End Function 
End Class 
'   =====================   End of common_Utils.qfl =====================

Object Repository

Object Repository has got all the objects that the user would be acting upon. The image given below shows the list of all objects added into the repository with the name calc.tsr

Data Table

DataTable contains the keywords, which drive the tests and also Test the data with which QTP will act on the objects.

The Execution Log

The Execution log file or output file contains user actions and function log, which will enable the testers to debug upon script failures.

8/Jan/2014 5:09:16 PM: ************************************************* 
8/Jan/2014 5:09:16 PM: Calc Automation Started 
8/Jan/2014 5:09:16 PM: === Inside the Test Set  ::   Add  === 
8/Jan/2014 5:09:16 PM: Executing the Function 'fnCalculate'  
8/Jan/2014 5:09:17 PM: The Actual Value after the Math Operation is 949.  
8/Jan/2014 5:09:17 PM:  * * * * * * Test Case Exec Details  * * * * *  
8/Jan/2014 5:09:17 PM: Test staus :: Pass 
8/Jan/2014 5:09:17 PM: Tese ID ::  TC_001 
8/Jan/2014 5:09:17 PM: Test Description :: Add 
8/Jan/2014 5:09:17 PM: Test Result Details ::  Expected Value matches with Actual 
   Value :: 949.  
8/Jan/2014 5:09:17 PM: * * * * * * * * * * * * * * * * * * * * * * * *  * * 
* * * * * * * * * 
  
8/Jan/2014 5:09:17 PM: Exiting the Function 'fnCalculate'  
8/Jan/2014 5:09:17 PM: === Inside the Test Set  ::   Subtract  === 
8/Jan/2014 5:09:17 PM: Executing the Function 'fnCalculate'  
8/Jan/2014 5:09:17 PM: The Actual Value after the Math Operation is 415.  
8/Jan/2014 5:09:17 PM: * * * * * * Test Case Exec Details  * * * * *  
8/Jan/2014 5:09:17 PM: Test staus :: Pass 
8/Jan/2014 5:09:17 PM: Tese ID ::  TC_002 
8/Jan/2014 5:09:17 PM: Test Description :: Subtract 
8/Jan/2014 5:09:17 PM: Test Result Details ::  Expected Value matches with Actual 
   Value :: 415.  
8/Jan/2014 5:09:17 PM: * * * * * * * * * * * * * * * * * * * * * * * *  * * * 
* * * * * * * *

8/Jan/2014 5:09:17 PM: Exiting the Function 'fnCalculate'  
8/Jan/2014 5:09:17 PM: === Inside the Test Set  ::   Multiply  === 
8/Jan/2014 5:09:17 PM: Executing the Function 'fnCalculate'  
8/Jan/2014 5:09:18 PM: The Actual Value after the Math Operation is 278883.  
8/Jan/2014 5:09:18 PM: * * * * * * Test Case Exec Details  * * * * *  
8/Jan/2014 5:09:18 PM: Test staus :: Pass 
8/Jan/2014 5:09:18 PM: Tese ID ::  TC_003 
8/Jan/2014 5:09:18 PM: Test Description :: Multiply 
8/Jan/2014 5:09:18 PM:  Test Result Details ::  Expected Value matches with 
   Actual Value :: 278883.  
8/Jan/2014 5:09:18 PM: * * * * * * * * * * * * * * * * * * * * * * * *  * * * 
* * * * * * * *   

8/Jan/2014 5:09:18 PM: Exiting the Function 'fnCalculate'  
8/Jan/2014 5:09:18 PM: === Inside the Test Set  ::   Divide  === 
8/Jan/2014 5:09:18 PM: Executing the Function 'fnCalculate'  
8/Jan/2014 5:09:19 PM: The Actual Value after the Math Operation is 3.  
8/Jan/2014 5:09:19 PM: * * * * * * Test Case Exec Details  * * * * *  
8/Jan/2014 5:09:19 PM: Test staus :: Pass 
8/Jan/2014 5:09:19 PM: Tese ID ::  TC_004 
8/Jan/2014 5:09:19 PM: Test Description :: Divide 
8/Jan/2014 5:09:19 PM: Test Result Details ::  Expected Value matches with Actual 
   Value :: 3.  
8/Jan/2014 5:09:19 PM: * * * * * * * * * * * * * * * * * * * * * * * *  * * * 
* * * * * * * * 
  
8/Jan/2014 5:09:19 PM: Exiting the Function 'fnCalculate'  
8/Jan/2014 5:09:19 PM: === Inside the Test Set  ::   Sqrt  === 
8/Jan/2014 5:09:19 PM: Executing the Function 'fnCalculate'  
8/Jan/2014 5:09:20 PM: The Actual Value after the Math Operation is 10.  
8/Jan/2014 5:09:20 PM: * * * * * * Test Case Exec Details  * * * * *  
8/Jan/2014 5:09:20 PM: Test staus :: Pass 
8/Jan/2014 5:09:20 PM: Tese ID ::  TC_005 
8/Jan/2014 5:09:20 PM: Test Description :: Sqrt 
8/Jan/2014 5:09:20 PM: Test Result Details ::  Expected Value matches with Actual 
   Value :: 10.  
8/Jan/2014 5:09:20 PM: * * * * * * * * * * * * * * * * * * * * * * * *  * * * * 
* * * * * * * 

8/Jan/2014 5:09:20 PM: Exiting the Function 'fnCalculate'  
8/Jan/2014 5:09:20 PM: Status Message - Executing the Function 'fn_Finish_test'  
8/Jan/2014 5:09:20 PM: ## # # # # # # # # # # # # # # # # # # # # # # # # # 
# # # # # #  
8/Jan/2014 5:09:20 PM: ##  The Execution Start Time  ::  5:09:14 PM 
8/Jan/2014 5:09:20 PM: ##  The Execution End Time   ::  5:09:20 PM 
8/Jan/2014 5:09:20 PM: ##  The Time Elapsed ::   0 Minutes  
8/Jan/2014 5:09:20 PM: ##  The OS ::  Microsoft Windows Vista Server 
8/Jan/2014 5:09:20 PM: ##  The Total No of Test Cases Executed  ::  25 
8/Jan/2014 5:09:20 PM: ##  The No. of Test Case Passed ::  25 
8/Jan/2014 5:09:20 PM: ##  The No. of Test Case Failed ::   
8/Jan/2014 5:09:20 PM: ## # # # # # # # # # # # # # # # # # # # # # # # # # 
# # # # # #