{"id":49500,"date":"2025-05-27T08:53:41","date_gmt":"2025-05-27T08:53:41","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=49500"},"modified":"2026-02-21T07:28:57","modified_gmt":"2026-02-21T07:28:57","slug":"gitlab-build-test-cases-tutorial-guide","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/gitlab-build-test-cases-tutorial-guide\/","title":{"rendered":"Gitlab &#8211; Build &#8211; Test Cases Tutorial Guide"},"content":{"rendered":"\n<p>This is relatively new <strong>Test Cases<\/strong> feature in <strong>GitLab 18.x (cloud)<\/strong> that brings native <strong>manual test case management<\/strong> into the GitLab ecosystem \u2014 part of their push towards <strong>end-to-end DevOps<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"798\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/05\/image-23-1024x798.png\" alt=\"\" class=\"wp-image-49501\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/05\/image-23-1024x798.png 1024w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/05\/image-23-300x234.png 300w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/05\/image-23-768x599.png 768w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/05\/image-23.png 1138w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">\u2705 What <em>Test Cases<\/em> in GitLab Actually Are<\/h3>\n\n\n\n<p>GitLab\u2019s Test Cases are <strong>structured manual tests<\/strong> designed to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Define <strong>what<\/strong> should be tested (the test step)<\/li>\n\n\n\n<li>Record <strong>how<\/strong> to verify it (expected result)<\/li>\n\n\n\n<li>Track <strong>test coverage<\/strong>, planning, and execution<\/li>\n\n\n\n<li>Link with <strong>issues<\/strong>, <strong>requirements<\/strong>, and <strong>test runs<\/strong><\/li>\n<\/ul>\n\n\n\n<p>They are <strong>not automated tests<\/strong>, but they <strong>complement them<\/strong> by managing <strong>manual testing workflows<\/strong>, often needed in:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>UI\/UX validation<\/li>\n\n\n\n<li>Exploratory testing<\/li>\n\n\n\n<li>Compliance\/regression audits (e.g., healthcare, finance)<\/li>\n\n\n\n<li>User acceptance testing (UAT)<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Real Use Cases for GitLab Test Cases<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Use Case<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><strong>Manual QA<\/strong><\/td><td>QA teams can define and run manual regression tests during releases<\/td><\/tr><tr><td><strong>UAT for Clients<\/strong><\/td><td>PMs can create test cases, and clients can execute\/verify functionality before go-live<\/td><\/tr><tr><td><strong>Compliance Audits<\/strong><\/td><td>Required manual validation steps (e.g., for ISO 26262, HIPAA, etc.) can be documented and traceable<\/td><\/tr><tr><td><strong>Linking with Requirements<\/strong><\/td><td>Trace test cases back to specific requirements using <strong>Requirements Management<\/strong><\/td><\/tr><tr><td><strong>Defect Tracking<\/strong><\/td><td>Link failed test cases directly to <strong>issues\/bugs<\/strong><\/td><\/tr><tr><td><strong>Exploratory Testing Logs<\/strong><\/td><td>Document steps performed during a test session that isn&#8217;t fully scripted<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\">\ud83e\udde0 How to Visualize It in Workflow<\/h3>\n\n\n\n<p>Let\u2019s say your team is building a <strong>Login Module<\/strong>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1. Create a Test Case:<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Title<\/strong>: Verify login with valid credentials<\/li>\n\n\n\n<li><strong>Description<\/strong>: <code>Steps: 1. Open login page 2. Enter valid email and password 3. Click \"Login\" Expected Result: - Redirects to dashboard - User's name is visible in top-right corner<\/code><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2. Link It:<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Link to:\n<ul class=\"wp-block-list\">\n<li>Related <strong>Issue<\/strong>: <code>#123 Login Feature<\/code><\/li>\n\n\n\n<li>Related <strong>Requirement<\/strong>: <code>REQ-01-Login<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">3. Run It:<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>From a <strong>test run<\/strong>, mark the test case as:\n<ul class=\"wp-block-list\">\n<li>\u2705 Passed<\/li>\n\n\n\n<li>\u274c Failed (can create bug)<\/li>\n\n\n\n<li>\u23f8\ufe0f Blocked<\/li>\n\n\n\n<li>\u26a0\ufe0f Skipped<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">4. Report:<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use <strong>Test Reports<\/strong> to see pass\/fail trends, test coverage, and compliance readiness<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd27 Where You\u2019ll Find It in GitLab UI<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Navigate to your <strong>Project \u2192 Build \u2192 Test Cases<\/strong> or via <code>https:\/\/gitlab.com\/&lt;group&gt;\/&lt;project&gt;\/-\/quality\/test_cases<\/code><\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\">\ud83e\udde9 How to Best Use It in Agile\/DevOps<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Sprint Planning<\/strong>\n<ul class=\"wp-block-list\">\n<li>QA writes test cases for stories\/tickets<\/li>\n\n\n\n<li>Links each test case to the related issue\/requirement<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>CI\/CD Integration<\/strong>\n<ul class=\"wp-block-list\">\n<li>Even though test cases are manual, they sit next to pipelines and MRs, giving unified visibility<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Release Testing<\/strong>\n<ul class=\"wp-block-list\">\n<li>Create a <strong>Test Run<\/strong> per release or milestone<\/li>\n\n\n\n<li>Execute selected test cases and record results<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Post-Deployment<\/strong>\n<ul class=\"wp-block-list\">\n<li>Run test cases as part of <strong>UAT checklist<\/strong> or rollback decision flow<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\">\ud83e\udde0 Pro Tips<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use <strong>labels<\/strong> (e.g., <code>smoke<\/code>, <code>regression<\/code>, <code>v18.0<\/code>) to filter\/group test cases<\/li>\n\n\n\n<li>Combine with <strong>Test Runs<\/strong> and <strong>Requirements<\/strong> for traceability<\/li>\n\n\n\n<li>Automate generation of issues on test failure (e.g., with scripts or API)<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udcc8 When Not to Use It<\/h3>\n\n\n\n<p>If your team is <strong>fully automated in CI\/CD<\/strong> and doesn&#8217;t require formal manual validation, this feature may feel redundant. However, for <strong>product teams, QA testers, regulated industries, and enterprise clients<\/strong>, it fills a crucial gap.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This is relatively new Test Cases feature in GitLab 18.x (cloud) that brings native manual test case management into the GitLab ecosystem \u2014 part of their push towards end-to-end DevOps&#8230;. <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[2],"tags":[],"class_list":["post-49500","post","type-post","status-publish","format-standard","hentry","category-uncategorised"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49500","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=49500"}],"version-history":[{"count":2,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49500\/revisions"}],"predecessor-version":[{"id":58990,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49500\/revisions\/58990"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=49500"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=49500"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=49500"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}