Sunday, June 30, 2013

Magento... Finally it's running!


Yeah! After some weeks of trying to setup Magento to use it as SUT for some test, I could install it. I used WAMP 2.4 (64 bits) and Magento 1.7

Mainly I faced with 2 issues:
1) "php_curl" must be loaded.
2) "database server does not support InnoDB storage engine"


First Issue ""php_curl" must be loaded":


The first scenario was the most complex, because I tried all possible solution that I found in internet but without succeeding.











The first issue was solved removing the ";" manually at this line:

;extension=php_curl.dll

of the files located at:

...\wamp\bin\php\php5.4.12\php.ini
...\wamp\bin\apache\Apache2.4.4\bin\php.ini


But ... I also needed to add these lines to both php.ini files:

extension=php_pdo.dll
extension=php_mcrypt.dll

Then, restart all WAMP services. So.. First issue solved!


Second issue "database server does not support InnoDB storage engine":



This was the fix that should be added to www\magento\app\code\core\Mage\Install\Model\Installer\Db\Mysql4.php, after:


$variables  $this->_getConnection()
            ->
fetchPairs('SHOW VARIABLES');



Apply this fix, then restart all services and lunch again the Magento installation
.
This is the fix:

// Fix
        if (!isset($variables['have_innodb'])) {
                $engines 
$this->_getConnection()->fetchPairs('SHOW ENGINES');
                return (isset(
$engines['InnoDB']) && ($engines['InnoDB'== 'DEFAULT' || $engines['InnoDB'== 'YES'));
        
}
 
// End fix


Now. Enjoy Magento E-commerce.



Friday, June 21, 2013

Hackathon agile Mendoza 2013

Finally Mendoza had its first Hackathon last week in GlobalLogic Mendoza offices.
People sharing their knowledge with just one goal: Make a social application for the World.



After 1 hr debating different ideas we decided to create one application for bus transportation. The name was Busk. 
Initially, the users will be in charge of recording the bus routes once they take the bus, as soon as more users join the project, more routes will be in the system.


BusK is a social application for mobile. This app provides you the bus routes in your town being the users who save them. Some features included in Busk will help to determine which line will take you to your target in less time.
Busk will provide the nearest bus stop to take the bus according to your actual position, in a future, it will calculate the STA (Schedule Time of Arrival) and the time you need to wait for the bus. Once in the bus, Busk will inform you when you should leave the bus to reach your target.

Beers, Food and drinks ready!  ... Go!


We continue developing the app, everyone is welcome to help :)

Info:

F /BusK.transporte 
T @busktransporte
Git: https://github.com/kleer-public/BusK.git

Friday, June 7, 2013

Testers working in an Agile Team goes to Scrum Alliance


The Scrum Alliance is a non-profit professional membership organization created to share the Scrum framework and transform the world of work. I just posted an article about testers in agile teams. Take a look at my article :)

http://scrumalliance.org/articles/541-testers-working-in-an-agile-team



Monday, May 20, 2013

Design Patterns for automation frameworks


Object Page and Factory Page


“Page Factory” is a patter that represents the UI as a Class. Also, the GUI will include some features. This pattern will provide a bridge between the page and the tests.

Here are the main advantages of Page Object Pattern using:

1) Simple tests and ordered
2) Good support to tests saved in one place.
3) Easy way to create new test cases. Test can be created by people without programming skills.

Implementing these patterns in a project: 


Object Page:


Page Factory


Saturday, May 18, 2013

New Testers Skills



Roles had changed with the time, now we can find 3 different tester roles:

QA/QC Engineer: They will be in charge of creating and executing manual test. they will validate the external product quality. They will apply functional testing, Exploratory testing, etc.

Test Engineer: They will be charge of scripting test cases using some automation framework. they have some knowledge about programming (initial/intermediate). They could also apply some performance and security testing. 

Engineer in Test: They will be in charge of creating, designing, maintaining Automation frameworks. This role will require some programming skills and they validate the internal quality.






Tuesday, May 14, 2013

GTAC 2013 - NYC

GTAC 2013 was definitely more than I expected. In Two days,they included more than 20 awesome presentations.



For my point of view, the best presentation was "Breaking the Matrix - Android Testing at Scale" by Thomas Knych (Google), Stefan Ramsauer (Google) and Valera Zakharov (Google).



Take a look at it and mainly to the parallel execution's tips.
There were many great presentations that we could review later.

Saturday, April 20, 2013

Unit test coverage

As a Test Engineer, you should validate the unit tests coverage. Many times, we don't have access to all source code, and  it could be enough to check metrics in a tool like Sonar.
Otherwise, you could read unit tests and determine if programmers are covering the most important cases and suggest new scenarios.




In order to do it, I propose these validations:

Size:
For collections:

  • Test with an empty collection
  • A collection with 1 item
  • The smallest interesting case 
  • A collection with several items


Dichotomies:

  • Vowels / Non-vowels
  • Even / Odd 
  • Positive / Negative
  • Empty / Full.

Boundaries:

  • If the function behaves differently for values near a particular threshold.


Order:

  • If the function behaves differently when the values are in different orders. Identify each of those orders.


Example in Python:

import unittest

class TestStockPriceSummary(unittest.TestCase):
    """ Test class for function a1.stock_price_summary. """
 
 def test_empty_list(self):
  """ 
  Return an empty tuple when price_changes is empty.
  """
  price_changes = []
  actual = a1.stock_price_summary(price_changes)
  expected = (0,0)
  self.assertEqual(actual,expected)
 
 def test_single_item_positive(self):
  '''
  Test when the list only includes a positive item
  '''
  price_changes = [2.45]
  actual = a1.stock_price_summary(price_changes)
  expected = (2.45,0)
  self.assertEqual(actual,expected)
 
 def test_single_item_negative(self):
  '''
  Test when the list only includes a negative item
  '''
  price_changes = [-2.45]
  actual = a1.stock_price_summary(price_changes)
  expected = (0,-2.45)
  self.assertEqual(actual,expected)
 
 def test_single_item_zero(self):
  '''
  Test when the list contains only an item = 0
  '''
  price_changes = [0]
  actual = a1.stock_price_summary(price_changes)
  expected = (0,0)
  self.assertEqual(actual,expected)
 
 def test_general_case(self):
  """ 
  Return a 2-item tuple where the first item is the sum of the gains in price_changes and
  the second is the sum of the losses in price_changes.
  """
  price_changes = [0.01, 0.03, -0.02, -0.14, 0, 0, 0.10, -0.01]
  actual = a1.stock_price_summary(price_changes)
  expected = (0.14, -0.17)
  self.assertEqual(actual,expected)
 
if __name__ == '__main__':
    unittest.main(exit=False)