Testing Alfresco extensions
-
Upload
itd-systems -
Category
Technology
-
view
378 -
download
5
description
Transcript of Testing Alfresco extensions
#SummitNow
Testing Alfresco extensions (no, it’s not about jUnit)
07/11/2013
Alexey Ermakov / ITD Systems
#SummitNow #SummitNow
What’s the target?
• REST APIs tests
• UI tests
• complex behavioral scenarios
• easy-to-write tests
2
#SummitNow #SummitNow
Why?
There’s Alfresco SDK and jUnit that already
allow you to run tests with repository
embedded to your Java code.
3
#SummitNow #SummitNow
Because we can!
4
#SummitNow #SummitNow
What’s inside?
• Python as the main tests language
• Proboscis as a core testing framework
• Selenium as a web browser emulator
5
#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
#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
#SummitNow #SummitNow
Example
def get_task(self, id):
return WrapperObject(
self,
**self.repo_get_json(
'api/task-instances/%s' % id
)
)
8
#SummitNow #SummitNow
OK, what’s about UI tests?
UI tests:
• Predefined classes and decorators to run
tests only for specific browsers
9
#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
#SummitNow #SummitNow
Example
from pyalfresco.tests import *
@for_browsers(['ie', 'firefox'])
class DashletTest(AlfrescoShareTest):
pass
11
#SummitNow #SummitNow
Dashlet to test
12
#SummitNow #SummitNow
Workflow start form
13
#SummitNow #SummitNow
Testing dashlet
class WorkflowShortcutsDashlet(AlfrescoShareObject):
def locate(self):
self.el = self.driver.find_element_by_css_selector(
'.dashlet.workflow-shortcuts‘
)
14
#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
#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
#SummitNow #SummitNow
Testing form
<appearance>
<field id="bpm:workflowDescription" />
<field id="bpm:assignee">
<control template="/orgchart-picker.ftl" />
</field>
</appearance>
17
#SummitNow #SummitNow
Testing form f = AlfrescoShareWorkflowForm(
workflow_id='activiti$wf', parent=self, fields=[
{
'name': 'bpm:workflowDescription',
'control': AlfrescoShareFormTextFieldControl
},
...
] )
18
#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
#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
#SummitNow #SummitNow
Roadmap
• More wrappers for REST APIs
• More predefined form controls
• Improvements to framework code
21
#SummitNow #SummitNow
Stay in touch
22
Follow us: @itdsystems
Join the project: http://git.io/qzeE1Q