Parameters | XML | JSON |
Abbreviation | Extensible Markup Language | JavaScript Object Notation |
Syntax | It is structured as a tree (tags and nodes) | It is structured as key and value pairs |
Namespace support | It supports namespace. | It does not support namespace. |
Array Support | It does not support an array. | It supports an array. |
Speed | Bulky and slow in parsing, leading to slower data transmission | Very fast as the size of the file is considerably small, faster parsing by the JavaScript engine and hence faster transfer of data |
Security | XML structures are prone to some attacks as external entity expansion and DTD validation are enabled by default. When these are disabled, XML parsers are safer. | JSON parsing is safe almost all the time except if JSONP is used, which can lead to a Cross-Site Request Forgery (CSRF) attack. |
Data Types Support | Supports many complex data types including charts, images, and other non-primitive data types. | JSON supports only strings, numbers, arrays Boolean, and objects. Even objects can only contain primitive types. |
UTF Support | XML supports UTF-8 and UTF-16 encodings. | JSON supports UTF as well as ASCII encodings. |
Python: context manager
Most python programmer unconsciously use context manager without knowing its name. Have you ever opened a file using python? It is a high chance that you use it already. Yes it is the with syntax.
Context manager takes care or resource management such as setup (open) a connection and clean it up when it is no longer used. As mentioned above, one example of it is when we open a file. We use this syntax below.
with open('file_path/file_name.extension', mode) as f:
for line in f:
print(line)
# do something
It is not only about End to End Automation
How many times have you encountered when you are discussing automation in software testing or test (check) automation and the other party always refers it to e2e (end to end) automation? In my case, almost all the time.
It is true, for some reason recruiters, testers, interviewers, managers, developers, and maybe others thought that automation is merely about simulating the end user’s behaviors from the application.
So therefore when they put a job offer as a test automation engineer, it mostly contains a skill list of selenium and BDD (Behaviour Driven Development). Is it because of the name? (what is in the name?)
Test Automation Engineer is more than just building an End to End automation. I personally think the test automation engineer’s job is to make the work of testing easier and more efficient. It can include preparing test and staging environment, preparing test data, make sure that the data are consistent through the whole chain, make a deployment script, make a database script, automate notifications, automate test reports, and a lot of others.
Let me give you an example: several years ago (in 2013) I was a software tester for a company that offers a framework to build a portal or dashboard or application which enables the non-technical person to build it themselves with minimum help from developers. The framework is required to be deployed to the application/web server chosen by the client. The list of application servers is huge including WebSphere, WebLogic, JBoss, and Tomcat (and some more with different versions). It also needs to run a database script to database server which is supported such as MySQL, MSSQL Server, DB2, and Oracle. And we can start testing the application just after we deployed the framework, run the database script, and set the configuration. So we can see all the possible combination matrixes and if you have experienced deploying packages to WebLogic, WebSphere, and JBoss, you will understand the hell of it.
In this case, automation is really needed to automate the deployment, the database script execution, and to set the configurations. In this case, the tester will be able to focus on testing the application on the different possibilities of combination without being bothered by all of the nitty-gritty of the pre-requisite work.
Another example I had when I work as a Chain tester in 2019. It is not an easy test such as you access the web application, do something, and then see the output from the application itself. It was a complex systems consisting multiple applications and backends. It has queueing mechanism and it also has several front applications.
In order to start the actual testing, I had to create many test data in several systems and these data needs to be valid and synchronised. The test preparation itself when it is done by hand took several days (and dont forget that different systems are owned by different department – which made it even longer to prepare). In this case, automation comes in handy to prepare all of those data in different systems and check if they are valid and synchronised. So the tester will be able to focus to the actual test execution.
I used these two examples are representative to show that automation in software testing is much more than just End to End Automation. In fact, IMHO E2E automation is not the biggest picture of automation but people made it so.
What do you think?
EFCore- EntityTypeBuilder does not contain ToTable
.NET works on its wholesome different level. Sometimes (most of the time) kinda annoying.
So in case you experience this problem as well, it means that you might forgot to install or having a reference to Microsoft.EntityFrameworkCore.Relational assembly.
Python – What is Python?
Yes! Let’s start learning python! To be honest, I have worked with python for some time, on and off.
At one time, a client asked me to maintain their test automation which was built in python, and do bug fixing on that. Easy peasy. At another time, a client asked me to build their test automation from scratch in python. Done!
So basically, it is a really easy language to work with. But also don’t forget that I have a background in other programming languages such as javascript, Java, .NET, VB, and many others.
But then…the one million dollar question. Do we know what Python is? What is Python? No no, it is not the snake. Yeah, that snake is indeed pretty cute. But No! It is not the snake.
Okay, Python is a programming language that is easy to learn. It is applicable to many types of applications such as testing, web application, machine learning, data science, desktop application, and most important automation.
Well, that sounds more like its benefits instead of describing what python is. So, what is Python?
Right, Python is an interpreted language. The python interpreter will turn the source code, that you have built, into machine code line by line once at a time during the program’s execution.
Hmm, is it not the same concept as another language such as Java or .NET? The difference may be that they are using a compiler instead of an interpreter.
Well, with Python, the source code will be interpreted to source code line by line instead of as a whole at one time. Boom! Hmm okay, I might not know what it is exactly. Don’t blame me. I bet only a few people know what Python is. And bet that they care more about its advantages or its benefits.
Okay, so what are its benefits? Why Python?
Many! I have mentioned some of them above. First, it is easy to learn. Second, it is applicable to many fields from web applications to data science applications. On top of that, Python allows us to solve complex problems with less time and code. Moreover, Python has a large ecosystems, library, frameworks, and huge community. And don’t forget, Python developer is in high demand on for sure high salary.
So what can you ask more? Let’s dig it!
Happy learning Python!
Git – How to deal with “Refusing to merge unrelated histories”
Sometimes when I do “git pull” I got a message back
fatal: refusing to merge unrelated histories
After some searching, I found the solution is to force the pull to allow unrelated histories by using this command
git pull --allow-unrelated-histories
I still don’t know yet what the reason behind it. But I will surely try to find it out and when I find the reason behind it, I shall share it here as well.
How to show SpecFlow feature files in VS2019 MacOS?
Problem: SpecFlow feature files in VisualStudio 2019 for macOS don’t show up in the solution explorer. Rebuild, Unload, and Reload do not help. It just shows the generated .cs file but not the features file.

Solution: It turns out it is a common problem and people are still looking for the answer. This is the workaround I found and so far it is working for me. Right-click the project > Display Options > Show All Files

After that, I am able to see my feature file.

Setup SpecFlow in MacOS with VisualStudio 2019
I was excited when .NET finally released VisualStudio 2019 for macOS. So I installed it in order to be able to work with SpecFlow. Unfortunately, SpecFlow does not have a plugin for macOS.
After some search, I finally found there is a plugin for SpecFlow for macOS. It is just not officially built by the SpecFlow itself.
Create a project in MacOS with VS2019:
- Create a new Project with type NUnit
- Choose the version of .NET core ( I chose 3.1)
- Set the project name and location
Install the SpecFlow extension
- Download the extension from in https://github.com/straighteight/SpecFlow-VS-Mac-Integration
- go to menu Visual Studio > Extension.
- The extension manager will be displayed and then click the “Install from file”. It will install the SpecFlow extension.

Add SpecFlow NuGet packages to Project:
- Right-click the project > Manage Nuget Packages
- Type SpecFlow in the search bar
- Choose SpecFlow, SpecFlow NUnit, SpecFlow.Tools.MSBuild.Generation
Add Feature Files:


The only thing that I am missing here is the auto-generation of a step definition. The extension does not have that capability. Therefore, we need to make it ourselves.
Flask: Problem to run
if __name__ == '__main__':
app.run(host='0.0.0.0', port=80)
The one above does not work. If I do ‘flask run’, it still refers to IP address 127.0.0.1 and port 5000.
do ‘flask run –host=0.0.0.0 port=80’ in terminal will work well.
Double standard in Developer Views
I have had many discussion with several people who said that they are proud to announce that their team use test automation so that they can focus on developing instead of testing ( which is done by human) and hopefully will be able to reduce any tester possible.
When they said about this, I am usually a little bit skeptical about their understanding of what testing is. So then I continued the discussion. I mentioned to them that we are also busy implementing CI/CD and placed static code analysis tool during CI so then we do not need review column in our JIRA board which is done by human.
At the end of my sentence, most of the time they said “You will never be able to remove the code review process. Because the tools will never be as good as human.”
“Are you saying, we can replace human tester and not human reviewer? Is it because you think that testing is much easier than reviewing code? Or is it because the code review is done by developer and testing is done by a mere tester? And do you think that testing might can be done by anyone? Therefore it is replaceable by a machine who actually does nothing unless we programmed it to do so? Isn’t it a double standard?“
And the discussion continued, but at least I hope my point is taken.
Happy Testing!