If you decide not to design some parts of TAF at the very beginning, you are guaranteed to have HUGE problems in the long run. Do not deceive yourself by thinking that the future is far away. Issues that stem from poor design can turn out to be nasty. It will not be just 'a bit expensive' to get rid of them. Failing to design TAF layers properly may render the whole system virtually unusable. I always invest a lot into the initial design, and I have never regretted it. It saved me time, effort and sanity.
Thursday, February 2, 2023
Real Life Requirements For A Test Framework
The layers
The majority of test frameworks solve the same problem, so it is only natural that even on different projects you end up using the same architecture. The variable part is limited to:-- tests (they depend on requirements);
-- support of the project-specific infrastructure (you may need to implement support for AWS when assigned to project A, and it will not be required on project B, because the stack is completely different).
Balancing team effort
Personally, I developed a habit of thinking of TAF architecture in terms of layers:
-- a layer of test;
-- a layer of helpers (mainly boilerplate, moved out of tests to avoid duplication);
-- core layer and configuration (start up and shutdown, envrironmnet, logging, working with API of third-pary systems, etc.)
This approach has a lot of advantages, because it allows to share workload across the team without stepping on each other toes.
Test Framework Is A Software Product
When you intend to write a test framework you need to remember the following:
- test framework is a software product, which means everything that applies to a commercial product, also applies to a test framework;- test framework is not less important than the software under test, it is actually more important (and sometimes more complicated) than the software under test.
Test frameworks are created to help you check if you still meet the requirements (and to do it with less effort than manual test requires). Because if you do not meet the requirements, you do not achieve the project goals and|or create more problems than you solve. For instance, you spend enormous amount of time on manual defect management and dealing with architectural issues when it is too late and too expensive.
So if you decide to create a test framework, you have to:
-- define the requirements;
-- define priorities for the requirements;
-- define stages of maturity (what is to be implemented first and what next);
-- find out how much resource you have (time, technical knowledge, congitive ability, ability to delegate);
-- build the schedule of implementation (preferably by using a Gantt diagram).
Otherwise, I am sorry to say, your test framework will be nothing but a cost.
-------------------------------
Related posts:
Real Life Requirements For A Test Framework
More On Designing TAF Layers
Saturday, January 21, 2023
TCP/IP vs Real Life
I was busy talking to my imaginary friends and then it came to me how to explain TCP/IP to the non-technical people. It is important because most of my imaginary friends are non-technical. So, here is how you can do it.
First, forget the OSI, no one needs it anyway. Think of TCP/IP as your clothes.
Application layer is your coat, your suit, your jumper, your shoes, your hat.
Transport layer is your shirt, your dress, your pants (meaning trousers), your stockings.
Internet is your underclothes, your lingerie, your thermals.
Link is the naked you.
Protocol stacks follow the same logic. For instance, when you have a date you wear your suit and you put your shoes on, right? Then all this gradually comes off. Then the connection happens. Then you put everything on in the reverse order. You don't put your underwear over your jeans, do you?
See, technology can be easy to understand.
Monday, September 13, 2021
General Purpose Randomizer
I've decided to introduce some noise into the fingerprints collected on me by various unnecessarily curious services and people, so I've written a simple randomizer for selecting a string from a list of strings. The idea was to remove patterns from server selection process when using vpn. Not sure it'll work for obfuscation, but it is a functioning piece of code. Life will prove the rest.
Known to be working with Ubuntu+bash+ExpressVPN
#!/bin/bash
vpnservers=$(expressvpn list all | cut -d" " -f 1 | tr "\n" " ")
list=${vpnservers}
# using just a big value for length
# syntax ${parameter:offset:length}
vpnservers=${list:12:1500}
printf "Available vpn servers:\n${vpnservers}\n"
read -a arrayofservers <<< ${vpnservers}
length=${#arrayofservers[@]}
printf "Actual array length:\n$length \n\n"
randomvalue=$((1 + $RANDOM % ${length-1}))
printf "Your random value:\n$randomvalue \n\n"
printf "Your server id:\n${arrayofservers[randomvalue]} \n"
Wednesday, February 26, 2020
Docker commands vs Docker life cycle - Basic level
So, I started to collect this information for myself and pair it with command sets. Below you can find a use case for setting up a docker image and performing some basic commands on it. I shall extend this collection later, if I'm lucky.
Tuesday, July 23, 2019
Troubleshooting Citrix Client for Linux and Fixing Mike Support
And the answer is
to add AllowAudioInput=True
to the section [WFClient]
of wfclient.ini file
of your Citrix client configuration
So, here is how to fix it in slightly more detail:
Friday, June 7, 2019
Bash - Bulk file update with find and sed
#!/bin/bash
if [ -z $1 ] || [ -z $2 ] || [ -z $3 ] || [ -z $4 ]; then
printf "\nPlease enter:\n
1. file command-compatible filename pattern
2. backup suffix for affected files
3. pattern to replace
4. replacement\n\n
For instance, $0 *.txt .xml-backup blue red\n
This should replace blue with red in all txt files\n\n"
exit
fi
filename_pattern=$1
backup_suffix=$2
pattern_to_replace=$3
replace_with=$4
find . -type f -name ${filename_pattern} -exec sed -i${backup_suffix} "s|${pattern_to_replace}|$replace_with|g" {} \+
Bash - Cut a fragment of a log by some criteria (like timestamp)
#!/bin/bash
printf "\nResults are returned *inclusive*\n\n"
if [ -z $1 ] || [ -z $2 ] || [ -z $3 ]; then
printf "\nPlease enter SUBSTRSTART SUBSTREND and LOGPATH\nFor instance, $0 11:59:17,206 12:02:14,606 test.log\n\n"
exit
fi
substrstart=$1
substrend=$2
logpath=$3
sed -n "/${substrstart}/,/${substrend}/p" ${logpath} | tee log_excerpt-$(date +%F_%H-%M-%S) | cat
Bash - Getting network data for the port (localhost only)
#!/bin/bash
printf "\nCurrently for localhost only\n\n"
if [ -z $1 ]; then
printf "Please enter port and [host]\n\n"
exit
fi
port=$1
host=localhost
printf '========= lsof -i ============\n\n'
lsof -i :${port}
printf '========= netstat -lnt | grep $port ============\n\n'
netstat -lnt | grep ${port}
printf '========= nc -z $host $port ============\n\n'
nc -z ${host} ${port}
Bash - kill everything with a matching name
#!/bin/bash
if [ -z $1 ]
then
printf "keyword is empty\n\n"
exit
fi
let k=0
let min=1
# mind the double brakets in do part
for i in $(ps -e | grep "$1"); do ((k++)); done
if [ "${k}" -lt "${min}" ]
then
printf "no such process to kill\n\n"
exit
fi
for i in $(ps -e | grep $1 | cut -s -f1 -d\t); do kill -9 ${i}; done
Thursday, June 6, 2019
Password generator with bash
Solution is based on LINK. Stuff in use: cat, tr, fold, head, /dev/urandom, echo, printf, for each and parameters testing
Wednesday, May 29, 2019
Configuration - setting up Docker for Ubuntu 19.04
NOTE: this configuration does not help with running docker over VPN
NOTE: Some of the commands below may require sudo
NOTE: It is assumed that you configure docker for user without sudo, cause using it with sudo does not quite make sense
Monday, May 27, 2019
Coding challenge - Jumping on Clouds
Original task is here: LINK
My version is below
Sunday, May 19, 2019
Know your round numbers or how to get 2^X with bash
pg@dana:~$ for i in {1..100}; do calc "2^$i" | xargs echo; done
2
4
8
16
32
64
128
256
512
1024
2048
4096
8192
16384
32768
65536
<...>
1267650600228229401496703205376
Just in case you want to get to the bottom of it, this mini-script uses:
-- my favorite calc application (package name apcalc)
-- cycles (for ... ; do... ; done)
-- ranges ({1..100})
-- redirection with xargs ( | xargs echo)
Enjoy your Linux!
PS: 'Round numbers' in relation to 2^X is actually an inside joke from the times when I couldn't afford to rent my own flat and had to share
Monday, September 3, 2018
Build your own Goldberd machine: Selenium via SoapUI
Hello, friends. Here is how you can have Selenium run from SoapUi Groovy script step. This solution was created and tested with:
- SoapUI 5.X
- Selenium 3.X
- upgrade the libs under $SOAPUI_HOME/lib (! not bin/ext)
- use a custom java library (goes under $SOAPUI_HOME/bin/ext)
Code examples can be found here. An example of a project with a Groovy script is inside the project under auxmaterials folder.
Sunday, October 22, 2017
Some Examples of Bash for Use in Test
NB: It is assumed that as long as you understand what man is, you are fine (use it if my explanation is not enough).
Thursday, January 8, 2015
SoapUi, Groovy and the meaning of life
Like many other IT tools SoapUi comes in two variants: paid and free of charge community edition. And on top of these two there are two ways of using it (which one you chose depends on your level of expertise). They are:
-- using it as any other UI-based tool
-- use it as extendible multi-purpose multi-tool with some UI for backward compatibility with the brains of normal users.
The latter will be discussed as a remedi against professional midlife crisis and the like.
Why meaning of life though? The thing is I see SoapUi and testing of web services as a great opportunity for those people who crave technical tasks, but can not get them either due to a limited skill with Java or because of all the tasty vacancies being filled in already. Practice proves that dissatisfaction with your job does not always result from shortcomings of your profession but from your lack of understanding what would make up for them. In other words, because you failed to identify the root cause of your dissatisfaction. Please note that it is assumed that the root cause is purely professional and not psychological (as psychological issues are out of scope for this post).