Testing Alfresco extensions

22
#SummitNow Testing Alfresco extensions (no, it’s not about jUnit) 07/11/2013 Alexey Ermakov / ITD Systems

description

Presentation from Alfresco Summit 2013

Transcript of Testing Alfresco extensions

Page 1: Testing Alfresco extensions

#SummitNow

Testing Alfresco extensions (no, it’s not about jUnit)

07/11/2013

Alexey Ermakov / ITD Systems

Page 2: Testing Alfresco extensions

#SummitNow #SummitNow

What’s the target?

• REST APIs tests

• UI tests

• complex behavioral scenarios

• easy-to-write tests

2

Page 3: Testing Alfresco extensions

#SummitNow #SummitNow

Why?

There’s Alfresco SDK and jUnit that already

allow you to run tests with repository

embedded to your Java code.

3

Page 4: Testing Alfresco extensions

#SummitNow #SummitNow

Because we can!

4

Page 5: Testing Alfresco extensions

#SummitNow #SummitNow

What’s inside?

• Python as the main tests language

• Proboscis as a core testing framework

• Selenium as a web browser emulator

5

Page 6: Testing Alfresco extensions

#SummitNow #SummitNow

But where is your framework?

Repository tests:

• Python wrappers for REST calls

• Out-of-the-box implementation for few

standard REST APIs

6

Page 7: Testing Alfresco extensions

#SummitNow #SummitNow

Example

from pyalfresco import alfresco

from proboscis.asserts import assert_equal

alf = alfresco.Alfresco()

assert_equal(

alf.get_person('admin').firstName,

'Administrator‘)

7

Page 8: Testing Alfresco extensions

#SummitNow #SummitNow

Example

def get_task(self, id):

return WrapperObject(

self,

**self.repo_get_json(

'api/task-instances/%s' % id

)

)

8

Page 9: Testing Alfresco extensions

#SummitNow #SummitNow

OK, what’s about UI tests?

UI tests:

• Predefined classes and decorators to run

tests only for specific browsers

9

Page 10: Testing Alfresco extensions

#SummitNow #SummitNow

OK, what’s about UI tests?

UI tests:

• Predefined classes and decorators to run

tests only for specific browsers

• Predefined APIs to interact with Alfresco

Share forms system

10

Page 11: Testing Alfresco extensions

#SummitNow #SummitNow

Example

from pyalfresco.tests import *

@for_browsers(['ie', 'firefox'])

class DashletTest(AlfrescoShareTest):

pass

11

Page 12: Testing Alfresco extensions

#SummitNow #SummitNow

Dashlet to test

12

Page 13: Testing Alfresco extensions

#SummitNow #SummitNow

Workflow start form

13

Page 14: Testing Alfresco extensions

#SummitNow #SummitNow

Testing dashlet

class WorkflowShortcutsDashlet(AlfrescoShareObject):

def locate(self):

self.el = self.driver.find_element_by_css_selector(

'.dashlet.workflow-shortcuts‘

)

14

Page 15: Testing Alfresco extensions

#SummitNow #SummitNow

Testing dashlet @test

def locate_dashlet(self):

self.perform_share_log_in('admin', 'admin')

self.driver.get(URL + '/page/user/admin/dashboard')

self.dashlet = WorkflowShortcutsDashlet(

parent=None, driver=self.driver

)

self.dashlet.locate()

15

Page 16: Testing Alfresco extensions

#SummitNow #SummitNow

Testing dashlet

@test(depends_on=[locate_dashlet])

def launch_workflows(self):

for w in self.dashlet.get_workflows().keys():

self.dashlet.launch_workflow(w)

16

Page 17: Testing Alfresco extensions

#SummitNow #SummitNow

Testing form

<appearance>

<field id="bpm:workflowDescription" />

<field id="bpm:assignee">

<control template="/orgchart-picker.ftl" />

</field>

</appearance>

17

Page 18: Testing Alfresco extensions

#SummitNow #SummitNow

Testing form f = AlfrescoShareWorkflowForm(

workflow_id='activiti$wf', parent=self, fields=[

{

'name': 'bpm:workflowDescription',

'control': AlfrescoShareFormTextFieldControl

},

...

] )

18

Page 19: Testing Alfresco extensions

#SummitNow #SummitNow

Testing form tffc = f.get_field_control('bpm:workflowDescription')

tffc.set_text('DESCRIPTION')

ocfc = f.get_field_control('bpm:assignee')

ocfc.show_picker()

ocfc.search('admin')

ocfc.add_person('Administrator')

ocfc.close_picker()

f.submit()

19

Page 20: Testing Alfresco extensions

#SummitNow #SummitNow

Hm, what about complex tests?

1. Create UI test

2. Verify results with REST bindings

3. Perform REST APIs tests

4. …

5. PROFIT!!

20

Page 21: Testing Alfresco extensions

#SummitNow #SummitNow

Roadmap

• More wrappers for REST APIs

• More predefined form controls

• Improvements to framework code

21

Page 22: Testing Alfresco extensions

#SummitNow #SummitNow

Stay in touch

22

Follow us: @itdsystems

Join the project: http://git.io/qzeE1Q