Tuesday, March 10, 2015

Automated Software Testing: Handling Memory Problem in Sikuli

One of the most important step in software engineering is software testing. Proper software testing will dramatically reduce the risk during software implementation. By the end of the day, testing will ensure your stakeholder about the quality of your software.

When you find a bug, you will assign a task to developer to fix it. When the developer has fixed the bug, it will be reassigned back to you. When you find another bug, you and the developer will do it again and again. Bad news is, when your program is fixed in one part, sometime it will make trouble in other part. Sometime what you have found as bug and then fixed, it will be bug again when the developer works in another part or your software. Thus, we have to do thorough testing for each release to ensure that no bugs are re-introduce.

Isn't it boring?

Yes, doing repetitive task (especially if the developer make daily release) will be boring. Thus, we need to automate our testing. You can do automation with any software you like. But, as I use Sikuli, here I share my hands-on experience with Sikuli.

Sikuli provides you handy API for GUI testing. However, when you want to do repetitive testing or combinatorial testing (you combine each choices in each features you have in your software), sikuli will have a problem with its heap memory especially when you have a lot of click() method. Here what I did for handling this problem:

1. In Java, we can force to release unused memory using System.gc(). In python, we can use gc.collect(). But as Sikuli runs Jython, we cannot use both. So, we have to do another way.

2. The problem is with memory. So, we have to minimize our variable in memory as much as possible. Thus, once we know that the memory is no longer used, then directly delete it from memory.

3. Here's an example for what I have done:

So, instead of using click([capture]), I put the image as one variable. So you do it by entering the name of the variable like this

size_500 =

And then you press "take screenshot" button 

Next thing you do is to click to the variable declared.

Lastly, if you think this screenshot will only used once, then directly delete the variable from memory by using

del size_500

Hope this helps if you have same problems with me.

=====
Thanks for ScramSoft for giving me amazing experiences.

No comments: