TestLink
TestLink is a free and open-source web-based test management system designed to facilitate software quality assurance by enabling teams to create, organize, and execute test cases while tracking requirements and generating reports.[1] It supports the full lifecycle of software testing, from specification and planning to execution and analysis, making it a comprehensive tool for quality assurance professionals.[2] Originally developed in the early 2000s by software developer Chad Rosen at Good Technology, TestLink has evolved into a widely used open-source project under the GNU General Public License (GPL).[3][2] The project is hosted on SourceForge and GitHub, with active maintenance by a community of contributors led by figures such as Francisco Mancardi.[4][2] As of 2025, its latest stable release is version 1.9.20 (codenamed Raijin), released in 2020, and requires PHP greater than 5.5 and supports databases such as MySQL, PostgreSQL, and Microsoft SQL Server for deployment.[1][2] Key features of TestLink include hierarchical test case management, customizable test plans and sessions, requirement traceability to link tests with project specifications, and dynamic execution tracking with pass/fail logging.[2] It offers robust reporting capabilities, such as metrics on test coverage and defect rates, along with integrations for authentication via OAuth, Google, GitHub, or LDAP, and compatibility with Docker for easier setup.[2] While primarily focused on manual testing, it facilitates automated testing through execution hooks and supports multilingual interfaces, contributing to its adoption in diverse development environments worldwide.[4][2]Introduction
Overview
TestLink is an open-source, web-based test management system designed for software quality assurance, facilitating the organization and execution of testing activities in collaborative environments.[2] It operates under the GNU General Public License (GPL), allowing free use, modification, and distribution to support diverse QA teams.[2] The primary purposes of TestLink include documenting test cases, organizing test plans, executing manual tests, and tracking results to ensure comprehensive coverage of software requirements.[1] It enables QA teams to maintain a centralized repository for requirements and test artifacts, relating them to builds, platforms, and personnel for efficient oversight.[2] Key benefits encompass streamlined collaboration through staff allocation, dynamic result recording, and progress reporting, which help control the testing process and identify issues early.[2] In a basic workflow, users create and manage test cases within structured plans, assign them to team members, execute tests while logging outcomes, and generate reports to evaluate status and metrics.[2] This approach promotes accountability and visibility across distributed teams. The latest stable release, version 1.9.20 (Raijin), provides these core functionalities as of 2025.[1]History
TestLink originated in the early 2000s as an internal test management tool developed by Chad Rosen at Good Technology, a mobile security software company.[3] The project transitioned to an open-source initiative under the GNU General Public License (GPL) in 2003, with the SourceForge project launching on September 25 of that year and the initial release following shortly thereafter.[3] Initial versions were led by Rosen, culminating in the stable Version 1.0 release in 2006, which established core features for test specification and execution.[2] The 1.9 series marked a significant evolution, beginning with Version 1.9.0 in November 2010, introducing enhancements in requirements management and reporting.[5] Under the leadership of Francisco Mancardi, who assumed the role of project lead around 2004, and with contributions from the Teamtest community of developers and testers, the tool saw steady maturation through the decade.[6] Key updates included improved integrations and security features in subsequent 1.9 releases. Development activity declined after 2017, with fewer major updates following the 1.9.17 release in 2018, though the stable Version 1.9.20 (codenamed Raijin) was issued in January 2020 to address database schema changes and authentication improvements. Sporadic contributions via the GitHub repository have continued through 2025, including nightly fixes for Version 1.9.20 and planning for a 2.x overhaul with modern UI elements.[2]Development and Maintenance
Origins and Contributors
TestLink was originally developed by Chad Rosen, a software developer at Good Technology in the early 2000s, who created the tool to address the need for a centralized system to track and manage software testing processes within his organization.[3] Rosen's motivation stemmed from the inefficiencies of scattered testing documentation and execution tracking, leading him to build an initial version that could handle test cases, plans, and reporting in a web-based format.[7] Following its internal use at Good Technology, the project was released as open-source software on SourceForge on May 17, 2004, which attracted early contributors from the broader developer and testing communities eager to enhance its features for collaborative quality assurance.[7] These initial community members focused on expanding compatibility, refining user interfaces, and integrating basic reporting capabilities, marking the shift from a proprietary tool to a communal resource. Leadership of the project transitioned to Francisco Mancardi around 2004, after Rosen's departure from active involvement, with Mancardi serving as the primary project leader and core developer for over two decades.[6] Under Mancardi's guidance, the tool evolved through coordinated releases and community input, emphasizing stability and extensibility for diverse testing environments.[8] Teamtest emerged as the primary maintaining organization, taking responsibility for ongoing bug fixes, security updates, and comprehensive documentation to ensure the tool's reliability for enterprise and open-source users.[9] This group has coordinated releases, managed the official repository, and provided guides that support integration with various development workflows.[10] The open-source community has sustained TestLink's growth, with over 40 pull requests merged on GitHub by 2025, primarily addressing dependency updates, compatibility improvements, and minor enhancements.[2] Contributors also maintain the project's wiki for user guidance and have developed third-party extensions, such as plugins for continuous integration tools like Jenkins, to extend functionality without altering the core codebase.[11]Current Status
As of November 2025, TestLink's development activity remains sporadic, with the most recent notable commits occurring in May 2024.[12] The project maintains a stable release at version 1.9.20 (Raijin), originally issued in January 2020, supplemented by ongoing nightly builds that incorporate minor fixes.[1] Security vulnerabilities, such as CVE-2022-35195 related to broken access control in attachment downloads, have been addressed in prior updates.[13] A planned version 2.x is in early development, focusing on a user experience overhaul using the Dashio Bootstrap admin template to modernize the interface, though no firm release timeline has been announced.[11] The project has experienced reduced momentum since around 2017, with limited introduction of new features amid a shift toward maintenance and security updates, yet it continues to serve legacy systems effectively in various organizations.[12] This slower pace reflects broader challenges in sustaining volunteer-driven open-source efforts, but the tool's core functionality remains reliable for basic test management needs.[14] Support for TestLink is provided through an official forum for user discussions, a documentation wiki on GitHub, and community-driven bug tracking via the project's issue tracker.[1][11] In terms of adoption, TestLink retains popularity among open-source quality assurance teams, particularly for its cost-free model and avoidance of vendor lock-in, making it suitable for small teams; however, it faces increasing competition from modern alternatives like TestRail and Zephyr that offer enhanced integrations and automation support.[15][14]System Requirements
Server and Software Prerequisites
TestLink requires a server environment capable of hosting a PHP-based web application with database support. The recommended operating systems include Linux distributions such as Ubuntu for stability and performance, though it also supports Windows environments.[2] A compatible web server is essential, with Apache 2.x being the primary supported option; alternatives like Nginx can be configured via PHP-FPM for similar functionality.[2] For the database backend, TestLink officially supports MySQL 5.7.x or MariaDB 10.1.x, both requiring the configuration settinglog_bin_trust_function_creators = 1 to enable stored procedures; PostgreSQL 9.x is also supported, while MS-SQL Server 201x support remains incomplete.[2]
The application is built on PHP, with a minimum version greater than 5.5 and 7.2.x recommended for optimal performance; future updates plan to enforce a minimum of 7.3.x. Several PHP extensions are mandatory for core operations, including those for database connectivity (e.g., mysqli for MySQL, pgsql for PostgreSQL), along with ctype, session, tokenizer, simplexml, dom, curl, mbstring, gd, and zip to handle string processing, XML parsing, image generation, and compression.[2]
Hardware needs are modest for basic deployments, scaling based on project size and usage. Client-side access is compatible with modern web browsers such as Chrome and Firefox.[2] These prerequisites ensure a smooth setup, with detailed installation processes outlined separately.[2]
Installation Overview
TestLink installation begins with downloading the latest stable release as of November 2025, version 1.9.20 (Raijin, released 2020), from the official SourceForge project page or the GitHub repository maintained by the TestLink Open Source TRMS community. Note that development continues with infrequent updates, but no new stable version has been released since 2020; version 2.x remains in development.[4][2][1] Users should verify the integrity of the downloaded archive (typically a .tar.gz or .zip file) using any provided checksums, such as MD5 or SHA-1, to ensure it has not been corrupted or tampered with during transfer.[16] Once downloaded, extract the files to the web server's document root directory, such as/var/www/html/testlink/ on a Linux-based Apache setup or the equivalent htdocs folder in XAMPP on Windows.[2] This places the application files in a location accessible via a web browser. Next, configure the database by preparing a MySQL, MariaDB, or PostgreSQL instance meeting the prerequisites; the web-based installer will handle schema creation through an included SQL script executed automatically.[2] Edit the custom_config.inc.php file (or generate it via the installer) to specify database credentials, including host, username, password, and database name, along with paths for logs and uploads.[2]
For web server configuration, use Apache 2.x with PHP 5.5 or higher; set the document root to point to the TestLink directory and enable the mod_rewrite module if using features like the REST API, by adding LoadModule rewrite_module modules/mod_rewrite.so to the Apache configuration and allowing .htaccess overrides.[2][17] Ensure write permissions on key directories: set 755 for folders like gui/templates_c, logs, and upload_area, and 644 for files, adjusting ownership to the web server user (e.g., www-data on Ubuntu).[2][18]
To complete initial access, navigate to the installer script in a web browser (e.g., http://[localhost](/page/Localhost)/testlink/install/index.php), provide the database details when prompted, and follow the on-screen steps to create the database schema, generate configuration files, and set up the admin user account.[2] The installer also imports default data, such as sample test cases and users, to facilitate immediate testing.[19] Common issues during this process include permission errors on directories, which can be resolved by running chmod -R 755 on the TestLink folder and verifying web server access; enable PHP error logging by setting error_reporting = E_ALL and log_errors = On in php.ini, directing logs to a writable file for troubleshooting.[2][18][20]
For upgrades from previous versions, first back up the existing database and application files.[2] Extract the new release to a fresh directory, copy over the old config_db.inc.php and custom_config.inc.php files, then execute version-specific SQL update scripts from the install/sql/alter_tables/ path (e.g., for upgrading to 1.9.20, run the corresponding MySQL or PostgreSQL scripts in sequence).[2] Finally, clear browser cookies and test the installation to confirm functionality; nightly builds with fixes are available via the GitHub repository for those needing the latest patches.[2][1]
Core Components
Test Projects and Specifications
In TestLink, a test project serves as the top-level container for organizing all testing activities related to a specific initiative, such as a software release or product development cycle. It encapsulates multiple test plans, test cases, requirements, and keywords, enabling isolated management of testing efforts without data sharing across projects.[21] Administrators create a new test project by accessing the Test Project Management interface, where they specify a unique project name, an optional prefix for test case identification, a description outlining the project's scope, and selections for enhanced features like requirements management or automation support. They also configure the project's active or inactive status to control availability and may integrate an external issue tracker if applicable. Post-creation, projects can be edited for details like name or color coding, inactivated for obsolescence without deletion, or assigned user rights to manage access, ensuring controlled visibility and participation.[22][21] Test specifications within a project provide a hierarchical framework for structuring requirements and test suites, logically grouping related tests to reflect the application's features or modules. This structure forms a tree-like organization where test suites can nest sub-suites, and individual test cases are defined with steps, expected results, and attributes like priority or execution type, facilitating reusable and maintainable test designs.[21][23] Management of test specifications includes import and export capabilities via XML formats for projects, suites, and cases, allowing bulk data transfer and integration with external tools. Version control is handled through active/inactive statuses, where updates to specifications can create new versions while preserving prior ones for reference, and test cases can be linked to project requirements in a many-to-many relationship to trace coverage. For instance, in a software release project, specifications might delineate feature-based test areas like user authentication or payment processing, enabling systematic organization before linking to executable test plans.[21]Test Plans and Cases
In TestLink, a test plan serves as an instance within a test project dedicated to a specific testing cycle, such as a software release version, encompassing assigned test cases, associated builds, and defined milestones to structure the testing effort.[24] Test plans are created by users with lead privileges through the Test Plan Management interface, where a title, description, and active status are specified, allowing for the inclusion of detailed parameters like test items, approach, schedule, and risks to outline the scope and execution framework.[25] Once established, test plans link to test cases from the project's test specification, enabling the import and prioritization of cases based on factors such as execution type—manual or automated placeholders—to align with project timelines and resources.[2] A test case represents the atomic unit of testing in TestLink, comprising detailed steps outlining actions or scenarios, expected results defining checkpoints and outcomes, preconditions specifying setup requirements, and optional attachments for supporting materials like screenshots or files.[24] Test cases are authored within the test specification module, organized hierarchically into test suites that form a tree structure for logical grouping by functionality or module, and they support keywords for categorization and filtering, such as "regression" or "security," to facilitate reuse across multiple plans.[26] During creation, essential attributes are defined, including a unique identifier (auto-generated), summary, importance level (high, medium, low), estimated execution time, and execution type, ensuring the case is self-contained and verifiable against requirements.[24] Management of test cases in TestLink emphasizes flexibility and traceability, allowing users to clone or copy cases across different test suites or plans while optionally retaining keywords and links to requirements, which streamlines adaptation for varied testing contexts without redundant authoring.[26] Version history is maintained for each test case, enabling the creation of new versions to reflect updates, with an active or inactive status designation that controls availability for assignment to test plans—only active versions can be included, promoting controlled evolution and auditability.[24] Test cases within a plan are organized into suites, mirroring the specification hierarchy, to provide a structured view for prioritization and oversight, distinct from the broader project-level organization of specifications.[2]User Management
TestLink's user management system supports a hierarchical structure of predefined roles to ensure controlled access to its test management functionalities. The standard roles include Administrator, who possesses full access to all features including system configuration and user oversight; Test Leader, responsible for project-level operations such as test plan management and rights assignment; Test Analyst, who can view, create, edit, delete test cases, and execute them; Test Designer, with full access to test specifications and requirements for viewing and modifying; Test Executor, limited to viewing and executing assigned tests; and Guest, restricted to view-only access for test cases and reports without modification capabilities.[24][2] Role assignment in TestLink operates on both global and project-specific levels, allowing administrators or leaders to assign roles that dictate permissions such as creating, editing, or deleting test cases, executing tests, and viewing reports. Permissions are granular and tied to roles, with custom roles configurable through the graphical user interface to tailor access per test project or plan, ensuring that users like executors can only perform executions without altering specifications. Global roles provide baseline access across all projects, while overrides can be applied for individual test plans to enhance security and workflow efficiency.[24][2] Authentication in TestLink relies on built-in user accounts using email and password credentials, with support for enterprise integration via LDAP or Active Directory to enable single sign-on and centralized user validation. Administrators can configure multiple LDAP servers for redundancy, authenticating users against directory services while maintaining database synchronization for role assignments. Password management includes secure hashing with BCRYPT, user-initiated changes, and optional email-based resets, though self-registration is configurable and requires admin approval for full access.[2][27] Management tasks for users are handled exclusively by administrators through the dedicated user interface, encompassing adding new users with initial role assignments, editing profiles to update details or roles, and removing users to revoke access. Basic password policies enforce secure storage but do not include advanced enforcement like complexity requirements or expiration; session management relies on standard web timeouts without customizable durations specified in core documentation. These operations facilitate scalable team handling in testing environments.[24][2] Auditing in TestLink tracks user actions primarily through integrated reporting and metrics, logging executions, ownership of test results, and changes within test plans for compliance purposes. Administrators can generate user-specific reports that detail actions like test executions or assignments, providing traceability without a dedicated audit log interface, which supports accountability in regulated testing workflows.[24]Usage
Managing Tests and Execution
In TestLink, managing tests involves structured workflows that begin with assigning test cases to testers through test plans. Test plan administrators can select specific test cases or suites and allocate them to individual users or roles, such as testers or senior testers, ensuring targeted responsibility for execution.[28] This assignment process integrates with user management, allowing for efficient distribution across teams. Once assigned, executions are scheduled against specific software builds, which represent versions or releases of the application under test, enabling precise tracking of testing activities per build iteration.[2] The execution process in TestLink emphasizes detailed result logging to capture outcomes accurately. Testers access assigned cases via the "Test Execution" interface or "Test Cases Assigned to Me" view, where they evaluate each test case—typically structured with steps, expected results, and preconditions—against the build. Results are recorded as "Passed" if the actual outcome matches expectations, "Failed" for deviations, or "Blocked" if external issues prevent completion; these statuses can be applied at the case level or per individual step.[29] Accompanying notes provide explanations for failures or blocks, while attachments like screenshots or logs can be uploaded directly during execution to document evidence. Real-time status updates occur upon saving, immediately reflecting changes in the overall plan dashboard for visibility across the team.[28] Builds play a central role in integrating test management with development cycles, particularly for regression tracking. Each test plan can be linked to multiple builds, allowing testers to re-execute cases against new versions to verify fixes or detect regressions without altering the original plan structure. This association ensures that execution history is version-specific, facilitating comparisons between builds to identify persistent issues.[2] Collaboration features enhance team coordination during test management. Upon assignment, users receive notifications through the system's email integration, alerting them to new tasks and deadlines within the test plan. Bulk execution is supported for test suites, where multiple related cases can be processed in sequence, streamlining workflows for larger regression runs or exploratory testing.[29] During execution, TestLink provides essential metrics to monitor progress and quality. Dashboards display real-time progress tracking, such as the percentage of cases executed, completed, or pending per plan or build. Failure rates are calculated per test case or across the plan, highlighting high-risk areas like repeated blocks or fails, which aids in prioritizing retesting efforts.[28] These metrics, derived from logged results, offer immediate insights without requiring post-execution analysis.Reporting and Analysis
TestLink provides comprehensive reporting and analysis tools to interpret test execution results, track progress, and derive actionable insights from testing activities. These features draw from execution data to generate summaries, visualizations, and metrics that support quality assurance processes.[24] Key report types include execution summaries offered through the General Test Plan Metrics, which aggregate test outcomes by suite, build, owner, milestone, priority, and keyword, displaying counts and percentages for passed, failed, blocked, and not run statuses.[30] Coverage matrices are facilitated by requirements-based reports, which detail the mapping between requirements and test cases, including metrics on total requirements, those covered, not covered, and not tested.[24] Custom dashboards, such as the Metrics Dashboard, present an at-a-glance view of overall execution status in percentage terms across builds.[31] Analysis capabilities enable filtering reports by status, keyword, owner, suite, build, tester, and priority to focus on specific data subsets.[30] Trends over builds can be examined by comparing pass/fail ratios and completion rates across versions, highlighting progress or issues in iterative development cycles.[30] Available metrics encompass pass/fail ratios, execution progress percentages, tester performance via owner-attributed results, and execution time tracked through custom fields for estimated and actual durations.[24] Visual aids like pie charts for overall status distribution and bar charts for breakdowns by keyword or suite enhance interpretability, provided the PHP GD library is enabled.[31] Reports support export to formats including Excel, HTML, MS Word, and OpenOffice for offline review or integration with other tools.[24] Customization is achieved by modifying report templates in the installation directory, allowing tailored outputs such as platform-specific metrics like test case density per suite.[24] In practice, these tools aid compliance audits by leveraging coverage matrices to verify requirement traceability and support sprint retrospectives through build trend analysis for evaluating testing efficiency.[24]Features
Features described are for TestLink version 1.9.20 (released 2020; stable as of 2025).[2]Requirements Management
TestLink's requirements management module enables teams to define, organize, and track project requirements within test projects, ensuring alignment between software specifications and testing efforts. Requirements are structured hierarchically under Requirement Specifications, which function as documents or folders containing individual requirements. Each requirement can be created manually or imported, with core attributes including a unique identifier (automatically generated using the project prefix and a sequential number), a title (limited to 100 characters), a scope or description in HTML format, and a status such as VALID or NOT_TESTABLE, where NOT_TESTABLE items are excluded from coverage metrics.[24][21] Import functionality supports CSV files in simple format (one row per title and scope) or DOORS export format (with header detection), allowing users to resolve conflicts by updating existing requirements, creating new ones, or skipping duplicates based on title matching. XML imports are also available, following a specified format documented in TestLink's file guidelines, which facilitates integration from external requirement tools.[24][21] Traceability in TestLink establishes bidirectional, many-to-many relationships primarily between requirements and test cases, with links managed through an "Assign Requirements" interface that allows associating multiple test cases to a single requirement or vice versa. These links extend to test specifications (via the hierarchical structure) and executions, as test case results propagate coverage status back to linked requirements, enabling end-to-end visibility from requirements to actual test outcomes.[21][2] Coverage analysis tools identify gaps by generating requirements-based reports that highlight uncovered requirements, showing metrics like the percentage of requirements linked to executed test cases.[24][21] Requirements support versioning to track changes, with each modification creating a new version that can be frozen to preserve historical states; this ensures that updates to requirements are documented, and impacts on linked test cases are assessed by reviewing version-specific linkages during test plan updates.[32] The workflow begins with creating or importing requirements into specifications, followed by a review and approval process requiring appropriate user rights before proceeding to test case design and linking, promoting structured progression from requirements definition to testable artifacts.[21]Integrations and Extensions
TestLink provides built-in support for integrating with popular bug tracking systems, enabling seamless linking of defects to test results during execution. This functionality allows testers to report issues directly from failed test cases, with the system supporting API-based connections to tools such as Bugzilla, Mantis, and Jira. For instance, Mantis integration utilizes SOAP or REST interfaces, while Bugzilla and Jira leverage XML-RPC or direct database configurations to synchronize bug IDs and statuses.[33][34] In addition to defect tracking, TestLink can be incorporated into continuous integration and continuous delivery (CI/CD) pipelines through external hooks and plugins. The Jenkins TestLink plugin facilitates automated test plan execution triggered by builds, allowing results to be imported back into TestLink for centralized reporting. Similarly, legacy support for Hudson (the predecessor to Jenkins) enables similar automation workflows, though modern setups primarily use the Jenkins integration for triggering test runs and updating execution statuses.[35][36] TestLink's extensibility is achieved through its PHP-based architecture, which supports custom plugins and third-party modules for enhanced functionality. The plugin system, introduced in version 1.9.15, allows developers to extend core features, such as adding automation capabilities via placeholders for tools like Selenium. Community-driven add-ons, often shared via the official GitHub repository, enable integration with automation frameworks by updating test results through API calls, though these require manual configuration.[2][37] The tool exposes a comprehensive API for programmatic interactions, including a RESTful interface for importing test cases, exporting execution results, and managing plans. Legacy support via XML-RPC remains available for older systems, with methods liketl.reportTCResult for updating test outcomes. This API underpins most integrations, allowing external scripts to automate data exchange without direct user intervention.[38][39]
Despite these capabilities, TestLink has notable limitations in native automation support, relying heavily on community-driven add-ons and third-party tools for advanced scripting. It lacks built-in execution engines for automated tests, requiring integrations like the Jenkins plugin or Selenium API hooks to bridge this gap, which can introduce configuration overhead.[40][41]