Wednesday, April 15, 2015

Some important adb commands (android)

list connected devices
./adb devices
list installed applications
./adb shell pm list packages
uninstall app using adb
./adb uninstall com.scramphoto.scramphoto
install app using adb
./adb install -r ~/Download/scramphoto.apk
log for adb
./adb logcat
save logcat to text
./adb logcat -d > ~/Documents/logcat.txt
clear logcat
./adb logcat -c 
browse directory on device
./adb shell ls /sdcard/Pictures
copy files from device to computer
./adb pull /sdcard/Pictures/ ~/Documents/Pictures 
remove files on device 
./adb shell rm /sdcard/Pictures/* 

Sunday, March 15, 2015

Sikuli Tutorial - Detect any activity in monitor

This script is used if we want to detect if any activity(ies) happen in monitor using Sikuli. The idea is simple:
1. Capture the screen,
2. Take another capture after certain time interval
3. Compare the second capture to the first
4. Delete temporary image

Here is the script (I use python script)
# define screen captured
screen = Screen()
# first capture
img = capture(screen)
# wait for some second
img2 = capture(screen)

# compare two images
match2 = exists(img2)
arg = match2.exists(img)
if arg != None:
  # set threshold for similarity. You may change this
  if arg.getScore() > 0.95:
    print "no screen activity"
    print "activity detected"
  print "no match"

# remove temporary images
Hope this helps you.

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.