HOW TO Debug and test Plomino applications

Eric BREHAULT edited this page Sep 21, 2016 · 1 revision

How to find why a formula is not working as expected.

Plomino debug mode

In Plomino, there is a debug mode (go to db, edit, then check Debug mode), it just enables a verbose mode, so you get more information in the Zope server log.

Plone debug practices

You can use all the Plone dev tools and good practices:

##Traces in the log You can add some traces like this:

Log("My value is:"+plominoDocument.the_value)

it will be displayed in the Zope log.

##Zope in debug mode You can launch your Zope instance in debug mode (non HTTP):

bin/instance debug

you get a python prompt where 'app' is the Zope application (so app.Plone.yourdb will be your db object).

ZDB

Install zdb (see https://secure.simplistix.co.uk/svn/Simplistix/zdb/trunk/readme.txt), then insert this line in any Plomino formula:

from Products.zdb import set_trace; set_trace()

and when the formula is executed, you will be in debug mode in your server console.

Note: ZDB is an old product, but it does work, and is very useful.

Testing

You can create some Selenium tests to validate a behaviour and make sure it is not impacted by further changes.

You can create some python doctests (you can export your Plomino db as xml and have a doctest able to import it automatically in a blank site and run some tests, example: https://plomino.svn.sourceforge.net/svnroot/plomino/trunk/Plomino/Products/CMFPlomino/tests/samples.txt (that is what we use in our buildbot to run the Plomino continuous testing).

Python introspection

In Python you can do:

>>> dir(obj)

it returns all the object methods (which can be a bit much for Plone objects with deep inheritance trees);

>>> obj.__dict__

it returns all the attributes as a dictionary;

>>> obj.__class__

it returns the class;

>>> hasattr(obj, "something")

tests if the object has an attribute or method named "something" ("something" may be found via acquisition; if you don't want acquisition, use shasattr from Products/Archetypes/utils.py).

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.