Testing Magento
Florinel Chis
@florinelchis

London Magento User Group – December Meetup
whoami

Co-Founder and Chief Service Officer

- Development Lead at Warner Music
- 11 years in e-commerce
- Magento since ...
Magento Testing
• Unit Testing
– Tools
– EcomDev_PHPUnit

• Functional Testing (CasperJS)
• Performance Testing
– Web page...
Unit Testing
• Available tools:
– plain phpunit
– MTAF
– EcomDev_PHPUnit

– TechDivision_MagentoUnitTesting
– Mage-Test
Plain phpunit
• Test API calls
• Test libraries
• Other basic tests
• Any other aspect of Magento that is not

dependent o...
EcomDev_PHPUnit
• Integrated with Magento
• Supports Fixtures

• You can test pretty much any aspect of
Magento (Controlle...
Database settings
•

app/etc/local.xml.phpunit
<phpunit>
<allow_same_db>?</allow_same_db>
</phpunit>

•

0
– Requires a se...
Module Structure
#Namespace/Module/etc/config.xml
<phpunit>
<suite>
<modules>
<Namespace_Module />
</modules>
</suite>
</p...
Testing Emails

• Extend Mage_Core_Model_Email_Template
• Mailcatcher.me (+API)
Mage_Core_Model_Email_Template
Mage::getConfig()->setNode(
'global/models/core/rewrite/email_template',
'Namespace_Test_Mo...
Mailcatcher configuration
$ gem install mailcatcher
$ mailcatcher
php.ini:

sendmail_path = /usr/bin/env catchmail -f mail...
Mailcatcher
CI Integration

• jenkins-php.org
• Book: Integrating PHP Projects with Jenkins

by Sebastian Bergmann
Examples

• Unit Test Demo
Functional Testing with CasperJS
“CasperJS is an open source navigation scripting & testing utility”

• Writtern for Phant...
‘No more CAPTCHAs, end robot

discrimination’
Why CasperJS
• Friendly
• Javascript
• Quick
• Simple
Performance testing
• Web Page
– webpagetest.org
– PageSpeed
– YSlow

– other tools

• Magento
• CI Integration
– webpagetest.org API
– PhantomJS + YSlow
PhantomJS + YSlow
phantomjs yslow.js http://yslow.org
phantomjs

yslow.js

-i

grade

-f

xml

www.yahoo.com

www.cnn.com
...
CSS Testing

• CSSLint
• PhantomCSS
CSSLint
• csslint --warnings=box-model,ids

filename.css
– [--format=junit-xml | checkstyle-xml]
PhantomCSS
• https://github.com/Huddle/PhantomCSS
PhantomCSS Tips
• Avoid dynamic data (homepage
menu, banners)
• Use version control for the base pictures (and
make sure y...
Magento Performance - XHProf
“XHProf is a function-level hierarchical profiler for PHP
and has a simple HTML based user in...
Aoe_Profiler
https://github.com/fbrnc/Aoe_Profiler
Where to go from here?
•

https://github.com/EcomDev/EcomDev_PHPUnit

•

http://netzarbeiter.com/media/mm13/

•

https://g...
Questions?
Thank you.

@florinelchis
http://www.linkedin.com/in/chisflorinel
Upcoming SlideShare
Loading in...5
×

Magento Testing - London Magento User Group, December Meetup

5,868

Published on

My presentation about Magento Testing, 4th of December 2013, London Magento User Group, December Meetup.

You can test any aspect of Magento. Having a continuous integration process in place and test coverage will give your development team confidence to release new functionality even on a Friday afternoon.


Florinel is currently co-founder and Chief Service Officer at Elastera (http://www.elastera.com), a cloud-based Platform as a Service for Magento e-commerce sites.

Published in: Technology

Magento Testing - London Magento User Group, December Meetup

  1. 1. Testing Magento Florinel Chis @florinelchis London Magento User Group – December Meetup
  2. 2. whoami Co-Founder and Chief Service Officer - Development Lead at Warner Music - 11 years in e-commerce - Magento since 2008
  3. 3. Magento Testing • Unit Testing – Tools – EcomDev_PHPUnit • Functional Testing (CasperJS) • Performance Testing – Web page performance testing – XHProf, Aoe_Profiler • Resources
  4. 4. Unit Testing • Available tools: – plain phpunit – MTAF – EcomDev_PHPUnit – TechDivision_MagentoUnitTesting – Mage-Test
  5. 5. Plain phpunit • Test API calls • Test libraries • Other basic tests • Any other aspect of Magento that is not dependent on things like session • Requires lots of effort in “setUp()”
  6. 6. EcomDev_PHPUnit • Integrated with Magento • Supports Fixtures • You can test pretty much any aspect of Magento (Controllers, Models, Layout, Config, etc)
  7. 7. Database settings • app/etc/local.xml.phpunit <phpunit> <allow_same_db>?</allow_same_db> </phpunit> • 0 – Requires a separate db for the tests • 1 – You can use the same db that Magento uses (local.xml) Note: Fixtures will delete all existing records (@see ::apply() function in Fixture/Processor/*)
  8. 8. Module Structure #Namespace/Module/etc/config.xml <phpunit> <suite> <modules> <Namespace_Module /> </modules> </suite> </phpunit> #Test files: Namespace/Module/Test/PathTo/Class.php Namespace/Module/Test/fixtures/*.yaml Namespace/Module/Test/expectations/*.yaml Namespace/Module/Test/providers/*.yaml
  9. 9. Testing Emails • Extend Mage_Core_Model_Email_Template • Mailcatcher.me (+API)
  10. 10. Mage_Core_Model_Email_Template Mage::getConfig()->setNode( 'global/models/core/rewrite/email_template', 'Namespace_Test_Model_Email_Template' ); // This is a hack to get the runtime config changes to take effect Mage::getModel('core/email_template'); $mailTemplate = Mage::getModel('core/email_template'); //… do your stuff Note: https://github.com/MageTest/Mage-Test is the inspiration for this approach
  11. 11. Mailcatcher configuration $ gem install mailcatcher $ mailcatcher php.ini: sendmail_path = /usr/bin/env catchmail -f mail@example.com #REST API: /messages /messages/1.plain /messages/1.json
  12. 12. Mailcatcher
  13. 13. CI Integration • jenkins-php.org • Book: Integrating PHP Projects with Jenkins by Sebastian Bergmann
  14. 14. Examples • Unit Test Demo
  15. 15. Functional Testing with CasperJS “CasperJS is an open source navigation scripting & testing utility” • Writtern for PhantomJS or SlimerJS • Good for “writing functional test suites, saving results as JUnit XML” • Other cool features: take screenshots, test remote DOM, scrape web documents
  16. 16. ‘No more CAPTCHAs, end robot discrimination’
  17. 17. Why CasperJS • Friendly • Javascript • Quick • Simple
  18. 18. Performance testing • Web Page – webpagetest.org – PageSpeed – YSlow – other tools • Magento
  19. 19. • CI Integration – webpagetest.org API – PhantomJS + YSlow
  20. 20. PhantomJS + YSlow phantomjs yslow.js http://yslow.org phantomjs yslow.js -i grade -f xml www.yahoo.com www.cnn.com www.nytimes.com phantomjs yslow.js --info all --format plain --ua "MSIE 9.0" http://yslow.org phantomjs yslow.js -i basic --rulseset yslow1 -d http://yslow.org phantomjs yslow.js -i grade -b http://www.showslow.com/beacon/yslow/ -v yslow.org phantomjs --load-plugins=yes yslow.js -vp 800x600 http://www.yahoo.com phantomjs yslow.js -i grade -f tap -t 85 http://yslow.org
  21. 21. CSS Testing • CSSLint • PhantomCSS
  22. 22. CSSLint • csslint --warnings=box-model,ids filename.css – [--format=junit-xml | checkstyle-xml]
  23. 23. PhantomCSS • https://github.com/Huddle/PhantomCSS
  24. 24. PhantomCSS Tips • Avoid dynamic data (homepage menu, banners) • Use version control for the base pictures (and make sure you update them when they should change) • Use the same OS/browser/viewport
  25. 25. Magento Performance - XHProf “XHProf is a function-level hierarchical profiler for PHP and has a simple HTML based user interface.” Magento modules: Demac_Xhprof and Liip_Xhprof
  26. 26. Aoe_Profiler https://github.com/fbrnc/Aoe_Profiler
  27. 27. Where to go from here? • https://github.com/EcomDev/EcomDev_PHPUnit • http://netzarbeiter.com/media/mm13/ • https://github.com/Vinai/test-frameworks-mm13de • https://github.com/lilmuckers/magento-lilmuckers_queue • https://github.com/MageTest • https://github.com/fbrnc/Aoe_Profiler • https://github.com/facebook/xhprof • http://magento.stackexchange.com/ • http://casperjs.org/
  28. 28. Questions?
  29. 29. Thank you. @florinelchis http://www.linkedin.com/in/chisflorinel
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×