{"id":183,"date":"2026-10-12T16:01:09","date_gmt":"2026-10-12T16:01:09","guid":{"rendered":"http:\/\/www.scmgalaxy.com\/tutorials\/2010\/02\/25\/introduction-of-rftrational-functional-testing\/"},"modified":"2026-10-12T16:01:09","modified_gmt":"2026-10-12T16:01:09","slug":"introduction-of-rftrational-functional-testing","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/introduction-of-rftrational-functional-testing\/","title":{"rendered":"IBM Rational Functional Tester (RFT): Core Concepts, Workflow, and Integrations"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">IBM Rational Functional Tester (RFT) is a functional UI automation tool used to record, edit, and replay tests against web and desktop applications. If you are evaluating legacy automation stacks or maintaining an existing RFT suite, this guide summarizes how RFT works, what it supports, and how to organize stable test assets.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Originally published on 2010-02-25; fully revised and updated.<\/em><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2010\/02\/rational-functional-testing.png\" alt=\"rational-functional-testing-intro\"\/><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">What RFT is designed to do<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">RFT is built for <strong>full functional testing<\/strong> through record-and-playback and script-based automation. During test creation, it can capture UI interactions and generate scripts that validate object state through verification points.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Record and replay end-to-end user flows.<\/li><li>Create object-oriented test scripts in Java or VB.NET environments.<\/li><li>Insert verification points to compare expected and actual object\/data states.<\/li><li>Maintain recognition properties in a centralized object map.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">IDE and scripting options<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The original RFT model provides two scripting tracks tied to two IDE ecosystems.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>RFT option<\/th><th>Language<\/th><th>Development environment<\/th><th>Typical fit<\/th><\/tr><\/thead><tbody><tr><td>Functional Tester, Java Scripting<\/td><td>Java<\/td><td>IBM Rational Software Delivery Platform<\/td><td>Teams standardizing on Java-based tooling<\/td><\/tr><tr><td>Functional Tester, VB.NET Scripting<\/td><td>VB.NET<\/td><td>Microsoft Visual Studio .NET<\/td><td>Teams aligned with Microsoft .NET development workflows<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">How object-based testing works in RFT<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">RFT uses object properties for identification instead of raw screen coordinates. This makes playback more resilient when UI layout changes but underlying object identity remains stable. The source material also states that testing can target visible and non-visible objects across Java, VB.NET, Windows, and web applications.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Test object maps as a shared recognition layer<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">When recording, RFT automatically creates a test object map. This map stores recognition properties and allows centralized maintenance: if an object definition changes, scripts using that map can inherit the update without rewriting each script.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Verification points and baseline comparison<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Verification points capture expected state into baseline data, then compare future executions against that baseline. The original post lists one object-properties verification point and five data verification point types.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Object properties<\/li><li>Menu hierarchy<\/li><li>Table<\/li><li>Text<\/li><li>Tree hierarchy<\/li><li>List<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Differences can then be analyzed with the Verification Point Comparator, and baseline data can be updated when expected behavior changes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Typical RFT test lifecycle<\/h2>\n\n\n\n<pre class=\"mermaid\">\nflowchart TD\n    A[Choose IDE and language] --> B[Record user workflow]\n    B --> C[Auto-create object map]\n    C --> D[Add verification points]\n    D --> E[Run playback on target environment]\n    E --> F{Matches baseline}\n    F -- Yes --> G[Mark pass and store log]\n    F -- No --> H[Review comparator differences]\n    H --> I[Update baseline or open defect]\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Platform and integration model<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The source describes platform-independent and browser-independent playback, and historical browser examples including Firefox, Mozilla, Internet Explorer, and Netscape. It also describes integration with Rational TestManager and Rational ClearQuest Test Manager when those components are installed.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Component<\/th><th>What it adds<\/th><th>Prerequisite noted in source<\/th><\/tr><\/thead><tbody><tr><td>Rational Functional Tester<\/td><td>Record\/playback scripting, object maps, verification points<\/td><td>RFT installation<\/td><\/tr><tr><td>Rational TestManager integration<\/td><td>Run scripts from TestManager and use TestManager logging features<\/td><td>TestManager installed<\/td><\/tr><tr><td>Rational ClearQuest Test Manager integration<\/td><td>Playback from ClearQuest TestManager, generate logs, track defects<\/td><td>ClearQuest Test Manager installed<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Example repository layout for RFT assets<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">For maintainability, keep scripts, object maps, and baseline artifacts versioned together.<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs language-bash\">rft-tests\/\n  scripts\/\n    smoke\/\n    regression\/\n  object-maps\/\n  verification-baselines\/\n  playback-logs\/\n  docs\/<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Best practices for stable RFT suites<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Keep object maps modular so UI changes are isolated.<\/li><li>Review baseline updates carefully to avoid accepting real regressions.<\/li><li>Separate smoke and regression suites to speed feedback.<\/li><li>Store logs and comparator outputs with build metadata for traceability.<\/li><li>Validate current platform and browser support against up-to-date vendor documentation before scaling execution.<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Rational Functional Tester (RFT) is an object-based GUI test automation tool for functional testing across application types. This revised guide explains its scripting options, object maps, verification points, playback workflow, and integration model.<\/p>\n","protected":false},"author":1,"featured_media":4154,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[2],"tags":[3525,3520,3528,3519,3529,1127,3518,3521,3522,3517,3526,3527,779,3530,3523,3524],"class_list":["post-183","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorised","tag-about-rft","tag-functional-tester","tag-functional-tester-usage","tag-functional-testing","tag-functional-testing-usage","tag-introduction","tag-rational-functional-testing","tag-rational-functional-testing-introduction","tag-rational-functional-testing-overview","tag-rft","tag-rft-intoduction","tag-rft-overview","tag-testing","tag-testmanager","tag-what-is-rational-functional-testing","tag-what-is-rft"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/183","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=183"}],"version-history":[{"count":3,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/183\/revisions"}],"predecessor-version":[{"id":79013,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/183\/revisions\/79013"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media\/4154"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=183"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=183"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=183"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}