AutoMagic by Jim Hazen
“AutoMagic” – Jim Hazen
Here’s what it means:
The assumption of automation being a silver bullet to solve all testing problems
Depicting the thought process of automation somehow ‘magically’ doing all the testing we have toBy following some simple steps (record and playback) and all your worries are over FOR LIFE..
I’m pretty sure most folks reading this are way past that point of understanding
But the term Jim has coined always fascinated me
Here is a short clip of Jim explaining the story how he came about to coin the term
#QsDaily #Automation
Deleting a build run in Jenkins
Deleting a batch run result for a Jenkins job
Why would you want to do it and how..
I must mention first there is a ton of value in using Jenkins,
It’s not only easier to run, use and share results, but also can give a historic view of the results
I have nightly builds and sometimes due to unavoidable circumstance there are some batch runs which really shouldn’t be in the history for that job (it’s a long story, so just humor me)
To keep your batch run history clear of any unnecessary ‘noise’ you might want to delete a specific job run result
Here’s how you do it:
- From Jenkins “configure global security” page, set ‘Anyone can do anything’ in the ‘Authorization’ section
- Run CMD with admin rights and ‘cd’ into Jenkins-cli.jar file location (e.g. C:\Program Files (x86)\Jenkins\war\WEB-INF)
- Confirm the batch run you want to delete (this is irreversible)
- Write the following command:
-
- java -jar jenkins-cli.jar -s <Jenkins server> delete-builds <job name> <build number to delete>
- Restore security settings
Tadaa!
P.S.
I know this was written very short hand, will write up a post on a few tips including this one.
#QsDaily #Automation #Jenkins
The concept of Jenkins
Often folks start learning the semantics and forget the concept
The same goes with learning Jenkins, so here’s the ‘concept’:
There used to be so many steps to deploy a product (ask someone who has been in a release manager kind of role)
All that time was wasted on useless mis-management, trying to merge code properly which should have been done anyway in the first place
Plus the time to do all these repetitive tasks day in day out
A few ‘God gifted’ members of the software community started working to solve this back in 2004
After lot’s of hard work, acquisitions and court trails, today we know that project as ‘Jenkins’ with over 1000 contributors
Working towards the goal of making the deployment of software easier, the corner stone of DevOps
A quick introduction to ‘how’ Jenkins solves this problem is in this article:
#QsDaily #Automation #DevOps #Jenkins
Why is UI automation not easy
It’s not easy to get UI automation right
And here’s the reason why:
The AUT GUI will keep on changing, the browsers / mobile OS get updated every few months and the automation tool also keep upgrading
The automation framework needs to be loosely coupled to adapt to all these rapid changes
It ends up like a person trying to balance himself on three moving wooden planks at sea which keep on drifting..
Another analogy I remember is from car CD players problem
Even when a car is running smoothly, there are subtle vibrations, enough to disrupt the lens reading data off the CD
The industry started to engineer car CD players to be flexible enough to cater for these jitters and even bigger ones to avoid the disruption in reading data
So keep your automation framework fluid, easy / quick to update, and robust enough to overcome any small bumps and tides which are inevitable
#QsDaily #automation
Compatibility testing
An important area to leverage automation
The number of front ends applications need to support are increasing day by day
While this is a nightmare testing by a person, automation can be a big help
Making scripts reusable with the ability to run smoothly on multiple platforms and app versions is a no brainer
What’s not so common are the tests to add under this category
Conventional wisdom is to run ALL TESTS on ALL possible environments, but that’s just not smart
IHMO, any part of our app’s code that is affected by the browser / mobile OS etc. should be included here
For instance if a specific control is used multiple places in the application, testing it extensively in one place should suffice for compatibility tests for that control
And no need to test it every other place in the application
#QsDaily
The power of goal setting
The power of writing your goals
I don’t know why, but it certainly is more powerful than most think
I read the concept the first time from Brian Tracey’s book “The miracle of self-discipline”
According to him, goal setting is the best part of his trainings people come up to him and talk about how it transformed them
From my personal experience, writing goals daily has been a game changer for me too
It has helped me stay true to my purpose, meet with awesome people and open doors I never knew existed
So here’s my goal setting ritual:
1. Anything I want to implement in my life, or goals I want to achieve, I write an affirmation for them
2. That builds my latest list of affirmations
3. First thing in the morning, I write my affirmations
And that’s it!
Try it out and let me know!
For more reading, audio book link : https://www.briantracy.com/catalog/the-miracle-of-self-discipline
P.S.
This will take time. So, “TRUST THE PROCESS”.
#QsDaily
Programming for testers
For those starting from scratch, here are my two cents
Writing code is not that hard, but being good at it certainly is
IME, folks starting on the wrong foot struggle for a very long time
Having the aptitude of problem solving and thinking like a machine
Coupled with the right attitude towards the problem solving process makes all the difference
More on that here:
Automation logs.
Did I ever mention I’m allergic to messy code?
There’s something I hate even more, horrible automation logs
Often I’ve seen automation logs / results are so complex and very hard to navigate
The only thing you might learn is how many tests passed or failed and that’s about it
I design my logs to be like an airplane black box
If any of my scripts go down, I want ALL the information I need to figure out what happened
AND the log has to be perfectly readable by ANYONE in the team
BTW, that’s how the first F-16 was designed, they didn’t start with what they CAN build, rather what fighter pilot’s dream features were
To read more on how to build a great test log:
#QsDaily #automation #TestResults
\https://goo.gl/YcgSbM
How I built a test harness
How I decided to build a test harness:
Angular 4 + Spring Boots + SQL, (and oh my it is so much fun!)
It could have been done with using a front interface like Jenkins
The backend with some simple scripts in restAssured and plain Java, but would not have been scalable
Keeping good design practices of maintainability, scalability, reusability and robustness, we had to take the tougher route
When deciding on how to solve the problem, don’t look at the effort needed today, the solution should be scalable enough for years to come
I always quote to my team, don’t program thinking of today, rather a 3rd person reading it a year from now
#QsDaily #TestHarness
Deciding what to automate
Deciding what to automate – part 2
Once you what to test, find the subset of what to automate
Again everything you want to ‘test’ cannot be ‘checked’
It’s best to be smart about what should be automated
While the most common answer to this question is ‘automate what we can’
There’s a fundamental flaw in that, not necessarily all we CAN automate is WORTH automating
If a feature is hardly changed and used, automation efforts are best spent elsewhere
Conversely, if a certain feature is time consuming to test and has to be done every time, I’d rather automate that feature.
More factors IMHO to help deciding what to automate here:
Deciding what to test
Deciding what to automate – part 1
Find out what to test first..
Often the discussion about what to automate ends with ‘let’s automate everything’…
Around a year into it the team realizes we might never be able to automate everything
Plus the maintenance cost turns out to be much higher than expected
Eventually not seeing enough progress with automation
While this scenario is the result of multiple mistakes along the way,
The first IMHO is not taking the time to formulate a testing strategy first
We can NEVER test everything, let alone automate it
#QsDaily #Automation
Find out what to test first, more here:
Trust the process
For my tester friends out there struggling and not seeing results, be it learning automation, learning technology or whatever
“Trust the process” – @John Somnez
The results are not up to us. All we have to think about is the little decisions we make in our daily lives
Every person intends to do great things, but then why only a few make it?
The answer I like the most: “little decisions we make every day without even thinking that is a decision”
A lot of small sloppy decisions every day can take you far off course without us even realizing
So trust the process, have faith, in time it will pay off
Every overnight success has a decade long struggle behind it. Little decisions matter. Hang in there..
#QsDaily
Parameterizing Jenkins jobs
Parameterizing Jenkins jobs
If you’re not doing it, or having problems with it read on.
Design every piece of code in or around your automation framework keeping maintainability, reusability, scalability and robustness in mind (Pillars of framework design)
In that spirit your Jenkins job should be parameterized
This will allow you to select different AUT versions, browsers, tests to run from Jenkins itself
Even if you don’t need it right now, you SHOULD in the future
In case your automation tool is having problems reading parameters from Jenkins
You can export them into different file formats (JSON, XML etc.) and read those settings on project initialization of the automation tool
Easier said than done, but with patience and trial and error, you’ll get there
#QsDaily #Jenkins
Checking DB connection
Problem checking connection to your Database?
I recently learned this trick using Universal Data Link files
There are many methods out there, sometimes could be confusing
For windows users I stumbled upon this neat trick:
– Create a new file with the extension “*.UDL”
– Open the file and enter data:
1. Enter the server IP (Sometimes machine names create problems)
2. Add database username and password
3. Select DB name from the list (should show all the DBs hosted on the machine with IP from step 1)
4. Press Test Connection
and Wala.. you can get your answer
P.S.
Your Spring Boots app might not be connecting to your DB because of using the machine name instead of the IP as well..
For more details:
https://fileinfo.com/extension/udl
#QsDaily #database
Learning Automation
How to learn automation?
The biggest problem with this question is, it’s not the right question to ask!
We perceive a tester’s career progresses by starting with ‘manual testing’ to ‘automation’ to ‘management’
I don’t think that’s an accurate picture
Mostly we start of in testing as ‘Non-Technical’ (unfortunately)
We deliver greater value once we become ‘Technical’ and learn how the technology stack works
And then when leadership skills are acquired, that gives another boost to our impact, hence a higher pay
It’s not about just automation, it’s about having the capability to create a greater impact on the business’s bottom line
#QsDaily #TestersGoingTechnical #TestAutomation
Life does not happen to you, it happens for you
“Life does not happen to you, it happens for you”
A line that resonated with me immediately and here’s why
Has it ever happened similar events keep happening in your life?
Is it just bad luck?
I’ve felt there is always a reason for why events out of our control take place
Sometimes we’re able to figure out the lesson we were meant to learn, a lot of times the meaning remains hidden
And until we understand why this is here, different events might keep on manifesting for us to learn
To lean and go to the next stage in life
If we choose to believe everything happens for a reason, we have a better chance at improving and being more content
#QsDaily
Running tests in parallel
Running tests in Parallel?
It’s not just about what tool to use
1. Why do you need parallel execution?
To reduce execution time yes, but are all the tests running needed? Or can they be executed at different stages of the SDLC instead of one go?
2. Are your tests designed keeping in mind parallel execution?
More here: https://goo.gl/977JEP
3. Parallel execution environment setup
Depends on the tooling you are using and the AUT. Few options I know of with open source:
– Selenium Grid (will run on single machine)
– Jenkins + VM – with Selenium running on multiple VMs / environments
– Jenkins + Docker – Running on a docker server where multiple containers running different tests in parallel. Can manage the parallel execution through Jenkins
– Jenkins + SaaS – services like BrowserStack, SauceLabs etc.
– Zalenium – Docker based Selenium grid. More here: https://goo.gl/pqXoQW
#QsDaily #Docker #Jenkins #TestAutomation
Can continuous testing help?
Continuous testing just a buzz word or can it really help you?
To quote my all-time favorite book ‘The teams to take a product from idea to the market will win’
Here’s how I explain it:
Bottom line of a company – Sales
The best way to predict sales and improve them? – Go and sell the product
Unless you don’t have anything to give to your customers, no way to get feedback from them
For decades we tried to ‘model’ markets, trends, buyer personas and so on
Sometimes actual results were around our estimate, mostly way off mark
Then we thought, let’s forget to try and ‘simulate’ the environment, let’s just put it out there instead
The reason for simulations and models was it took too much time to build a deliverable product
With all concepts around Agile, CI, CT, CD, DevOps, we are trying to move from once in a 6 month delivery to multiple times a ‘Day’
Still thinking if continuous testing can help?
A video I did on the subject:
#QsDaily #ContinuousTesting #DevOps #CI #CD
Lightning post on AI and ML
What are they and how are they related
AI –
is ‘Artificial’ since the machine will not be ‘aware’ and is only working from a set of mathematical formulas under a specific context
Intelligence – is relevant, a computer can beat the best chess player ever, but has no concept of winning or losing. Can we call VA’s like Siri ‘really’ intelligent?
So why call it intelligent? The same reason we started calling phones ‘smart’!
ML –
To develop ‘intelligence’, machines are ‘trained’ to answer specific questions in a given context
There are different ways in which machine learning is done, one is ‘pattern recognition’
To the problem we want to solve, a large sample answer set is ‘programmed’ in the machine
So when an actual problem is given, the machine matches the ‘patterns’ it sees with the patterns it was trained on..
#QsDaily #ArtificialIntelligence #MachineLearning #AI #ML
Wait, Find, Action and Repeat
So these are the basic steps an automation tool does:
Wait, Find, Action – Repeat..
(Still thinking / exploring a cool name for this)
“Wait” for the AUT and automation tool to be in sync, and the object loaded and ready to interact with
“Find” OnLy the ‘Desired’ object “ALWAYS”
“Action” should be compatible with supported browsers / environments and handling the usual errors (delete previous text in text field etc.)
What I really wanted to talk about today were delays (wait). I hope most people reading know this, but it’s too important so I’ll repeat
First we established how important delays are, there 1/3rd of the whole automation! (in a way)
Second, here are my “object delay rules”:
1. Have a delay BEFORE interacting with ANY object “ALWAYS”
2. NEVER use a static delay, ALWAYS a dynamic delay
3. Check for not just if the object is visible, is it READY to interact with? *
If you do these three things with delays, you should be fine
* Exceptions are always there, but they should be the “exception”..
#QsDaily #AutomationFrameworkDesign #TestAutomation
Automate testing within 6 months!
“Within 6 months we’ll automate the testing”..
A goal one of the prospective client’s had for me, you can guess what happened next..
I understand that was a way to sell automation to management for budget approval, but was a horribly wrong statement
I’m glad to announce I never agreed to the crazy plan
The root of all this, IMHO, lies in misunderstanding what testing is
The idea of ‘testing’ being automated is impossible, unless we can create ‘Autobots’ or ‘Desepticons’!
‘Testing’ is a process of thinking, communicating with people, strategizing and continually adapting
We don’t have sophisticated enough systems to do that right now, and not sure when we will reach there if ever
But then how do you convince management that automation benefits everyone?
Here are my thoughts on calculating automation ROI:
#QsDaily #TestAutomation #AutomationRoi #Testing
Decide what to test first
Deciding what to automate?
Let’s decide what to ‘TEST’ first..
This is a follow up post from earlier where I mentioned METS
The idea of METS is to have a concise look of the important features quickly
And this is not needed for planning testing only , rather far more important for automation
Unless we are automating “what’s important”, we’ll get nowhere..
So first decide what to test, then talk what to automate
In this video I discuss the importance of deciding what to test first:
#QsDaily #testautomation #testing
Automation wisdom reinvented
Automation ‘Wisdom’ reinvented
I’m guilty too, thinking I was the first to discover some automation wisdom
The reality is, thorughout the decades of evolution in automation and automation tools, there have been common misconceptions ‘discovered’ again and again
And probably a lot of folks starting new in that wave of evolution were not aware about these problems seen in the past
In a talk with @Jim Hazen, we touch base on the same topic and Jim shares his experiences around it:
#QsDaily #TestAutomation #AutomationEvolution #TechnologicalExcellence
METS – quick way to summarize test scenarios
To write ‘traditional’ test cases or not
Whichever camp you are in, we all agree they are time consuming
There are many methods suggested in the community to document scenarios rather than all the ‘mundane’ steps
It becomes easy to refer and update, and takes less time to write
One such method was presented by @Greg Pascal at the #TestingGuild hosted by @Joe , which I loved instantly
It’s a one liner summary of test scenarios for one module with rows listing feature names and 4 columns signifying the scenario’s importance from critical to low
Sample sheet:
https://goo.gl/AggDE6
I like the concept because it’s simple and easy to
update
With ‘agile’ kicked in, it’s been a big excuse to NOT document ANYTHING, which has made domain knowledge a problem
IMHO, testing strategies like METS could be of great help in such cases
For more on that, here’s Greg’s website on the subject:
#TestCases #Testing
What is docker?
When I started learning #docker it was a bit confusing
To ease the learning curve, here’s how I explain docker to testers:
(simplifying things A LOT to make it easy to understand here)
1. Imagine a windows environment ‘X’ running on a desktop machine
2. Now create an image of that environment ‘Y’
3. Run that image (Y) on top of your desktop environment (X)
4. Any app running on Y would not affect X right? So that’s the first thing to appreciate.
5. Now whats common between X and Y? The OS, windows in this case.
6. So let’s take out what’s common, the OS. Remove the duplicate one from Y
And that’s what Docker does, it removes the duplicate OS and related resources, and uses the OS from X for running stuff on Y as well
All this while maintaining the isolation of both environments..
Along with a bunch of other benefits that come with this..
To read on the evolution towards docker and a brief intro on how it works: