<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Nurdan Turan on Medium]]></title>
        <description><![CDATA[Stories by Nurdan Turan on Medium]]></description>
        <link>https://medium.com/@nurdan-turan?source=rss-b42cf830188------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*Er_fFoh6n5D38ywIj2VriQ.jpeg</url>
            <title>Stories by Nurdan Turan on Medium</title>
            <link>https://medium.com/@nurdan-turan?source=rss-b42cf830188------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 14 Nov 2026 22:48:58 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@nurdan-turan/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Top 5 Most-Used Deployment Strategies and Suitable Automation Test Types]]></title>
            <link>https://medium.com/@nurdan-turan/most-used-deployment-strategies-and-suitable-automation-test-types-170317bdce55?source=rss-b42cf830188------2</link>
            <guid isPermaLink="false">https://medium.com/p/170317bdce55</guid>
            <category><![CDATA[canary-deployments]]></category>
            <category><![CDATA[a-b-testing]]></category>
            <category><![CDATA[automation-testing]]></category>
            <category><![CDATA[deployment-model]]></category>
            <category><![CDATA[blue-green-deployment]]></category>
            <dc:creator><![CDATA[Nurdan Turan]]></dc:creator>
            <pubDate>Tue, 05 Nov 2024 06:29:41 GMT</pubDate>
            <atom:updated>2024-11-16T09:52:45.308Z</atom:updated>
            <content:encoded><![CDATA[<p>Every day, every hour, every minute we write hundreds of lines of code and implement new features in the production environment to bring them to users. But how do we share these features with users, and with which strategy? <strong>Is it simply by refreshing the app to access new features, or by gradually rolling out sections of the app?..</strong></p><p>These choices depend on the company’s business processes, the type of the development, whether critical data is involved, risk management and infrastructure options. All of them has led to the development of different deployment strategies.</p><p>Actually, every day, we use <strong>CI/CD</strong> tools within a small cycle to deploy our developments to the production environment. Then, we conduct environment-specific (feature-branch or stage or preprod) tests.</p><p>If everything goes well, we monitor our applications and follow our audit logs. But what if there’s an issue in the production environment?<br><strong>Rollback or hot-fix… Which one we choose?</strong></p><p>Downtime in production = Amount of <strong>quality</strong> lost</p><p>So what if there’s an issue and we can’t roll back? What if all users are affected, or if we lose critical data? What if users dislike the new feature we introduced?<strong> Is this a scenario we would want?</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pIzVmPdHYvHVER92E1rzhQ.png" /><figcaption>Deployment CI/CD Progress</figcaption></figure><p>Why are there so many deployment strategies, and are they really necessary?.. Let’s take a deeper look at the main reasons behind them</p><ul><li>For some applications, <strong>downtime is unacceptable </strong>(financial transaction platforms), so strategies that provide seamless updates are preferred.</li><li>In competitive markets, quickly delivering new features to users is crucial.</li><li>For mission-critical applications, gradual or controlled deployment strategies are used to <strong>minimize</strong> risks a new version may introduce.</li><li>The application’s architecture determines which strategies are more suitable.</li><li>Different hosting environments require different deployment methods (e.g., cloud, on-premises, or hybrid environments).</li><li>Strategies are adjusted to ensure no downtime during peak traffic times.</li><li>Some strategies require more resources ( Blue-Green deployment requires two full environments).</li><li>Strategies like Canary and A/B testing are used to gather real user feedback (<strong>production environment testing</strong>).</li><li>To measure the impact of new features and detect potential issues early on (step-by-step <strong>%1</strong> release).</li><li>Strategies have been developed to quickly revert to the previous version when issues are detected (Fast Rollback).</li><li>Deploying new versions without negatively impacting user experience (minimizing downtime or data loss).</li><li>Automation and Flexible CI/CD strategies.</li><li>Docker and Kubernetes make it easier new deployment approaches (some containers st.).</li></ul><p><strong>How Many Deployment Strategies Are There and How to Implement Them Step by Step?</strong></p><ul><li><strong>Big-Bang Deployment</strong></li><li><strong>Rolling Deployment</strong></li><li><strong>Blue-Green Deployment</strong></li><li><strong>Canary Deployment</strong></li><li><strong>A/B Testing Deployment</strong></li></ul><h3><strong>1. Big-Bang Deployment</strong></h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*K9eg6Mco8lPOc2V6mxlB-g.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/968/1*IlDN0w_ynHpVrXHvQ9vJug.png" /></figure><p><strong>Downtime:</strong> There is downtime because the application is completely stopped.<br><strong>Use Cases:</strong> Suitable for small applications or situations where downtime is tolerable.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*swXLHuv_pb1LWiokX5OxeA.png" /></figure><h3><strong>2. Rolling Update Deployment</strong></h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*zuinhdESmrPXHICvCl8UTA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gg_IEksnOchlZhVaDwqe-Q.png" /></figure><ul><li><strong>Zero Downtime:</strong> There is no downtime for users.</li><li><strong>Gradual Update:</strong> Updates are applied gradually.</li><li><strong>Risk Management:</strong> Errors only affect the updated instances.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-2Hb-xx688gqi2_lo4-y3g.png" /></figure><h3><strong>3. Blue-Green Deployment</strong></h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Z1uTGAUV0d4UA4hx1HewaA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wOISx6Um_SRoadpSIJPVBA.png" /></figure><ul><li><strong>Zero Downtime:</strong> Users do not <strong>notice</strong> the transition.</li><li><strong>Quick Rollback:</strong> If issues arise, you can redirect traffic back to the Blue environment.</li><li><strong>Resource Usage:</strong> Requires <strong>more resources</strong> as two complete environments are needed.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Su36ezpfXysG6YoXNHm4AQ.png" /></figure><h3><strong>4. Canary Deployment</strong></h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*l4TFEjNWLSjBtuNEKitrwg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_ZOR2i8S-OhpL_giT1OZXQ.png" /></figure><ul><li><strong>Risk Mitigation:</strong> The impact of potential issues is minimized.</li><li><strong>Real User Testing:</strong> The new version is tested with real users.</li><li><strong>Flexibility:</strong> The deployment speed and scope are controllable.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*NGDFPrHNHAarmWpv-WUZqg.png" /></figure><h4><strong>5. A/B Testing Deployment</strong></h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*r8rBEtueQPJ5_mUn3Ko_pw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*rLNiIW-vwRHCKfb6ymN-Xg.png" /></figure><p><strong>A/B Testing Tools &amp; Analytics:</strong> Monitoring user reactions and measures feature performance. Data is everything.</p><p><strong>Here are some useful tips for tests, deployments, and business features:</strong></p><ul><li>Understand the work and requirements well, and c<strong><em>hoosing the right strategy </em></strong>will show itself.</li><li>Frequently downtimes can make the application seem <strong>low quality.</strong></li><li>Testing customized to the requirements can save time.</li><li>Not every strategy works for every business.</li><li>If there’s critical data and processes in production, downtime can be a big problem.</li><li>For managing risks, follow a step-by-step process and make sure to do environment-based testing.</li><li>We can give users the best experience with strong data handling and monitoring.</li></ul><p>Happy testing and deployments…</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=170317bdce55" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Performance Testing gRPC Services ( Guide) with Code Examples]]></title>
            <link>https://medium.com/@nurdan-turan/performance-testing-grpc-services-guide-with-code-examples-24c69f72c4aa?source=rss-b42cf830188------2</link>
            <guid isPermaLink="false">https://medium.com/p/24c69f72c4aa</guid>
            <category><![CDATA[performance]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[grpc-client]]></category>
            <dc:creator><![CDATA[Nurdan Turan]]></dc:creator>
            <pubDate>Fri, 08 Sep 2023 07:21:44 GMT</pubDate>
            <atom:updated>2023-09-08T07:26:20.147Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ylmfuwWLe_dHPzwNZL8cDw.png" /></figure><p><strong>gRPC</strong> is a high-performance, language-agnostic remote procedure call (RPC) framework developed by Google. It’s designed for efficient communication between microservices and is based on the HTTP/2 protocol. While gRPC offers impressive performance out of the box, it’s essential to conduct performance testing to ensure your services can handle real-world loads effectively. In this comprehensive guide, we’ll explore the importance of performance testing for gRPC services and provide code examples and best practices to help you get started.</p><h4><strong>Setting Up a gRPC Service for Performance Testing</strong></h4><p>Before we dive into performance testing, let’s set up a simple gRPC service and client for demonstration purposes. We’ll use Python and the gRPC library for this example.</p><h4>Installing gRPC for Python</h4><p>You can install the gRPC Python library using pip:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/c7971f44a53ba13911296846988b5008/href">https://medium.com/media/c7971f44a53ba13911296846988b5008/href</a></iframe><p><strong>Creating a Simple gRPC Service</strong></p><p>Let’s start by defining the service interface in a Protocol Buffers (protobuf) file:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/f637e7d7e895b0cdd9a4ba2b90293105/href">https://medium.com/media/f637e7d7e895b0cdd9a4ba2b90293105/href</a></iframe><p>Now, generate the Python code from the protobuf file:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/ac5a38c7a4053a5d1887813081f6160a/href">https://medium.com/media/ac5a38c7a4053a5d1887813081f6160a/href</a></iframe><p><strong>Implementing the gRPC Service</strong></p><p>Let’s implement the gRPC server:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/7a6ac10e55dec5f6c12dee3f150035ee/href">https://medium.com/media/7a6ac10e55dec5f6c12dee3f150035ee/href</a></iframe><p><strong>Creating a gRPC Client</strong></p><p>Now, let’s create a simple gRPC client to interact with the service:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/b0cb55db2b25d2fa578f92fe12bd5eb6/href">https://medium.com/media/b0cb55db2b25d2fa578f92fe12bd5eb6/href</a></iframe><h4><strong>Conducting Performance Testing</strong></h4><p>Now that we have our gRPC service and client set up, let’s conduct performance testing using two popular tools: Locust and Gatling.</p><p><strong>Performance Testing with Locust</strong></p><p><strong>Installing Locust</strong></p><p>You can install Locust via pip:</p><pre>pip install locust</pre><p><strong>Writing a Locust Test Script</strong></p><p>Here’s a Locust test script that simulates multiple users making gRPC requests:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/d134ba0c490af93434c618cb2b8b942c/href">https://medium.com/media/d134ba0c490af93434c618cb2b8b942c/href</a></iframe><p><strong>Running the Locust Performance Test</strong></p><p>You can run the Locust test with the following command:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/96cbf3b37fc0ed53985803963978936f/href">https://medium.com/media/96cbf3b37fc0ed53985803963978936f/href</a></iframe><p>Locust will start a web-based UI on `<a href="http://localhost:8089`">http://localhost:8089`</a>, allowing you to configure and run your performance test.</p><h4>Performance Testing with Gatling</h4><p>You can download Gatling from the official website (<a href="https://gatling.io/download/">https://gatling.io/download/</a>) and follow the installation instructions.</p><p><strong>Writing a Gatling Simulation</strong></p><p>Here’s a Gatling simulation script for testing gRPC services:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/e3a3135954645ba1e7a71cb7524a6d81/href">https://medium.com/media/e3a3135954645ba1e7a71cb7524a6d81/href</a></iframe><p><strong>Running the Gatling Performance Test</strong></p><p>You can run the Gatling test using the following command:</p><pre>./gatling.sh -s CalculatorSimulation</pre><p>Gatling will generate detailed reports and metrics to help you analyze the performance of your gRPC service.</p><h3>Conclusion</h3><p>Performance testing is essential to ensure your gRPC services can meet the demands of real-world traffic. In this comprehensive guide, we set up a simple gRPC service and client and performed performance tests using Locust and Gatling.</p><p>Happy Load Testing 🔖</p><h3><strong>References</strong></h3><ul><li><a href="https://github.com/mostafa/performance-testing-grpc-services?source=post_page-----3b2aa34c2a02--------------------------------">GitHub - mostafa/performance-testing-grpc-services: Performance Testing gRPC Services</a></li><li><a href="https://grpc.io/docs/languages/python/quickstart/">Quick start</a></li><li><a href="https://codelabs.developers.google.com/codelabs/cloud-grpc-java#2">Building a gRPC service with Java | Google Codelabs</a></li></ul><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FWB37L7PjI5k%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DWB37L7PjI5k&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FWB37L7PjI5k%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/e9db6801a7d5110fc7b53942b66be9ac/href">https://medium.com/media/e9db6801a7d5110fc7b53942b66be9ac/href</a></iframe><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=24c69f72c4aa" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Loving Jules Verne… Jules Verne made me an engineer. ]]></title>
            <link>https://medium.com/@nurdan-turan/loving-jules-verne-7136ef74948c?source=rss-b42cf830188------2</link>
            <guid isPermaLink="false">https://medium.com/p/7136ef74948c</guid>
            <category><![CDATA[diverse-experience]]></category>
            <category><![CDATA[passion]]></category>
            <category><![CDATA[engineering]]></category>
            <category><![CDATA[jules-verne]]></category>
            <category><![CDATA[teamwork]]></category>
            <dc:creator><![CDATA[Nurdan Turan]]></dc:creator>
            <pubDate>Mon, 07 Aug 2023 06:30:53 GMT</pubDate>
            <atom:updated>2023-08-07T06:53:29.229Z</atom:updated>
            <content:encoded><![CDATA[<blockquote>Hello, in this blog post, I will tell you how Jules Verne’s works and imagination can be a source of inspiration for becoming an engineer.</blockquote><p>I have been looking at Jules Verne’s magnificent world with admiration since my childhood. His books, filled with adventurous and fantastical worlds and extraordinary inventions, have captivated me. But Jules Verne’s influence not only nourished my imagination but also played a significant role in shaping my career as an engineer.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/0*lA_3BzLzeC8G8eKU" /></figure><blockquote>Jules Verne is one of the famous French writers of the 19th century. His works are considered pioneers of science fiction and adventure genres and are still popular today. So, how can this famous author make me into an engineer?</blockquote><p>Some of Jules Verne’s most famous works present a magnificent blend of imagination and technological discoveries. “<strong>Twenty Thousand Leagues Under the Sea,” “Journey to the Center of the Earth,” </strong>and<strong> “Journey to the Moon”</strong> are among these books, narrating fantastic adventures that push the boundaries of technology during that era. The advanced technologies featured in these works laid the foundation for many inventions and devices that did not yet exist at that time. Jules Verne’s works skillfully combine science fiction and adventure genres, transporting readers to different worlds. The inventions and technologies depicted in his books were incredibly forward-thinking for their time and surpassed the imagination of that era. For instance, the submarine Nautilus featured in <strong>“Journey to the Center of the Earth”</strong> is considered the first submarine used for underwater travel and was a futuristic invention ahead of its time.</p><figure><img alt="Twenty Thousand Leagues Under the Sea (1870)" src="https://cdn-images-1.medium.com/max/1024/1*5eGaLdjKdzdTGRoBFQeQ4g.gif" /><figcaption>Twenty Thousand Leagues Under the Sea (1870)</figcaption></figure><p>As I read Jules Verne’s books, instead of pushing my imagination to its limits, I began to contemplate how I could work in the real world. My interest in the field of engineering was further strengthened by the details and scientific approaches found in his works. Especially in books like <strong>“Around the World in Eighty Days”</strong> and “<strong>From the Earth to the Moon”</strong> various machines, vehicles, and mechanisms described became a source of inspiration for me. Verne’s works emphasize the importance of science and its contributions to human development. Engineering is closely intertwined with science, and his books excite those interested in engineering. Inventions, discoveries, and challenging technical problems capture the attention of engineering professionals and encourage them to come up with new solutions.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/900/1*2WnowP0JGSuEVffp8UuznA.jpeg" /><figcaption><em>Jules Verne’s Nautilus Submarine, Artwork</em> is a photograph by Richard Bizley</figcaption></figure><p>During my engineering education, Jules Verne’s books inspired me to create realistic and innovative projects based on scientific principles. His vision and creativity encouraged me to tackle more complex problems instead of settling for ordinary solutions.<strong><em> At the same time, they strengthened my belief that I could overcome any challenge.</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/864/1*9GaH6j_UJr_aMPHGE7NvqA.jpeg" /></figure><p>Jules Verne’s works have been a source of inspiration for many individuals working in the field of engineering. His imaginative worlds help us envision what could be achieved in the real world. By reading his works, I have decided to pursue a more creative and innovative path in my engineering career. Jules Verne’s characters take bold steps to explore the world and push the boundaries. <strong>Similarly, engineers in the real world overcome challenges and undertake significant projects and discoveries. Verne’s works inspire engineers to dream big and work towards turning those dreams into reality.</strong></p><p>Jules Verne not only drew me into the realms of fantasy but also had a profound impact on nurturing my passion for engineering.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*eguIp6tmU624EOf9oQHU2Q.jpeg" /></figure><p>In Verne’s books, characters overcoming challenges by working together emphasizes the importance of teamwork. Engineers, too, are aware of the power of teamwork and collaborate for successful projects and technologies.</p><p>In<strong> “Twenty Thousand Leagues Under the Sea,” </strong>the main characters Professor Aronnax, Ned Land, and Conseil embark on a journey aboard the submarine Nautilus under the leadership of Captain Nemo. The crew of Captain Nemo consists of sailors and scientists with diverse expertise. Each character contributes to the functioning of the submarine and collaborates to overcome challenges.</p><p>In <strong>“Around the World in Eighty Days”</strong> the protagonist Phileas Fogg and his loyal servant Passepartout must complete a journey around the world in 80 days. Throughout their journey, they encounter various challenges in different countries. Passepartout’s witty personality and Phileas Fogg’s logical thinking style make them a strong team and lead them to success in their journey.</p><p>In <strong>“From the Earth to the Moon”</strong> members of the American Gun Club plan a manned journey to the Moon. The project’s success relies on the members’ abilities to work together as a team. Each member takes on tasks in their respective areas of expertise, working together to achieve their common goal.</p><p>These examples from Jules Verne’s works illustrate how teamwork and collaboration play essential roles in overcoming obstacles and achieving success. Just like the characters in the novels, engineers understand the significance of teamwork in developing projects and technologies, and they actively engage in collaboration for successful outcomes.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/864/1*z54CBTJxyWSwBixXHLWGKw.png" /></figure><p>In the novel “Robur the Conqueror,” the main characters encounter the mysterious and charismatic Robur, who pilots the flying machine “Albatros.” Robur’s crew forms a team under his leadership and manages the Albatros. Teamwork plays a vital role in safely navigating the flying machine and undertaking a world tour.</p><p>In real life, complex projects also require teamwork and collaboration to achieve significant goals. Verne’s works serve as a reminder to readers of the power of teamwork, emphasizing the importance of working together and complementing each other’s skills to achieve greater success.</p><p>The fantastic worlds where imagination, technology, and exploration converge in Verne’s novels remind engineers of their potential to change the world and lead them to new and exciting projects. By reading Verne’s books, engineering enthusiasts can find inspiration to think bigger, push boundaries, and make positive contributions to the world.</p><p>I believe that through reading Verne’s works, engineering enthusiasts will be inspired to think bigger, challenge the limits, and make positive contributions to the world.</p><p>Enjoyable reading with Jules Verne Books 🫶🏻 ☕️</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7136ef74948c" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Mastering in Performance Testing (Stress, Spike, Load, Soak) ‍ ☕️]]></title>
            <link>https://medium.com/@nurdan-turan/mastering-in-performance-testing-stress-spike-load-soak-%EF%B8%8F-916878f0ee22?source=rss-b42cf830188------2</link>
            <guid isPermaLink="false">https://medium.com/p/916878f0ee22</guid>
            <category><![CDATA[spike-testing]]></category>
            <category><![CDATA[load-testing]]></category>
            <category><![CDATA[performance-testing]]></category>
            <category><![CDATA[test-pattern]]></category>
            <category><![CDATA[soak-test]]></category>
            <dc:creator><![CDATA[Nurdan Turan]]></dc:creator>
            <pubDate>Mon, 31 Jul 2023 05:50:28 GMT</pubDate>
            <atom:updated>2023-07-31T08:51:48.650Z</atom:updated>
            <content:encoded><![CDATA[<p>In this article, we will explore the importance and types of performance testing, as well as how to properly conduct these tests.</p><p><strong>Performance testing</strong> plays a critical role in ensuring the stability, scalability, and reliability of applications in the field of software development. Therefore, it is essential to emphasize the significance of performance testing.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/1*MMX1cc8OyZ6ddbNpVMwNSg.gif" /></figure><p>Users now expect fast, seamless, and impressive experiences rather than just functional applications. This is precisely where performance testing comes into play. Performance testing is a vital process that evaluates, analyzes, and improves how efficiently a software, application, or system operates.</p><p>Get ready to learn how to prepare performance tests that will elevate your applications to new heights.</p><h3>How to Design Efficient Load Tests?</h3><ul><li><strong>Test Objectives: </strong>Define the specific purposes and objectives of your load test.</li><li><strong>Test Scenarios: </strong>Identify the scenarios you want to simulate, such as high user load, API performance, or stress testing.</li><li><strong>Test Data Management: </strong>Efficiently use test data to provide realistic and consistent load test scenarios.</li><li><strong>Scalability and Concurrency: </strong>Optimize your load tests for high concurrency and scalability.</li><li><strong>Test Environment Isolation:</strong> Create isolated and controlled test environments to prevent interactions with production systems.</li><li><strong>Virtual Users and Ramp-Up:</strong> Determine the number of virtual users and the ramp-up strategy for your load tests.</li><li><strong>Response Verification: </strong>Implement response verification to ensure the accuracy of the application’s behavior.</li><li><strong>Identifying Performance Issues:</strong> Learn techniques for identifying and diagnosing performance issues during load testing.</li><li><strong>Logging and Error Handling:</strong> Implement logging and error handling mechanisms to capture relevant information during tests.</li><li><strong>Test Configuration:</strong> Configure advanced settings, including iterations, duration, and test environment variables.</li><li><strong>Load Testing APIs:</strong> Explore techniques for effectively loading test APIs, including rate limiting, authentication, and data-driven tests.</li><li><strong>Integration with CI/CD:</strong> Integrate performance tools into CI/CD pipelines for seamless performance testing as part of your development workflow.</li><li><strong>Real-Time Monitoring:</strong> Visualize test measurements and identify performance bottlenecks with real-time monitoring capabilities.</li><li><strong>Performance Thresholds:</strong> Define performance thresholds and analyze test results against these criteria.</li><li><strong>Exporting Results:</strong> Learn how to export and share test results for further analysis.</li></ul><h3>Types of Performance Test Patterns</h3><ol><li><strong>Fixed Ramp Model (Linear Load Model):</strong> In this model, the load on the system is gradually increased over a specific period of time. The number of users or transactions starts from a low value and steadily increases at a constant rate until it reaches the maximum load. This model is useful for identifying performance issues that arise only when the load increases over time.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Ll-H8gWR2kAeZMixN7CwbA.png" /></figure><p><strong>2. Constant Load Model:</strong> This model involves applying a constant load to the system for a specific duration. It helps to understand the system’s behavior under a steady load.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*YW76TOkxHIP3Lj1KUgB_aQ.png" /></figure><p><strong>3. Spike Load Model: </strong>This model involves a sudden increase or decrease in the load generated by a large number of users. It helps to understand how the system behaves during abrupt load changes.</p><p><strong>4. Stress Load Model: </strong>This model involves testing the system under extreme load conditions. It helps determine the system’s maximum capacity and how it recovers from failures.</p><p><strong>5. Soak Load Model (Endurance Testing): </strong>This model includes applying a moderate load over an extended period. It helps identify memory leaks and performance degradation over time.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/774/1*kiogl_b-a2T9n2l_0Cktuw.png" /></figure><h3>Performance Testing Building Blocks</h3><p>While setting up performance testing, several hindering factors may arise, such as:</p><p><strong>Test Environment Issues: </strong>A suitable test environment is crucial for conducting performance tests. However, problems may occur when the test environment is insufficient, lacking the necessary hardware, software, or network resources.</p><p><strong>Test Data Accessibility:</strong> Realistic and representative data is essential for performance testing, including user profiles, database records, files, or other data necessary for the system to function correctly. Difficulties in accessing this data can impact the test’s realism.</p><p><strong>Dependencies and Integration Challenges: </strong>Systems may interact with other systems, services, or components. During performance testing, providing and managing resources required by dependencies or integrations can be challenging.</p><p><strong>Test Scenario Definition:</strong> Accurate and comprehensive definition of performance test scenarios is vital. Errors, such as scenarios not accurately reflecting user interactions, workflows, or intensity levels, or neglecting important scenarios, can affect the effectiveness of performance testing.</p><p><strong>Test Planning and Coordination:</strong> Performance testing may require the participation of multiple teams or stakeholders. Factors like test planning, resource allocation, timing, and coordination can lead to challenges. Communication gaps or discrepancies can hinder the testing process.</p><p><strong>Long-Term Execution of Test Scenarios: </strong>Performance tests often run for a specific duration, generating a substantial load on the system. Successfully managing resources, timing, permissions, and other practical challenges is necessary for sustained long-term testing.</p><p><strong>Inability to Reproduce Issues:</strong> During performance testing, encountered problems or performance issues should be reproducible. However, sometimes issues may not be replicable or are difficult to recreate, hindering the identification and resolution of performance problems.<br>These hindering factors represent possible challenges one may encounter while conducting performance tests. Adequate planning, resource management, communication, and teamwork are essential to address these challenges effectively.<br>Performance testing strategy comprises the steps and approaches taken to accurately evaluate the performance of an application or system. Below, general <strong>performance testing strategy </strong>and<strong> “shift-left” performance testing strategy</strong> are briefly explained:</p><p><strong>Performance Testing Strategy:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xoxZFcDTXaCXz71Wdnv0PA.png" /></figure><blockquote><strong>The Shift-Left performance testing strategy may include:</strong></blockquote><p><strong>Code Review: </strong>Reviewing and optimizing code snippets critical for performance.</p><p><strong>Integration of Performance Test Tools: </strong>Integrating performance test tools into the development environment and running automated tests continuously.</p><p><strong>Realistic Representation of Test Data: </strong>Ensuring that test data used in the development environment closely resembles real production data.</p><p><strong>Frequent Performance Testing:</strong> Conducting performance tests regularly, especially when adding new features or making updates.</p><p><strong>Continuous Improvement for Performance Optimization: </strong>Regularly analyzing performance test results and making performance improvements.</p><p><em>The Shift-Left performance testing strategy</em> is an important approach to detecting performance issues early, providing quick feedback, and preventing costly fixes. This strategy involves making performance monitoring and improvement an integral part of the development process.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*R643Bj-_wzlXveGpM-kuEw.png" /><figcaption>Shift-Left Performance Testing</figcaption></figure><p>How to perform performance testing for both the backend and the frontend may require different approaches as each component has different testing requirements.</p><p>Here are the basic steps to follow when performing backend and frontend performance tests:</p><p><strong>Backend Performance Testing:<br></strong>To test the backend part of the application, you need to define various scenarios that can simulate specific functions of the application and high-usage situations. For instance, you can test critical functions such as database queries, API requests, and complex calculations.</p><pre>Prepare the test environment with the necessary backend infrastructure, such as servers, databases, and caching mechanisms.<br>Deploy the latest version of the backend application and ensure it is properly configured.</pre><p>To conduct performance tests, you need to set up the environment where the testing will take place. This environment can be a staging server, a test server, or a scalable cloud solution, depending on your application’s requirements and the scale of testing.</p><p>As for selecting a performance testing tool, you have several options available, such as <a href="https://jmeter.apache.org/"><strong>Apache JMeter</strong></a>, <a href="https://www.microfocus.com/en-us/portfolio/performance-engineering/overview"><strong>LoadRunner</strong></a> or <a href="https://k6.io/"><strong>k6</strong></a> Each of these tools can help you create test scenarios, execute load tests, and analyze performance metrics.</p><p>Additionally, you can use <strong>Grafana</strong> to create a custom dashboard where you can query and visualize data from multiple sources, including various backend endpoints. Grafana can help you gain insights into the performance of your application during load testing and monitor key metrics effectively.</p><p>The choice of the specific tool and environment will depend on your project requirements, the complexity of the application, and your team’s familiarity with the tools. Whichever tool you choose, make sure it aligns well with your testing objectives and provides the necessary features to effectively evaluate the backend performance of your application.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*b7y5VBDY9sJ9zp08vQaMww.png" /></figure><p><strong>Frontend Performance Testing:<br></strong>Frontend performance testing should include factors such as page load times, responsiveness of interactive elements, and overall user experience of web pages. Determine performance tests for different pages and scenarios to evaluate the frontend performance thoroughly.</p><p>Tools like <strong>WebPageTest, </strong><a href="https://developer.chrome.com/docs/lighthouse/overview/"><strong>Lighthouse</strong></a><strong>, and </strong><a href="https://developer.chrome.com/docs/devtools/"><strong>Chrome DevTools</strong></a><strong> </strong>are available for frontend performance testing. These tools are helpful in assessing page load times, identifying unoptimized resources, measuring render times, and evaluating user experience. When conducting frontend performance tests, it’s essential to simulate different devices and connection speeds. This way, you can understand how the web page performs across various platforms.</p><p>Based on the results of performance tests, identify areas that affect the webpage’s performance. For instance, you may discover optimization opportunities such as compressing unoptimized images, reducing file sizes, or utilizing browser caching. By addressing these optimizations, you can improve the frontend performance of the web page and enhance the user experience.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*jWOQGhpWj1qIVQLENMjh6w.png" /></figure><p>To improve frontend performance, you can utilize the identified optimization opportunities. Here are some common optimization techniques:</p><p><strong>Reduce File Sizes:</strong> Minimizing the size of images and other media files can significantly reduce page load times, resulting in a faster user experience. Image compression and optimization of other assets can be employed.</p><p><strong>Enable Caching: </strong>Implementing caching mechanisms allows web browsers to store certain resources locally, reducing the need for repeated downloads. This leads to quicker page loads for returning users.</p><p><strong>Asynchronous Loading: </strong>Employ asynchronous loading for non-essential resources like scripts and stylesheets. By loading these resources in the background, the main content can be displayed more rapidly to users.</p><p>Regularly repeating performance tests and adopting a <a href="https://en.wikipedia.org/wiki/Shift-left_testing#:~:text=Shift%2Dleft%20testing%20is%20an,software%20quality%2C%20and%20reduce%20costs."><strong>“shift-left”</strong></a> approach from the early stages of the development process helps in identifying performance issues early and addressing them more effectively. This way, you can provide a faster and more efficient experience for your users.</p><blockquote><strong><em>Happy Load Testing! 📌</em></strong></blockquote><h3>References</h3><ul><li><a href="https://www.blazemeter.com/blog/jmeter-ramp-up-period">JMeter Ramp-Up Period: The Ultimate Guide | BlazeMeter by Perforce</a></li><li><a href="https://www.geeksforgeeks.org/soak-testing/">Soak Testing - GeeksforGeeks</a></li><li><a href="https://k6.io/docs/test-types/load-test-types/">Understanding the Different Types of Load Tests: Goals and Recommendations</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=916878f0ee22" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[What did we experience about the GroupDeal Project Testing …?]]></title>
            <link>https://medium.com/trendyol-tech/what-did-we-experience-about-the-groupdeal-project-testing-8842b3e7b44e?source=rss-b42cf830188------2</link>
            <guid isPermaLink="false">https://medium.com/p/8842b3e7b44e</guid>
            <category><![CDATA[test-automation]]></category>
            <category><![CDATA[api-testing]]></category>
            <category><![CDATA[test-automation-strategy]]></category>
            <category><![CDATA[test-automation-tools]]></category>
            <dc:creator><![CDATA[Nurdan Turan]]></dc:creator>
            <pubDate>Tue, 27 Dec 2022 06:15:58 GMT</pubDate>
            <atom:updated>2022-12-27T06:15:58.027Z</atom:updated>
            <content:encoded><![CDATA[<h3>What did we experience about the GroupDeal Project Testing …?</h3><p>Hello everyone, ✋🏻 I will tell you about our ‘<strong>The Buy with Friends’</strong> project, which we recently launched, and the work we have done in the test area throughout this adventure.</p><p>First of all, Let’s look at what the ‘<strong>The Buy with Friends’</strong> project is…</p><p>The Buy with Friends feature is an application implemented on an online shopping platform for the first time in Turkey and allows customers to buy products with their friends at a discount.</p><p>For discounted products defined by sellers, customers will be able to both purchase the product at this price and share the product link with their friends through certain platforms. If the group reaches the targeted number of people within 24 hours, the discount will apply. Thanks to the Buy with Your Friends feature, we can purchase discounted products with our friends and have a pleasant shopping experience.</p><figure><img alt="A picture that shows flow of buy with friend" src="https://cdn-images-1.medium.com/max/1024/1*ZsvKatc7JQIzJAf8DOcGmg.png" /><figcaption>A picture that shows the flow of buying with friends</figcaption></figure><h4>What have we experienced in process management and what should we pay attention to?</h4><ol><li>First of all, the team should act in cooperation in such projects where time management is important</li><li>A test plan should be drawn up with the team for both UAT and automation tests</li><li>Before the development process, test environments (stage, prod, pre-prod, uat, etc.) should be prepared</li><li>Data should be updated, if any, definitions should be made</li><li>Test cases should be determined in Planning and Refinement meetings and noted in the Project Management Tool (exp: JIRA) used</li><li>Test data should be collected, if possible, it should be made dynamic (generate dynamic data)</li><li>Regular know-how share meetings should be held within the team</li><li>Root cause analysis of errors in test runs should be removed</li><li>Risk detection of the application should be done</li><li>Test Support Documentation should be prepared for the test activity with different teams and announced through common channels</li><li>Test reports should be shared and reviewed with the team</li><li>The cause of Flaky Test scenarios should be investigated</li><li>Test environments should be kept stable</li><li>The most important thing is to keep an open mind and take joint responsibility throughout the process</li></ol><h4>What work did we do for testing in the GroupDeal project?</h4><p>Being testable in the operation of a system or process is arguably one of the most important requirements. Analyzing the major requirements, making the developments, or preparing the environments, the purpose of all this is to prepare the system for a test run.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*P1e-KtaVbmgYOl-3yrS-lg.png" /><figcaption>Process Test Life Cycle</figcaption></figure><p>In our GroupDeal project, we paid attention to test-centered development and ran all tests in parallel with the development. We also ran each test snippet with the CI/CD implementation. The functional and non-functional tests we apply are as follows :</p><p><strong><em>Test Types for GroupDeal Project :</em></strong></p><p><em>Functional Testing</em></p><ul><li><em>Unit Test</em></li><li><em>Integration Test</em></li><li><em>Acceptance Test</em></li><li><em>Journey (Regression) Test</em></li><li>UI (User Interface) Testing</li><li><em>Test Scripts</em></li></ul><p><em>Non — Functional Testing</em></p><ul><li><em>Performance Test</em></li><li><em>Load Test</em></li></ul><blockquote><em>Now Let’s look at what these tests are and their contents :</em></blockquote><ol><li><strong><em>Unit Testing :</em></strong></li></ol><p>It is the smallest test unit where the verification and validation processes of each independent module are made. The developer who writes the code writes unit tests before development to test the smallest piece. Unit Test is a kind of White Box test. Because they are fast and easy to write, they provide a high level of test coverage. In this project, we wrote our unit tests using xUnit xUnit is a free, open-source testing tool that .NET developers use to write tests for their applications.</p><pre>public void it_should_create_deal()<br>    {<br>        // given<br>        var createDealCommand = _fixture.Create&lt;CreateDealDto&gt;();<br>        // when<br>        var dealAggregate = new DealAggregate(createDealCommand);<br>        // then<br>        dealAggregate.Status.Should().Be(Status.Created);<br>    }</pre><p><strong>2. <em>Integration</em> <em>Testing</em> :</strong></p><p>It is to ensure that all modules and units that we test independently are tested together. The aim is to minimize the interoperability of the integrated parts and the error rate in the increasingly complex system.</p><pre>public async Task it_should_insert_dealAggregate_when_version_is_zero()<br>    {<br>        // given<br>        var command = _fixture.Create&lt;CreateDealCommand&gt;();<br>        var aggregate = new DealAggregate(command);<br>        var repository = _context.GetRequiredService&lt;IDealRepository&gt;();<br>        // when<br>        await repository.Save(aggregate);<br>        // then<br>        var expectedAggregate = await repository.GetById(aggregate.Id);<br>        expectedAggregate.Should().NotBeNull();<br>        expectedAggregate!.Id.Should().Be(aggregate.Id);<br>    }</pre><p><strong><em>3. Acceptance Testing :</em></strong></p><p>It is the type of test for fault finding, in which we test the functionality of all functions in the system and consider all alternatives. Requirements are clearly stated. It helps us where the feature needs to reach. Therefore, Acceptance tests act as a guide and speed up the testing processes. It is also called Feature Test or API Acceptance Criteria.</p><p>Now let’s look at an example Acceptance Test Scenario :</p><pre>Given : The seller navigate to groupdeal page<br>When : The seller create a deal<br>And : Enters a valid product to start a campaign <br>Then : The system sends the succesful message</pre><p><strong><em>4. Journey Testing :</em></strong></p><p>It is the type of test where we test the newly developed features or check if there are any problems after the errors in the application are correct. It covers Business Test cases as it validates the entire flow. New enhancements help us control the end-to-end (E2E) application before it goes live. It also makes sure that new enhancements don’t break anything else in the app. A stable test environment is important because all components and integrations in the system are activated and tested.</p><pre>// DealCreateTest.java<br> <br>package tests;<br>import base.DealBaseTest;<br>import org.testng.annotations.Test;<br>import static org.testng.Assert.*;<br> <br>@Test()<br>@Step()<br>public void it_can_not_be_created_deal_id_when_final_price_is_higher_than_expected_maximum_price() throws Exception {<br>    //Given : Requested for Create deal id<br>    var createdDeal =  createdDealId( &quot;Test&quot;, &quot;12345&quot;, ...);<br><br>    //When : get deal response with id<br>    var dealResponse = getResponseWithDealId(createdDeal.getDealId());<br><br>    // Then : Expected null dealId<br>    assertThat(dealResponse.getId(), Matchers.nullValue());<br>}</pre><p><strong><em>5. Test Scripts :</em></strong></p><p>Tests we write to help us automate manual testing and repetitive tasks.<br>Example: Group order creation, Order Cancellation, Campaign Define or Termination, etc.</p><p>6. <strong><em>UI (User Interface) Testing :</em></strong></p><p>We chose to use Cypress to write tests of our campaign identification screens. Cypress has a simple and understandable syntax. It has a high community rate and a wide range of documentation. Also, Cypress uses a real browser when running tests. End-to-end tests run fast and are secure and stable.<br>Cypress can also be used for unit and integration testing.</p><pre>checkFilterVisible() {<br>        this.elements.containerFilterActions().should(&#39;be.visible&#39;);<br>        this.elements.inputProductName().should(&#39;be.visible&#39;);<br>        this.elements.inputProductName().click();<br>        this.elements.inputProductName().type(&quot;Oyun Kolu&quot;);<br>        this.elements.inputBarcode().should(&#39;be.visible&#39;);<br>        this.elements.inputBarcode().click();<br>        this.elements.inputBarcode().type(&quot;12345&quot;);<br>}</pre><p><strong><em>7. Performance Testing :</em></strong></p><p>After each application is released, we perform performance tests to measure how much the improvements made affect the system. The results are compared with the previous harness report. Response time and error rates are reviewed and shared with the team.</p><p><strong><em>8. Load Testing :</em></strong></p><p>It is the type of test we do to see how the system behaves under a certain load and to aim for bottlenecks in the application.</p><p><strong><em>9. SonarQube — Code Quality :</em></strong></p><p>The Sonarqube application, helped us do static code analysis before sending the source code to the production environment.<br>Test coverage rates were determined through the quality gate.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*W8xuDXZM8DI-_4z8KNzrLg.png" /><figcaption>Test coverage values from Sonarqube.</figcaption></figure><h4>Programming Languages &amp; Frameworks We Use</h4><p>The programming languages and development tools we use are as follows.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*u0x388jeUdr6ZLo7d8rgag.png" /><figcaption>Tools and Languages</figcaption></figure><h4>How to API Test Deployment Coverage?</h4><p>To understand how tests work, it is also necessary to understand the development environment. We tried to automate everything manageable in this process by establishing a CI/CD system. Now let’s see what we are doing in our deployment processes…</p><ul><li>After the developed works are built and committed, unit tests are run to provide Code coverage</li><li>Acceptance or Integration tests are run</li><li>When it comes to the Quality step in the Pipeline for static code analysis, quality rules are passed with the Sonarqube application.</li><li>If there is any weakness in the Security gates step, the findings are shared with the team</li><li>Deployed to the test environment</li><li>Journey tests are run in the stage environment</li><li>If available, it is deployed to the UAT environment and UAT cases are run.</li><li>It is deployed to the prod environment and announced from the relevant channels</li><li>Monitoring via New Relic / Grafana</li><li>After deployment, review service logs</li><li>Performance tests are run to see if the response time is affected after the deployment. The comparison with the previous deployment is shared with the team as a report on the slack channel.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*eR3AklzkINSAIkbb" /><figcaption>how-we-do-deployment-progress</figcaption></figure><h4>Best Practices for API Test Automation</h4><ul><li>Most software tries to achieve a principle called <strong>DRY — “Don’t Repeat Yourself”</strong>. This software is easier to maintain if every concept is standardly represented in one place and code repetition is kept to a minimum. This approach is particularly valuable for facilitating changes because an engineer only needs to update a single piece of code rather than keeping track of multiple references. Refactorings should be done to make tests more descriptive and meaningful, not just to reduce duplication</li><li>As test projects grow, their maintenance becomes more difficult. That’s why the constant and method namings we use gain importance. The more descriptive and clear they are, the more helpful they will be in guiding us</li><li>One of the most important parts of testing is to focus on <strong>validation and verification</strong> methods</li><li>Instead of testing the system with some stable conditions, we should test it in bad and failing conditions</li><li>As much as possible, test data should be created <strong>dynamically</strong> during testing and should work to include user behavior. Because we expect scenarios not covered by the test data to occur</li><li>We want the system to perform well under a certain load and stress. The traffic each system can handle may vary</li></ul><h4>Advice on About Test Automation</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*379xrz2VO2qC1POUtku9CQ.png" /></figure><ul><li>Writing automation has many tools and methodologies. Creating a project-specific requirement bridge is important for a high-quality automation infrastructure</li><li>Accurate and inclusive testing should be added to every layer of the code base</li><li>A structure should be established to receive continuous feedback during the testing process (CI/CD)</li><li>Quality targets should be determined jointly</li></ul><p>If you want to be part of a team that tries new technologies and want to experience a new challenge every day, come to us.</p><blockquote><strong>I hope it will be helpful for you… Happy Testing !</strong></blockquote><h3>References</h3><ul><li><a href="https://learning.oreilly.com/library/view/full-stack-testing/9781098108120/">https://learning.oreilly.com/library/view/full-stack-testing/9781098108120/</a></li><li><a href="https://learning.oreilly.com/library/view/software-engineering-at/9781492082781/">https://learning.oreilly.com/library/view/software-engineering-at/9781492082781/</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8842b3e7b44e" width="1" height="1" alt=""><hr><p><a href="https://medium.com/trendyol-tech/what-did-we-experience-about-the-groupdeal-project-testing-8842b3e7b44e">What did we experience about the GroupDeal Project Testing …?</a> was originally published in <a href="https://medium.com/trendyol-tech">Trendyol Tech</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[To enable the Emmet feature in Visual Studio Code Editor]]></title>
            <link>https://medium.com/@nurdan-turan/visual-studio-code-edit%C3%B6r%C3%BCnde-emmet-%C3%B6zelli%C4%9Fini-aktif-le%C5%9Ftirme-21743e9fe2f0?source=rss-b42cf830188------2</link>
            <guid isPermaLink="false">https://medium.com/p/21743e9fe2f0</guid>
            <category><![CDATA[vscode-extension]]></category>
            <category><![CDATA[emmet]]></category>
            <category><![CDATA[vscode]]></category>
            <dc:creator><![CDATA[Nurdan Turan]]></dc:creator>
            <pubDate>Fri, 05 Nov 2021 19:18:12 GMT</pubDate>
            <atom:updated>2023-06-21T13:57:56.973Z</atom:updated>
            <content:encoded><![CDATA[<p>Long time React | I was thinking how can I enable Emmet feature in my JSX files. As you know, we could use this extension in html / css files very easily and it made our work very easy while writing code.</p><p>We want the same ease in JSX, right? Then let’s get it done right away with a little touch 😃</p><p>👻 After pressing the Studio Code Ctrl + P keys, let’s write “&gt;Workspace Settings” on the screen that opens.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9Y1vKpHzhgz-bTsLGL7EMQ.png" /></figure><p>👻 Let’s go to the Emmet field and click “Edit in settings.json”..</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZU9_e7MUohzE6ymjOzFWoQ.png" /></figure><p>👻 Let’s add the code below and save it..</p><pre>{<br>&quot;emmet.includeLanguages&quot;: {<br>&quot;javascript&quot;: &quot;javascriptreact&quot;<br> }<br>}</pre><p>👻 And process done..</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/872/1*fD9cvSXaRBa9qtI_8HNgTw.png" /></figure><p>Hope to see you in the next article 🕵️‍♀️<br>Goodbye..</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=21743e9fe2f0" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Windows Cihazdan Charles Kurulumu ve Log Takibi]]></title>
            <link>https://medium.com/@nurdan-turan/windows-cihazdan-charles-kurulumu-ve-log-takibi-b8ba167482d2?source=rss-b42cf830188------2</link>
            <guid isPermaLink="false">https://medium.com/p/b8ba167482d2</guid>
            <dc:creator><![CDATA[Nurdan Turan]]></dc:creator>
            <pubDate>Fri, 29 Oct 2021 12:00:00 GMT</pubDate>
            <atom:updated>2021-10-29T12:00:00.371Z</atom:updated>
            <content:encoded><![CDATA[<p>Herkese Merhaba öncelikle bugün Windows işletim sistemi üzerinden Charles kurup ayarlamalarını yapacağız. Haydi başlayalım :)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*naaZaI9EZ41kaJN8sCqYug.png" /></figure><p>Kurulum için <a href="https://www.charlesproxy.com/download/"><strong>buradaki</strong> </a>linkten Charles indirelim. Programı açtığımızda bizi aşağıdaki gibi bir ekran karşılayacak.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/640/0*VigWZDFmtyJdWfZn.png" /></figure><p><strong>Yapmamız gerekenler :</strong></p><p>1. Charles üzerinden <strong>SSL Proxy Settings </strong>üzerinden Host ve Port’u ayarlamak.</p><p>2. Bilgisayarımızı ve telefonumuzu “Aynı kablosuz ağa bağlamak”.</p><p>3. Bilgisayarımızda görünen IP adresi ve Port numarasını telefona proxy olarak eklemek.</p><p>4. Ardından iOS/Android için Safari/Chrome dan <a href="https://chls.pro/ssl">https://chls.pro/ssl</a> adresinden SSL sertifikasını indirmek.</p><p>5. Telefon ayarlarından “SSL sertifikasına güven” diyerek doğrulamak.</p><p>6. Charles Üzerinden Host ve Portu Ayarlamak</p><p>Proxy ayarlarından <strong>“SSL Proxy Settings”</strong> kısmına giriyoruz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/624/0*lgiTwIkWAoGV3zGs.png" /></figure><p><strong>SSL Proxying sekmesinden “Add” diyerek Host ve Portumuzu giriyoruz.</strong></p><p><strong><em>(Host=* / Port=* olacak şekilde)</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/568/0*GvvMuS2qn4yiuXs9.png" /></figure><p><strong>Telefonumuzu ve Bilgisayarımızı Aynı Kablosuz Ağa Bağlama İşlemine Geldik :</strong></p><p><strong>NOT:</strong> Bilgisayar / Telefon aynı ağa bağlı olmak zorundadır.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/640/0*dpbdvRcMBE1l-lBR.png" /></figure><p><strong>Bilgisayarımızın IP adresini ve Portunu Telefonumuza Proxy Olarak Ekleyeceğiz..</strong></p><p>IP adresini, Kablosuz Ağ ayarlarından görebilirsiniz. Aşağıdaki resimde IPv4 Address olarak gösteriliyor.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/624/0*BBk10zRaHSstZ-BW.png" /></figure><p><strong>SSL Sertifikamızı indirelim :</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/624/0*xtN0x0Z3joATL3q1.png" /></figure><p>Sertifika adını <strong>Charles Proxy, </strong>Used for kısmını VPN and apps yazarak dolduralım. İndirme işlemi bittikten sonra Charles açıp Proxy / SSL Proxy Settings seçeneğine tıklayalım. Hostu “utest” portu ise “443” olarak yazalım. Tamam diyip ekranı kapatalım.</p><p>Port numarasını ise Charles üzerinden değiştirebilir ve görebilirsiniz.Proxy ayarlarından Proxy Settings’e tıklıyoruz. <strong>Port numarası Default olarak 8888</strong> olarak geliyor.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/624/0*YoWsn42V4H-6-DqJ.png" /></figure><p>Telefondaki ayarlamaları yapıp Charles ı açtıgımızda bu adresten gelen verileri onaylıyor musunuz ekranında <strong>Allow </strong>seçeneğine tıklamamız gerekiyor.</p><p>İşte hepsi bu kadar.. Artık telefonunuzdan örnek bir web adresine ”<a href="https://www.utest.com.tr/">https://www.utest.com.tr/</a>” gittiğinizde bütün logları takip edebileceksiniz.</p><p>Bir sonraki yazımda görüşmek üzere.. Sevgiyle kalın :)</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b8ba167482d2" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[What is the Flaky Test and What Should Be Considered?]]></title>
            <link>https://medium.com/@nurdan-turan/flaky-test-nedir-ve-yap%C4%B1lmas%C4%B1-gerekenler-nelerdir-3f17bc4c1668?source=rss-b42cf830188------2</link>
            <guid isPermaLink="false">https://medium.com/p/3f17bc4c1668</guid>
            <category><![CDATA[flaky-tests]]></category>
            <dc:creator><![CDATA[Nurdan Turan]]></dc:creator>
            <pubDate>Fri, 29 Oct 2021 11:29:47 GMT</pubDate>
            <atom:updated>2023-06-21T13:53:46.789Z</atom:updated>
            <content:encoded><![CDATA[<p>Flaky Test is a type of test where we encounter both successful and unsuccessful test results when the same analysis and code segment are tested.</p><p>Flaky Tests are inconsistent and unreliable.</p><p>Even though everything appears to be the same and there are no changes in the code, different test results can be encountered.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/277/0*pzOZSpm4qyaKD-gc.png" /></figure><h4><strong>Flaky tests can be caused by several factors :</strong></h4><ul><li>Issues related to newly written code: If there are bugs or errors in the code being tested, it can lead to inconsistent test results.</li><li>Problems related to the test itself: The test may have dependencies on external resources that can introduce variability, such as network connections, databases, or third-party services. If these dependencies are not properly managed or are prone to instability, it can result in flaky tests.</li><li>External factors compromising test results: Factors outside the control of the test environment, such as system load, hardware performance, or timing issues, can influence test outcomes and make them inconsistent.</li><li>Environmental issues: Differences in the test environment, such as operating systems, browser versions, or hardware configurations, can impact the reliability of tests. Inconsistent environments can produce varying results.</li><li>Timing and concurrency problems: Tests that rely on specific timing or concurrent execution of code can be susceptible to flakiness if the timing or order of operations is not precisely controlled or if there are race conditions present.</li><li>Non-deterministic behavior: Certain code or operations may have non-deterministic behavior, meaning their outcome can vary each time they are executed. If the tests rely on such code or operations, it can lead to flaky test results. Overall, it’s essential to investigate and address these factors to minimize flaky tests and improve the reliability of the testing process.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/1*YursUletMSjiXYs3QnmoZA.jpeg" /></figure><p><strong>Actions to be taken:</strong></p><ul><li>Development of the application should be paused.</li><li>The developer should investigate if there is an error in the code.</li><li>Test results should be analyzed.</li><li>Data should be collected by examining the failed results.</li><li>It should be checked whether the tests are affected by the test environment.</li><li>The network environment in which the tests are executed should be checked.</li></ul><p>Hope to see you in the next conversation. 😉 Goodbye..</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3f17bc4c1668" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>