<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Sadia Islam</title>
    <description>The latest articles on Forem by Sadia Islam (@sadia).</description>
    <link>https://forem.com/sadia</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F782573%2F722a9b5c-9052-45d0-9afa-70945df9c7ca.png</url>
      <title>Forem: Sadia Islam</title>
      <link>https://forem.com/sadia</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/sadia"/>
    <language>en</language>
    <item>
      <title>Automating CSV Data for Reliable API Testing</title>
      <dc:creator>Sadia Islam</dc:creator>
      <pubDate>Thu, 26 Jun 2025 07:47:19 +0000</pubDate>
      <link>https://forem.com/sadia/automating-csv-data-for-reliable-api-testing-ao2</link>
      <guid>https://forem.com/sadia/automating-csv-data-for-reliable-api-testing-ao2</guid>
      <description>&lt;p&gt;&lt;strong&gt;Recently, I tackled a practical challenge in my API automation work and wanted to share both the problem and my solution — in case it helps someone out there in a similar boat!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🚧 The Problem&lt;/strong&gt;&lt;br&gt;
In my current project, one of our APIs is responsible for onboarding users through the upload of CSV files. This API checks the uploaded data against existing backend records and rejects the entire upload if it detects any duplicates&lt;/p&gt;

&lt;p&gt;Now, here comes the tricky part: My test needs to run repeatedly (automated), but each time it runs with the same CSV file, the API fails because duplicate entries already exist in the system.&lt;/p&gt;

&lt;p&gt;Two workarounds were initially proposed:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Manually upload a new CSV file every time (not scalable)&lt;/li&gt;
&lt;li&gt;Reset the database daily (risky and not practical for CI/CD)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I knew we could do better.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💡 My Thought Process&lt;/strong&gt;&lt;br&gt;
Instead of changing the whole database or managing tons of files manually… &lt;strong&gt;Why not generate unique data programmatically for every test run?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The API sees fresh data every time&lt;/li&gt;
&lt;li&gt;The test runs on schedule (hands-free!)&lt;/li&gt;
&lt;li&gt;No need to reset the DB or manage uploads manually&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🛠️ The Solution I Built&lt;/strong&gt;&lt;br&gt;
I created an R&amp;amp;D project to build an automated solution that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a dummy API locally that mimics the real endpoint behavior (CSV upload, duplicate checks). Later, I deployed it on a dummy server to test the flow in a CI/CD environment.&lt;/li&gt;
&lt;li&gt;Used faker.js to dynamically generate unique user data (ID, Name, etc..)&lt;/li&gt;
&lt;li&gt;Write that data into a temp.csv file using Node.js&lt;/li&gt;
&lt;li&gt;Use Postman to send a form-data request with the CSV&lt;/li&gt;
&lt;li&gt;Executed the API request via Newman to upload the CSV file.&lt;/li&gt;
&lt;li&gt;Runs in GitHub Actions every 30 minutes or is triggered manually as needed.&lt;/li&gt;
&lt;li&gt;Sends me the test result report in Telegram, with a full HTML report with pass/fail status&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;⚙️ Technologies Used:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node.js for scripting&lt;/li&gt;
&lt;li&gt;faker.js for generating fake (but unique) data&lt;/li&gt;
&lt;li&gt;Newman to run Postman tests in CI&lt;/li&gt;
&lt;li&gt;GitHub Actions for automation&lt;/li&gt;
&lt;li&gt;Telegram Bot API for real-time notifications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The Result&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Fully automated test&lt;/li&gt;
&lt;li&gt;📂 Always fresh and valid data &lt;/li&gt;
&lt;li&gt;🧪 No duplicates = no failed tests due to data &lt;/li&gt;
&lt;li&gt;📲 Real-time result delivery &lt;/li&gt;
&lt;li&gt;💥 100% hands-off CI/CD experience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;My Key Learnings&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automating dynamic test data prevents flaky API test failures due to duplicates.&lt;/li&gt;
&lt;li&gt;Manual work, like resetting databases or uploading new files daily, isn't scalable&lt;/li&gt;
&lt;li&gt;Real-time Telegram alerts provide quick visibility into test outcomes [you can use Gmail, Slack, or any other platform to get the real-time update]&lt;/li&gt;
&lt;li&gt;A simple R&amp;amp;D initiative can lead to valuable production-ready solutions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What’s Next?&lt;/strong&gt;&lt;br&gt;
This R&amp;amp;D setup is now complete and validated. I’ll be integrating it into our production test automation pipeline soon.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LIVE API + Repository Link&lt;/strong&gt;&lt;br&gt;
☑️API Endpoint: &lt;a href="https://playing-with-api.onrender.com/docs/" rel="noopener noreferrer"&gt;https://playing-with-api.onrender.com/docs/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📂Github Repo: &lt;a href="https://github.com/Sisadia/playing-with-api" rel="noopener noreferrer"&gt;https://github.com/Sisadia/playing-with-api&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why I'm Sharing&lt;/strong&gt;&lt;br&gt;
This might seem like a small challenge, but it's a real-world pain point in test automation — and solving it with code gave me the flexibility to focus on testing logic rather than data cleanup.&lt;/p&gt;

&lt;p&gt;Happy testing! ✨&lt;/p&gt;

</description>
      <category>qa</category>
      <category>automationtesting</category>
      <category>apitesting</category>
      <category>testing</category>
    </item>
    <item>
      <title>Why Your API Call is Hitting Twice: Understanding Preflight &amp; XHR</title>
      <dc:creator>Sadia Islam</dc:creator>
      <pubDate>Thu, 26 Jun 2025 07:41:30 +0000</pubDate>
      <link>https://forem.com/sadia/why-your-api-call-is-hitting-twice-understanding-preflight-xhr-2g0k</link>
      <guid>https://forem.com/sadia/why-your-api-call-is-hitting-twice-understanding-preflight-xhr-2g0k</guid>
      <description>&lt;p&gt;I often notice in the Network tab of DevTools that the same API is being called twice. Even though it’s the same API, the types of requests are different — one is &lt;strong&gt;preflight&lt;/strong&gt;, and the other is &lt;strong&gt;xhr&lt;/strong&gt;. Curious about why this happens, I found out that this usually occurs due to &lt;strong&gt;CORS (Cross-Origin Resource Sharing)&lt;/strong&gt;. Let’s try to understand what these things are one by one.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is XHR?
&lt;/h2&gt;

&lt;p&gt;XHR stands for &lt;strong&gt;XMLHttpRequest&lt;/strong&gt;, which is the actual API call that sends the data request. This is the main API call where the client requests data from the server.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a Preflight Request?
&lt;/h2&gt;

&lt;p&gt;When an API call is made that isn’t considered simple, meaning it doesn't meet certain conditions, the browser first sends a small request called a preflight or permission check request. This is typically an &lt;strong&gt;OPTIONS request&lt;/strong&gt; that asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Will this API accept a request from this origin?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If the server responds with the appropriate &lt;strong&gt;Access-Control-Allow-* headers&lt;/strong&gt; indicating permission, saying “Yes, you can call me with those headers/credentials” — then the browser proceeds to send the actual &lt;strong&gt;xhr&lt;/strong&gt; call.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does it work?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;The browser first checks “Does this API call require a preflight?”&lt;/li&gt;
&lt;li&gt;If needed, it sends an OPTIONS (preflight) request first.&lt;/li&gt;
&lt;li&gt;If the server replies "Okay, go ahead", then the browser sends the XHR request.&lt;/li&gt;
&lt;li&gt;If the server denies permission, the XHR request is never sent — the browser blocks it.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  I believe this is important for QAs to know because:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;It helps them understand that this is not a bug.&lt;/li&gt;
&lt;li&gt;It aids in understanding security or permission checks: Preflight helps verify whether CORS permissions are set up correctly.&lt;/li&gt;
&lt;li&gt;It allows for testing headers: If QAs know how preflight works, they can check whether the server is correctly responding with headers like Access-Control-Allow-Origin, Access-Control-Allow-Headers, etc.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>testing</category>
      <category>learning</category>
      <category>api</category>
      <category>todayilearned</category>
    </item>
    <item>
      <title>The Common Struggle of Automation Testing: Programming Knowledge</title>
      <dc:creator>Sadia Islam</dc:creator>
      <pubDate>Tue, 04 Jun 2024 14:10:28 +0000</pubDate>
      <link>https://forem.com/sadia/the-common-struggle-of-automation-testing-programming-knowledge-3h50</link>
      <guid>https://forem.com/sadia/the-common-struggle-of-automation-testing-programming-knowledge-3h50</guid>
      <description>&lt;p&gt;You’ve probably been thinking about exploring the field of automation testing for a long time. You even started working on it according to your thoughts. But when you started working, you got into trouble. This problem has been faced by more or less everyone, including me, you, and us. So let’s share some of my limited knowledge about this familiar problem with you.&lt;/p&gt;

&lt;p&gt;As an automation tester, having a strong foundation in programming is very important. This strong foundation will help you design, write, and maintain automation scripts beautifully. You will need to know some Core Concepts of programming. These are:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Syntax and Familiarity with data types, variables, operators, and expressions.&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;2. Conditional statements (if-else).&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;3. Looping constructs (for, while).&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;4. Functions and Methods -Function Invocation, Parameters and Return Values, local and global scope&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;5. Arrays and Lists&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;6. Object-Oriented Programming (OOP) — Classes and Objects, Inheritance, Polymorphism, Encapsulation, Abstraction&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;7. Exception handling mechanisms (try-catch/finally blocks/Custom Exception).&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you have a good understanding of these Core Concepts, you can write automation scripts using any programming language. If you want, you can also take ideas about Advanced Concepts.&lt;/p&gt;

</description>
      <category>testing</category>
      <category>automation</category>
      <category>tester</category>
      <category>programming</category>
    </item>
    <item>
      <title>Host your Automation Allure Report on GitHub Pages with GitHub Actions.</title>
      <dc:creator>Sadia Islam</dc:creator>
      <pubDate>Sat, 27 May 2023 05:07:52 +0000</pubDate>
      <link>https://forem.com/sadia/host-your-automation-allure-report-on-github-pages-with-github-actions-56a</link>
      <guid>https://forem.com/sadia/host-your-automation-allure-report-on-github-pages-with-github-actions-56a</guid>
      <description>&lt;p&gt;We all have heard of or used Allure Report in our day-to-day life. Additionally, GitHub Actions and GitHub Pages are also commonly used by many people in their daily lives. Will integrate all of them and learn something new. First of all, let's recap what these three are.&lt;/p&gt;

&lt;h2&gt;
  
  
  Allure Report
&lt;/h2&gt;

&lt;p&gt;An Allure report is an open-source framework designed to create interactive and visually appealing test reports. These reports are generated automatically by test automation frameworks such as Selenium, Appium, and TestNG.&lt;/p&gt;

&lt;h2&gt;
  
  
  GitHub Pages
&lt;/h2&gt;

&lt;p&gt;GitHub Pages is a static site hosting service offered by GitHub that allows developers to publish web content directly from a GitHub repository. It takes HTML, CSS, and JavaScript files.&lt;/p&gt;

&lt;h2&gt;
  
  
  GitHub Actions
&lt;/h2&gt;

&lt;p&gt;GitHub Actions is a platform that allows developers to automate software workflows related to building, testing, and deploying their code. It can be used to automate the process of generating and publishing Allure reports on GitHub Pages.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;In this document, you will learn how to host your automation Allure report on GitHub Pages using GitHub Actions.&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;When using GitHub Pages, you receive a subdomain in the format of &lt;code&gt;github.io&lt;/code&gt; for hosting your website. In order to host your site, the first requirement is to have a GitHub account and a repository containing the automation code to execute the test cases. Your site will be named as &lt;code&gt;&amp;lt;username&amp;gt;.github.io/&amp;lt;repository name&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It's important to note that the repository needs to be public in order to host a site with GitHub Pages.&lt;/p&gt;

&lt;p&gt;Now, let's talk about how it can help us. As an automation tester, we know how frustrating it is to share our daily progress reports with management. Usually, we use tools like Extent Report or Allure Report and send these reports by email to show how our automation work is going, whether it's happening every day or every week.&lt;/p&gt;

&lt;p&gt;But there's a problem with using Allure Report. We have to send a whole folder called "allure-results" and run a command to see it, which is a lot of extra work. But what if we didn't have to go through all that trouble? We can use GitHub Pages instead. We can put our automation reports there and just give management a link. So whenever they want to see our latest progress, they can easily click on the link and check it out. Isn't that amazing?&lt;/p&gt;

&lt;p&gt;Now, let's get started and explore it further.&lt;/p&gt;

&lt;p&gt;In this demonstration, I will present a project that utilizes the following technical stack along with the use of GitHub Actions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdhm5j3owru4hb62j9wbq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdhm5j3owru4hb62j9wbq.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, let's take a look at the entire process step by step.&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Step 1:&lt;/strong&gt;
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Open up a IDE of your choice and setup a Maven Project.&lt;/li&gt;
&lt;li&gt;Add all the required dependencies as mentioned above in your pom.xml file.&lt;/li&gt;
&lt;li&gt;Write you tests in a Java Class.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1o01escx2g8hxgk14vv5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1o01escx2g8hxgk14vv5.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Run your test file.&lt;/p&gt;

&lt;p&gt;After successfully running your test, you will see a folder named allure-results.&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Step 2:&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;After you finish writing your code, you should upload it to GitHub. If you don't have a GitHub account, you need to create one first. Once you have an account, create a new repository and then upload your code to GitHub.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs8u2if2eazx88albytym.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs8u2if2eazx88albytym.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Step 3:&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;1.Go to Action Tab. You have two options: either create a workflow using the suggested one, or set up your own workflow. Since you're using the Maven build tool, if you choose the suggested option, make sure to select Java with Maven.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuli8ioutm2jdabkjzpbg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuli8ioutm2jdabkjzpbg.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.You can choose to click on the setup workflow either by yourself or using Java with Maven. Change the file name to whatever you want (I changed it to ci.yml) and copy and paste the provided code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsppict8ulf1t6lka3gqv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsppict8ulf1t6lka3gqv.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you see above what we are doing is whenever there is a new push or Pull request to main branch this workflow will get execute. In the workflow we are setting up JDK 11 which will run on ubuntu and then execute our test script with the help of maven.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ensure that the branch you are using matches the one where you uploaded your code.&lt;/strong&gt; I uploaded my code to the main branch, so the displayed value is "main." If the branches don't match, it won't function properly and the build will fail.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiu2qew2li653jvb5a1tx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiu2qew2li653jvb5a1tx.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Once you've pasted the code, commit the changes. Then, navigate to the action tab where you will find the workflow you created. You'll notice that the workflow is set to run automatically. Once it finishes running, you will receive an error message. If you select the workflow with the error, you will be able to view the error message or information it is displaying.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffulmc8sdmvhw9adakmhb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffulmc8sdmvhw9adakmhb.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3kqa43bluiaat86qhrq2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3kqa43bluiaat86qhrq2.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Okay, How can I resolve this problem?&lt;/p&gt;

&lt;p&gt;Navigate to the Repository Settings, Action → General → Check Read and Write Permissions option, and save the changes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcvigzdjs9cjm0fq17eup.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcvigzdjs9cjm0fq17eup.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc3tb3p9k6kfpj9djvx44.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc3tb3p9k6kfpj9djvx44.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.Next, navigate back to the Action tab and select the workflow. Then, click on it to rerun the job that previously failed. You will be able to observe the build process completing successfully.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff7mmi66xeazpbgdqkd41.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff7mmi66xeazpbgdqkd41.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6058dswjxfkxzykp4g37.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6058dswjxfkxzykp4g37.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.Now, when you open the code tab of your repository, you will find two branches. Initially, there was only one branch. The second branch is for the GitHub pages of the report, where it stores the report and its history. To proceed further, go to the settings of your repository and then click on "Pages." Choose the gh-pages branch and save your selection by clicking on the save button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ye49aya00nlc7inwbtj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ye49aya00nlc7inwbtj.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.If you go to the action tab, you will find that the "pages build and deployment" workflow is currently running. Once the deployment is successful, click on the workflow, and you will find the link to your GitHub pages where the allure report is available. By clicking on that link, you will be able to view the report.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsleuxl7htdkmmelbvqcj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsleuxl7htdkmmelbvqcj.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fibho9b96fzgyqk5uuik0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fibho9b96fzgyqk5uuik0.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnchfkemy2er6ljcwns2x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnchfkemy2er6ljcwns2x.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you now add test cases and push the new code to your repository, after the workflow finishes running, you will be able to see the updated report at the same link.&lt;/p&gt;

&lt;p&gt;Repository Link: &lt;a href="https://github.com/SMShoron/allure-report-gh-page" rel="noopener noreferrer"&gt;https://github.com/SMShoron/allure-report-gh-page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="//t.ly/8be2o"&gt;ci.yml code&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading this and if you find it useful please Like and Share it.&lt;/p&gt;

&lt;p&gt;Happy learning 😊&lt;/p&gt;

&lt;p&gt;You can connect to me on &lt;a href="https://www.linkedin.com/in/sisadia/" rel="noopener noreferrer"&gt;&lt;em&gt;LinkedIn&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>githubactions</category>
      <category>githubpage</category>
      <category>automation</category>
      <category>testing</category>
    </item>
  </channel>
</rss>
