Testing feeds

Testing feeds

Warning: A non-numeric value encountered in /hermes/walnacweb05/walnacweb05al/b2027/moo.99techworkscom/4techblog/wordpress/wp-includes/SimplePie/Parse/Date.php on line 694 Warning: A non-numeric value encountered in /hermes/walnacweb05/walnacweb05al/b2027/moo.99techworkscom/4techblog/wordpress/wp-includes/SimplePie/Parse/Date.php on line 694 Warning: A non-numeric value encountered in /hermes/walnacweb05/walnacweb05al/b2027/moo.99techworkscom/4techblog/wordpress/wp-includes/SimplePie/Parse/Date.php on line 694 Warning: A non-numeric value encountered in /hermes/walnacweb05/walnacweb05al/b2027/moo.99techworkscom/4techblog/wordpress/wp-includes/SimplePie/Parse/Date.php on line 694 Warning: A non-numeric value encountered in /hermes/walnacweb05/walnacweb05al/b2027/moo.99techworkscom/4techblog/wordpress/wp-includes/SimplePie/Parse/Date.php on line 694 Warning: A non-numeric value encountered in /hermes/walnacweb05/walnacweb05al/b2027/moo.99techworkscom/4techblog/wordpress/wp-includes/SimplePie/Parse/Date.php on line 694 Warning: A non-numeric value encountered in /hermes/walnacweb05/walnacweb05al/b2027/moo.99techworkscom/4techblog/wordpress/wp-includes/SimplePie/Parse/Date.php on line 694 Warning: A non-numeric value encountered in /hermes/walnacweb05/walnacweb05al/b2027/moo.99techworkscom/4techblog/wordpress/wp-includes/SimplePie/Parse/Date.php on line 694 Warning: A non-numeric value encountered in /hermes/walnacweb05/walnacweb05al/b2027/moo.99techworkscom/4techblog/wordpress/wp-includes/SimplePie/Parse/Date.php on line 694 Warning: A non-numeric value encountered in /hermes/walnacweb05/walnacweb05al/b2027/moo.99techworkscom/4techblog/wordpress/wp-includes/SimplePie/Parse/Date.php on line 694 Warning: A non-numeric value encountered in /hermes/walnacweb05/walnacweb05al/b2027/moo.99techworkscom/4techblog/wordpress/wp-includes/SimplePie/Parse/Date.php on line 694 Warning: A non-numeric value encountered in /hermes/walnacweb05/walnacweb05al/b2027/moo.99techworkscom/4techblog/wordpress/wp-includes/SimplePie/Parse/Date.php on line 694 Warning: A non-numeric value encountered in /hermes/walnacweb05/walnacweb05al/b2027/moo.99techworkscom/4techblog/wordpress/wp-includes/SimplePie/Parse/Date.php on line 694 Warning: A non-numeric value encountered in /hermes/walnacweb05/walnacweb05al/b2027/moo.99techworkscom/4techblog/wordpress/wp-includes/SimplePie/Parse/Date.php on line 694 Warning: A non-numeric value encountered in /hermes/walnacweb05/walnacweb05al/b2027/moo.99techworkscom/4techblog/wordpress/wp-includes/SimplePie/Parse/Date.php on line 694 Warning: A non-numeric value encountered in /hermes/walnacweb05/walnacweb05al/b2027/moo.99techworkscom/4techblog/wordpress/wp-includes/SimplePie/Parse/Date.php on line 694 Warning: A non-numeric value encountered in /hermes/walnacweb05/walnacweb05al/b2027/moo.99techworkscom/4techblog/wordpress/wp-includes/SimplePie/Parse/Date.php on line 694 Warning: A non-numeric value encountered in /hermes/walnacweb05/walnacweb05al/b2027/moo.99techworkscom/4techblog/wordpress/wp-includes/SimplePie/Parse/Date.php on line 694 Warning: A non-numeric value encountered in /hermes/walnacweb05/walnacweb05al/b2027/moo.99techworkscom/4techblog/wordpress/wp-includes/SimplePie/Parse/Date.php on line 694 Warning: A non-numeric value encountered in /hermes/walnacweb05/walnacweb05al/b2027/moo.99techworkscom/4techblog/wordpress/wp-includes/SimplePie/Parse/Date.php on line 694

blogs blogs

  • Mastering Time Management in Software Testing
    by Manish Saini on May 18, 2024 at 3:31 am

    Time management is a critical skill in the fast-paced world of software testing. As a software tester, your ability to manage time effectively can significantly impact the quality of your testing and the success of your projects. Here are some valuable tips to help you master time management in software testing:Tips for Effective Time Management:1. Set Clear Goals: Define clear and achievable goals for each day or week to stay focused and prioritize tasks effectively.2. Use a Calendar: Use a calendar or scheduling tool to plan your day, allocate time for different tasks, and ensure efficient time use.3. Prioritize Tasks: Prioritize high-priority tasks based on importance and urgency before moving on to less critical ones.4. Avoid Multitasking: To maintain productivity, concentrate on one task at a time and give each task your full attention.5. Break Tasks into Smaller Steps: Divide large tasks into smaller, manageable steps to make progress more efficiently and reduce overwhelm.6. Set Deadlines: Establish deadlines to keep yourself on track, complete tasks promptly, and prevent procrastination.7. Limit Distractions: Identify and eliminate distractions that hinder focus, such as turning off notifications or finding a quiet workspace.8. Take Breaks: Schedule regular breaks to recharge, maintain focus, and prevent burnout throughout your day.9. Review and Adjust: Regularly reflect on your progress, adjust your approach as needed, and optimize your time management strategies.10. Learn to Say No: Prioritize tasks that align with your goals and politely decline tasks or requests that do not align to avoid overcommitting.Benefits of Mastering Time Management:By mastering time management in software testing, you can:Increase productivity and efficiency in your testing processes.Reduce stress and overwhelm by effectively managing your workload.Achieve tremendous success in your projects and career by optimizing your time utilization.Embrace these time management tips to enhance your testing efficiency, elevate your productivity, and pave the way for success in the dynamic field of software testing. […]

  • Enhancing Test Reliability, Repeatability, and Speed with Appium Capabilities
    by Lana Begunova on May 17, 2024 at 8:25 pm

    In the world of mobile test automation, starting an Appium session goes beyond mere initialization. It’s about optimizing our testing environment to achieve 𝒓𝒆𝒍𝒊𝒂𝒃𝒊𝒍𝒊𝒕𝒚, 𝒓𝒆𝒑𝒆𝒂𝒕𝒂𝒃𝒊𝒍𝒊𝒕𝒚, and 𝒔𝒑𝒆𝒆𝒅. This optimization is accomplished through session initialization parameters known as 𝒸𝒶𝓅𝒶𝒷𝒾𝓁𝒾𝓉𝒾𝓮𝓈. These capabilities allow us to fine-tune how Appium operates, ensuring our tests are consistent and efficient.Let’s explore how we can enhance our Appium sessions to improve test 𝒓𝒆𝒍𝒊𝒂𝒃𝒊𝒍𝒊𝒕𝒚, 𝒓𝒆𝒑𝒆𝒂𝒕𝒂𝒃𝒊𝒍𝒊𝒕𝒚, and 𝒔𝒑𝒆𝒆𝒅.Cross-Platform Capabilities𝒏𝒐𝑹𝒆𝒔𝒆𝒕By default, Appium resets the state of your device after each session to ensure a clean slate for subsequent tests. However, if your tests don’t require this level of reset, you can set the “noReset” capability to “true”. This avoids time-consuming cleaning routines, significantly speeding up your tests without compromising repeatability.𝒇𝒖𝒍𝒍𝑹𝒆𝒔𝒆𝒕For scenarios where ensuring a completely clean state is crucial for test reliability, use the “fullReset” capability. Setting this to “true” goes beyond the default cleanup, providing a thorough reset that guarantees no residual data from previous sessions can affect your current test.𝒊𝒔𝑯𝒆𝒂𝒅𝒍𝒆𝒔𝒔Running simulators or emulators in headless mode can boost performance, especially in resource-constrained environments. The “isHeadless” capability, when set to “true”, enables this mode, enhancing the speed of your test executions while maintaining reliability.Android-Specific Capabilities𝒅𝒊𝒔𝒂𝒃𝒍𝒆𝑨𝒏𝒅𝒓𝒐𝒊𝒅𝑾𝒂𝒕𝒄𝒉𝒆𝒓𝒔The UiAutomator2 driver continuously checks for toast messages, consuming valuable CPU cycles. If your tests don’t require this feature, disabling it with the “disableAndroidWatchers” capability can improve performance and consistency, especially in scrolling actions.𝒂𝒖𝒕𝒐𝑮𝒓𝒂𝒏𝒕𝑷𝒆𝒓𝒎𝒊𝒔𝒔𝒊𝒐𝒏Setting “autoGrantPermission” to “true” ensures that Appium automatically grants necessary app permissions, avoiding interruptions from system popups. This streamlines our tests, enhancing both reliability and speed.𝒔𝒌𝒊𝒑𝑼𝒏𝒍𝒐𝒄𝒌Managing device unlocking outside of Appium? Use the “skipUnlock” capability to skip Appium’s default unlock routine. This saves time during test initialization, ensuring faster and more consistent test starts.𝒂𝒑𝒑𝑾𝒂𝒊𝒕𝑷𝒂𝒄𝒌𝒂𝒈𝒆 & 𝒂𝒑𝒑𝑾𝒂𝒊𝒕𝑨𝒄𝒕𝒊𝒗𝒊𝒕𝒚When the app’s launch activity differs from its main activity, use “appWaitPackage” and “appWaitActivity” to specify the correct activity. This ensures Appium waits for the right activity, stabilizing the session start process and enhancing test reliability.𝒊𝒈𝒏𝒐𝒓𝒆𝑼𝒏𝒊𝒎𝒑𝒐𝒓𝒕𝒂𝒏𝒕𝑽𝒊𝒆𝒘𝒔Enabling “ignoreUnimportantViews” compresses the Android layout hierarchy, simplifying the XML structure and speeding up XPath queries. This reduces the time it takes to retrieve page sources, improving overall test speed.iOS-Specific Capabilities𝒖𝒔𝒆𝑷𝒓𝒆𝒃𝒖𝒊𝒍𝒕𝑾𝑫𝑨 & 𝒅𝒆𝒓𝒊𝒗𝒆𝒅𝑫𝒂𝒕𝒂𝑷𝒂𝒕𝒉Avoid rebuilding WebDriverAgent every time by setting “usePrebuiltWDA” to “true”. Specify the path to the prebuilt binary with “derivedDataPath”, saving time on session startup and ensuring faster test executions.For large apps, using JSON instead of XML for the app hierarchy can significantly speed up source retrieval. Set “useJSONSource” to “true” to enable this optimization, enhancing test speed without compromising reliability.𝒊𝒐𝒔𝑰𝒏𝒔𝒕𝒂𝒍𝒍𝑷𝒂𝒖𝒔𝒆Large iOS apps can take time to launch. Use the “iosInstallPause” capability to add a delay (in milliseconds) after WebDriverAgent detects the app is online, ensuring it’s fully ready before the test proceeds. This improves the reliability of test starts.𝒎𝒂𝒙𝑻𝒚𝒑𝒊𝒏𝒈𝑭𝒓𝒆𝒒𝒖𝒆𝒏𝒄𝒚If you encounter typing errors during tests, adjust the typing speed with “maxTypingFrequency”. Lower values slow down typing, reducing errors and improving the reliability of text input actions.𝒓𝒆𝒂𝒍𝑫𝒆𝒗𝒊𝒄𝒆𝑺𝒄𝒓𝒆𝒆𝒏𝒔𝒉𝒐𝒕𝒕𝒆𝒓For faster and more reliable screenshots on real devices, use the “realDeviceScreenshotter” capability with the “idevicescreenshot” binary from the libimobiledevice suite. This ensures quicker and more consistent screenshot captures.𝒔𝒊𝒎𝒑𝒍𝒆𝑰𝒔𝑽𝒊𝒔𝒊𝒃𝒍𝒆𝑪𝒉𝒆𝒄𝒌Element visibility checks can be unreliable with XCUITest. The “simpleIsVisibleCheck” capability offers an alternative visibility check that might be more reliable for your app, though it may take longer. This trade-off can enhance the reliability of your tests.ConclusionOptimizing your Appium sessions with these capabilities can significantly enhance the reliability, repeatability, and speed of your mobile tests. Whether dealing with cross-platform nuances or platform-specific challenges, these capabilities provide the tools you need to ensure your tests run smoothly and efficiently. Stay updated with the latest Appium documentation to leverage new features and capabilities as they become available.Mastering these capabilities will ensure your test automation runs like a well-oiled machine, giving you more time to focus on developing great apps.𝓗𝓪𝓹𝓹𝔂 𝓽𝓮𝓼𝓽𝓲𝓷𝓰 𝓪𝓷𝓭 𝓭𝓮𝓫𝓾𝓰𝓰𝓲𝓷𝓰!I welcome any comments and contributions to the subject. Connect with me on LinkedIn, X , GitHub, or Insta.If you find this post useful, please consider buying me a coffee.#Appium #MobileTesting #Automation #QA #DevOps #TechInsights #TechTips #TestOptimization #TestingEfficiency #Selenium #TechBoost […]

  • Introducing FizzBee: Simplifying Formal Methods for All
    by Jayaprabhakar Kadarkarai on May 17, 2024 at 5:00 pm

    You might have heard of TLA+, but how do you use it for debugging? FizzBee is a new formal methods system that you can grasp in just a weekend. […]

  • Programming is for the juniors
    by Maaret Pyhäjärvi on May 17, 2024 at 4:25 pm

    It's the time of the year when I learn the most, because I have responsibility over a summer trainee. With Four years in Vaisala, it's four summer trainees, and my commitment to follow through with the summer of success means I will coach and guide even when I will soon be employed by another company. With a bit of guidance, we bring out the remarkable in people, and there will not be seniors if we don't grow them from juniors. Because, let face it, it's not like they come ready to do the work from *any* of the schools and training institutions. Work, and growing in tasks and responsibilities you can take up, that is where you learn. And then teaching others is what solidifies if you learned. This summer, I took special care in setting up a position that was a true junior one. While it might be something that someone with more experience gets done faster, the junior pay allows for them to struggle, to learn, to grow and still contribute. The work we do is one where success is most likely defined by *not leaving code behind for others to maintain* in any relevant scale, but reusing the good things open source community has to offer us in the space of open source compliance, licenses and vulnerabilities. I have dubbed this the "summer of compliance", perhaps because I'm the person who giggles my way through a lovely talk on malicious compliance considering something akin to that a real solution when we have corporate approaches to compliance, and forget learning why these things matter in the first place. If the likely success is defined by leaving no code, why did I insist of searching for a programmer for this position? Why did I not allow people to do things a manual way, but guided with expectations from getting started that we write code. In the world of concepts and abstractions, code is concrete. Code grounds our conversation. If you as a developer disagree with your code, your code in execution wins that argument. Even when we love saying things like "it's not supposed to do THAT". Watch the behavior and you're not discussing a theory but something you have. Sometimes the mistakes when reviewing the detailed steps of the work reveal things like this - a subtle difference on what is OS (operating system) and OSS (open source software), for someone who is entirely new to this space and how the effort put to writing the wrong code was a small step to fix, whereas the wasted effort with manually having done similar analysis would have really wasted more effort for the mistake. Watching the conversation unfold, I recognize we have already moved through there bumps on our road of the programming way. The first one was the argument on "I could learn this first by doing it manually". You can learn it by doing it with programming too, and I still remember how easy it is to let that bump ahead become the excuse that keeps you on the path of *one more manually done adjustment*, never reaching the scale. With our little analysis work, the first step to analyze components on one image felt like we could have done it manually. But the fact that getting 20 was 5 minutes of work, that we got from pushing ourselves through the automate bump. We also run into two other bumps on our road. The next one with scale is realization that what works for 5 may not work for 6, 11, 12, 17, and 20. The thing you built that works fine for one, even for the second will teach you surprising things in scale. Not because of performance. But because data generated that you are relying on is not always the same. For the exceptions bump, you extend the logic to deal with real world outside what you immediately imagined. Testers love the exceptions bump so much that they often get stuck on it, and miss more relevant aspects of quality. The third bump on our week is the quality bump, and oh my, the conversation of that one, that's not an easy one. So you run a scanner, and it detects X. You run second scanner, and does not detect X. Which one is correct? It could be correct as is (different tools, different expectations), but also it could be false positive (it wasn't one for anyone to find anyway) or false negative (it should be found).  What if there is Y to detect that none does, how would you know that then? And in the end, how far do you need to go in quality of your component identification so that you can say that you did enough not to anymore be considered legally liable? The realizations that popular scanners have significant percentages difference in what they find, and that if legal was an attack vector against your company, that your tools quality matter for it, it's definitely sinking into the deep end with the quality bump. I am sure our summer trainee did not expect how big of apart asking why and what then is of the work. But I'm sure the experience differs from a young person's first job in the service industry. And it makes me think of those times for myself nostalgically, appreciating that there's an intersection on how our paths cross through time. Back to click-bait-y title - programming really is for the juniors. It is for us all, and we would do well on not letting the bumpy road stop us from ever going that way. Your first hello world is programming, and there's a lifetime of learning still available.&nbs […]

  • Programming is for the juniors
    by Maaret Pyhäjärvi on May 17, 2024 at 4:25 pm

    It's the time of the year when I learn the most, because I have responsibility over a summer trainee. With Four years in Vaisala, it's four summer trainees, and my commitment to follow through with the summer of success means I will coach and guide even when I will soon be employed by another company. With a bit of guidance, we bring out the remarkable in people, and there will not be seniors if we don't grow them from juniors. Because, let face it, it's not like they come ready to do the work from *any* of the schools and training institutions. Work, and growing in tasks and responsibilities you can take up, that is where you learn. And then teaching others is what solidifies if you learned. This summer, I took special care in setting up a position that was a true junior one. While it might be something that someone with more experience gets done faster, the junior pay allows for them to struggle, to learn, to grow and still contribute. The work we do is one where success is most likely defined by *not leaving code behind for others to maintain* in any relevant scale, but reusing the good things open source community has to offer us in the space of open source compliance, licenses and vulnerabilities. I have dubbed this the "summer of compliance", perhaps because I'm the person who giggles my way through a lovely talk on malicious compliance considering something akin to that a real solution when we have corporate approaches to compliance, and forget learning why these things matter in the first place. If the likely success is defined by leaving no code, why did I insist of searching for a programmer for this position? Why did I not allow people to do things a manual way, but guided with expectations from getting started that we write code. In the world of concepts and abstractions, code is concrete. Code grounds our conversation. If you as a developer disagree with your code, your code in execution wins that argument. Even when we love saying things like "it's not supposed to do THAT". Watch the behavior and you're not discussing a theory but something you have. Sometimes the mistakes when reviewing the detailed steps of the work reveal things like this - a subtle difference on what is OS (operating system) and OSS (open source software), for someone who is entirely new to this space and how the effort put to writing the wrong code was a small step to fix, whereas the wasted effort with manually having done similar analysis would have really wasted more effort for the mistake. Watching the conversation unfold, I recognize we have already moved through there bumps on our road of the programming way. The first one was the argument on "I could learn this first by doing it manually". You can learn it by doing it with programming too, and I still remember how easy it is to let that bump ahead become the excuse that keeps you on the path of *one more manually done adjustment*, never reaching the scale. With our little analysis work, the first step to analyze components on one image felt like we could have done it manually. But the fact that getting 20 was 5 minutes of work, that we got from pushing ourselves through the automate bump. We also run into two other bumps on our road. The next one with scale is realization that what works for 5 may not work for 6, 11, 12, 17, and 20. The thing you built that works fine for one, even for the second will teach you surprising things in scale. Not because of performance. But because data generated that you are relying on is not always the same. For the exceptions bump, you extend the logic to deal with real world outside what you immediately imagined. Testers love the exceptions bump so much that they often get stuck on it, and miss more relevant aspects of quality. The third bump on our week is the quality bump, and oh my, the conversation of that one, that's not an easy one. So you run a scanner, and it detects X. You run second scanner, and does not detect X. Which one is correct? It could be correct as is (different tools, different expectations), but also it could be false positive (it wasn't one for anyone to find anyway) or false negative (it should be found).  What if there is Y to detect that none does, how would you know that then? And in the end, how far do you need to go in quality of your component identification so that you can say that you did enough not to anymore be considered legally liable? The realizations that popular scanners have significant percentages difference in what they find, and that if legal was an attack vector against your company, that your tools quality matter for it, it's definitely sinking into the deep end with the quality bump. I am sure our summer trainee did not expect how big of apart asking why and what then is of the work. But I'm sure the experience differs from a young person's first job in the service industry. And it makes me think of those times for myself nostalgically, appreciating that there's an intersection on how our paths cross through time. Back to click-bait-y title - programming really is for the juniors. It is for us all, and we would do well on not letting the bumpy road stop us from ever going that way. Your first hello world is programming, and there's a lifetime of learning still available.&nbs […]