<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://doc.expecco.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ab</id>
	<title>expecco Wiki (Version 25.x) - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://doc.expecco.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ab"/>
	<link rel="alternate" type="text/html" href="https://doc.expecco.de/wiki/Spezial:Beitr%C3%A4ge/Ab"/>
	<updated>2026-04-26T00:57:46Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Datei:HotkeySetupDialog.png&amp;diff=12654</id>
		<title>Datei:HotkeySetupDialog.png</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Datei:HotkeySetupDialog.png&amp;diff=12654"/>
		<updated>2018-07-06T07:26:16Z</updated>

		<summary type="html">&lt;p&gt;Ab: Ab lud eine neue Version von „Datei:HotkeySetupDialog.png“ hoch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Settings_HotKeySettings/en&amp;diff=12653</id>
		<title>Settings HotKeySettings/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Settings_HotKeySettings/en&amp;diff=12653"/>
		<updated>2018-07-06T07:23:26Z</updated>

		<summary type="html">&lt;p&gt;Ab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hotkey Settings ==&lt;br /&gt;
The purpose of hotkeys is to allow some control over expecco, while recording a GUI interaction, without having to move the mouse or click on something (i.e. to avoid both interacting with the application and recording that interaction). Hotkeys are caught by expecco before they are sent to any application. Thus, any key which is defined as hotkey can NOT be sent to ANY window.&lt;br /&gt;
&lt;br /&gt;
The Hotkey service is currently available only for Windows operating systems. The support for other operating systems is part of the roadmap and will be integrated in a future expecco release.&lt;br /&gt;
&lt;br /&gt;
=== Available Hotkey Functions ===&lt;br /&gt;
In this version expecco supports the following hot key functions:&lt;br /&gt;
&lt;br /&gt;
*Start a testrun in expecco (the hot key will be delegated to the last active browser window)&lt;br /&gt;
*Stop a running test execution&lt;br /&gt;
*Toggle (start/stop) the recording mode in expecco GUIBrowser&lt;br /&gt;
*Toggle (start/stop) the follow mouse mode in expecco GUIBrowser&lt;br /&gt;
*Get current focused UI element from application under test and select this element in the GUIBrowser tree&lt;br /&gt;
*Get current UI element under pointer from application under test and select this element in the GUIBrowser tree &lt;br /&gt;
&lt;br /&gt;
The state of the hotkey service (running/stopped) is shown in the setting dialog.&lt;br /&gt;
&lt;br /&gt;
=== Hotkey Setup ===&lt;br /&gt;
In the hotkey setup dialog you can specify the hotkeys you want to use within expecco. The default setting for the hotkeys is disabled. In the table (see image below) you can enable/disable each hotkey specification row by a check toggle. If disabled (check toggle is off), the hotkey will not be activated if the service is started. In the Hotkey and Modifier columns you can defined the keys you want to assign to the hotkey function. &lt;br /&gt;
&lt;br /&gt;
The hotkey settings can not be changed while the service is running.&lt;br /&gt;
&lt;br /&gt;
[[Datei:HotkeySetupDialog.png]]&lt;br /&gt;
&lt;br /&gt;
If you want to start the hotkey service directly after the expecco startup, please enable the check box &amp;quot;Auto start hot key event listener&amp;quot;. If you want to start the hotkey service manually press the &amp;quot;Start&amp;quot; button. If the &amp;quot;Start&amp;quot; button is disabled you may have unapplied changes in the settings. Please apply them first. After that the &amp;quot;Start&amp;quot; button should be enabled and ready for starting the service.&lt;br /&gt;
&lt;br /&gt;
[[Category:Settings]]&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Release_Notes_2.x&amp;diff=11814</id>
		<title>Release Notes 2.x</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Release_Notes_2.x&amp;diff=11814"/>
		<updated>2018-06-19T10:19:36Z</updated>

		<summary type="html">&lt;p&gt;Ab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;see also: [[Release Notes 1.x]]&lt;br /&gt;
&lt;br /&gt;
== Release 18.1 [previously planned as &amp;quot;2.12&amp;quot;] (Spring 2018) ==&lt;br /&gt;
With this release, we will start a new naming scheme, &lt;br /&gt;
using the publishing year as major version number and the delivery within the year as minor vsn. &lt;br /&gt;
&amp;lt;br&amp;gt;Thus, this version will be named &amp;quot;18.1.0.x&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is a major new release with many [[Release18_1_UI_Enhancements | UI enhancements]], and a number of new features.&lt;br /&gt;
&lt;br /&gt;
* Fix: attachment handling when moving items across projects (into/out of imported projects)&lt;br /&gt;
* Fix: occasional loosing SIGCHILD when multiple shell/cmd scripts were executed in parallel (race condition)&lt;br /&gt;
* Fix: many fixes for bugs/inconveniences reported by customers in expeccoALM&lt;br /&gt;
* Fix: STDLIB: &amp;quot;Stream [ read through]&amp;quot; was broken&lt;br /&gt;
* Fix: STDLIB: &amp;quot;Collection [ copyFromTo ]&amp;quot; and &amp;quot;Collection [ all but Last]&amp;quot; did not always raise an error.&lt;br /&gt;
&lt;br /&gt;
* Feature: Java bridge, .Net bridge and Manual test are now part of the expecco base package and therefore included in the base installer &lt;br /&gt;
&lt;br /&gt;
* Feature: many GUIBrowser enhancements&lt;br /&gt;
* Feature: FileBrowser: dump can be changed to be hex, octal, decimal or binary; character decoding in EBCDIC or 7-bit ASCII (to ignore high/parity bit)&lt;br /&gt;
* Feature: FileBrowser: search pattern can be entered as hex byte sequence&lt;br /&gt;
* Feature: [[Settings UpdatesSettings/en#Expecco_as_a_Patches_Server_.282.12.29|Patches server]]: one expecco may deliver patches to all other installations in the local network&lt;br /&gt;
* Feature: script actions are now executed inside the attachment folder by default. This makes it easier for the script to access files containing test data or configuration files. However, this is somewhat incompatible with previous versions, so this can be disabled via a settings flag. It can also be changed by providing the execution folder at the &amp;quot;&#039;&#039;execDir&#039;&#039;&amp;quot; pin.&lt;br /&gt;
* Feature: can pass [[ElementaryBlock Element/en#Environment_.28Shell-.29_Variables|shell environment variables to shell, batch actions]] (and all derived actions, like Ruby, Node.js, etc.)&lt;br /&gt;
* Feature: [[ElementaryBlock Element/en#Script_Expansion | script expansion]] with pin-value strings for shell, batch actions and all derived actions, like Ruby, Node.js, etc.&lt;br /&gt;
* Feature: [[ElementaryBlock Element/en#Matching_stdin.2Fstderr_against_a_Pattern|prompt matching in shell, batch actions]] (and all derived actions, like Ruby, Node.js, etc.)&lt;br /&gt;
* Feature: better error diagnostics (and error-line highlighting) in shell actions (and most derived actions, like Ruby, Node.js, etc.)&lt;br /&gt;
* Feature: [[DiagramElements-Pin/en#Do_not_Log_Pin-Value_in_Activitylog_Attribute|individual control over pin-value in activity log]] (e.g. to suppress passwords, cryptokeys etc.)&lt;br /&gt;
* Feature: [[DiagramElements-Pin/en#Output_Pin_Value_Timestamped_Attribute|output pin values can be individually timestamped]] (via step&#039;s pin menu)&lt;br /&gt;
* Feature: [[ElementaryBlock Element/en#Node.js-Script_Blocks|&#039;&#039;&#039;Node.js script blocks&#039;&#039;&#039;]] and [[ElementaryBlock Element/en#Node.js_Blocks|&#039;&#039;&#039;Node.js elementary action blocks&#039;&#039;&#039;]]&lt;br /&gt;
* Feature: [[VNC Plugin Reference/en|VNC GUI Testing plugin]]&lt;br /&gt;
&amp;lt;!-- * Feature: Message/Document browser --&amp;gt;&lt;br /&gt;
* Feature: additional call API to invoke actions from elementary code (see [[Expecco_API/en#Execution | Expecco_API -&amp;gt; Execution]])&lt;br /&gt;
* Feature: &amp;quot;&#039;&#039;Interrupt &amp;amp; Debug&#039;&#039;&amp;quot; button in the [[Test Editor/en|Test-Runner]] (to interrupt runaway elementary blocks)&lt;br /&gt;
* Feature: New libraries for [[MQTT/en | MQTT (IoT)]] and [[SomeIP/en | Some/IP (Automotive)]] (licensed addons)&lt;br /&gt;
* Feature: [[Settings_DebuggerSettings/en#Freeze_Values_are_Immutable | Immutable FreezeValues]]&lt;br /&gt;
* Feature: New [[Plot/Graph Action Blocks | &#039;&#039;&#039;Plot/Graph action blocks&#039;&#039;&#039;]] &lt;br /&gt;
* Feature: New [[R Action Blocks | &#039;&#039;&#039;R action blocks&#039;&#039;&#039;]] &lt;br /&gt;
* Feature: New [[ElementaryBlock_Element/en#Python_Script_Blocks|Python Action Blocks]], [[ElementaryBlock_Element/en#Ruby_Script_Blocks|Ruby Action Blocks]], Perl Action Blocks, [[ElementaryBlock_Element/en#Node.js-Script_Blocks|Node Action Blocks]], Go Action Blocks and  TCL Action Blocks&lt;br /&gt;
* Feature / UI enhancement: screenshot dialog includes an &amp;quot;Attach&amp;quot; button.&lt;br /&gt;
* Feature / UI enhancement: embedded XML inspector in the attachment editor&lt;br /&gt;
* Feature / UI enhancement: &amp;quot;Generate&amp;quot; submenu to generate XPath accessors in the attachment editor, when showing XML.&lt;br /&gt;
* Feature: New library (StatisticDistributionsLibrary.ets) to generate random numbers with various distributions for statistic/monte carlo/simulations&lt;br /&gt;
* Feature: New library (Plot_Graph.ets) to demonstrate the new Plot/Graph actions&lt;br /&gt;
* Feature: New [[DiagramElements-Probe | probe types ]] to record values without checks (especially useful for plot/graph generation)&lt;br /&gt;
* Feature: timestamps can now have sub-millisecond resolution&lt;br /&gt;
* Feature: [[Selenium_WebDriver_Plugin|Selenium WebDriver Plugin]]&lt;br /&gt;
&lt;br /&gt;
* Feature Qt enhancement: Inject support for 32/64bit applications including pre build clients&lt;br /&gt;
* Feature Qt enhancement: Add support for accessing complex properties like images, colors, ...&lt;br /&gt;
* Feature Qt enhancement: Menu item / Menu action support in GUI Browser&lt;br /&gt;
* Feature Qt enhancement: Extention of the qt block library&lt;br /&gt;
* Feature Qt enhancement: Replace QtScript with Qt JS api for Qt5 clients&lt;br /&gt;
* Feature Qt enhancement: Introduce a hook for customer client extension&lt;br /&gt;
&lt;br /&gt;
* Feature Manual test plugin: New java based excel import&lt;br /&gt;
* Feature Manual Test plugin: Complete rework of the wizard&lt;br /&gt;
* Feature Manual test plugin: New manual test block library&lt;br /&gt;
&lt;br /&gt;
* Performance: Speed improvement in testplan execution&lt;br /&gt;
&lt;br /&gt;
* UI Enhancement: script actions are now initially created with a minimum set of special pins (actually: only the stdout pin is created initially). More pins can be added (and unused pins can be removed) in the schema editor via the &amp;quot;Special Pins&amp;quot; menu. We found that the vast majority of script steps only needed that single pin, and that diagrams look nicer without them (you can change this to the old behaviour via &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Look &amp;amp; Feel&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Diagram Editor&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Create all Special Pins Initially&#039;&#039;&amp;quot;).&lt;br /&gt;
* UI Enhancement: coloring by type is now on by default (if you don&#039;t like it, go to &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot;-&amp;quot;&#039;&#039;Look&amp;amp;nbsp;&amp;amp;amp;&amp;amp;nbsp;Feel&#039;&#039;&amp;quot;-&amp;quot;&#039;&#039;Diagram&amp;amp;nbsp;Editor&#039;&#039;&amp;quot;-&amp;quot;&#039;&#039;Look-Elements&#039;&#039;&amp;quot; and turn it off again)&lt;br /&gt;
* UI Enhancement: Limit the number of levels in follow activity&lt;br /&gt;
* UI Enhancement: ActivityTree shows activities with handled exceptions in orange (used to be red). Also, the handling activity shows where the handled exception was thrown. Finally, the automatic navigation to the first error (after a run) will skip over handled exceptions, to place you immediately to the activity which was responsible for the failure or error.&lt;br /&gt;
* UI Enhancement: goto &amp;quot;recently modified&amp;quot; and &amp;quot;recently executed&amp;quot; menus in the main-menu&lt;br /&gt;
* UI Enhancement: &amp;quot;&#039;&#039;Select Step in Diagram&#039;&#039;&amp;quot; menu-function in the activity log tree viewer&lt;br /&gt;
* UI Enhancement: &amp;quot;&#039;&#039;Exchange Connections&#039;&#039;&amp;quot; menu-function in the network editor&lt;br /&gt;
* UI Enhancement: &amp;quot;&#039;&#039;Import Attachments&#039;&#039;&amp;quot; tools menu-function (to import many files)&lt;br /&gt;
* UI Enhancement: more information and functions in the Diff-viewer; new menu item in the &amp;quot;&#039;&#039;Extra&#039;&#039;&amp;quot;-menu: &amp;quot;&#039;&#039;Compare two Testsuite Files&#039;&#039;&amp;quot;&lt;br /&gt;
* UI Enhancement: &amp;quot;&#039;&#039;Add/Remove Tag&#039;&#039;&amp;quot; menu functions (in tree) can also be applied recursively to children of the selected item&lt;br /&gt;
* UI Enhancement: if a step was selected when a new step is created (by the &amp;quot;&#039;&#039;New Step&#039;&#039;&amp;quot; function or by paste), the new step is automatically connected via trigger-out/trigger-in&lt;br /&gt;
* UI Enhancement: Connect multiple (same-named) pins&lt;br /&gt;
* UI Enhancement: fix (rewrite) JavaScript elementary code, when a pin is renamed&lt;br /&gt;
* UI Enhancement: rewrite script code when a pin is renamed&lt;br /&gt;
* STD-LIB: New action blocks: Stream[Set Binary Mode], Stream[Set Text Mode], Stream[Set Error-at-End Mode]&lt;br /&gt;
* STD-LIB: New action blocks to access and query [[DiagramElements-Probe | probes]] by ID (in Misc/Probes)&lt;br /&gt;
* STD-LIB: New logInconclusive and logError actions (similar to logFailure, these mark the test&#039;s outcome, but continue execution)&lt;br /&gt;
* STD-LIB: New actions to configure HTTPS for tls1.2 / tls1.1 (some sites no longer accept tls1.1)&lt;br /&gt;
&lt;br /&gt;
== Release 2.11.1 (Fall 2017) ==&lt;br /&gt;
* Bugfix Release including all patches for Release 2.11&lt;br /&gt;
* Fix: Windows Automation - Stability&lt;br /&gt;
* Fix: Problems with OLE&lt;br /&gt;
&lt;br /&gt;
== Release 2.11 (Spring 2017) ==&lt;br /&gt;
* Fix: JSON parameter save/reload fixed&lt;br /&gt;
* Fix: method name check in codeView was disabled&lt;br /&gt;
* Feature: &amp;quot;must be executed&amp;quot; attribute in action definition&lt;br /&gt;
* Feature: extensions to the expecco GUI automation framework&lt;br /&gt;
* Feature: new interfaces for automotive and mechanical engineering technoligies&lt;br /&gt;
* Feature: new host bound single user licensing scheme&lt;br /&gt;
&lt;br /&gt;
* Packaging: new expecco product bundle: &amp;quot;expecco Testcenter&amp;quot; - test automation plus test and resource management in one package&lt;br /&gt;
&lt;br /&gt;
== Release 2.10.1 (= 2.10 + Patches) ==&lt;br /&gt;
* Fix: keyboard focus for menu&lt;br /&gt;
* Backward Compatibility Fix: the fixes in the JavaScript &amp;quot;indexOf()&amp;quot;-functions (done in 2.8) lead to problems with a customer (which migrated from 2.7.5 to 2.10). For this, two flags have been added to the suite-attributes, which enforce the old behavior for individual and/or all imported libraries. This allows for old code (which expects the wrong 1-based indexOf return values) to coexist with new code (which expects the correct 0-based versions) within a single test suite.&lt;br /&gt;
&lt;br /&gt;
* Feature: [[Settings UpdatesSettings/en|Patches can be loaded via HTTP]] (FTP was blocked in some customers&#039; networks)&lt;br /&gt;
* Performance: Bulk data transfers to network drives under Windows.&lt;br /&gt;
&lt;br /&gt;
== Release 2.10 (Fall 2016) ==&lt;br /&gt;
* Feature: Mobile Testing Plugin (renamed from &amp;quot;&#039;&#039;Appium Plugin&#039;&#039;&amp;quot;) got more support functions to administer appium &amp;amp; adb connections&lt;br /&gt;
* Feature: new &amp;quot;Reimport Tool&amp;quot; for bulk reimport and library (dependency) checking&lt;br /&gt;
* Feature: DLL-mapping dialog in the settings. For a typical usage example, see [[AutoIt Library#Installation|Installation of AutoIt]]&lt;br /&gt;
* Feature: New blocks in the stdlib (&amp;quot;&#039;&#039;Split by Size&#039;&#039;&amp;quot; and &amp;quot;&#039;&#039;Split by Element&#039;&#039;&amp;quot;), to split collections (strings) into sized pieces or at a separator.&lt;br /&gt;
* Feature: New command line options to specify individual parameter values&lt;br /&gt;
* Feature: More formats supported for external parameter files (JSON)&lt;br /&gt;
* Feature: new [[Starting expecco via Command Line/en#Detailed_Option_Description|command line]] arguments: -E, -P:, --parameter:, --silent, --licenseServerHost, --licenseServerPort&lt;br /&gt;
* Feature: the new [[Java Interface Library v2|Java Bridge V2]]/DotNET Bridge V2 is now used by the default. The new bridge uses only a single port for communication (thus making firewall/router setup easier), supports casts, better controllable argument-type specification, is faster in its communication and supports asynchronous messages with lazy results. In case of backward compatibility problems, the old bridge is still available and can be used by changing the settings.&lt;br /&gt;
* Feature: custom print length of the pin and log values for the report&lt;br /&gt;
* Feature: [[CompoundBlock Editor-CompoundWorksheet Editor/en#Controlling_Logging_and_Tracing|&amp;quot;&#039;&#039;Ignore All Skip in Trace&#039;&#039;&amp;quot;]] settings to enforce a full trace (for debugging)&lt;br /&gt;
&lt;br /&gt;
* Performance: (dramatic) speedup in some image handling functions.&lt;br /&gt;
* Performance: speedup (50%) in the XML reader.&lt;br /&gt;
* Performance: speedup initial startup by not loading unlicensed plugins&lt;br /&gt;
&lt;br /&gt;
* UI enhancement: GUI Browser: double click on action/attribute item adds it to the list&lt;br /&gt;
* UI enhancement: GUI Browser: reconnect/fix autostart when deleting recorded steps&lt;br /&gt;
* UI enhancement: GUI Browser: better undo handling&lt;br /&gt;
* UI enhancement: GUI Browser: keep tree and selection on refresh (not all technologies)&lt;br /&gt;
* UI enhancement: better replace-step dialog in diagram editor (library filter added)&lt;br /&gt;
* UI enhancement: Line numbers in the attachment editor&lt;br /&gt;
* UI enhancement: Line numbers and trim-blank-lines option in multiline freeze value entry&lt;br /&gt;
* UI enhancement: color settings for red-green deficiency (in status color dialog)&lt;br /&gt;
&lt;br /&gt;
* Change: SerialPort Plugin: the port parameter pins (baudrate, stop-bits, parity etc.) are now parameter pins. This will only affect you, if the open-serial-port block is triggered via one of those pins (which is very very unlikely)&lt;br /&gt;
&lt;br /&gt;
* Fix: All leftover (unclosed) external connections (Sockets, Serial Lines, Bridges) are closed after a testrun, when in slave mode&lt;br /&gt;
* Fix: All leftover (unterminated) started appium servers are closed after a testrun, when in slave mode&lt;br /&gt;
* Fix: Multiline freeze value editor interpreted strings starting with digits as numeric value&lt;br /&gt;
* Fix: Multiline freeze value editor allows for empty lines at the end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Release 2.9 (June/2016) ==&lt;br /&gt;
* Feature: Mobile Testing (aka &amp;quot;Appium&amp;quot;)-Plugin: Add recorder&lt;br /&gt;
* Feature: Mobile Testing Plugin: Update capabilities&lt;br /&gt;
* Feature: Mobile Testing Plugin: Settings Dialog for setting up external auxiliary programs (adb, Appium Server, AVD Manager, SDK Manager)&lt;br /&gt;
* Feature: Mobile Testing Plugin: New menu for launching auxiliary programs (Appium Server, AVD Manager, SDK Manager)&lt;br /&gt;
* Feature: Mobile Testing Plugin: New buttons in Android Wizard to refresh the device list, launch AVD Manager, install APKs.&lt;br /&gt;
* Feature: Mobile Testing Plugin: Save and load connection settings in and from attachments in test suite.&lt;br /&gt;
* Feature: Mobile Testing Plugin: Allow editing and copying of connection settings.&lt;br /&gt;
* Feature: Mobile Testing Plugin: Allow adding arbitrary capabilities for forward compatibility.&lt;br /&gt;
* Feature: Mobile Testing Plugin Bundle: Update contents, in particular use Appium Server 1.4.16.&lt;br /&gt;
* Feature: Mobile Testing Plugin Bundle: Remove Android emulator from bundle as it is huge. If needed, download and install it separately.&lt;br /&gt;
* Feature: [[Java Interface Library v2|New Java Bridge (still experimental in 2.9)]]. The old Java Bridge is still available and enabled by default.&lt;br /&gt;
&lt;br /&gt;
* UI enhancement: Mobile Testing Plugin: More verbose warning dialogs.&lt;br /&gt;
* UI enhancement: Mobile Testing Plugin: Remove obsolete &amp;quot;Emulator Settings&amp;quot; from connection dialog (using the wizard is superior now).&lt;br /&gt;
* UI enhancement: Mobile Testing Plugin: Make newCommandTimeout capability user visible&lt;br /&gt;
* UI enhancement: Mobile Testing Plugin: Remove unimportantView from default capabilities&lt;br /&gt;
* UI enhancement: Mobile Testing Plugin: Automatically select entry in Android Wizard if only one is available.&lt;br /&gt;
* UI enhancement: Mobile Testing Plugin: Highlight unknown capabilities to give a hint in case of bad spelling.&lt;br /&gt;
* UI enhancement: Mobile Testing Plugin: Add a search filter for packages in the Android Wizard.&lt;br /&gt;
* UI enhancement: General/Linux: Support for Anti-Aliased XFT-Fonts.&lt;br /&gt;
&lt;br /&gt;
* STD-LIB: Image Save block supports writing of JPEG images.&lt;br /&gt;
* Mobile Testing Library: New blocks for multi-touch actions&lt;br /&gt;
* Mobile Testing Library: New block for reading capabilities from files&lt;br /&gt;
* Mobile Testing Library: New blocks for reading logs&lt;br /&gt;
* Mobile Testing Library: New block &amp;quot;Find Elements by XPath&amp;quot; for finding sets of elements&lt;br /&gt;
* Mobile Testing Library: New blocks for consecutive actions on single elements&lt;br /&gt;
* Mobile Testing Library: New block for taking screenshots&lt;br /&gt;
* Mobile Testing Library: New blocks for pressKeyCode API, make old blocks (sendKeyEvent API) obsolete&lt;br /&gt;
&lt;br /&gt;
* Localization: Mobile Testing Plugin: German translation mostly complete.&lt;br /&gt;
* Documentation: Update and add more documentation to Appium library.&lt;br /&gt;
&lt;br /&gt;
* Fix: Mobile Testing Plugin: Timeout in Android Wizard if adb does not return.&lt;br /&gt;
* Fix: Mobile Testing Plugin: Do not cut off multi-line status messages in Android Wizard.&lt;br /&gt;
* Fix: Mobile Testing Plugin: Fix error and bad behavior when cancelling file dialog in connection settings.&lt;br /&gt;
* Fix: Mobile Testing Plugin: Do not drop connection settings on connection error.&lt;br /&gt;
* Fix: Mobile Testing Plugin: Use Java path from Settings&lt;br /&gt;
* Fix: XML/XPath - accepts underscore (&#039;_&#039;) and Unicode characters in element and attribute names.&lt;br /&gt;
* Fix: RemoteAccess Plugin - fix error waiting for prompt&lt;br /&gt;
* Fix: RemoteAccess Plugin - fix response in same line as command&lt;br /&gt;
* Fix: Java GUI Plugin - fix error in &amp;quot;Verify Path&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Release 2.8 (Q4/2015) ==&lt;br /&gt;
&#039;&#039;&#039;Notice: You have to install a patch for expecco 2.7.5, if you want to load a Testsuite which was edited in expecco 2.8 and uses some of the new features! [[release2.8 incompatibilities|(More info)]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Feature: [[TableDrivenBlock Element|Table driven actions]]; these offer a simpler, table oriented interface&lt;br /&gt;
* Feature: Mobile Testing-Plugin (was &amp;quot;Appium&amp;quot;-Plugin) for Android and Apple iOS test automation for mobile devices&lt;br /&gt;
* Feature: Variable number of pins in groups ([[DiagramElements-Pin/en#Variable_Number_of_Pins|&amp;quot;Variable Pin Groups&amp;quot;]])&lt;br /&gt;
* Feature: First release of the [[User Defined Menu Items#Useful_Building_Blocks_for_Custom_Menu_Operations|Expecco Reflection Library]] (to automate expecco itself)&lt;br /&gt;
* Feature: Enum datatype: support for individual assigned enum values, described in the [[Datatype Editor/en#Enumeration_Types|Datatype Editor Documentation]] and the [[Datatype Element/en#Enumeration_Types|Datatype Element Documentation]] and also the [[Expecco API/en#Enum Type Functions|API Documentation]].&lt;br /&gt;
* Feature: [[Starting expecco via Command Line#Expecco_REST_Service_Interface|REST service]] for remote controlling expecco execution&lt;br /&gt;
* Feature: New [[ElementaryBlock Element/en#Ruby_Script_Blocks|Ruby actions]]&lt;br /&gt;
* Feature: Better execution directory settings for [[ElementaryBlock Element/en#Shell_Script_Blocks|Shell blocks]]&lt;br /&gt;
* Feature: New step attributes for more specific [[CompoundBlock Editor-CompoundWorksheet Editor/en#Step_Specific_Options_.28Context_Menu.29|&amp;quot;skip in log/trace&amp;quot;]] options (for looping actions)&lt;br /&gt;
* Feature: New user preference setting to ignore all [[CompoundBlock Editor-CompoundWorksheet Editor/en#Step_Specific_Options_.28Context_Menu.29|skip-in-log]] attributes (for debugging)&lt;br /&gt;
* Feature: &amp;quot;immediate fork new process&amp;quot; flag now also in block description or dynamically from elementary code&lt;br /&gt;
* Feature: Improved performer data type handling; virtual steps now only accept valid performers, and freeze value choices are filtered for valid performers.&lt;br /&gt;
* Feature: Option to start background action before or after pre-action&lt;br /&gt;
* Feature: New constraint datatype type (for better freeze value selection)&lt;br /&gt;
* Feature/Fix: compatibility of indexOf() / lastIndexOf() JavaScript functions (allow substring search)&lt;br /&gt;
* Feature: Data inspector for strings shows another (XML-DOM) tab if the string is an XML string. This tab shows the parsed XML DOM-tree.&lt;br /&gt;
* Feature: Attachments can now be declared as binary file attachment. These will not be interpreted; especially, no cr/lf translation and utf8 or similar character translation is performed. Binary attachments are required, e.g. to embed jar or other code files.&lt;br /&gt;
&lt;br /&gt;
* UI enhancement: Multiline labels in steps (use &amp;quot;\&amp;quot; as line-separator)&lt;br /&gt;
* UI enhancement: Additional custom headline and custom text block in reports (can be filled in right before printing).&lt;br /&gt;
* UI enhancement: Can now also set breakpoints on steps and code lines of readonly actions (e.g. in an imported library)&lt;br /&gt;
* UI enhancement: Undo gives a warning when about to undo past the previous file-save state&lt;br /&gt;
* UI enhancement: Added a menu item in &amp;quot;Extras&amp;quot; - &amp;quot;Debugging&amp;quot; to stop [[User Defined Menu Items#Asynchronous_.28Background.29_Actions|background menu actions]]&lt;br /&gt;
* UI enhancement: Added more convenient pin-comment editing support to the schema editor&lt;br /&gt;
* UI enhancement: Text editor has a new &amp;quot;split&amp;quot; menu function in its tools-submenu&lt;br /&gt;
* UI enhancement: Better &amp;quot;New Step&amp;quot; and &amp;quot;Replace Step&amp;quot; dialogs in the diagram editor (showing preview, code and contents; also show attachments).&lt;br /&gt;
* UI enhancement: Better autoconnect and matching blocks search algorithm in the &amp;quot;Place and Select New Step&amp;quot; function (i.e. New Step function, when an output pin is selected)&lt;br /&gt;
* UI enhancement: New scale diagram function (scale and spread multiple steps)&lt;br /&gt;
* UI enhancement: Lint performs a number of checks on a block being edited and gives immediate warnings in the info line (same checks as in the tree&#039;s error- and special search tabs)&lt;br /&gt;
* UI enhancement: New lint-error check rules to detect consumed pin values in loops and multi-triggered chains.&lt;br /&gt;
* UI enhancement: Double click on a search item to navigate to it in the tree&lt;br /&gt;
* UI enhancement: Codeview and network view in the activitylog indicate that they are readonly.&lt;br /&gt;
* UI enhancement: Secondary navigation tree for drag&amp;amp;drop.&lt;br /&gt;
* UI enhancement: Warn if it is due time to check for updates.&lt;br /&gt;
&lt;br /&gt;
* STD-LIB: Collection creator and multi-setter blocks with variable number of pins (alternating key-value pairs)&lt;br /&gt;
* STD-LIB: New DLL-Mapping block&lt;br /&gt;
* STD-LIB: New blocks &amp;quot;File [modification time]&amp;quot;, &amp;quot;File [access time]&amp;quot; and &amp;quot;File [creation time]&amp;quot;.&lt;br /&gt;
* STD-LIB: Additional blocks for event queue handling.&lt;br /&gt;
* STD-LIB: Additional blocks for static step-local storage.&lt;br /&gt;
* STD-LIB: Better versions for FAIL/WARN/INFO, LogFAIL, logWARNING and logINFO. New &amp;quot;Transcriber with Timestamp&amp;quot; action.&lt;br /&gt;
* STD-LIB: Fixed some collection-type issues (now pins are #-template-typed, instead of Collection), which required a downcast in many suites.&lt;br /&gt;
* STD-LIB: New blocks: &amp;quot;Trigger Periodically&amp;quot; and &amp;quot;Counter&amp;quot;&lt;br /&gt;
* STD-LIB: New blocks: &amp;quot;Enumtype symbol&amp;lt;-&amp;gt;integer&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Fix: Freeze value menu of unions of enums did not merge the individual enum values&lt;br /&gt;
* Fix: Freeze value menu of unions of constraint dataType-types&lt;br /&gt;
* Fix: The search breakpoints function (in the errors-tab of the treeview) now also finds statement breakpoints.&lt;br /&gt;
* Fix: Fixes and improvements in the SOAP, REST and WSDL frameworks&lt;br /&gt;
* Fix: Enum numeric value assignments were lost sometimes when saving/restoring&lt;br /&gt;
* Fix: Search for references of a variable did not find them in imported libraries&lt;br /&gt;
* Fix: Report of looped testplans (pre-action was reported multiple times)&lt;br /&gt;
* Fix: behavior of cancel pin (did neither drive triggerOut-pin, nor exception-pin)&lt;br /&gt;
* Fix: Fixes for crashes in follow mouse and backward (XPath) compatibility in WindowsAutomation Plugin&lt;br /&gt;
* Fix: The embedded type editor for defined classes lost its code window, when reopened on another class type.&lt;br /&gt;
* Fix: Proper class naming is now enforced in the type editor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Release 2.7.5 (2015-06-09) ==&lt;br /&gt;
&#039;&#039;&#039;New features&#039;&#039;&#039;:&lt;br /&gt;
* The JavaFX plugin now supports keyboard input. Use the block &amp;quot;&#039;&#039;Request Focus&#039;&#039;&amp;quot; to focus an input field and the block &amp;quot;&#039;&#039;Type Text&#039;&#039;&amp;quot; to enter any text.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bugfixes&#039;&#039;&#039;:&lt;br /&gt;
* The JavaFX plugin now provides improved connection handling.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For expecco running under Linux you need glibc &amp;gt;= 2.14&lt;br /&gt;
&lt;br /&gt;
Tested technology versions:&lt;br /&gt;
* Selenium&lt;br /&gt;
* The Java Bridge requires a JDK version 1.6 or higher&lt;br /&gt;
* JavaFX testing requires JavaFX 8&lt;br /&gt;
* Qt: Qt 2.6.3 (MinGW, vs2008), Qt 4.8.4 (MinGW, vs2008, vs2010, vs2013), Qt 5.4.2 (vs2010, vs2013)&lt;br /&gt;
* .NET&lt;br /&gt;
* MFC&lt;br /&gt;
* HTML 5&lt;br /&gt;
* DevExpress&lt;br /&gt;
* Android&lt;br /&gt;
* iOS&lt;br /&gt;
* Windows CE/Mobile Phone&lt;br /&gt;
* CANoe: 8.2 SP4&lt;br /&gt;
* WSDL-Import: it is required that you re-import your WSDL-Definitions in your Testsuites&lt;br /&gt;
&lt;br /&gt;
==Release 2.7.1 ==&lt;br /&gt;
* Convenient menu functions to add the special [[Expecco API#Using a Particular JVM Connection / Executing Groovy on a Possibly Remote Machine|&amp;quot;java&amp;quot; and &amp;quot;groovy&amp;quot;]] input pins to a Groovy elementary block.&lt;br /&gt;
* Standard library: new blocks: &amp;quot;&#039;&#039;Directory [ Contents as Filenames ]&#039;&#039;&amp;quot;, &amp;quot;&#039;&#039;Directory [ Contents as Pathnames ]&#039;&#039;&amp;quot;, &amp;quot;&#039;&#039;Directory [ Contents as Basenames ]&#039;&#039;&amp;quot;, &amp;quot;&#039;&#039;File [ isReadable? ]&#039;&#039;&amp;quot; and &amp;quot;&#039;&#039;File [ isWritable? ]&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Release 2.7 ==&lt;br /&gt;
* Patches go into a release specific directory (e.g. patches-2.7.0.5)&lt;br /&gt;
* configurable external editor for attachments and csv data (e.g. excel or openoffice calculator)&lt;br /&gt;
* tree view: markers in search lists; add to/remove from remembered list menu items&lt;br /&gt;
* tree view: folders can have tags, too&lt;br /&gt;
* tree view: per-tag icons in tree&lt;br /&gt;
* [[Starting expecco via Command Line/en#Utility_Functions|&amp;quot;--diff&amp;quot; command line option]]&lt;br /&gt;
* [[Starting expecco via Command Line/en#Startup|&amp;quot;--settings&amp;quot; command line option]]&lt;br /&gt;
* Scatter/Gather composition of test plans from multiple suites [[Starting expecco via Command Line/en#Scatter Gather Test Suite Composition|via command line arguments]]&lt;br /&gt;
* library: background OS process and background block actions&lt;br /&gt;
* improved type checks and preference settings&lt;br /&gt;
* schema editor: cursor up/down keys in pin name fields&lt;br /&gt;
* schema and diagram editor: additional menu functions in multiple-pin selection menu&lt;br /&gt;
* new blocks in the StandardLibrary: ExceptionClassifier, WriteCSV, Load/Save Environment from/to CSV&lt;br /&gt;
* [[SAP Testing|SAP plugin and VBScript action blocks]]&lt;br /&gt;
* change in the handling of Groovy callbacks. Please read [[Expecco API/en#Attention_.2F_Warning|&amp;quot;Attention / Warning&amp;quot;]] and [[Expecco API/en#Special_Functions|&amp;quot;Special Functions&amp;quot;]] in the Groovy API documentation.&lt;br /&gt;
* improved Groovy debugging support&lt;br /&gt;
* new common Android and iPhone/iPad testing framework&lt;br /&gt;
* option to save a per-run report, when a suite is executed in a loop (especially useful, when running until fail or until success)&lt;br /&gt;
* block assertions: assert-executed / assert-all outputs written / assert any output written&lt;br /&gt;
* License server support&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Release 2.6.2 bugfix release - April 2014 ==&lt;br /&gt;
Thus is a stable release consisting of the 2.6.1 base version INCLUDING all 2.6.1 patches (up to April).&lt;br /&gt;
&lt;br /&gt;
==Release 2.6.1 update - January 2014 ==&lt;br /&gt;
* [[Expecco API#Groovy_Elementary_Blocks|groovy action]]: the java-bridge can be passed in via pin named &amp;quot;java&amp;quot; or environment var named &amp;quot;JAVA&amp;quot;. GroovyShell can be passed in via pin named &amp;quot;groovy&amp;quot; or variable named &amp;quot;GROOVY&amp;quot;. Pins are optional for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
==Release 2.6 - November 2013 ==&lt;br /&gt;
* New testplan execution loop mode: &amp;quot;loop until required test fails&amp;quot;&lt;br /&gt;
* More options for automatic check for and installation of updates &amp;amp; patches&lt;br /&gt;
* Better default directories in file open/save/import dialogs.&lt;br /&gt;
* Tuned automatic reimport when multiple libraries are imported.&lt;br /&gt;
* Improved Java object inspector&lt;br /&gt;
* New attachment contents representation modes.&lt;br /&gt;
* Step tooltips include the underlying block&#039;s tree location.&lt;br /&gt;
* Shift click on connection selects all underlying connections.&lt;br /&gt;
* Give an indication (colorize menubar) if running with root/Admin rights.&lt;br /&gt;
* Option to put the custom operations menu into the top menu&lt;br /&gt;
* Additional tab in tree view to search by item-type&lt;br /&gt;
* Additional search options for interfaces and concrete actions&lt;br /&gt;
* Various bug fixes &amp;amp; enhancements:&lt;br /&gt;
** handle duplicate attachment filenames,&lt;br /&gt;
** fixed some type conversions,&lt;br /&gt;
** fixed clipboard handling under XWindow/Qt desktop,&lt;br /&gt;
** fixed non-changing testplan/testitem spec page.&lt;br /&gt;
** added string search in resources, skills and inventories&lt;br /&gt;
** no longer close expanded tree items when reimporting&lt;br /&gt;
** fixed making an imported library writable, which is imported by another sub-import&lt;br /&gt;
** fixed freeze of template pin to boolean/enum&lt;br /&gt;
** fixed enum values which start with a digit (aka &#039;001 aaa&#039;)&lt;br /&gt;
** remove freeze value connection via menu&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Release 2.5 ==&lt;br /&gt;
* Can refer to [[Environment Editor#Initialization Types|shell environment variables]] in an environment variable&#039;s initializer.&lt;br /&gt;
* New elementary block type: Groovy Code. Installs script code to be executed in a Java target or a local JVM.&lt;br /&gt;
* New keyword driven actions&lt;br /&gt;
* Additional checks in save dialogs to prevent overwriting another testsuite/library&lt;br /&gt;
* Optional automatic reimport or check for reimportable imports (configure via settings dialog)&lt;br /&gt;
* Additional freeze value validation when types are edited&lt;br /&gt;
* New plugin: Jar Import&lt;br /&gt;
* New and much improved manual test import plugin&lt;br /&gt;
* Speedup, improvements and fixes in the JavaBridge plugin&lt;br /&gt;
* Menu actions can [[Misc Editor#Background_Actions|execute in the background]] (name as &amp;quot;...&amp;amp;&amp;quot;)&lt;br /&gt;
* Background actions in testplan and testcase&lt;br /&gt;
* Much faster: startup, plugin loading and bridge communication&lt;br /&gt;
* Multiple freeze value menu organizations for enum types (hierarchical selection)&lt;br /&gt;
&lt;br /&gt;
===Release 2.5.1 - July 2013 ===&lt;br /&gt;
&amp;lt;!-- This is a bugfix release, in which various patches and small enhancements from the past few months have been integrated.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* Automatic &amp;amp; semiautomatic update from server&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Release 2.4 - February 2013 ==&lt;br /&gt;
This is a bugfix release, in which various patches and small enhancements from the past few months have been integrated.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Release 2.3 - December 2012 ==&lt;br /&gt;
* New integrated GUI Browser&lt;br /&gt;
* New menu functions: &amp;quot;minimize/restore all Windows&amp;quot;&lt;br /&gt;
* Polarion compatible report&lt;br /&gt;
* Improved Project-Diff-Browser&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Release 2.2==&lt;br /&gt;
* New SchemaEditor menu functions: copy/paste pin interface&lt;br /&gt;
* New plugin: [[GembirdPowerControlPlugin Reference#|Gembird Power Control Plugin]]&lt;br /&gt;
* New debug-menu function: &amp;quot;close all temporary windows&amp;quot;&lt;br /&gt;
* [[Probe|Probes]]; easy recording and check of pinValues&lt;br /&gt;
* JUnit compatible report&lt;br /&gt;
* HTTP and SOAP transmission log (optional on Transcript)&lt;br /&gt;
* Fixed WSDL/SOAP for document-style operations&lt;br /&gt;
* Better inspector (hex dump tab, hex representation of floats)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Release 2.1 - November 2011==&lt;br /&gt;
* Condition variables for simple (and easy to use) control of testcase execution&lt;br /&gt;
* [[Webservices#REST_Baustein|REST-Call]] blocks&lt;br /&gt;
* Option to disable logging of activityNotifications (from the underlying language framework)&lt;br /&gt;
* URL-override for SOAP service call blocks via the SOAP_URL environment variable.&lt;br /&gt;
* Access to the certificate store (for SSL/HTTPS), allows adding and removing individual certificates&lt;br /&gt;
* Elementary steps can have a variable number of output-pins (for multiplexer, dispatcher, round-robin generators etc.)&lt;br /&gt;
* New menu function: &amp;quot;Generate Value Extractor&amp;quot; for Dictionary-typed pin values. (in the activityLog, output pin-data menu)&lt;br /&gt;
* New tree-menu function: &amp;quot;Refactor&amp;quot;-&amp;gt;&amp;quot;Change Variable Access&amp;quot;, to search for and replace environment variable references.&lt;br /&gt;
* New datatype [[Datatype Element#Special_Types|&amp;quot;struct&amp;quot;]], to represent arbitrary compound (struct) values.&lt;br /&gt;
* GUI improvements: better annotation-text editors; line numbers, tags in file viewer&lt;br /&gt;
* Allow for multi pin-value parametrization in testplan (block with multiple inputs in a testplan item)&lt;br /&gt;
* Proxy support for HTTP-fetch blocks&lt;br /&gt;
* Recording feature for Java Swing GUIs&lt;br /&gt;
* Enhanced Java Swing Function Block Library&lt;br /&gt;
* GUI Browser improvements: tree view with widget specific icons, record tree actions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Release 2.0==&lt;br /&gt;
* Elementary steps can have a variable number of input-pins (improves the format, plus, string-concat and many other blocks)&lt;br /&gt;
* Statistic page added to the project editor&lt;br /&gt;
* Improved manual test import plugin; nicer Manualtest runner GUI; user definable manual test GUI&lt;br /&gt;
* Allow for pin-value parametrization in testplan (block with a single input parameter in a testplan item)&lt;br /&gt;
* Configurable max. cleanup time after terminating a run; Confirmation Dialog when longer.&lt;br /&gt;
* ActivityLog: added &amp;quot;Select in Tree&amp;quot; from log-entry&lt;br /&gt;
* HTTPS / SSL Support for HTTP blocks&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Release_Notes_2.x&amp;diff=11813</id>
		<title>Release Notes 2.x</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Release_Notes_2.x&amp;diff=11813"/>
		<updated>2018-06-19T10:18:37Z</updated>

		<summary type="html">&lt;p&gt;Ab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;see also: [[Release Notes 1.x]]&lt;br /&gt;
&lt;br /&gt;
== Release 18.1 [previously planned as &amp;quot;2.12&amp;quot;] (Spring 2018) ==&lt;br /&gt;
With this release, we will start a new naming scheme, &lt;br /&gt;
using the publishing year as major version number and the delivery within the year as minor vsn. &lt;br /&gt;
&amp;lt;br&amp;gt;Thus, this version will be named &amp;quot;18.1.0.x&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is a major new release with many [[Release18_1_UI_Enhancements | UI enhancements]], and a number of new features.&lt;br /&gt;
&lt;br /&gt;
* Fix: attachment handling when moving items across projects (into/out of imported projects)&lt;br /&gt;
* Fix: occasional loosing SIGCHILD when multiple shell/cmd scripts were executed in parallel (race condition)&lt;br /&gt;
* Fix: many fixes for bugs/inconveniences reported by customers in expeccoALM&lt;br /&gt;
* Fix: STDLIB: &amp;quot;Stream [ read through]&amp;quot; was broken&lt;br /&gt;
* Fix: STDLIB: &amp;quot;Collection [ copyFromTo ]&amp;quot; and &amp;quot;Collection [ all but Last]&amp;quot; did not always raise an error.&lt;br /&gt;
&lt;br /&gt;
* Feature: Java bridge, .Net bridge and Manual test are now part of the expecco base package and therefore now included in the base installer &lt;br /&gt;
&lt;br /&gt;
* Feature: many GUIBrowser enhancements&lt;br /&gt;
* Feature: FileBrowser: dump can be changed to be hex, octal, decimal or binary; character decoding in EBCDIC or 7-bit ASCII (to ignore high/parity bit)&lt;br /&gt;
* Feature: FileBrowser: search pattern can be entered as hex byte sequence&lt;br /&gt;
* Feature: [[Settings UpdatesSettings/en#Expecco_as_a_Patches_Server_.282.12.29|Patches server]]: one expecco may deliver patches to all other installations in the local network&lt;br /&gt;
* Feature: script actions are now executed inside the attachment folder by default. This makes it easier for the script to access files containing test data or configuration files. However, this is somewhat incompatible with previous versions, so this can be disabled via a settings flag. It can also be changed by providing the execution folder at the &amp;quot;&#039;&#039;execDir&#039;&#039;&amp;quot; pin.&lt;br /&gt;
* Feature: can pass [[ElementaryBlock Element/en#Environment_.28Shell-.29_Variables|shell environment variables to shell, batch actions]] (and all derived actions, like Ruby, Node.js, etc.)&lt;br /&gt;
* Feature: [[ElementaryBlock Element/en#Script_Expansion | script expansion]] with pin-value strings for shell, batch actions and all derived actions, like Ruby, Node.js, etc.&lt;br /&gt;
* Feature: [[ElementaryBlock Element/en#Matching_stdin.2Fstderr_against_a_Pattern|prompt matching in shell, batch actions]] (and all derived actions, like Ruby, Node.js, etc.)&lt;br /&gt;
* Feature: better error diagnostics (and error-line highlighting) in shell actions (and most derived actions, like Ruby, Node.js, etc.)&lt;br /&gt;
* Feature: [[DiagramElements-Pin/en#Do_not_Log_Pin-Value_in_Activitylog_Attribute|individual control over pin-value in activity log]] (e.g. to suppress passwords, cryptokeys etc.)&lt;br /&gt;
* Feature: [[DiagramElements-Pin/en#Output_Pin_Value_Timestamped_Attribute|output pin values can be individually timestamped]] (via step&#039;s pin menu)&lt;br /&gt;
* Feature: [[ElementaryBlock Element/en#Node.js-Script_Blocks|&#039;&#039;&#039;Node.js script blocks&#039;&#039;&#039;]] and [[ElementaryBlock Element/en#Node.js_Blocks|&#039;&#039;&#039;Node.js elementary action blocks&#039;&#039;&#039;]]&lt;br /&gt;
* Feature: [[VNC Plugin Reference/en|VNC GUI Testing plugin]]&lt;br /&gt;
&amp;lt;!-- * Feature: Message/Document browser --&amp;gt;&lt;br /&gt;
* Feature: additional call API to invoke actions from elementary code (see [[Expecco_API/en#Execution | Expecco_API -&amp;gt; Execution]])&lt;br /&gt;
* Feature: &amp;quot;&#039;&#039;Interrupt &amp;amp; Debug&#039;&#039;&amp;quot; button in the [[Test Editor/en|Test-Runner]] (to interrupt runaway elementary blocks)&lt;br /&gt;
* Feature: New libraries for [[MQTT/en | MQTT (IoT)]] and [[SomeIP/en | Some/IP (Automotive)]] (licensed addons)&lt;br /&gt;
* Feature: [[Settings_DebuggerSettings/en#Freeze_Values_are_Immutable | Immutable FreezeValues]]&lt;br /&gt;
* Feature: New [[Plot/Graph Action Blocks | &#039;&#039;&#039;Plot/Graph action blocks&#039;&#039;&#039;]] &lt;br /&gt;
* Feature: New [[R Action Blocks | &#039;&#039;&#039;R action blocks&#039;&#039;&#039;]] &lt;br /&gt;
* Feature: New [[ElementaryBlock_Element/en#Python_Script_Blocks|Python Action Blocks]], [[ElementaryBlock_Element/en#Ruby_Script_Blocks|Ruby Action Blocks]], Perl Action Blocks, [[ElementaryBlock_Element/en#Node.js-Script_Blocks|Node Action Blocks]], Go Action Blocks and  TCL Action Blocks&lt;br /&gt;
* Feature / UI enhancement: screenshot dialog includes an &amp;quot;Attach&amp;quot; button.&lt;br /&gt;
* Feature / UI enhancement: embedded XML inspector in the attachment editor&lt;br /&gt;
* Feature / UI enhancement: &amp;quot;Generate&amp;quot; submenu to generate XPath accessors in the attachment editor, when showing XML.&lt;br /&gt;
* Feature: New library (StatisticDistributionsLibrary.ets) to generate random numbers with various distributions for statistic/monte carlo/simulations&lt;br /&gt;
* Feature: New library (Plot_Graph.ets) to demonstrate the new Plot/Graph actions&lt;br /&gt;
* Feature: New [[DiagramElements-Probe | probe types ]] to record values without checks (especially useful for plot/graph generation)&lt;br /&gt;
* Feature: timestamps can now have sub-millisecond resolution&lt;br /&gt;
* Feature: [[Selenium_WebDriver_Plugin|Selenium WebDriver Plugin]]&lt;br /&gt;
&lt;br /&gt;
* Feature Qt enhancement: Inject support for 32/64bit applications including pre build clients&lt;br /&gt;
* Feature Qt enhancement: Add support for accessing complex properties like images, colors, ...&lt;br /&gt;
* Feature Qt enhancement: Menu item / Menu action support in GUI Browser&lt;br /&gt;
* Feature Qt enhancement: Extention of the qt block library&lt;br /&gt;
* Feature Qt enhancement: Replace QtScript with Qt JS api for Qt5 clients&lt;br /&gt;
* Feature Qt enhancement: Introduce a hook for customer client extension&lt;br /&gt;
&lt;br /&gt;
* Feature Manual test plugin: New java based excel import&lt;br /&gt;
* Feature Manual Test plugin: Complete rework of the wizard&lt;br /&gt;
* Feature Manual test plugin: New manual test block library&lt;br /&gt;
&lt;br /&gt;
* Performance: Speed improvement in testplan execution&lt;br /&gt;
&lt;br /&gt;
* UI Enhancement: script actions are now initially created with a minimum set of special pins (actually: only the stdout pin is created initially). More pins can be added (and unused pins can be removed) in the schema editor via the &amp;quot;Special Pins&amp;quot; menu. We found that the vast majority of script steps only needed that single pin, and that diagrams look nicer without them (you can change this to the old behaviour via &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Look &amp;amp; Feel&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Diagram Editor&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Create all Special Pins Initially&#039;&#039;&amp;quot;).&lt;br /&gt;
* UI Enhancement: coloring by type is now on by default (if you don&#039;t like it, go to &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot;-&amp;quot;&#039;&#039;Look&amp;amp;nbsp;&amp;amp;amp;&amp;amp;nbsp;Feel&#039;&#039;&amp;quot;-&amp;quot;&#039;&#039;Diagram&amp;amp;nbsp;Editor&#039;&#039;&amp;quot;-&amp;quot;&#039;&#039;Look-Elements&#039;&#039;&amp;quot; and turn it off again)&lt;br /&gt;
* UI Enhancement: Limit the number of levels in follow activity&lt;br /&gt;
* UI Enhancement: ActivityTree shows activities with handled exceptions in orange (used to be red). Also, the handling activity shows where the handled exception was thrown. Finally, the automatic navigation to the first error (after a run) will skip over handled exceptions, to place you immediately to the activity which was responsible for the failure or error.&lt;br /&gt;
* UI Enhancement: goto &amp;quot;recently modified&amp;quot; and &amp;quot;recently executed&amp;quot; menus in the main-menu&lt;br /&gt;
* UI Enhancement: &amp;quot;&#039;&#039;Select Step in Diagram&#039;&#039;&amp;quot; menu-function in the activity log tree viewer&lt;br /&gt;
* UI Enhancement: &amp;quot;&#039;&#039;Exchange Connections&#039;&#039;&amp;quot; menu-function in the network editor&lt;br /&gt;
* UI Enhancement: &amp;quot;&#039;&#039;Import Attachments&#039;&#039;&amp;quot; tools menu-function (to import many files)&lt;br /&gt;
* UI Enhancement: more information and functions in the Diff-viewer; new menu item in the &amp;quot;&#039;&#039;Extra&#039;&#039;&amp;quot;-menu: &amp;quot;&#039;&#039;Compare two Testsuite Files&#039;&#039;&amp;quot;&lt;br /&gt;
* UI Enhancement: &amp;quot;&#039;&#039;Add/Remove Tag&#039;&#039;&amp;quot; menu functions (in tree) can also be applied recursively to children of the selected item&lt;br /&gt;
* UI Enhancement: if a step was selected when a new step is created (by the &amp;quot;&#039;&#039;New Step&#039;&#039;&amp;quot; function or by paste), the new step is automatically connected via trigger-out/trigger-in&lt;br /&gt;
* UI Enhancement: Connect multiple (same-named) pins&lt;br /&gt;
* UI Enhancement: fix (rewrite) JavaScript elementary code, when a pin is renamed&lt;br /&gt;
* UI Enhancement: rewrite script code when a pin is renamed&lt;br /&gt;
* STD-LIB: New action blocks: Stream[Set Binary Mode], Stream[Set Text Mode], Stream[Set Error-at-End Mode]&lt;br /&gt;
* STD-LIB: New action blocks to access and query [[DiagramElements-Probe | probes]] by ID (in Misc/Probes)&lt;br /&gt;
* STD-LIB: New logInconclusive and logError actions (similar to logFailure, these mark the test&#039;s outcome, but continue execution)&lt;br /&gt;
* STD-LIB: New actions to configure HTTPS for tls1.2 / tls1.1 (some sites no longer accept tls1.1)&lt;br /&gt;
&lt;br /&gt;
== Release 2.11.1 (Fall 2017) ==&lt;br /&gt;
* Bugfix Release including all patches for Release 2.11&lt;br /&gt;
* Fix: Windows Automation - Stability&lt;br /&gt;
* Fix: Problems with OLE&lt;br /&gt;
&lt;br /&gt;
== Release 2.11 (Spring 2017) ==&lt;br /&gt;
* Fix: JSON parameter save/reload fixed&lt;br /&gt;
* Fix: method name check in codeView was disabled&lt;br /&gt;
* Feature: &amp;quot;must be executed&amp;quot; attribute in action definition&lt;br /&gt;
* Feature: extensions to the expecco GUI automation framework&lt;br /&gt;
* Feature: new interfaces for automotive and mechanical engineering technoligies&lt;br /&gt;
* Feature: new host bound single user licensing scheme&lt;br /&gt;
&lt;br /&gt;
* Packaging: new expecco product bundle: &amp;quot;expecco Testcenter&amp;quot; - test automation plus test and resource management in one package&lt;br /&gt;
&lt;br /&gt;
== Release 2.10.1 (= 2.10 + Patches) ==&lt;br /&gt;
* Fix: keyboard focus for menu&lt;br /&gt;
* Backward Compatibility Fix: the fixes in the JavaScript &amp;quot;indexOf()&amp;quot;-functions (done in 2.8) lead to problems with a customer (which migrated from 2.7.5 to 2.10). For this, two flags have been added to the suite-attributes, which enforce the old behavior for individual and/or all imported libraries. This allows for old code (which expects the wrong 1-based indexOf return values) to coexist with new code (which expects the correct 0-based versions) within a single test suite.&lt;br /&gt;
&lt;br /&gt;
* Feature: [[Settings UpdatesSettings/en|Patches can be loaded via HTTP]] (FTP was blocked in some customers&#039; networks)&lt;br /&gt;
* Performance: Bulk data transfers to network drives under Windows.&lt;br /&gt;
&lt;br /&gt;
== Release 2.10 (Fall 2016) ==&lt;br /&gt;
* Feature: Mobile Testing Plugin (renamed from &amp;quot;&#039;&#039;Appium Plugin&#039;&#039;&amp;quot;) got more support functions to administer appium &amp;amp; adb connections&lt;br /&gt;
* Feature: new &amp;quot;Reimport Tool&amp;quot; for bulk reimport and library (dependency) checking&lt;br /&gt;
* Feature: DLL-mapping dialog in the settings. For a typical usage example, see [[AutoIt Library#Installation|Installation of AutoIt]]&lt;br /&gt;
* Feature: New blocks in the stdlib (&amp;quot;&#039;&#039;Split by Size&#039;&#039;&amp;quot; and &amp;quot;&#039;&#039;Split by Element&#039;&#039;&amp;quot;), to split collections (strings) into sized pieces or at a separator.&lt;br /&gt;
* Feature: New command line options to specify individual parameter values&lt;br /&gt;
* Feature: More formats supported for external parameter files (JSON)&lt;br /&gt;
* Feature: new [[Starting expecco via Command Line/en#Detailed_Option_Description|command line]] arguments: -E, -P:, --parameter:, --silent, --licenseServerHost, --licenseServerPort&lt;br /&gt;
* Feature: the new [[Java Interface Library v2|Java Bridge V2]]/DotNET Bridge V2 is now used by the default. The new bridge uses only a single port for communication (thus making firewall/router setup easier), supports casts, better controllable argument-type specification, is faster in its communication and supports asynchronous messages with lazy results. In case of backward compatibility problems, the old bridge is still available and can be used by changing the settings.&lt;br /&gt;
* Feature: custom print length of the pin and log values for the report&lt;br /&gt;
* Feature: [[CompoundBlock Editor-CompoundWorksheet Editor/en#Controlling_Logging_and_Tracing|&amp;quot;&#039;&#039;Ignore All Skip in Trace&#039;&#039;&amp;quot;]] settings to enforce a full trace (for debugging)&lt;br /&gt;
&lt;br /&gt;
* Performance: (dramatic) speedup in some image handling functions.&lt;br /&gt;
* Performance: speedup (50%) in the XML reader.&lt;br /&gt;
* Performance: speedup initial startup by not loading unlicensed plugins&lt;br /&gt;
&lt;br /&gt;
* UI enhancement: GUI Browser: double click on action/attribute item adds it to the list&lt;br /&gt;
* UI enhancement: GUI Browser: reconnect/fix autostart when deleting recorded steps&lt;br /&gt;
* UI enhancement: GUI Browser: better undo handling&lt;br /&gt;
* UI enhancement: GUI Browser: keep tree and selection on refresh (not all technologies)&lt;br /&gt;
* UI enhancement: better replace-step dialog in diagram editor (library filter added)&lt;br /&gt;
* UI enhancement: Line numbers in the attachment editor&lt;br /&gt;
* UI enhancement: Line numbers and trim-blank-lines option in multiline freeze value entry&lt;br /&gt;
* UI enhancement: color settings for red-green deficiency (in status color dialog)&lt;br /&gt;
&lt;br /&gt;
* Change: SerialPort Plugin: the port parameter pins (baudrate, stop-bits, parity etc.) are now parameter pins. This will only affect you, if the open-serial-port block is triggered via one of those pins (which is very very unlikely)&lt;br /&gt;
&lt;br /&gt;
* Fix: All leftover (unclosed) external connections (Sockets, Serial Lines, Bridges) are closed after a testrun, when in slave mode&lt;br /&gt;
* Fix: All leftover (unterminated) started appium servers are closed after a testrun, when in slave mode&lt;br /&gt;
* Fix: Multiline freeze value editor interpreted strings starting with digits as numeric value&lt;br /&gt;
* Fix: Multiline freeze value editor allows for empty lines at the end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Release 2.9 (June/2016) ==&lt;br /&gt;
* Feature: Mobile Testing (aka &amp;quot;Appium&amp;quot;)-Plugin: Add recorder&lt;br /&gt;
* Feature: Mobile Testing Plugin: Update capabilities&lt;br /&gt;
* Feature: Mobile Testing Plugin: Settings Dialog for setting up external auxiliary programs (adb, Appium Server, AVD Manager, SDK Manager)&lt;br /&gt;
* Feature: Mobile Testing Plugin: New menu for launching auxiliary programs (Appium Server, AVD Manager, SDK Manager)&lt;br /&gt;
* Feature: Mobile Testing Plugin: New buttons in Android Wizard to refresh the device list, launch AVD Manager, install APKs.&lt;br /&gt;
* Feature: Mobile Testing Plugin: Save and load connection settings in and from attachments in test suite.&lt;br /&gt;
* Feature: Mobile Testing Plugin: Allow editing and copying of connection settings.&lt;br /&gt;
* Feature: Mobile Testing Plugin: Allow adding arbitrary capabilities for forward compatibility.&lt;br /&gt;
* Feature: Mobile Testing Plugin Bundle: Update contents, in particular use Appium Server 1.4.16.&lt;br /&gt;
* Feature: Mobile Testing Plugin Bundle: Remove Android emulator from bundle as it is huge. If needed, download and install it separately.&lt;br /&gt;
* Feature: [[Java Interface Library v2|New Java Bridge (still experimental in 2.9)]]. The old Java Bridge is still available and enabled by default.&lt;br /&gt;
&lt;br /&gt;
* UI enhancement: Mobile Testing Plugin: More verbose warning dialogs.&lt;br /&gt;
* UI enhancement: Mobile Testing Plugin: Remove obsolete &amp;quot;Emulator Settings&amp;quot; from connection dialog (using the wizard is superior now).&lt;br /&gt;
* UI enhancement: Mobile Testing Plugin: Make newCommandTimeout capability user visible&lt;br /&gt;
* UI enhancement: Mobile Testing Plugin: Remove unimportantView from default capabilities&lt;br /&gt;
* UI enhancement: Mobile Testing Plugin: Automatically select entry in Android Wizard if only one is available.&lt;br /&gt;
* UI enhancement: Mobile Testing Plugin: Highlight unknown capabilities to give a hint in case of bad spelling.&lt;br /&gt;
* UI enhancement: Mobile Testing Plugin: Add a search filter for packages in the Android Wizard.&lt;br /&gt;
* UI enhancement: General/Linux: Support for Anti-Aliased XFT-Fonts.&lt;br /&gt;
&lt;br /&gt;
* STD-LIB: Image Save block supports writing of JPEG images.&lt;br /&gt;
* Mobile Testing Library: New blocks for multi-touch actions&lt;br /&gt;
* Mobile Testing Library: New block for reading capabilities from files&lt;br /&gt;
* Mobile Testing Library: New blocks for reading logs&lt;br /&gt;
* Mobile Testing Library: New block &amp;quot;Find Elements by XPath&amp;quot; for finding sets of elements&lt;br /&gt;
* Mobile Testing Library: New blocks for consecutive actions on single elements&lt;br /&gt;
* Mobile Testing Library: New block for taking screenshots&lt;br /&gt;
* Mobile Testing Library: New blocks for pressKeyCode API, make old blocks (sendKeyEvent API) obsolete&lt;br /&gt;
&lt;br /&gt;
* Localization: Mobile Testing Plugin: German translation mostly complete.&lt;br /&gt;
* Documentation: Update and add more documentation to Appium library.&lt;br /&gt;
&lt;br /&gt;
* Fix: Mobile Testing Plugin: Timeout in Android Wizard if adb does not return.&lt;br /&gt;
* Fix: Mobile Testing Plugin: Do not cut off multi-line status messages in Android Wizard.&lt;br /&gt;
* Fix: Mobile Testing Plugin: Fix error and bad behavior when cancelling file dialog in connection settings.&lt;br /&gt;
* Fix: Mobile Testing Plugin: Do not drop connection settings on connection error.&lt;br /&gt;
* Fix: Mobile Testing Plugin: Use Java path from Settings&lt;br /&gt;
* Fix: XML/XPath - accepts underscore (&#039;_&#039;) and Unicode characters in element and attribute names.&lt;br /&gt;
* Fix: RemoteAccess Plugin - fix error waiting for prompt&lt;br /&gt;
* Fix: RemoteAccess Plugin - fix response in same line as command&lt;br /&gt;
* Fix: Java GUI Plugin - fix error in &amp;quot;Verify Path&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Release 2.8 (Q4/2015) ==&lt;br /&gt;
&#039;&#039;&#039;Notice: You have to install a patch for expecco 2.7.5, if you want to load a Testsuite which was edited in expecco 2.8 and uses some of the new features! [[release2.8 incompatibilities|(More info)]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Feature: [[TableDrivenBlock Element|Table driven actions]]; these offer a simpler, table oriented interface&lt;br /&gt;
* Feature: Mobile Testing-Plugin (was &amp;quot;Appium&amp;quot;-Plugin) for Android and Apple iOS test automation for mobile devices&lt;br /&gt;
* Feature: Variable number of pins in groups ([[DiagramElements-Pin/en#Variable_Number_of_Pins|&amp;quot;Variable Pin Groups&amp;quot;]])&lt;br /&gt;
* Feature: First release of the [[User Defined Menu Items#Useful_Building_Blocks_for_Custom_Menu_Operations|Expecco Reflection Library]] (to automate expecco itself)&lt;br /&gt;
* Feature: Enum datatype: support for individual assigned enum values, described in the [[Datatype Editor/en#Enumeration_Types|Datatype Editor Documentation]] and the [[Datatype Element/en#Enumeration_Types|Datatype Element Documentation]] and also the [[Expecco API/en#Enum Type Functions|API Documentation]].&lt;br /&gt;
* Feature: [[Starting expecco via Command Line#Expecco_REST_Service_Interface|REST service]] for remote controlling expecco execution&lt;br /&gt;
* Feature: New [[ElementaryBlock Element/en#Ruby_Script_Blocks|Ruby actions]]&lt;br /&gt;
* Feature: Better execution directory settings for [[ElementaryBlock Element/en#Shell_Script_Blocks|Shell blocks]]&lt;br /&gt;
* Feature: New step attributes for more specific [[CompoundBlock Editor-CompoundWorksheet Editor/en#Step_Specific_Options_.28Context_Menu.29|&amp;quot;skip in log/trace&amp;quot;]] options (for looping actions)&lt;br /&gt;
* Feature: New user preference setting to ignore all [[CompoundBlock Editor-CompoundWorksheet Editor/en#Step_Specific_Options_.28Context_Menu.29|skip-in-log]] attributes (for debugging)&lt;br /&gt;
* Feature: &amp;quot;immediate fork new process&amp;quot; flag now also in block description or dynamically from elementary code&lt;br /&gt;
* Feature: Improved performer data type handling; virtual steps now only accept valid performers, and freeze value choices are filtered for valid performers.&lt;br /&gt;
* Feature: Option to start background action before or after pre-action&lt;br /&gt;
* Feature: New constraint datatype type (for better freeze value selection)&lt;br /&gt;
* Feature/Fix: compatibility of indexOf() / lastIndexOf() JavaScript functions (allow substring search)&lt;br /&gt;
* Feature: Data inspector for strings shows another (XML-DOM) tab if the string is an XML string. This tab shows the parsed XML DOM-tree.&lt;br /&gt;
* Feature: Attachments can now be declared as binary file attachment. These will not be interpreted; especially, no cr/lf translation and utf8 or similar character translation is performed. Binary attachments are required, e.g. to embed jar or other code files.&lt;br /&gt;
&lt;br /&gt;
* UI enhancement: Multiline labels in steps (use &amp;quot;\&amp;quot; as line-separator)&lt;br /&gt;
* UI enhancement: Additional custom headline and custom text block in reports (can be filled in right before printing).&lt;br /&gt;
* UI enhancement: Can now also set breakpoints on steps and code lines of readonly actions (e.g. in an imported library)&lt;br /&gt;
* UI enhancement: Undo gives a warning when about to undo past the previous file-save state&lt;br /&gt;
* UI enhancement: Added a menu item in &amp;quot;Extras&amp;quot; - &amp;quot;Debugging&amp;quot; to stop [[User Defined Menu Items#Asynchronous_.28Background.29_Actions|background menu actions]]&lt;br /&gt;
* UI enhancement: Added more convenient pin-comment editing support to the schema editor&lt;br /&gt;
* UI enhancement: Text editor has a new &amp;quot;split&amp;quot; menu function in its tools-submenu&lt;br /&gt;
* UI enhancement: Better &amp;quot;New Step&amp;quot; and &amp;quot;Replace Step&amp;quot; dialogs in the diagram editor (showing preview, code and contents; also show attachments).&lt;br /&gt;
* UI enhancement: Better autoconnect and matching blocks search algorithm in the &amp;quot;Place and Select New Step&amp;quot; function (i.e. New Step function, when an output pin is selected)&lt;br /&gt;
* UI enhancement: New scale diagram function (scale and spread multiple steps)&lt;br /&gt;
* UI enhancement: Lint performs a number of checks on a block being edited and gives immediate warnings in the info line (same checks as in the tree&#039;s error- and special search tabs)&lt;br /&gt;
* UI enhancement: New lint-error check rules to detect consumed pin values in loops and multi-triggered chains.&lt;br /&gt;
* UI enhancement: Double click on a search item to navigate to it in the tree&lt;br /&gt;
* UI enhancement: Codeview and network view in the activitylog indicate that they are readonly.&lt;br /&gt;
* UI enhancement: Secondary navigation tree for drag&amp;amp;drop.&lt;br /&gt;
* UI enhancement: Warn if it is due time to check for updates.&lt;br /&gt;
&lt;br /&gt;
* STD-LIB: Collection creator and multi-setter blocks with variable number of pins (alternating key-value pairs)&lt;br /&gt;
* STD-LIB: New DLL-Mapping block&lt;br /&gt;
* STD-LIB: New blocks &amp;quot;File [modification time]&amp;quot;, &amp;quot;File [access time]&amp;quot; and &amp;quot;File [creation time]&amp;quot;.&lt;br /&gt;
* STD-LIB: Additional blocks for event queue handling.&lt;br /&gt;
* STD-LIB: Additional blocks for static step-local storage.&lt;br /&gt;
* STD-LIB: Better versions for FAIL/WARN/INFO, LogFAIL, logWARNING and logINFO. New &amp;quot;Transcriber with Timestamp&amp;quot; action.&lt;br /&gt;
* STD-LIB: Fixed some collection-type issues (now pins are #-template-typed, instead of Collection), which required a downcast in many suites.&lt;br /&gt;
* STD-LIB: New blocks: &amp;quot;Trigger Periodically&amp;quot; and &amp;quot;Counter&amp;quot;&lt;br /&gt;
* STD-LIB: New blocks: &amp;quot;Enumtype symbol&amp;lt;-&amp;gt;integer&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Fix: Freeze value menu of unions of enums did not merge the individual enum values&lt;br /&gt;
* Fix: Freeze value menu of unions of constraint dataType-types&lt;br /&gt;
* Fix: The search breakpoints function (in the errors-tab of the treeview) now also finds statement breakpoints.&lt;br /&gt;
* Fix: Fixes and improvements in the SOAP, REST and WSDL frameworks&lt;br /&gt;
* Fix: Enum numeric value assignments were lost sometimes when saving/restoring&lt;br /&gt;
* Fix: Search for references of a variable did not find them in imported libraries&lt;br /&gt;
* Fix: Report of looped testplans (pre-action was reported multiple times)&lt;br /&gt;
* Fix: behavior of cancel pin (did neither drive triggerOut-pin, nor exception-pin)&lt;br /&gt;
* Fix: Fixes for crashes in follow mouse and backward (XPath) compatibility in WindowsAutomation Plugin&lt;br /&gt;
* Fix: The embedded type editor for defined classes lost its code window, when reopened on another class type.&lt;br /&gt;
* Fix: Proper class naming is now enforced in the type editor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Release 2.7.5 (2015-06-09) ==&lt;br /&gt;
&#039;&#039;&#039;New features&#039;&#039;&#039;:&lt;br /&gt;
* The JavaFX plugin now supports keyboard input. Use the block &amp;quot;&#039;&#039;Request Focus&#039;&#039;&amp;quot; to focus an input field and the block &amp;quot;&#039;&#039;Type Text&#039;&#039;&amp;quot; to enter any text.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bugfixes&#039;&#039;&#039;:&lt;br /&gt;
* The JavaFX plugin now provides improved connection handling.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For expecco running under Linux you need glibc &amp;gt;= 2.14&lt;br /&gt;
&lt;br /&gt;
Tested technology versions:&lt;br /&gt;
* Selenium&lt;br /&gt;
* The Java Bridge requires a JDK version 1.6 or higher&lt;br /&gt;
* JavaFX testing requires JavaFX 8&lt;br /&gt;
* Qt: Qt 2.6.3 (MinGW, vs2008), Qt 4.8.4 (MinGW, vs2008, vs2010, vs2013), Qt 5.4.2 (vs2010, vs2013)&lt;br /&gt;
* .NET&lt;br /&gt;
* MFC&lt;br /&gt;
* HTML 5&lt;br /&gt;
* DevExpress&lt;br /&gt;
* Android&lt;br /&gt;
* iOS&lt;br /&gt;
* Windows CE/Mobile Phone&lt;br /&gt;
* CANoe: 8.2 SP4&lt;br /&gt;
* WSDL-Import: it is required that you re-import your WSDL-Definitions in your Testsuites&lt;br /&gt;
&lt;br /&gt;
==Release 2.7.1 ==&lt;br /&gt;
* Convenient menu functions to add the special [[Expecco API#Using a Particular JVM Connection / Executing Groovy on a Possibly Remote Machine|&amp;quot;java&amp;quot; and &amp;quot;groovy&amp;quot;]] input pins to a Groovy elementary block.&lt;br /&gt;
* Standard library: new blocks: &amp;quot;&#039;&#039;Directory [ Contents as Filenames ]&#039;&#039;&amp;quot;, &amp;quot;&#039;&#039;Directory [ Contents as Pathnames ]&#039;&#039;&amp;quot;, &amp;quot;&#039;&#039;Directory [ Contents as Basenames ]&#039;&#039;&amp;quot;, &amp;quot;&#039;&#039;File [ isReadable? ]&#039;&#039;&amp;quot; and &amp;quot;&#039;&#039;File [ isWritable? ]&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Release 2.7 ==&lt;br /&gt;
* Patches go into a release specific directory (e.g. patches-2.7.0.5)&lt;br /&gt;
* configurable external editor for attachments and csv data (e.g. excel or openoffice calculator)&lt;br /&gt;
* tree view: markers in search lists; add to/remove from remembered list menu items&lt;br /&gt;
* tree view: folders can have tags, too&lt;br /&gt;
* tree view: per-tag icons in tree&lt;br /&gt;
* [[Starting expecco via Command Line/en#Utility_Functions|&amp;quot;--diff&amp;quot; command line option]]&lt;br /&gt;
* [[Starting expecco via Command Line/en#Startup|&amp;quot;--settings&amp;quot; command line option]]&lt;br /&gt;
* Scatter/Gather composition of test plans from multiple suites [[Starting expecco via Command Line/en#Scatter Gather Test Suite Composition|via command line arguments]]&lt;br /&gt;
* library: background OS process and background block actions&lt;br /&gt;
* improved type checks and preference settings&lt;br /&gt;
* schema editor: cursor up/down keys in pin name fields&lt;br /&gt;
* schema and diagram editor: additional menu functions in multiple-pin selection menu&lt;br /&gt;
* new blocks in the StandardLibrary: ExceptionClassifier, WriteCSV, Load/Save Environment from/to CSV&lt;br /&gt;
* [[SAP Testing|SAP plugin and VBScript action blocks]]&lt;br /&gt;
* change in the handling of Groovy callbacks. Please read [[Expecco API/en#Attention_.2F_Warning|&amp;quot;Attention / Warning&amp;quot;]] and [[Expecco API/en#Special_Functions|&amp;quot;Special Functions&amp;quot;]] in the Groovy API documentation.&lt;br /&gt;
* improved Groovy debugging support&lt;br /&gt;
* new common Android and iPhone/iPad testing framework&lt;br /&gt;
* option to save a per-run report, when a suite is executed in a loop (especially useful, when running until fail or until success)&lt;br /&gt;
* block assertions: assert-executed / assert-all outputs written / assert any output written&lt;br /&gt;
* License server support&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Release 2.6.2 bugfix release - April 2014 ==&lt;br /&gt;
Thus is a stable release consisting of the 2.6.1 base version INCLUDING all 2.6.1 patches (up to April).&lt;br /&gt;
&lt;br /&gt;
==Release 2.6.1 update - January 2014 ==&lt;br /&gt;
* [[Expecco API#Groovy_Elementary_Blocks|groovy action]]: the java-bridge can be passed in via pin named &amp;quot;java&amp;quot; or environment var named &amp;quot;JAVA&amp;quot;. GroovyShell can be passed in via pin named &amp;quot;groovy&amp;quot; or variable named &amp;quot;GROOVY&amp;quot;. Pins are optional for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
==Release 2.6 - November 2013 ==&lt;br /&gt;
* New testplan execution loop mode: &amp;quot;loop until required test fails&amp;quot;&lt;br /&gt;
* More options for automatic check for and installation of updates &amp;amp; patches&lt;br /&gt;
* Better default directories in file open/save/import dialogs.&lt;br /&gt;
* Tuned automatic reimport when multiple libraries are imported.&lt;br /&gt;
* Improved Java object inspector&lt;br /&gt;
* New attachment contents representation modes.&lt;br /&gt;
* Step tooltips include the underlying block&#039;s tree location.&lt;br /&gt;
* Shift click on connection selects all underlying connections.&lt;br /&gt;
* Give an indication (colorize menubar) if running with root/Admin rights.&lt;br /&gt;
* Option to put the custom operations menu into the top menu&lt;br /&gt;
* Additional tab in tree view to search by item-type&lt;br /&gt;
* Additional search options for interfaces and concrete actions&lt;br /&gt;
* Various bug fixes &amp;amp; enhancements:&lt;br /&gt;
** handle duplicate attachment filenames,&lt;br /&gt;
** fixed some type conversions,&lt;br /&gt;
** fixed clipboard handling under XWindow/Qt desktop,&lt;br /&gt;
** fixed non-changing testplan/testitem spec page.&lt;br /&gt;
** added string search in resources, skills and inventories&lt;br /&gt;
** no longer close expanded tree items when reimporting&lt;br /&gt;
** fixed making an imported library writable, which is imported by another sub-import&lt;br /&gt;
** fixed freeze of template pin to boolean/enum&lt;br /&gt;
** fixed enum values which start with a digit (aka &#039;001 aaa&#039;)&lt;br /&gt;
** remove freeze value connection via menu&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Release 2.5 ==&lt;br /&gt;
* Can refer to [[Environment Editor#Initialization Types|shell environment variables]] in an environment variable&#039;s initializer.&lt;br /&gt;
* New elementary block type: Groovy Code. Installs script code to be executed in a Java target or a local JVM.&lt;br /&gt;
* New keyword driven actions&lt;br /&gt;
* Additional checks in save dialogs to prevent overwriting another testsuite/library&lt;br /&gt;
* Optional automatic reimport or check for reimportable imports (configure via settings dialog)&lt;br /&gt;
* Additional freeze value validation when types are edited&lt;br /&gt;
* New plugin: Jar Import&lt;br /&gt;
* New and much improved manual test import plugin&lt;br /&gt;
* Speedup, improvements and fixes in the JavaBridge plugin&lt;br /&gt;
* Menu actions can [[Misc Editor#Background_Actions|execute in the background]] (name as &amp;quot;...&amp;amp;&amp;quot;)&lt;br /&gt;
* Background actions in testplan and testcase&lt;br /&gt;
* Much faster: startup, plugin loading and bridge communication&lt;br /&gt;
* Multiple freeze value menu organizations for enum types (hierarchical selection)&lt;br /&gt;
&lt;br /&gt;
===Release 2.5.1 - July 2013 ===&lt;br /&gt;
&amp;lt;!-- This is a bugfix release, in which various patches and small enhancements from the past few months have been integrated.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* Automatic &amp;amp; semiautomatic update from server&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Release 2.4 - February 2013 ==&lt;br /&gt;
This is a bugfix release, in which various patches and small enhancements from the past few months have been integrated.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Release 2.3 - December 2012 ==&lt;br /&gt;
* New integrated GUI Browser&lt;br /&gt;
* New menu functions: &amp;quot;minimize/restore all Windows&amp;quot;&lt;br /&gt;
* Polarion compatible report&lt;br /&gt;
* Improved Project-Diff-Browser&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Release 2.2==&lt;br /&gt;
* New SchemaEditor menu functions: copy/paste pin interface&lt;br /&gt;
* New plugin: [[GembirdPowerControlPlugin Reference#|Gembird Power Control Plugin]]&lt;br /&gt;
* New debug-menu function: &amp;quot;close all temporary windows&amp;quot;&lt;br /&gt;
* [[Probe|Probes]]; easy recording and check of pinValues&lt;br /&gt;
* JUnit compatible report&lt;br /&gt;
* HTTP and SOAP transmission log (optional on Transcript)&lt;br /&gt;
* Fixed WSDL/SOAP for document-style operations&lt;br /&gt;
* Better inspector (hex dump tab, hex representation of floats)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Release 2.1 - November 2011==&lt;br /&gt;
* Condition variables for simple (and easy to use) control of testcase execution&lt;br /&gt;
* [[Webservices#REST_Baustein|REST-Call]] blocks&lt;br /&gt;
* Option to disable logging of activityNotifications (from the underlying language framework)&lt;br /&gt;
* URL-override for SOAP service call blocks via the SOAP_URL environment variable.&lt;br /&gt;
* Access to the certificate store (for SSL/HTTPS), allows adding and removing individual certificates&lt;br /&gt;
* Elementary steps can have a variable number of output-pins (for multiplexer, dispatcher, round-robin generators etc.)&lt;br /&gt;
* New menu function: &amp;quot;Generate Value Extractor&amp;quot; for Dictionary-typed pin values. (in the activityLog, output pin-data menu)&lt;br /&gt;
* New tree-menu function: &amp;quot;Refactor&amp;quot;-&amp;gt;&amp;quot;Change Variable Access&amp;quot;, to search for and replace environment variable references.&lt;br /&gt;
* New datatype [[Datatype Element#Special_Types|&amp;quot;struct&amp;quot;]], to represent arbitrary compound (struct) values.&lt;br /&gt;
* GUI improvements: better annotation-text editors; line numbers, tags in file viewer&lt;br /&gt;
* Allow for multi pin-value parametrization in testplan (block with multiple inputs in a testplan item)&lt;br /&gt;
* Proxy support for HTTP-fetch blocks&lt;br /&gt;
* Recording feature for Java Swing GUIs&lt;br /&gt;
* Enhanced Java Swing Function Block Library&lt;br /&gt;
* GUI Browser improvements: tree view with widget specific icons, record tree actions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Release 2.0==&lt;br /&gt;
* Elementary steps can have a variable number of input-pins (improves the format, plus, string-concat and many other blocks)&lt;br /&gt;
* Statistic page added to the project editor&lt;br /&gt;
* Improved manual test import plugin; nicer Manualtest runner GUI; user definable manual test GUI&lt;br /&gt;
* Allow for pin-value parametrization in testplan (block with a single input parameter in a testplan item)&lt;br /&gt;
* Configurable max. cleanup time after terminating a run; Confirmation Dialog when longer.&lt;br /&gt;
* ActivityLog: added &amp;quot;Select in Tree&amp;quot; from log-entry&lt;br /&gt;
* HTTPS / SSL Support for HTTP blocks&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Release_Notes_2.x&amp;diff=11811</id>
		<title>Release Notes 2.x</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Release_Notes_2.x&amp;diff=11811"/>
		<updated>2018-06-19T10:11:49Z</updated>

		<summary type="html">&lt;p&gt;Ab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;see also: [[Release Notes 1.x]]&lt;br /&gt;
&lt;br /&gt;
== Release 18.1 [previously planned as &amp;quot;2.12&amp;quot;] (Spring 2018) ==&lt;br /&gt;
With this release, we will start a new naming scheme, &lt;br /&gt;
using the publishing year as major version number and the delivery within the year as minor vsn. &lt;br /&gt;
&amp;lt;br&amp;gt;Thus, this version will be named &amp;quot;18.1.0.x&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is a major new release with many [[Release18_1_UI_Enhancements | UI enhancements]], and a number of new features.&lt;br /&gt;
&lt;br /&gt;
* Fix: attachment handling when moving items across projects (into/out of imported projects)&lt;br /&gt;
* Fix: occasional loosing SIGCHILD when multiple shell/cmd scripts were executed in parallel (race condition)&lt;br /&gt;
* Fix: many fixes for bugs/inconveniences reported by customers in expeccoALM&lt;br /&gt;
* Fix: STDLIB: &amp;quot;Stream [ read through]&amp;quot; was broken&lt;br /&gt;
* Fix: STDLIB: &amp;quot;Collection [ copyFromTo ]&amp;quot; and &amp;quot;Collection [ all but Last]&amp;quot; did not always raise an error.&lt;br /&gt;
&lt;br /&gt;
* Feature: many GUIBrowser enhancements&lt;br /&gt;
* Feature: FileBrowser: dump can be changed to be hex, octal, decimal or binary; character decoding in EBCDIC or 7-bit ASCII (to ignore high/parity bit)&lt;br /&gt;
* Feature: FileBrowser: search pattern can be entered as hex byte sequence&lt;br /&gt;
* Feature: [[Settings UpdatesSettings/en#Expecco_as_a_Patches_Server_.282.12.29|Patches server]]: one expecco may deliver patches to all other installations in the local network&lt;br /&gt;
* Feature: script actions are now executed inside the attachment folder by default. This makes it easier for the script to access files containing test data or configuration files. However, this is somewhat incompatible with previous versions, so this can be disabled via a settings flag. It can also be changed by providing the execution folder at the &amp;quot;&#039;&#039;execDir&#039;&#039;&amp;quot; pin.&lt;br /&gt;
* Feature: can pass [[ElementaryBlock Element/en#Environment_.28Shell-.29_Variables|shell environment variables to shell, batch actions]] (and all derived actions, like Ruby, Node.js, etc.)&lt;br /&gt;
* Feature: [[ElementaryBlock Element/en#Script_Expansion | script expansion]] with pin-value strings for shell, batch actions and all derived actions, like Ruby, Node.js, etc.&lt;br /&gt;
* Feature: [[ElementaryBlock Element/en#Matching_stdin.2Fstderr_against_a_Pattern|prompt matching in shell, batch actions]] (and all derived actions, like Ruby, Node.js, etc.)&lt;br /&gt;
* Feature: better error diagnostics (and error-line highlighting) in shell actions (and most derived actions, like Ruby, Node.js, etc.)&lt;br /&gt;
* Feature: [[DiagramElements-Pin/en#Do_not_Log_Pin-Value_in_Activitylog_Attribute|individual control over pin-value in activity log]] (e.g. to suppress passwords, cryptokeys etc.)&lt;br /&gt;
* Feature: [[DiagramElements-Pin/en#Output_Pin_Value_Timestamped_Attribute|output pin values can be individually timestamped]] (via step&#039;s pin menu)&lt;br /&gt;
* Feature: [[ElementaryBlock Element/en#Node.js-Script_Blocks|&#039;&#039;&#039;Node.js script blocks&#039;&#039;&#039;]] and [[ElementaryBlock Element/en#Node.js_Blocks|&#039;&#039;&#039;Node.js elementary action blocks&#039;&#039;&#039;]]&lt;br /&gt;
* Feature: [[VNC Plugin Reference/en|VNC GUI Testing plugin]]&lt;br /&gt;
&amp;lt;!-- * Feature: Message/Document browser --&amp;gt;&lt;br /&gt;
* Feature: additional call API to invoke actions from elementary code (see [[Expecco_API/en#Execution | Expecco_API -&amp;gt; Execution]])&lt;br /&gt;
* Feature: &amp;quot;&#039;&#039;Interrupt &amp;amp; Debug&#039;&#039;&amp;quot; button in the [[Test Editor/en|Test-Runner]] (to interrupt runaway elementary blocks)&lt;br /&gt;
* Feature: New libraries for [[MQTT/en | MQTT (IoT)]] and [[SomeIP/en | Some/IP (Automotive)]] (licensed addons)&lt;br /&gt;
* Feature: [[Settings_DebuggerSettings/en#Freeze_Values_are_Immutable | Immutable FreezeValues]]&lt;br /&gt;
* Feature: New [[Plot/Graph Action Blocks | &#039;&#039;&#039;Plot/Graph action blocks&#039;&#039;&#039;]] &lt;br /&gt;
* Feature: New [[R Action Blocks | &#039;&#039;&#039;R action blocks&#039;&#039;&#039;]] &lt;br /&gt;
* Feature: New [[ElementaryBlock_Element/en#Python_Script_Blocks|Python Action Blocks]], [[ElementaryBlock_Element/en#Ruby_Script_Blocks|Ruby Action Blocks]], Perl Action Blocks, [[ElementaryBlock_Element/en#Node.js-Script_Blocks|Node Action Blocks]], Go Action Blocks and  TCL Action Blocks&lt;br /&gt;
* Feature / UI enhancement: screenshot dialog includes an &amp;quot;Attach&amp;quot; button.&lt;br /&gt;
* Feature / UI enhancement: embedded XML inspector in the attachment editor&lt;br /&gt;
* Feature / UI enhancement: &amp;quot;Generate&amp;quot; submenu to generate XPath accessors in the attachment editor, when showing XML.&lt;br /&gt;
* Feature: New library (StatisticDistributionsLibrary.ets) to generate random numbers with various distributions for statistic/monte carlo/simulations&lt;br /&gt;
* Feature: New library (Plot_Graph.ets) to demonstrate the new Plot/Graph actions&lt;br /&gt;
* Feature: New [[DiagramElements-Probe | probe types ]] to record values without checks (especially useful for plot/graph generation)&lt;br /&gt;
* Feature: timestamps can now have sub-millisecond resolution&lt;br /&gt;
* Feature: [[Selenium_WebDriver_Plugin|Selenium WebDriver Plugin]]&lt;br /&gt;
* Feature Qt enhancement: Inject support for 32/64bit applications including pre build clients&lt;br /&gt;
* Feature Qt enhancement: Add support for accessing complex properties like images, colors, ...&lt;br /&gt;
* Feature Qt enhancement: Menu item / Menu action support in GUI Browser&lt;br /&gt;
* Feature Qt enhancement: Extention of the qt block library&lt;br /&gt;
* Feature Qt enhancement: Replace QtScript with Qt JS api for Qt5 clients&lt;br /&gt;
* Feature Qt enhancement: Introduce a hook for customer client extension&lt;br /&gt;
* Feature Manual test plugin: New java based excel import&lt;br /&gt;
* Feature Manual Test plugin: Complete rework of the wizard&lt;br /&gt;
* Feature Manual test plugin: New manual test block library&lt;br /&gt;
&lt;br /&gt;
* Performance: Speed improvement in testplan execution&lt;br /&gt;
&lt;br /&gt;
* UI Enhancement: script actions are now initially created with a minimum set of special pins (actually: only the stdout pin is created initially). More pins can be added (and unused pins can be removed) in the schema editor via the &amp;quot;Special Pins&amp;quot; menu. We found that the vast majority of script steps only needed that single pin, and that diagrams look nicer without them (you can change this to the old behaviour via &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Look &amp;amp; Feel&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Diagram Editor&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Create all Special Pins Initially&#039;&#039;&amp;quot;).&lt;br /&gt;
* UI Enhancement: coloring by type is now on by default (if you don&#039;t like it, go to &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot;-&amp;quot;&#039;&#039;Look&amp;amp;nbsp;&amp;amp;amp;&amp;amp;nbsp;Feel&#039;&#039;&amp;quot;-&amp;quot;&#039;&#039;Diagram&amp;amp;nbsp;Editor&#039;&#039;&amp;quot;-&amp;quot;&#039;&#039;Look-Elements&#039;&#039;&amp;quot; and turn it off again)&lt;br /&gt;
* UI Enhancement: Limit the number of levels in follow activity&lt;br /&gt;
* UI Enhancement: ActivityTree shows activities with handled exceptions in orange (used to be red). Also, the handling activity shows where the handled exception was thrown. Finally, the automatic navigation to the first error (after a run) will skip over handled exceptions, to place you immediately to the activity which was responsible for the failure or error.&lt;br /&gt;
* UI Enhancement: goto &amp;quot;recently modified&amp;quot; and &amp;quot;recently executed&amp;quot; menus in the main-menu&lt;br /&gt;
* UI Enhancement: &amp;quot;&#039;&#039;Select Step in Diagram&#039;&#039;&amp;quot; menu-function in the activity log tree viewer&lt;br /&gt;
* UI Enhancement: &amp;quot;&#039;&#039;Exchange Connections&#039;&#039;&amp;quot; menu-function in the network editor&lt;br /&gt;
* UI Enhancement: &amp;quot;&#039;&#039;Import Attachments&#039;&#039;&amp;quot; tools menu-function (to import many files)&lt;br /&gt;
* UI Enhancement: more information and functions in the Diff-viewer; new menu item in the &amp;quot;&#039;&#039;Extra&#039;&#039;&amp;quot;-menu: &amp;quot;&#039;&#039;Compare two Testsuite Files&#039;&#039;&amp;quot;&lt;br /&gt;
* UI Enhancement: &amp;quot;&#039;&#039;Add/Remove Tag&#039;&#039;&amp;quot; menu functions (in tree) can also be applied recursively to children of the selected item&lt;br /&gt;
* UI Enhancement: if a step was selected when a new step is created (by the &amp;quot;&#039;&#039;New Step&#039;&#039;&amp;quot; function or by paste), the new step is automatically connected via trigger-out/trigger-in&lt;br /&gt;
* UI Enhancement: Connect multiple (same-named) pins&lt;br /&gt;
* UI Enhancement: fix (rewrite) JavaScript elementary code, when a pin is renamed&lt;br /&gt;
* UI Enhancement: rewrite script code when a pin is renamed&lt;br /&gt;
* STD-LIB: New action blocks: Stream[Set Binary Mode], Stream[Set Text Mode], Stream[Set Error-at-End Mode]&lt;br /&gt;
* STD-LIB: New action blocks to access and query [[DiagramElements-Probe | probes]] by ID (in Misc/Probes)&lt;br /&gt;
* STD-LIB: New logInconclusive and logError actions (similar to logFailure, these mark the test&#039;s outcome, but continue execution)&lt;br /&gt;
* STD-LIB: New actions to configure HTTPS for tls1.2 / tls1.1 (some sites no longer accept tls1.1)&lt;br /&gt;
&lt;br /&gt;
== Release 2.11.1 (Fall 2017) ==&lt;br /&gt;
* Bugfix Release including all patches for Release 2.11&lt;br /&gt;
* Fix: Windows Automation - Stability&lt;br /&gt;
* Fix: Problems with OLE&lt;br /&gt;
&lt;br /&gt;
== Release 2.11 (Spring 2017) ==&lt;br /&gt;
* Fix: JSON parameter save/reload fixed&lt;br /&gt;
* Fix: method name check in codeView was disabled&lt;br /&gt;
* Feature: &amp;quot;must be executed&amp;quot; attribute in action definition&lt;br /&gt;
* Feature: extensions to the expecco GUI automation framework&lt;br /&gt;
* Feature: new interfaces for automotive and mechanical engineering technoligies&lt;br /&gt;
* Feature: new host bound single user licensing scheme&lt;br /&gt;
&lt;br /&gt;
* Packaging: new expecco product bundle: &amp;quot;expecco Testcenter&amp;quot; - test automation plus test and resource management in one package&lt;br /&gt;
&lt;br /&gt;
== Release 2.10.1 (= 2.10 + Patches) ==&lt;br /&gt;
* Fix: keyboard focus for menu&lt;br /&gt;
* Backward Compatibility Fix: the fixes in the JavaScript &amp;quot;indexOf()&amp;quot;-functions (done in 2.8) lead to problems with a customer (which migrated from 2.7.5 to 2.10). For this, two flags have been added to the suite-attributes, which enforce the old behavior for individual and/or all imported libraries. This allows for old code (which expects the wrong 1-based indexOf return values) to coexist with new code (which expects the correct 0-based versions) within a single test suite.&lt;br /&gt;
&lt;br /&gt;
* Feature: [[Settings UpdatesSettings/en|Patches can be loaded via HTTP]] (FTP was blocked in some customers&#039; networks)&lt;br /&gt;
* Performance: Bulk data transfers to network drives under Windows.&lt;br /&gt;
&lt;br /&gt;
== Release 2.10 (Fall 2016) ==&lt;br /&gt;
* Feature: Mobile Testing Plugin (renamed from &amp;quot;&#039;&#039;Appium Plugin&#039;&#039;&amp;quot;) got more support functions to administer appium &amp;amp; adb connections&lt;br /&gt;
* Feature: new &amp;quot;Reimport Tool&amp;quot; for bulk reimport and library (dependency) checking&lt;br /&gt;
* Feature: DLL-mapping dialog in the settings. For a typical usage example, see [[AutoIt Library#Installation|Installation of AutoIt]]&lt;br /&gt;
* Feature: New blocks in the stdlib (&amp;quot;&#039;&#039;Split by Size&#039;&#039;&amp;quot; and &amp;quot;&#039;&#039;Split by Element&#039;&#039;&amp;quot;), to split collections (strings) into sized pieces or at a separator.&lt;br /&gt;
* Feature: New command line options to specify individual parameter values&lt;br /&gt;
* Feature: More formats supported for external parameter files (JSON)&lt;br /&gt;
* Feature: new [[Starting expecco via Command Line/en#Detailed_Option_Description|command line]] arguments: -E, -P:, --parameter:, --silent, --licenseServerHost, --licenseServerPort&lt;br /&gt;
* Feature: the new [[Java Interface Library v2|Java Bridge V2]]/DotNET Bridge V2 is now used by the default. The new bridge uses only a single port for communication (thus making firewall/router setup easier), supports casts, better controllable argument-type specification, is faster in its communication and supports asynchronous messages with lazy results. In case of backward compatibility problems, the old bridge is still available and can be used by changing the settings.&lt;br /&gt;
* Feature: custom print length of the pin and log values for the report&lt;br /&gt;
* Feature: [[CompoundBlock Editor-CompoundWorksheet Editor/en#Controlling_Logging_and_Tracing|&amp;quot;&#039;&#039;Ignore All Skip in Trace&#039;&#039;&amp;quot;]] settings to enforce a full trace (for debugging)&lt;br /&gt;
&lt;br /&gt;
* Performance: (dramatic) speedup in some image handling functions.&lt;br /&gt;
* Performance: speedup (50%) in the XML reader.&lt;br /&gt;
* Performance: speedup initial startup by not loading unlicensed plugins&lt;br /&gt;
&lt;br /&gt;
* UI enhancement: GUI Browser: double click on action/attribute item adds it to the list&lt;br /&gt;
* UI enhancement: GUI Browser: reconnect/fix autostart when deleting recorded steps&lt;br /&gt;
* UI enhancement: GUI Browser: better undo handling&lt;br /&gt;
* UI enhancement: GUI Browser: keep tree and selection on refresh (not all technologies)&lt;br /&gt;
* UI enhancement: better replace-step dialog in diagram editor (library filter added)&lt;br /&gt;
* UI enhancement: Line numbers in the attachment editor&lt;br /&gt;
* UI enhancement: Line numbers and trim-blank-lines option in multiline freeze value entry&lt;br /&gt;
* UI enhancement: color settings for red-green deficiency (in status color dialog)&lt;br /&gt;
&lt;br /&gt;
* Change: SerialPort Plugin: the port parameter pins (baudrate, stop-bits, parity etc.) are now parameter pins. This will only affect you, if the open-serial-port block is triggered via one of those pins (which is very very unlikely)&lt;br /&gt;
&lt;br /&gt;
* Fix: All leftover (unclosed) external connections (Sockets, Serial Lines, Bridges) are closed after a testrun, when in slave mode&lt;br /&gt;
* Fix: All leftover (unterminated) started appium servers are closed after a testrun, when in slave mode&lt;br /&gt;
* Fix: Multiline freeze value editor interpreted strings starting with digits as numeric value&lt;br /&gt;
* Fix: Multiline freeze value editor allows for empty lines at the end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Release 2.9 (June/2016) ==&lt;br /&gt;
* Feature: Mobile Testing (aka &amp;quot;Appium&amp;quot;)-Plugin: Add recorder&lt;br /&gt;
* Feature: Mobile Testing Plugin: Update capabilities&lt;br /&gt;
* Feature: Mobile Testing Plugin: Settings Dialog for setting up external auxiliary programs (adb, Appium Server, AVD Manager, SDK Manager)&lt;br /&gt;
* Feature: Mobile Testing Plugin: New menu for launching auxiliary programs (Appium Server, AVD Manager, SDK Manager)&lt;br /&gt;
* Feature: Mobile Testing Plugin: New buttons in Android Wizard to refresh the device list, launch AVD Manager, install APKs.&lt;br /&gt;
* Feature: Mobile Testing Plugin: Save and load connection settings in and from attachments in test suite.&lt;br /&gt;
* Feature: Mobile Testing Plugin: Allow editing and copying of connection settings.&lt;br /&gt;
* Feature: Mobile Testing Plugin: Allow adding arbitrary capabilities for forward compatibility.&lt;br /&gt;
* Feature: Mobile Testing Plugin Bundle: Update contents, in particular use Appium Server 1.4.16.&lt;br /&gt;
* Feature: Mobile Testing Plugin Bundle: Remove Android emulator from bundle as it is huge. If needed, download and install it separately.&lt;br /&gt;
* Feature: [[Java Interface Library v2|New Java Bridge (still experimental in 2.9)]]. The old Java Bridge is still available and enabled by default.&lt;br /&gt;
&lt;br /&gt;
* UI enhancement: Mobile Testing Plugin: More verbose warning dialogs.&lt;br /&gt;
* UI enhancement: Mobile Testing Plugin: Remove obsolete &amp;quot;Emulator Settings&amp;quot; from connection dialog (using the wizard is superior now).&lt;br /&gt;
* UI enhancement: Mobile Testing Plugin: Make newCommandTimeout capability user visible&lt;br /&gt;
* UI enhancement: Mobile Testing Plugin: Remove unimportantView from default capabilities&lt;br /&gt;
* UI enhancement: Mobile Testing Plugin: Automatically select entry in Android Wizard if only one is available.&lt;br /&gt;
* UI enhancement: Mobile Testing Plugin: Highlight unknown capabilities to give a hint in case of bad spelling.&lt;br /&gt;
* UI enhancement: Mobile Testing Plugin: Add a search filter for packages in the Android Wizard.&lt;br /&gt;
* UI enhancement: General/Linux: Support for Anti-Aliased XFT-Fonts.&lt;br /&gt;
&lt;br /&gt;
* STD-LIB: Image Save block supports writing of JPEG images.&lt;br /&gt;
* Mobile Testing Library: New blocks for multi-touch actions&lt;br /&gt;
* Mobile Testing Library: New block for reading capabilities from files&lt;br /&gt;
* Mobile Testing Library: New blocks for reading logs&lt;br /&gt;
* Mobile Testing Library: New block &amp;quot;Find Elements by XPath&amp;quot; for finding sets of elements&lt;br /&gt;
* Mobile Testing Library: New blocks for consecutive actions on single elements&lt;br /&gt;
* Mobile Testing Library: New block for taking screenshots&lt;br /&gt;
* Mobile Testing Library: New blocks for pressKeyCode API, make old blocks (sendKeyEvent API) obsolete&lt;br /&gt;
&lt;br /&gt;
* Localization: Mobile Testing Plugin: German translation mostly complete.&lt;br /&gt;
* Documentation: Update and add more documentation to Appium library.&lt;br /&gt;
&lt;br /&gt;
* Fix: Mobile Testing Plugin: Timeout in Android Wizard if adb does not return.&lt;br /&gt;
* Fix: Mobile Testing Plugin: Do not cut off multi-line status messages in Android Wizard.&lt;br /&gt;
* Fix: Mobile Testing Plugin: Fix error and bad behavior when cancelling file dialog in connection settings.&lt;br /&gt;
* Fix: Mobile Testing Plugin: Do not drop connection settings on connection error.&lt;br /&gt;
* Fix: Mobile Testing Plugin: Use Java path from Settings&lt;br /&gt;
* Fix: XML/XPath - accepts underscore (&#039;_&#039;) and Unicode characters in element and attribute names.&lt;br /&gt;
* Fix: RemoteAccess Plugin - fix error waiting for prompt&lt;br /&gt;
* Fix: RemoteAccess Plugin - fix response in same line as command&lt;br /&gt;
* Fix: Java GUI Plugin - fix error in &amp;quot;Verify Path&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Release 2.8 (Q4/2015) ==&lt;br /&gt;
&#039;&#039;&#039;Notice: You have to install a patch for expecco 2.7.5, if you want to load a Testsuite which was edited in expecco 2.8 and uses some of the new features! [[release2.8 incompatibilities|(More info)]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Feature: [[TableDrivenBlock Element|Table driven actions]]; these offer a simpler, table oriented interface&lt;br /&gt;
* Feature: Mobile Testing-Plugin (was &amp;quot;Appium&amp;quot;-Plugin) for Android and Apple iOS test automation for mobile devices&lt;br /&gt;
* Feature: Variable number of pins in groups ([[DiagramElements-Pin/en#Variable_Number_of_Pins|&amp;quot;Variable Pin Groups&amp;quot;]])&lt;br /&gt;
* Feature: First release of the [[User Defined Menu Items#Useful_Building_Blocks_for_Custom_Menu_Operations|Expecco Reflection Library]] (to automate expecco itself)&lt;br /&gt;
* Feature: Enum datatype: support for individual assigned enum values, described in the [[Datatype Editor/en#Enumeration_Types|Datatype Editor Documentation]] and the [[Datatype Element/en#Enumeration_Types|Datatype Element Documentation]] and also the [[Expecco API/en#Enum Type Functions|API Documentation]].&lt;br /&gt;
* Feature: [[Starting expecco via Command Line#Expecco_REST_Service_Interface|REST service]] for remote controlling expecco execution&lt;br /&gt;
* Feature: New [[ElementaryBlock Element/en#Ruby_Script_Blocks|Ruby actions]]&lt;br /&gt;
* Feature: Better execution directory settings for [[ElementaryBlock Element/en#Shell_Script_Blocks|Shell blocks]]&lt;br /&gt;
* Feature: New step attributes for more specific [[CompoundBlock Editor-CompoundWorksheet Editor/en#Step_Specific_Options_.28Context_Menu.29|&amp;quot;skip in log/trace&amp;quot;]] options (for looping actions)&lt;br /&gt;
* Feature: New user preference setting to ignore all [[CompoundBlock Editor-CompoundWorksheet Editor/en#Step_Specific_Options_.28Context_Menu.29|skip-in-log]] attributes (for debugging)&lt;br /&gt;
* Feature: &amp;quot;immediate fork new process&amp;quot; flag now also in block description or dynamically from elementary code&lt;br /&gt;
* Feature: Improved performer data type handling; virtual steps now only accept valid performers, and freeze value choices are filtered for valid performers.&lt;br /&gt;
* Feature: Option to start background action before or after pre-action&lt;br /&gt;
* Feature: New constraint datatype type (for better freeze value selection)&lt;br /&gt;
* Feature/Fix: compatibility of indexOf() / lastIndexOf() JavaScript functions (allow substring search)&lt;br /&gt;
* Feature: Data inspector for strings shows another (XML-DOM) tab if the string is an XML string. This tab shows the parsed XML DOM-tree.&lt;br /&gt;
* Feature: Attachments can now be declared as binary file attachment. These will not be interpreted; especially, no cr/lf translation and utf8 or similar character translation is performed. Binary attachments are required, e.g. to embed jar or other code files.&lt;br /&gt;
&lt;br /&gt;
* UI enhancement: Multiline labels in steps (use &amp;quot;\&amp;quot; as line-separator)&lt;br /&gt;
* UI enhancement: Additional custom headline and custom text block in reports (can be filled in right before printing).&lt;br /&gt;
* UI enhancement: Can now also set breakpoints on steps and code lines of readonly actions (e.g. in an imported library)&lt;br /&gt;
* UI enhancement: Undo gives a warning when about to undo past the previous file-save state&lt;br /&gt;
* UI enhancement: Added a menu item in &amp;quot;Extras&amp;quot; - &amp;quot;Debugging&amp;quot; to stop [[User Defined Menu Items#Asynchronous_.28Background.29_Actions|background menu actions]]&lt;br /&gt;
* UI enhancement: Added more convenient pin-comment editing support to the schema editor&lt;br /&gt;
* UI enhancement: Text editor has a new &amp;quot;split&amp;quot; menu function in its tools-submenu&lt;br /&gt;
* UI enhancement: Better &amp;quot;New Step&amp;quot; and &amp;quot;Replace Step&amp;quot; dialogs in the diagram editor (showing preview, code and contents; also show attachments).&lt;br /&gt;
* UI enhancement: Better autoconnect and matching blocks search algorithm in the &amp;quot;Place and Select New Step&amp;quot; function (i.e. New Step function, when an output pin is selected)&lt;br /&gt;
* UI enhancement: New scale diagram function (scale and spread multiple steps)&lt;br /&gt;
* UI enhancement: Lint performs a number of checks on a block being edited and gives immediate warnings in the info line (same checks as in the tree&#039;s error- and special search tabs)&lt;br /&gt;
* UI enhancement: New lint-error check rules to detect consumed pin values in loops and multi-triggered chains.&lt;br /&gt;
* UI enhancement: Double click on a search item to navigate to it in the tree&lt;br /&gt;
* UI enhancement: Codeview and network view in the activitylog indicate that they are readonly.&lt;br /&gt;
* UI enhancement: Secondary navigation tree for drag&amp;amp;drop.&lt;br /&gt;
* UI enhancement: Warn if it is due time to check for updates.&lt;br /&gt;
&lt;br /&gt;
* STD-LIB: Collection creator and multi-setter blocks with variable number of pins (alternating key-value pairs)&lt;br /&gt;
* STD-LIB: New DLL-Mapping block&lt;br /&gt;
* STD-LIB: New blocks &amp;quot;File [modification time]&amp;quot;, &amp;quot;File [access time]&amp;quot; and &amp;quot;File [creation time]&amp;quot;.&lt;br /&gt;
* STD-LIB: Additional blocks for event queue handling.&lt;br /&gt;
* STD-LIB: Additional blocks for static step-local storage.&lt;br /&gt;
* STD-LIB: Better versions for FAIL/WARN/INFO, LogFAIL, logWARNING and logINFO. New &amp;quot;Transcriber with Timestamp&amp;quot; action.&lt;br /&gt;
* STD-LIB: Fixed some collection-type issues (now pins are #-template-typed, instead of Collection), which required a downcast in many suites.&lt;br /&gt;
* STD-LIB: New blocks: &amp;quot;Trigger Periodically&amp;quot; and &amp;quot;Counter&amp;quot;&lt;br /&gt;
* STD-LIB: New blocks: &amp;quot;Enumtype symbol&amp;lt;-&amp;gt;integer&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Fix: Freeze value menu of unions of enums did not merge the individual enum values&lt;br /&gt;
* Fix: Freeze value menu of unions of constraint dataType-types&lt;br /&gt;
* Fix: The search breakpoints function (in the errors-tab of the treeview) now also finds statement breakpoints.&lt;br /&gt;
* Fix: Fixes and improvements in the SOAP, REST and WSDL frameworks&lt;br /&gt;
* Fix: Enum numeric value assignments were lost sometimes when saving/restoring&lt;br /&gt;
* Fix: Search for references of a variable did not find them in imported libraries&lt;br /&gt;
* Fix: Report of looped testplans (pre-action was reported multiple times)&lt;br /&gt;
* Fix: behavior of cancel pin (did neither drive triggerOut-pin, nor exception-pin)&lt;br /&gt;
* Fix: Fixes for crashes in follow mouse and backward (XPath) compatibility in WindowsAutomation Plugin&lt;br /&gt;
* Fix: The embedded type editor for defined classes lost its code window, when reopened on another class type.&lt;br /&gt;
* Fix: Proper class naming is now enforced in the type editor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Release 2.7.5 (2015-06-09) ==&lt;br /&gt;
&#039;&#039;&#039;New features&#039;&#039;&#039;:&lt;br /&gt;
* The JavaFX plugin now supports keyboard input. Use the block &amp;quot;&#039;&#039;Request Focus&#039;&#039;&amp;quot; to focus an input field and the block &amp;quot;&#039;&#039;Type Text&#039;&#039;&amp;quot; to enter any text.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bugfixes&#039;&#039;&#039;:&lt;br /&gt;
* The JavaFX plugin now provides improved connection handling.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For expecco running under Linux you need glibc &amp;gt;= 2.14&lt;br /&gt;
&lt;br /&gt;
Tested technology versions:&lt;br /&gt;
* Selenium&lt;br /&gt;
* The Java Bridge requires a JDK version 1.6 or higher&lt;br /&gt;
* JavaFX testing requires JavaFX 8&lt;br /&gt;
* Qt: Qt 2.6.3 (MinGW, vs2008), Qt 4.8.4 (MinGW, vs2008, vs2010, vs2013), Qt 5.4.2 (vs2010, vs2013)&lt;br /&gt;
* .NET&lt;br /&gt;
* MFC&lt;br /&gt;
* HTML 5&lt;br /&gt;
* DevExpress&lt;br /&gt;
* Android&lt;br /&gt;
* iOS&lt;br /&gt;
* Windows CE/Mobile Phone&lt;br /&gt;
* CANoe: 8.2 SP4&lt;br /&gt;
* WSDL-Import: it is required that you re-import your WSDL-Definitions in your Testsuites&lt;br /&gt;
&lt;br /&gt;
==Release 2.7.1 ==&lt;br /&gt;
* Convenient menu functions to add the special [[Expecco API#Using a Particular JVM Connection / Executing Groovy on a Possibly Remote Machine|&amp;quot;java&amp;quot; and &amp;quot;groovy&amp;quot;]] input pins to a Groovy elementary block.&lt;br /&gt;
* Standard library: new blocks: &amp;quot;&#039;&#039;Directory [ Contents as Filenames ]&#039;&#039;&amp;quot;, &amp;quot;&#039;&#039;Directory [ Contents as Pathnames ]&#039;&#039;&amp;quot;, &amp;quot;&#039;&#039;Directory [ Contents as Basenames ]&#039;&#039;&amp;quot;, &amp;quot;&#039;&#039;File [ isReadable? ]&#039;&#039;&amp;quot; and &amp;quot;&#039;&#039;File [ isWritable? ]&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Release 2.7 ==&lt;br /&gt;
* Patches go into a release specific directory (e.g. patches-2.7.0.5)&lt;br /&gt;
* configurable external editor for attachments and csv data (e.g. excel or openoffice calculator)&lt;br /&gt;
* tree view: markers in search lists; add to/remove from remembered list menu items&lt;br /&gt;
* tree view: folders can have tags, too&lt;br /&gt;
* tree view: per-tag icons in tree&lt;br /&gt;
* [[Starting expecco via Command Line/en#Utility_Functions|&amp;quot;--diff&amp;quot; command line option]]&lt;br /&gt;
* [[Starting expecco via Command Line/en#Startup|&amp;quot;--settings&amp;quot; command line option]]&lt;br /&gt;
* Scatter/Gather composition of test plans from multiple suites [[Starting expecco via Command Line/en#Scatter Gather Test Suite Composition|via command line arguments]]&lt;br /&gt;
* library: background OS process and background block actions&lt;br /&gt;
* improved type checks and preference settings&lt;br /&gt;
* schema editor: cursor up/down keys in pin name fields&lt;br /&gt;
* schema and diagram editor: additional menu functions in multiple-pin selection menu&lt;br /&gt;
* new blocks in the StandardLibrary: ExceptionClassifier, WriteCSV, Load/Save Environment from/to CSV&lt;br /&gt;
* [[SAP Testing|SAP plugin and VBScript action blocks]]&lt;br /&gt;
* change in the handling of Groovy callbacks. Please read [[Expecco API/en#Attention_.2F_Warning|&amp;quot;Attention / Warning&amp;quot;]] and [[Expecco API/en#Special_Functions|&amp;quot;Special Functions&amp;quot;]] in the Groovy API documentation.&lt;br /&gt;
* improved Groovy debugging support&lt;br /&gt;
* new common Android and iPhone/iPad testing framework&lt;br /&gt;
* option to save a per-run report, when a suite is executed in a loop (especially useful, when running until fail or until success)&lt;br /&gt;
* block assertions: assert-executed / assert-all outputs written / assert any output written&lt;br /&gt;
* License server support&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Release 2.6.2 bugfix release - April 2014 ==&lt;br /&gt;
Thus is a stable release consisting of the 2.6.1 base version INCLUDING all 2.6.1 patches (up to April).&lt;br /&gt;
&lt;br /&gt;
==Release 2.6.1 update - January 2014 ==&lt;br /&gt;
* [[Expecco API#Groovy_Elementary_Blocks|groovy action]]: the java-bridge can be passed in via pin named &amp;quot;java&amp;quot; or environment var named &amp;quot;JAVA&amp;quot;. GroovyShell can be passed in via pin named &amp;quot;groovy&amp;quot; or variable named &amp;quot;GROOVY&amp;quot;. Pins are optional for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
==Release 2.6 - November 2013 ==&lt;br /&gt;
* New testplan execution loop mode: &amp;quot;loop until required test fails&amp;quot;&lt;br /&gt;
* More options for automatic check for and installation of updates &amp;amp; patches&lt;br /&gt;
* Better default directories in file open/save/import dialogs.&lt;br /&gt;
* Tuned automatic reimport when multiple libraries are imported.&lt;br /&gt;
* Improved Java object inspector&lt;br /&gt;
* New attachment contents representation modes.&lt;br /&gt;
* Step tooltips include the underlying block&#039;s tree location.&lt;br /&gt;
* Shift click on connection selects all underlying connections.&lt;br /&gt;
* Give an indication (colorize menubar) if running with root/Admin rights.&lt;br /&gt;
* Option to put the custom operations menu into the top menu&lt;br /&gt;
* Additional tab in tree view to search by item-type&lt;br /&gt;
* Additional search options for interfaces and concrete actions&lt;br /&gt;
* Various bug fixes &amp;amp; enhancements:&lt;br /&gt;
** handle duplicate attachment filenames,&lt;br /&gt;
** fixed some type conversions,&lt;br /&gt;
** fixed clipboard handling under XWindow/Qt desktop,&lt;br /&gt;
** fixed non-changing testplan/testitem spec page.&lt;br /&gt;
** added string search in resources, skills and inventories&lt;br /&gt;
** no longer close expanded tree items when reimporting&lt;br /&gt;
** fixed making an imported library writable, which is imported by another sub-import&lt;br /&gt;
** fixed freeze of template pin to boolean/enum&lt;br /&gt;
** fixed enum values which start with a digit (aka &#039;001 aaa&#039;)&lt;br /&gt;
** remove freeze value connection via menu&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Release 2.5 ==&lt;br /&gt;
* Can refer to [[Environment Editor#Initialization Types|shell environment variables]] in an environment variable&#039;s initializer.&lt;br /&gt;
* New elementary block type: Groovy Code. Installs script code to be executed in a Java target or a local JVM.&lt;br /&gt;
* New keyword driven actions&lt;br /&gt;
* Additional checks in save dialogs to prevent overwriting another testsuite/library&lt;br /&gt;
* Optional automatic reimport or check for reimportable imports (configure via settings dialog)&lt;br /&gt;
* Additional freeze value validation when types are edited&lt;br /&gt;
* New plugin: Jar Import&lt;br /&gt;
* New and much improved manual test import plugin&lt;br /&gt;
* Speedup, improvements and fixes in the JavaBridge plugin&lt;br /&gt;
* Menu actions can [[Misc Editor#Background_Actions|execute in the background]] (name as &amp;quot;...&amp;amp;&amp;quot;)&lt;br /&gt;
* Background actions in testplan and testcase&lt;br /&gt;
* Much faster: startup, plugin loading and bridge communication&lt;br /&gt;
* Multiple freeze value menu organizations for enum types (hierarchical selection)&lt;br /&gt;
&lt;br /&gt;
===Release 2.5.1 - July 2013 ===&lt;br /&gt;
&amp;lt;!-- This is a bugfix release, in which various patches and small enhancements from the past few months have been integrated.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* Automatic &amp;amp; semiautomatic update from server&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Release 2.4 - February 2013 ==&lt;br /&gt;
This is a bugfix release, in which various patches and small enhancements from the past few months have been integrated.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Release 2.3 - December 2012 ==&lt;br /&gt;
* New integrated GUI Browser&lt;br /&gt;
* New menu functions: &amp;quot;minimize/restore all Windows&amp;quot;&lt;br /&gt;
* Polarion compatible report&lt;br /&gt;
* Improved Project-Diff-Browser&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Release 2.2==&lt;br /&gt;
* New SchemaEditor menu functions: copy/paste pin interface&lt;br /&gt;
* New plugin: [[GembirdPowerControlPlugin Reference#|Gembird Power Control Plugin]]&lt;br /&gt;
* New debug-menu function: &amp;quot;close all temporary windows&amp;quot;&lt;br /&gt;
* [[Probe|Probes]]; easy recording and check of pinValues&lt;br /&gt;
* JUnit compatible report&lt;br /&gt;
* HTTP and SOAP transmission log (optional on Transcript)&lt;br /&gt;
* Fixed WSDL/SOAP for document-style operations&lt;br /&gt;
* Better inspector (hex dump tab, hex representation of floats)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Release 2.1 - November 2011==&lt;br /&gt;
* Condition variables for simple (and easy to use) control of testcase execution&lt;br /&gt;
* [[Webservices#REST_Baustein|REST-Call]] blocks&lt;br /&gt;
* Option to disable logging of activityNotifications (from the underlying language framework)&lt;br /&gt;
* URL-override for SOAP service call blocks via the SOAP_URL environment variable.&lt;br /&gt;
* Access to the certificate store (for SSL/HTTPS), allows adding and removing individual certificates&lt;br /&gt;
* Elementary steps can have a variable number of output-pins (for multiplexer, dispatcher, round-robin generators etc.)&lt;br /&gt;
* New menu function: &amp;quot;Generate Value Extractor&amp;quot; for Dictionary-typed pin values. (in the activityLog, output pin-data menu)&lt;br /&gt;
* New tree-menu function: &amp;quot;Refactor&amp;quot;-&amp;gt;&amp;quot;Change Variable Access&amp;quot;, to search for and replace environment variable references.&lt;br /&gt;
* New datatype [[Datatype Element#Special_Types|&amp;quot;struct&amp;quot;]], to represent arbitrary compound (struct) values.&lt;br /&gt;
* GUI improvements: better annotation-text editors; line numbers, tags in file viewer&lt;br /&gt;
* Allow for multi pin-value parametrization in testplan (block with multiple inputs in a testplan item)&lt;br /&gt;
* Proxy support for HTTP-fetch blocks&lt;br /&gt;
* Recording feature for Java Swing GUIs&lt;br /&gt;
* Enhanced Java Swing Function Block Library&lt;br /&gt;
* GUI Browser improvements: tree view with widget specific icons, record tree actions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Release 2.0==&lt;br /&gt;
* Elementary steps can have a variable number of input-pins (improves the format, plus, string-concat and many other blocks)&lt;br /&gt;
* Statistic page added to the project editor&lt;br /&gt;
* Improved manual test import plugin; nicer Manualtest runner GUI; user definable manual test GUI&lt;br /&gt;
* Allow for pin-value parametrization in testplan (block with a single input parameter in a testplan item)&lt;br /&gt;
* Configurable max. cleanup time after terminating a run; Confirmation Dialog when longer.&lt;br /&gt;
* ActivityLog: added &amp;quot;Select in Tree&amp;quot; from log-entry&lt;br /&gt;
* HTTPS / SSL Support for HTTP blocks&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Hauptseite&amp;diff=10043</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Hauptseite&amp;diff=10043"/>
		<updated>2018-01-07T13:54:07Z</updated>

		<summary type="html">&lt;p&gt;Ab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table border=0 cellspacing=8 width=&amp;quot;100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;expecco&amp;lt;/h1&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td font size=&amp;quot;5&amp;quot; bgcolor=#ECF0F3 width=&amp;quot;20%&amp;quot; height=&amp;quot;100&amp;quot; align=&amp;quot;left&amp;quot; valign=&amp;quot;top&amp;gt;&lt;br /&gt;
    &amp;amp;nbsp;&amp;amp;nbsp;[[Datei:Icon_Landingpage.png|30px]]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;Für Einsteiger&amp;lt;hr/&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Was ist expecco ? | Was ist expecco?]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Glossary | Begriffserklärung]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Einsteiger Tutorials | Einsteiger Tutorials]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[expecco UI | expecco UI]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[FAQ | FAQ]]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td font size=&amp;quot;5&amp;quot; bgcolor=#ECF0F3 width=&amp;quot;20%&amp;quot; height=&amp;quot;100&amp;quot; align=&amp;quot;left&amp;quot; valign=&amp;quot;top&amp;gt;&lt;br /&gt;
     &amp;amp;nbsp;&amp;amp;nbsp;[[Datei:Icon_Landingpage5.png|30px]]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;Installation&amp;lt;hr/&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Installation | Installation]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Personal Settings | Persönliche Einstellungen]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Configuration &amp;amp; Setup | Konfiguration]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Anbindung expecco ALM | Anbindung expecco ALM]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Spezifische Anpassung | Spezifische Anpassung]]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td font size=&amp;quot;5&amp;quot; bgcolor=#ECF0F3 width=&amp;quot;20%&amp;quot; height=&amp;quot;100&amp;quot; align=&amp;quot;left&amp;quot; valign=&amp;quot;top&amp;gt;&lt;br /&gt;
      &amp;amp;nbsp;&amp;amp;nbsp;[[Datei:Icon_Landingpage4.png|30px]]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;Werkzeuge&amp;lt;hr/&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Debugger | Debugger]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Editoren | Editoren]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[API von Elementaraktionen | API von Elementaraktionen]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Standard Libraries/Bibliotheken | Standard Libraries/Bibliotheken]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Weitere Werkzeuge | Weitere Werkzeuge]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Weitere Funktionen | Weitere Funktionen]]&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;td font size=&amp;quot;5&amp;quot; bgcolor=#ECF0F3 width=&amp;quot;20%&amp;quot; height=&amp;quot;100&amp;quot; align=&amp;quot;left&amp;quot; valign=&amp;quot;top&amp;gt;      &lt;br /&gt;
          &amp;amp;nbsp;&amp;amp;nbsp;[[Datei:Icon_Landingpage6.png|30px]]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;Reportgenerierung&amp;lt;hr/&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Report Generation | Reportgenerierung]]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=0 cellspacing=8 width=&amp;quot;100%&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td font size=&amp;quot;5&amp;quot; bgcolor=#ECF0F3 width=&amp;quot;20%&amp;quot; height=&amp;quot;100&amp;quot; align=&amp;quot;left&amp;quot; valign=&amp;quot;top&amp;gt;&lt;br /&gt;
      &amp;amp;nbsp;&amp;amp;nbsp;[[Datei:Erweiterung_plugin.png|30px]]&amp;amp;nbsp;&amp;amp;nbsp;Erweiterungen (Plugins)&amp;lt;hr/&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Schnittstellen zum SUT | Schnittstellen zum SUT]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[GUI Testing | GUI Testing]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Code Ausführung | Code Ausführung]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Daten/Nachrichten/Dokument Formate | Daten/Nachrichten/Dokument Formate]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Unterstützung der Tests | Unterstützung der Tests]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[QM Schnittstellen| QM Schnittstellen]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Import/Export von Spezifikationen | Import/Export von Spezifikationen]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Kommunikation/Protokolle | Kommunikation/Protokolle]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Databases | Databases]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[API | API]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[NoSQL | NoSQL]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Sonstige Plugins | Sonstige Plugins]]&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;td font size=&amp;quot;5&amp;quot; bgcolor=#ECF0F3 width=&amp;quot;20%&amp;quot; height=&amp;quot;100&amp;quot; align=&amp;quot;left&amp;quot; valign=&amp;quot;top&amp;gt;      &lt;br /&gt;
      &amp;amp;nbsp;&amp;amp;nbsp;[[Datei:Icon_Landingpage3.png|30px]]&amp;amp;nbsp;&amp;amp;nbsp;Elemente der Testsuite&amp;lt;hr/&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Tree Elements/en | Tree Elemente]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Folder Element/en | Ordner]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Testplan Element | Testplan Element]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Aktionen/Aktionsblöcke | Aktionen/Aktionsblöcke]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Datatype Element| Datentyp Element]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Inventory Element| Inventory Element]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Skill Element | Skill Element]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Resource Element | Ressouurce Element]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Attachment Element/en | Anhänge]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[ReportTemplate Element | Report Templates]]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td font size=&amp;quot;5&amp;quot; bgcolor=#ECF0F3 width=&amp;quot;20%&amp;quot; height=&amp;quot;100&amp;quot; align=&amp;quot;left&amp;quot; valign=&amp;quot;top&amp;gt;&lt;br /&gt;
       &amp;amp;nbsp;&amp;amp;nbsp;[[Datei:Diagramm.png|30px]]&amp;amp;nbsp;&amp;amp;nbsp;Diagramm - Elemente&amp;lt;hr/&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[DiagramElements-Step/en| Schritt]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Pins (Ein - Ausgänge) | Pins (Ein - Ausgänge)]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Code Ausführung | Code Ausführung]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[DiagramElements-Connection | Verbindung]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[DiagramElements-Pin/en | Pin Beschreibung]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[DiagramElements-Annotation| Notiz]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[DiagramElements-Probe/en | Messfühler]]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td font size=&amp;quot;5&amp;quot; bgcolor=#ECF0F3 width=&amp;quot;20%&amp;quot; height=&amp;quot;100&amp;quot; align=&amp;quot;left&amp;quot; valign=&amp;quot;top&amp;gt;      &lt;br /&gt;
       &amp;amp;nbsp;&amp;amp;nbsp;[[Datei:Refresh.png|30px]]&amp;amp;nbsp;&amp;amp;nbsp;Sonstiges&amp;lt;hr/&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[expecco Mobile Remote App | expecco Mobile Remote App]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Release Notes 2.x | Release Notes 2.x]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Release Notes 1.x | Release Notes 1.x]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Future releases expecco | Zukünftige Releases]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Smalltalk | Smalltalk]]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=0 cellspacing=8 width=&amp;quot;100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;expecco ALM&amp;lt;/h1&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td font size=&amp;quot;5&amp;quot; bgcolor=#ECF0F3 width=&amp;quot;20%&amp;quot; height=&amp;quot;100&amp;quot; align=&amp;quot;left&amp;quot; valign=&amp;quot;top&amp;gt;&lt;br /&gt;
      &amp;amp;nbsp;&amp;amp;nbsp;[[Datei:Sonstiges-Info.png|30px]]&amp;amp;nbsp;&amp;amp;nbsp;Allgemein&amp;lt;hr/&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Was ist expecco ALM ? | Was ist expecco ALM?]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Anbindung expecco ALM | Anbindung expecco ALM]]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;td font size=&amp;quot;5&amp;quot; bgcolor=#ECF0F3 width=&amp;quot;20%&amp;quot; height=&amp;quot;100&amp;quot; align=&amp;quot;left&amp;quot; valign=&amp;quot;top&amp;gt;&lt;br /&gt;
      &amp;amp;nbsp;&amp;amp;nbsp;[[Datei:Icon_Landingpage5.png|30px]]&amp;amp;nbsp;&amp;amp;nbsp;Installation/Einrichten&amp;lt;hr/&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[expecco ALM Installation | Installation]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[expecco ALM Einrichten Vorgehensweise | expecco ALM Einrichten]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[... | Benutzer Einrichten (*empty)]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[... | Projekt Einrichten (*empty)]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[... | Workflow Einrichten (*empty)]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Einstellungen | Einstellungen (*empty)]]&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;td font size=&amp;quot;5&amp;quot; bgcolor=#ECF0F3 width=&amp;quot;20%&amp;quot; height=&amp;quot;100&amp;quot; align=&amp;quot;left&amp;quot; valign=&amp;quot;top&amp;gt;&lt;br /&gt;
      &amp;amp;nbsp;&amp;amp;nbsp;[[Datei:Refresh.png|30px]]&amp;amp;nbsp;&amp;amp;nbsp;Sonstiges&amp;lt;hr/&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[expecco ALM App | expecco ALM App]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Lizenzserver expecco ALM | Lizenzserver expecco ALM]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Tutorials expecco ALM | Tutorials (*empty)]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[expecco ALM Release Notes | Release Notes]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[FAQ | FAQ]]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Hauptseite&amp;diff=10042</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Hauptseite&amp;diff=10042"/>
		<updated>2018-01-07T13:53:44Z</updated>

		<summary type="html">&lt;p&gt;Ab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table border=0 cellspacing=8 width=&amp;quot;100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;expecco huhu&amp;lt;/h1&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td font size=&amp;quot;5&amp;quot; bgcolor=#ECF0F3 width=&amp;quot;20%&amp;quot; height=&amp;quot;100&amp;quot; align=&amp;quot;left&amp;quot; valign=&amp;quot;top&amp;gt;&lt;br /&gt;
    &amp;amp;nbsp;&amp;amp;nbsp;[[Datei:Icon_Landingpage.png|30px]]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;Für Einsteiger&amp;lt;hr/&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Was ist expecco ? | Was ist expecco?]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Glossary | Begriffserklärung]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Einsteiger Tutorials | Einsteiger Tutorials]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[expecco UI | expecco UI]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[FAQ | FAQ]]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td font size=&amp;quot;5&amp;quot; bgcolor=#ECF0F3 width=&amp;quot;20%&amp;quot; height=&amp;quot;100&amp;quot; align=&amp;quot;left&amp;quot; valign=&amp;quot;top&amp;gt;&lt;br /&gt;
     &amp;amp;nbsp;&amp;amp;nbsp;[[Datei:Icon_Landingpage5.png|30px]]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;Installation&amp;lt;hr/&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Installation | Installation]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Personal Settings | Persönliche Einstellungen]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Configuration &amp;amp; Setup | Konfiguration]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Anbindung expecco ALM | Anbindung expecco ALM]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Spezifische Anpassung | Spezifische Anpassung]]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td font size=&amp;quot;5&amp;quot; bgcolor=#ECF0F3 width=&amp;quot;20%&amp;quot; height=&amp;quot;100&amp;quot; align=&amp;quot;left&amp;quot; valign=&amp;quot;top&amp;gt;&lt;br /&gt;
      &amp;amp;nbsp;&amp;amp;nbsp;[[Datei:Icon_Landingpage4.png|30px]]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;Werkzeuge&amp;lt;hr/&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Debugger | Debugger]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Editoren | Editoren]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[API von Elementaraktionen | API von Elementaraktionen]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Standard Libraries/Bibliotheken | Standard Libraries/Bibliotheken]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Weitere Werkzeuge | Weitere Werkzeuge]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Weitere Funktionen | Weitere Funktionen]]&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;td font size=&amp;quot;5&amp;quot; bgcolor=#ECF0F3 width=&amp;quot;20%&amp;quot; height=&amp;quot;100&amp;quot; align=&amp;quot;left&amp;quot; valign=&amp;quot;top&amp;gt;      &lt;br /&gt;
          &amp;amp;nbsp;&amp;amp;nbsp;[[Datei:Icon_Landingpage6.png|30px]]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;Reportgenerierung&amp;lt;hr/&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Report Generation | Reportgenerierung]]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=0 cellspacing=8 width=&amp;quot;100%&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td font size=&amp;quot;5&amp;quot; bgcolor=#ECF0F3 width=&amp;quot;20%&amp;quot; height=&amp;quot;100&amp;quot; align=&amp;quot;left&amp;quot; valign=&amp;quot;top&amp;gt;&lt;br /&gt;
      &amp;amp;nbsp;&amp;amp;nbsp;[[Datei:Erweiterung_plugin.png|30px]]&amp;amp;nbsp;&amp;amp;nbsp;Erweiterungen (Plugins)&amp;lt;hr/&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Schnittstellen zum SUT | Schnittstellen zum SUT]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[GUI Testing | GUI Testing]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Code Ausführung | Code Ausführung]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Daten/Nachrichten/Dokument Formate | Daten/Nachrichten/Dokument Formate]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Unterstützung der Tests | Unterstützung der Tests]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[QM Schnittstellen| QM Schnittstellen]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Import/Export von Spezifikationen | Import/Export von Spezifikationen]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Kommunikation/Protokolle | Kommunikation/Protokolle]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Databases | Databases]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[API | API]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[NoSQL | NoSQL]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Sonstige Plugins | Sonstige Plugins]]&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;td font size=&amp;quot;5&amp;quot; bgcolor=#ECF0F3 width=&amp;quot;20%&amp;quot; height=&amp;quot;100&amp;quot; align=&amp;quot;left&amp;quot; valign=&amp;quot;top&amp;gt;      &lt;br /&gt;
      &amp;amp;nbsp;&amp;amp;nbsp;[[Datei:Icon_Landingpage3.png|30px]]&amp;amp;nbsp;&amp;amp;nbsp;Elemente der Testsuite&amp;lt;hr/&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Tree Elements/en | Tree Elemente]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Folder Element/en | Ordner]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Testplan Element | Testplan Element]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Aktionen/Aktionsblöcke | Aktionen/Aktionsblöcke]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Datatype Element| Datentyp Element]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Inventory Element| Inventory Element]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Skill Element | Skill Element]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Resource Element | Ressouurce Element]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Attachment Element/en | Anhänge]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[ReportTemplate Element | Report Templates]]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td font size=&amp;quot;5&amp;quot; bgcolor=#ECF0F3 width=&amp;quot;20%&amp;quot; height=&amp;quot;100&amp;quot; align=&amp;quot;left&amp;quot; valign=&amp;quot;top&amp;gt;&lt;br /&gt;
       &amp;amp;nbsp;&amp;amp;nbsp;[[Datei:Diagramm.png|30px]]&amp;amp;nbsp;&amp;amp;nbsp;Diagramm - Elemente&amp;lt;hr/&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[DiagramElements-Step/en| Schritt]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Pins (Ein - Ausgänge) | Pins (Ein - Ausgänge)]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Code Ausführung | Code Ausführung]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[DiagramElements-Connection | Verbindung]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[DiagramElements-Pin/en | Pin Beschreibung]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[DiagramElements-Annotation| Notiz]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[DiagramElements-Probe/en | Messfühler]]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td font size=&amp;quot;5&amp;quot; bgcolor=#ECF0F3 width=&amp;quot;20%&amp;quot; height=&amp;quot;100&amp;quot; align=&amp;quot;left&amp;quot; valign=&amp;quot;top&amp;gt;      &lt;br /&gt;
       &amp;amp;nbsp;&amp;amp;nbsp;[[Datei:Refresh.png|30px]]&amp;amp;nbsp;&amp;amp;nbsp;Sonstiges&amp;lt;hr/&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[expecco Mobile Remote App | expecco Mobile Remote App]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Release Notes 2.x | Release Notes 2.x]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Release Notes 1.x | Release Notes 1.x]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Future releases expecco | Zukünftige Releases]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Smalltalk | Smalltalk]]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=0 cellspacing=8 width=&amp;quot;100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;expecco ALM&amp;lt;/h1&amp;gt;&lt;br /&gt;
   &amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td font size=&amp;quot;5&amp;quot; bgcolor=#ECF0F3 width=&amp;quot;20%&amp;quot; height=&amp;quot;100&amp;quot; align=&amp;quot;left&amp;quot; valign=&amp;quot;top&amp;gt;&lt;br /&gt;
      &amp;amp;nbsp;&amp;amp;nbsp;[[Datei:Sonstiges-Info.png|30px]]&amp;amp;nbsp;&amp;amp;nbsp;Allgemein&amp;lt;hr/&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Was ist expecco ALM ? | Was ist expecco ALM?]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Anbindung expecco ALM | Anbindung expecco ALM]]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;td font size=&amp;quot;5&amp;quot; bgcolor=#ECF0F3 width=&amp;quot;20%&amp;quot; height=&amp;quot;100&amp;quot; align=&amp;quot;left&amp;quot; valign=&amp;quot;top&amp;gt;&lt;br /&gt;
      &amp;amp;nbsp;&amp;amp;nbsp;[[Datei:Icon_Landingpage5.png|30px]]&amp;amp;nbsp;&amp;amp;nbsp;Installation/Einrichten&amp;lt;hr/&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[expecco ALM Installation | Installation]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[expecco ALM Einrichten Vorgehensweise | expecco ALM Einrichten]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[... | Benutzer Einrichten (*empty)]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[... | Projekt Einrichten (*empty)]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[... | Workflow Einrichten (*empty)]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Einstellungen | Einstellungen (*empty)]]&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;td font size=&amp;quot;5&amp;quot; bgcolor=#ECF0F3 width=&amp;quot;20%&amp;quot; height=&amp;quot;100&amp;quot; align=&amp;quot;left&amp;quot; valign=&amp;quot;top&amp;gt;&lt;br /&gt;
      &amp;amp;nbsp;&amp;amp;nbsp;[[Datei:Refresh.png|30px]]&amp;amp;nbsp;&amp;amp;nbsp;Sonstiges&amp;lt;hr/&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[expecco ALM App | expecco ALM App]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Lizenzserver expecco ALM | Lizenzserver expecco ALM]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[Tutorials expecco ALM | Tutorials (*empty)]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[expecco ALM Release Notes | Release Notes]]&amp;lt;/small&amp;gt;&lt;br /&gt;
:* &amp;lt;small&amp;gt;[[FAQ | FAQ]]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Settings_HotKeySettings/en&amp;diff=9667</id>
		<title>Settings HotKeySettings/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Settings_HotKeySettings/en&amp;diff=9667"/>
		<updated>2017-10-30T13:38:33Z</updated>

		<summary type="html">&lt;p&gt;Ab: /* Hotkey Setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hotkey Settings ==&lt;br /&gt;
&lt;br /&gt;
The purpose of hotkeys is to allow some control over expecco,&lt;br /&gt;
while recording a GUI interaction, without having to move the mouse or click on something&lt;br /&gt;
(i.e. to avoid both interacting with the application and recording that interaction).&lt;br /&gt;
Hotkeys are caught by expecco before they are sent to any application.&lt;br /&gt;
Thus, any key which is defined as hotkey can NOT be sent to ANY window.&lt;br /&gt;
  &lt;br /&gt;
The Hotkey service is currently available only for Windows operating systems. The support for other operating systems is part of the roadmap and will be integrated in a future expecco release.&lt;br /&gt;
&lt;br /&gt;
=== Available Hotkey Functions ===&lt;br /&gt;
&lt;br /&gt;
In this version expecco suport the following hot key functions:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Start a testrun in expecco (the hot key will be delegated to the last active browser window)&lt;br /&gt;
&amp;lt;LI&amp;gt;Stop a running test execution&lt;br /&gt;
&amp;lt;LI&amp;gt;Toggle (start/stop) the recording mode in expecco GUIBrowser &lt;br /&gt;
&amp;lt;LI&amp;gt;Toggle (start/stop) the follow mouse mode in expecco GUIBrowser &lt;br /&gt;
&amp;lt;/UL&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The state of the hotkey service (running/stopped) is shown in the setting dialog.&lt;br /&gt;
&lt;br /&gt;
=== Hotkey Setup ===&lt;br /&gt;
&lt;br /&gt;
In the hotkey setup dialog you can specify the hotkeys you want to use within expecco. The default setting for the hotkeys is disabled.&lt;br /&gt;
In the table (see image below) you can enable/disable each hotkey specification row by a check toggle. If disabled (check toggle is off),&lt;br /&gt;
the hotkey will not be activated if the service is started. In the Hotkey and Modifier columns you can defined the keys you want to assign &lt;br /&gt;
to the hotkey function. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The hotkey settings can not be changed during the service is running.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:HotkeySetupDialog.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If you want to start the hotkey service directly after the expecco startup, please enable the check box &amp;quot;Auto start hot key event listener&amp;quot;. If you want to start the hotkey service manually press the &amp;quot;Start&amp;quot; button. If the &amp;quot;Start&amp;quot; button is disabled you may have unapplied changes in the settings. Please apply them first. After that the &amp;quot;Start&amp;quot; button should be enabled and ready for starting the service. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Settings]]&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Settings_HotKeySettings/en&amp;diff=9666</id>
		<title>Settings HotKeySettings/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Settings_HotKeySettings/en&amp;diff=9666"/>
		<updated>2017-10-30T13:28:21Z</updated>

		<summary type="html">&lt;p&gt;Ab: /* Hotkey Setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hotkey Settings ==&lt;br /&gt;
&lt;br /&gt;
The purpose of hotkeys is to allow some control over expecco,&lt;br /&gt;
while recording a GUI interaction, without having to move the mouse or click on something&lt;br /&gt;
(i.e. to avoid both interacting with the application and recording that interaction).&lt;br /&gt;
Hotkeys are caught by expecco before they are sent to any application.&lt;br /&gt;
Thus, any key which is defined as hotkey can NOT be sent to ANY window.&lt;br /&gt;
  &lt;br /&gt;
The Hotkey service is currently available only for Windows operating systems. The support for other operating systems is part of the roadmap and will be integrated in a future expecco release.&lt;br /&gt;
&lt;br /&gt;
=== Available Hotkey Functions ===&lt;br /&gt;
&lt;br /&gt;
In this version expecco suport the following hot key functions:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Start a testrun in expecco (the hot key will be delegated to the last active browser window)&lt;br /&gt;
&amp;lt;LI&amp;gt;Stop a running test execution&lt;br /&gt;
&amp;lt;LI&amp;gt;Toggle (start/stop) the recording mode in expecco GUIBrowser &lt;br /&gt;
&amp;lt;LI&amp;gt;Toggle (start/stop) the follow mouse mode in expecco GUIBrowser &lt;br /&gt;
&amp;lt;/UL&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The state of the hotkey service (running/stopped) is shown in the setting dialog.&lt;br /&gt;
&lt;br /&gt;
=== Hotkey Setup ===&lt;br /&gt;
&lt;br /&gt;
In the hotkey setup dialog you can specify the hotkeys you want to use within expecco. The default setting for the hotkeys is disabled.&lt;br /&gt;
In the table (see image below) you can enable/disable each hotkey specification row by a check toggle. If disabled (check toggle is off),&lt;br /&gt;
the hotkey will not be activated if the service is started. In the Hotkey and Modifier columns you can defined the keys you want to assign &lt;br /&gt;
to the hotkey function. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The hotkey settings can not be changed during the service is running.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:HotkeySetupDialog.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If you want to start the hotkey service directly after the expecco startup, please enable the check box &amp;quot;Auto start hot key event listener&amp;quot;. If you have changed the settings, please apply them first. After that the hotkey service is ready for starting.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Settings]]&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Settings_HotKeySettings/en&amp;diff=9665</id>
		<title>Settings HotKeySettings/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Settings_HotKeySettings/en&amp;diff=9665"/>
		<updated>2017-10-30T13:21:27Z</updated>

		<summary type="html">&lt;p&gt;Ab: /* Hotkey Setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hotkey Settings ==&lt;br /&gt;
&lt;br /&gt;
The purpose of hotkeys is to allow some control over expecco,&lt;br /&gt;
while recording a GUI interaction, without having to move the mouse or click on something&lt;br /&gt;
(i.e. to avoid both interacting with the application and recording that interaction).&lt;br /&gt;
Hotkeys are caught by expecco before they are sent to any application.&lt;br /&gt;
Thus, any key which is defined as hotkey can NOT be sent to ANY window.&lt;br /&gt;
  &lt;br /&gt;
The Hotkey service is currently available only for Windows operating systems. The support for other operating systems is part of the roadmap and will be integrated in a future expecco release.&lt;br /&gt;
&lt;br /&gt;
=== Available Hotkey Functions ===&lt;br /&gt;
&lt;br /&gt;
In this version expecco suport the following hot key functions:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;UL&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;Start a testrun in expecco (the hot key will be delegated to the last active browser window)&lt;br /&gt;
&amp;lt;LI&amp;gt;Stop a running test execution&lt;br /&gt;
&amp;lt;LI&amp;gt;Toggle (start/stop) the recording mode in expecco GUIBrowser &lt;br /&gt;
&amp;lt;LI&amp;gt;Toggle (start/stop) the follow mouse mode in expecco GUIBrowser &lt;br /&gt;
&amp;lt;/UL&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The state of the hotkey service (running/stopped) is shown in the setting dialog.&lt;br /&gt;
&lt;br /&gt;
=== Hotkey Setup ===&lt;br /&gt;
&lt;br /&gt;
In the hotkey setup dialog you can specify the hotkeys you want to use within expecco. The default setting for the hotkeys is disabled.&lt;br /&gt;
In the table (see image below) you can enable/disable each hotkey specification row by a check toggle. If disabled (check toggle is off),&lt;br /&gt;
the hotkey will not be activated if the service is started. In the Hotkey and Modifier columns you can defined the keys you want to assign &lt;br /&gt;
to the hotkey function. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The hotkey settings can not be changed during the service is running.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:HotkeySetupDialog.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If you want to start the hotkey service directly after the expecco startup, please enable the check box &amp;quot;Auto start hot key event listener&amp;quot;. The hotkey service can only be started if the changes within the settings dialog are accepted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Settings]]&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/en&amp;diff=8477</id>
		<title>Starting expecco via Command Line/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/en&amp;diff=8477"/>
		<updated>2017-04-02T12:53:50Z</updated>

		<summary type="html">&lt;p&gt;Ab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
expecco can be started manually via the command line, by batch or shell scripts or automatically via the crontab (Unix) or scheduled tasks / services (Windows) mechanism of the operating system. Thus, you can have tests to execute unattended and without GUI &amp;quot;overnight&amp;quot;. This is also the method to integrate expecco with other quality tools, such as Jenkins, HP-Quality Center, Polarion, expeccoALM etc.&lt;br /&gt;
 &lt;br /&gt;
Command line options allow for test suites to be loaded, executed and result files being generated without requiring user interaction.&lt;br /&gt;
&lt;br /&gt;
In addition to the above, expecco can also be started in a slave mode as a service, to wait for incoming test-run request from a QM system, such as expeccoALM or Polarion. Expecco can respond to request via SOAP or REST calls to load, execute and report test suites. The expeccoNET automation environment assumes that expecco is already running on each slave host, and each has been started with a  &amp;quot;--server&amp;quot; command line argument. It uses HTTP+SOAP/REST to communicate with those expecco slaves by default.&lt;br /&gt;
&lt;br /&gt;
In this later &amp;quot;slave mode&amp;quot;, expecco is installed to run as a daemon process (under Unix) or as a service (under Windows), and will be automatically started by the operating system, when it boots. The details of how it is installed vary between operating systems: under Unix, it needs to be registered in the init-tab-folder, under Windows it needs to be installed as a Windows service.&lt;br /&gt;
&lt;br /&gt;
== Command Line ==&lt;br /&gt;
&lt;br /&gt;
If expecco is started without command line arguments, it will open up showing the initial welcome screen. The same behavior as if started via the desktop.&lt;br /&gt;
&lt;br /&gt;
With a single file argument, expecco will read a test suite from the given file and open an editor window on it (but will not execute it). &lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco &amp;lt;testsuite filename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is the same behavior as if a test suite file (.ets) is dropped onto the expecco icon via the desktop.&lt;br /&gt;
&lt;br /&gt;
The simplest command line to execute a test suite is:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --execute &amp;lt;testsuite filename&amp;gt; ...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;testsuite filename&amp;gt; is the test suite&#039;s filename, as saved from within the expecco GUI application. This should be a saved &amp;quot;.ets&amp;quot; testSuite file. If more than one test suite filename is given, each is processed in sequence. All top-level test plans as found in the test suite(s) are executed (see below for more options).&lt;br /&gt;
&lt;br /&gt;
:By default, the overall execution outcome is returned by the command&#039;s return value (exit code), which is&lt;br /&gt;
::0        - all PASSED&lt;br /&gt;
::non-zero - any ERROR, FAILURES or INCONCLUSIVE items.&lt;br /&gt;
&lt;br /&gt;
The return value is useful if expecco is started via a makefile, or from jenkins for example. If the caller needs a different exit code, use one of the exitCodeOnXXX options as described below. This is useful to avoid a &#039;&#039;make&#039;&#039; or &#039;&#039;jenkins&#039;&#039; process from stopping.&lt;br /&gt;
&lt;br /&gt;
To get a list of available options, type:&lt;br /&gt;
 &#039;&#039;&#039;expecco --help&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Command Line Options ===&lt;br /&gt;
Command line options are handled at two places: the runtime system (Smalltalk/X VM) and the expecco application itself.&lt;br /&gt;
When expecco is started, the VM is first to look for command line arguments and processes any of the VM options, until&lt;br /&gt;
a non-VM option is encountered. It passes the remaining options to expecco&#039;s main entry.&lt;br /&gt;
Thus, any option which is given after the first non-VM option will not be handled by the VM, but by expecco. Therefore, no VM options should be placed after the first non-VM option. VM options are marked as &amp;quot;&#039;&#039;VM option&#039;&#039;&amp;quot; in the list below.&lt;br /&gt;
&lt;br /&gt;
Also, some options are specific to the operating system, on which expecco is executed. These are marked as &amp;quot;&#039;&#039;Windows&#039;&#039;&amp;quot;, &amp;quot;&#039;&#039;Linux&#039;&#039;&amp;quot; etc.&lt;br /&gt;
&lt;br /&gt;
=== Recommended Command Line Options ===&lt;br /&gt;
&lt;br /&gt;
To start expecco on an existing test suite, use:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco &amp;lt;testsuite filename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
this is also the way expecco is started, when a test suite file is double-clicked on the Linux or Windows desktop, or when a test-suite document is dropped onto the expecco icon.&lt;br /&gt;
The above opens the expecco GUI and loads the given test suite initially. However, it does not automatically execute any test.&lt;br /&gt;
&lt;br /&gt;
To execute a suite, add a &amp;quot;&#039;&#039;&#039;--execute&#039;&#039;&#039;&amp;quot; argument (or in expecco 2.10, &amp;quot;-E&amp;quot;), as in:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --execute &amp;lt;testsuite filename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You will notice, that expecco shows a banner intitially; this can be disabled with a &#039;&#039;&#039;--noBanner&#039;&#039;&#039; option. Also, under windows, a small tray icon is shown in the lower right, which provides a controlling UI. This is disabled with &#039;&#039;&#039;--noTray&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Finally, as mentioned before, the test&#039;s outcome is reported via the exit code. If you want a little more information on the status of individiual test cases, use a &#039;&#039;&#039;--verdicts&#039;&#039;&#039; option.&lt;br /&gt;
&lt;br /&gt;
This makes the following a good start for your command line:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --noBanner --noTray --verdicts --execute &amp;lt;testsuite filename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
or, if you want to use a special parameter-file, to provide values for (some of) the project-variables:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --noBanner --noTray --verdicts --parameter &amp;amp;lt;param-file&amp;amp;gt; --execute &amp;amp;lt;filename&amp;amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Parameter files are XML, CSV or JSON-files containing key-value pairs. They are usually created by saving an environment from within the expecco GUI (see [[Environment Editor]]).&lt;br /&gt;
&lt;br /&gt;
All of the above command lines opened an expecco UI window.&lt;br /&gt;
To execute a suite without GUI, add a &amp;quot;&#039;&#039;&#039;--noWindow&#039;&#039;&#039;&amp;quot; argument.&lt;br /&gt;
&lt;br /&gt;
To compose &amp;quot;scatter-gather&amp;quot; test cases from possibly multiple suites, found in a directory use:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --suiteDirectory &amp;amp;lt;dirName&amp;amp;gt; --testCaseNames &amp;quot;T01,T02,T05&amp;quot; --execute&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
or, to explicitly specify the suite-files where test cases are taken from, use:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --testCaseNames &amp;quot;T01,T02,T05&amp;quot; --execute &amp;amp;lt;suiteFile1&amp;amp;gt;.ets &amp;amp;lt;suiteFile2&amp;amp;gt;.ets ...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Finally, to get a report, add a &amp;quot;&#039;&#039;&#039;--xxxReportFile &amp;amp;lt;fileName&amp;amp;gt;&#039;&#039;&#039;&amp;quot; argument, as in:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --noBanner --noWindow --noTray --verdicts --parameter &amp;amp;lt;param-file&amp;amp;gt;&#039;&#039;&#039; \&lt;br /&gt;
 &#039;&#039;&#039;        --pdfReportFile result.pdf --execute &amp;amp;lt;filename&amp;amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
All options are described in more detail below.&lt;br /&gt;
&lt;br /&gt;
=== Executing Multiple Test Suites in Sequence ===&lt;br /&gt;
&lt;br /&gt;
It is possible to run multiple (possibly different) test suites with one command line to reduce startup and project loading times.&lt;br /&gt;
For this, provide multiple &amp;quot;--execute &amp;amp;lt;filename&amp;amp;gt;&amp;quot; arguments to the command line, as in:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --execute &amp;amp;lt;suiteFile1&amp;amp;gt;.ets --execute &amp;lt;suiteFile2&amp;amp;gt;.ets ...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
with this command line, expecco first executes the toplevel testplan(s) from &amp;quot;suiteFile1.ets&amp;quot;, then those from &amp;quot;suiteFile2.ets&amp;quot;. All parameters (i.e. top-level variable values) will be taken from within the corresponing suite file.&lt;br /&gt;
&lt;br /&gt;
To change individual parameters, use &amp;quot;--parameter:key=value&amp;quot; arguments before the corresponing --execute argument. For example, to execute the same suite with different parameters, use a command line like:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --parameter:device=samsung --execute mobileTest.ets&#039;&#039;&#039; \&lt;br /&gt;
 &#039;&#039;&#039;        --parameter:device=nexus --execute mobileTest.ets&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Opening a Previous Result File ===&lt;br /&gt;
&lt;br /&gt;
As described below, expecco can generate result files in various formats and different detail. The pdf, html and junit outputs will contain summary information to be read by humans, archived or to be passed to other programs (eg. to jenkins for statistics).&lt;br /&gt;
&lt;br /&gt;
The native result file (.elf) contains all trace and logging information including the original test suite.&lt;br /&gt;
&lt;br /&gt;
As such, it can be archived to ensure that the test result can always be associated to the exact suite being executed, even if the suite file is lost or has been modified in the meanwhile.&lt;br /&gt;
&lt;br /&gt;
These .elf result files are generated either via corresponding command line options or manually via the &amp;quot;&#039;&#039;Test Results&#039;&#039;&amp;quot;-&amp;quot;&#039;&#039;Save Result As...&#039;&#039;&amp;quot; menu item.&lt;br /&gt;
Like regular suite files, they can be opened via the command line or via the &amp;quot;&#039;&#039;File&#039;&#039;&amp;quot;-&amp;quot;&#039;&#039;Open...&#039;&#039;&amp;quot; menu item.&lt;br /&gt;
&lt;br /&gt;
When opened, the original suite (at the time of execution), the trace- and log data and the execution times will be presented. It is even possible to re-execute individual blocks, test plans or the whole suite.&lt;br /&gt;
 &lt;br /&gt;
This feature is very powerful, in that it allows for the result file to be given to a developer and will help to analyse the data values, control flows and even to rerun tests  and reproduce errors/failures.&lt;br /&gt;
&lt;br /&gt;
=== Detailed Option Description ===&lt;br /&gt;
&lt;br /&gt;
==== Information/Debugging/Logging ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--help&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Prints an up-to-date list of possible options and command line arguments.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--version&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Prints the expecco release identification and exits.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--noBanner&amp;lt;/code&amp;gt;&#039;&#039;&#039; (&#039;&#039;VM option&#039;&#039;)&amp;lt;br&amp;gt;Suppress the splash startup banner.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--console&amp;lt;/code&amp;gt;&#039;&#039;&#039; (&#039;&#039;VM option&#039;&#039;, &#039;&#039;Windows only&#039;&#039;)&amp;lt;br&amp;gt;Open a debug console window for Stdout and Stderr.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--verbose&amp;lt;/code&amp;gt;&#039;&#039;&#039; (&#039;&#039;VM option&#039;&#039;)&amp;lt;br&amp;gt;Additional startup, execution and result info is sent in human readable format to the stderr output. This is mainly meant to analyze startup problems and is actually more useful for expecco developers. It may be too much of printout, so try &amp;quot;&#039;&#039;--verdicts&#039;&#039;&amp;quot; instead.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--debug&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Turns on startup debugging. By default, if an error occurs during startup, expecco terminates itself. With this option enabled, a command line debugger is opened instead. This is probably only useful for plugin developers.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--silent&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Suppresses most info, warning and error messages which are sent to stderr/stdout. This is mainly meant to remove unwanted informational messages (for example, when plugins cannot be loaded during startup, etc.).&amp;lt;br&amp;gt;(this option is available with expecco vsn &amp;gt;= 2.10)&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Startup ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--settings &amp;lt;fileName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Force using &amp;lt;fileName&amp;gt; instead of the default &amp;quot;&amp;lt;code&amp;gt;~/.expecco/.expeccoPreferences&amp;lt;/code&amp;gt;&amp;quot; to be used for the settings file name. Useful if you want different setups to be linked to different desktop icons, or to start expecco with particular settings from a batch or shell script. To generate a preferences file, open the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; - &#039;&#039;Settings&#039;&#039;&amp;quot; dialog, change the settings as required, and select the &amp;quot;&#039;&#039;File&#039;&#039;&amp;quot;-&amp;quot;&#039;&#039;Save As...&#039;&#039;&amp;quot; menu item.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--licenseFile &amp;lt;fileName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Use this license, instead of the default &amp;quot;&amp;lt;code&amp;gt;~/.expecco/.expeccoLicense&amp;lt;/code&amp;gt;&amp;quot;. If a license server (floating licenses) is used, the license server&#039;s hostname and port information is read from the settings file.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--licenseServerHost &amp;lt;hostName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Use this host as license server, instead of the one specified in the settings file (or if no settings file was ever specified). This may be needed when running expecco as a test slave (daemon or service).&amp;lt;br&amp;gt;(this option is available with expecco vsn &amp;gt;= 2.10)&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--licenseServerPort &amp;lt;portNr&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Use this port-nr when contacting the license server, instead of the one specified in the settings file (or if no settings file was ever specified). This may be needed when running expecco as a test slave (daemon or service).&amp;lt;br&amp;gt;(this option is available with expecco vsn &amp;gt;= 2.10)&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--noTray&amp;lt;/code&amp;gt;&#039;&#039;&#039; (&#039;&#039;Windows only&#039;&#039;)&amp;lt;br&amp;gt;Disable the tray control icon (server and execute modes only).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--tray&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Force a tray window to be shown, even if running in non-server (slave) mode. The tray window displays the current execution status, memory situation, thread status and other internal information, which is probably only useful for developers.&amp;lt;br&amp;gt;(this option is available with expecco vsn &amp;gt;= 2.10)&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--noWindow&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Do not open the main window (useful when scripting or executing only).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--noDisplay&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Do not open any window (useful when scripting or executing only).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--noPlugins&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Disable plugin loading. This makes startup somewhat faster, depending on the number of plugins found in your installation directory. You can still force individual plugins to be loaded using the &amp;quot;&#039;&#039;&#039;--loadPlugin&#039;&#039;&#039;&amp;quot; option. Use &amp;quot;&#039;&#039;--noPlugins&#039;&#039;&amp;quot; followed by a list of individual &amp;quot;&#039;&#039;--loadPlugin&#039;&#039;&amp;quot; options, to tune startup time with a minimum set of required plugins being loaded.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--loadPlugin &amp;lt;pluginName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Force loading a specific plugin. This is only useful if a &amp;quot;&#039;&#039;&#039;--noPlugins&#039;&#039;&#039;&amp;quot; option was given before. &#039;&#039;pluginName&#039;&#039; is the name of the folder in the &amp;quot;plugin&amp;quot; folder (under the expecco installation folder). Use &amp;quot;&#039;&#039;--noPlugins&#039;&#039;&amp;quot; followed by a list of individual &amp;quot;loadPlugin&amp;quot; options, to tune startup time with a minimum set of required plugins being loaded.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--noUpdateCheck&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;If configured by the user&#039;s settings, expecco automatically checks for updates and patches when started (by checking the exept web-server for the presence of new patch files). This option disables that check, even if configured in the settings. Notice, that this is usually controlled by the user settings; however, in situations where settings are shared among multiple machines (network drive) and a test host has no (or should not have) internet access, it may be useful to disable this from the command line. It is especially useful, if you are disconnected from the Internet (isolated test-lab), to avoid time delays resulting from connection failures.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--requireLogin&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Opens expecco in a (lightweight) multi-user mode, in which a username must be entered before the actual interaction with expecco begins. This user name will be used to load custom per-user settings (named &amp;quot;&amp;lt;code&amp;gt;.expeccoSettings_&amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;&amp;quot;) and will also be used in the generated reports. Also, the &amp;quot;&#039;&#039;File&#039;&#039;&amp;quot; menu will contain an additional &amp;quot;&#039;&#039;Logout&#039;&#039;&amp;quot; menu item, which brings back the initial login dialog.&amp;lt;br&amp;gt;This mode is useful, if expecco is used on a machine by multiple users, and expecco should remain opened (i.e. as a test stand). For example in a production floor, where tests are executed in multiple shifts by multiple operators.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--load &amp;lt;fileName or packageName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Loads a class file, extension or user plugin. The argument must be either the name of a Smalltalk source or binary file, or the name of a package (which must be found in the &amp;quot;&amp;lt;code&amp;gt;packages&amp;lt;/code&amp;gt;&amp;quot; subfolder under the expecco installation folder). For details on how to generate such packages, read [[Creating_new_Class_Library_Packages/en | &amp;quot;Creating new Class Library Packages&amp;quot;]].&lt;br /&gt;
&lt;br /&gt;
==== Test Execution ====&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--execute &amp;amp;lt;fileName&amp;amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;read and execute a suite. Starting with expecco 2.10, you can also use &amp;quot;-E &amp;amp;lt;fileName&amp;amp;gt;&amp;quot;, which makes the command line a bit shorter.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--execute&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;without a filename, this should be the last argument of a scatter-gather dynamically generated suite command (see below: scatter-gather tests)&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test Selection  ====&lt;br /&gt;
&lt;br /&gt;
the following options allow for individual test plans to be selected for execution from a suite which contains multiple test plans. Without any such option, &#039;&#039;--execute&#039;&#039; will run all top-level testplans found in the suite in sequence.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--testPlanName &amp;lt;namePattern&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Only execute test plans with a matching name.&amp;lt;br&amp;gt;For backward compatibility, &amp;quot;&#039;&#039;&#039;&amp;lt;code&amp;gt;--testSuiteName &amp;lt;namePattern&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;quot; is still supported and has the same effect.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--testPlanTag &amp;lt;tagPattern&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Only execute test plans with a matching tag.&amp;lt;br&amp;gt;For backward compatibility, &amp;quot;&#039;&#039;&#039;&amp;lt;code&amp;gt;--testSuiteTag &amp;lt;tagPattern&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;quot; is still supported and has the same effect.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--testPlanID &amp;lt;uuid&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Only execute that particular test plan (repeat to execute multiple test plans).&amp;lt;br&amp;gt;Starting with release 2.7, the following shortcut can also be used: &#039;&#039;&#039;&amp;lt;code&amp;gt;--testSuiteID &amp;quot;&amp;lt;uuid1&amp;gt;,&amp;lt;uuid2&amp;gt;,...,&amp;lt;uuidN&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;&#039;&#039;&#039;.&amp;lt;br&amp;gt;For backward compatibility, &amp;quot;&#039;&#039;&#039;&amp;lt;code&amp;gt;--testSuiteID &amp;lt;uuid&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;quot; is still supported and has the same effect.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Scatter Gather Test Suite Composition ====&lt;br /&gt;
&lt;br /&gt;
these options allow for a test plan to be composed out of a single or multiple of individual suite files. When composing, a new test plan is temporarily created, which contains the specified test cases. This is in contrast to the above options, where preexisting test plans are selected for execution.&lt;br /&gt;
&lt;br /&gt;
Typically, this kind of composition is used when expecco is called from a QA system, such as Polarion or HP Quality Centre, where individual &amp;quot;test sets&amp;quot; are composed out of a collection of existing test cases. &lt;br /&gt;
&lt;br /&gt;
Notice, that this may lead to longer startup times, depending on the number of suites found in the suite directory, because suite files there will be opened and searched for matching test cases. If the same set of tests needs to be executed multiple times, it may be agood idea to use the &amp;quot;--saveSuite&amp;quot; option, to have the composed suite saved into a file for later reuse.&lt;br /&gt;
&lt;br /&gt;
Also notice, that this works best, if testcase have unique names or are known by their ID (which is globally unique). If your test management system can provide unique identifiers, these should be used to name your testcases inside the suite (typically, a unique name of the test-case or requirement is used to name corresponding test-cases).&lt;br /&gt;
&amp;lt;br&amp;gt;(These options are only available in release &amp;amp;ge; 2.7)&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--suiteDirectory &amp;lt;dirName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;defines the directory, where test suite files are searched for composed test plans. Test cases as specified in one of the options below must be found in one of the files present there. Notice, that the first file which contains a requested test case action will be chosen. Thus, you should ensure, that only one version of each suite is present there. Typically, an up-to-date test suite directory as checked out from the revision control system is specified here. If this argument is not given, test cases are searched in the list of explicitly listed suite files (&amp;quot;.ets&amp;quot; arguments).&amp;lt;p&amp;gt;This option also specifies the directory where suites are found for remote execution (see description of SOAP and REST services below).&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--suiteTitle &amp;lt;string&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;defines the name of the new test plan, which is created dynamically. This is used to control the labels in the generated report files.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--testCaseNames &amp;lt;name-list&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;defines the test cases to be included in the test by name. name-list is a list of comma-separated names of the individual test actions.&amp;lt;br&amp;gt;Please only use this option, if your testcases have unique names and are found only once in any suite found in the suite directory. Otherwise, the first suite which contains that name will be chosen (see below for better selection options).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--testCaseFIDs &amp;lt;id-list&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;defines the test cases to be included in the test by function ID. id-list is a list of comma-separated UUIDs of the individual test actions.&amp;lt;br&amp;gt;This option is probably not very user-friendly for a human, but allows for a calling program (or script) that the testcase is found even if it has been renamed in the meanwhile (remember that functional IDs are assigned once when an item is created and remain unchanged over the whole lifetime).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--testCaseIDs &amp;lt;id-list&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;defines the test cases to be included in the test by version ID. id-list is a list of comma-separated UUIDs of the individual test actions.&amp;lt;br&amp;gt;This option may be very unfriendly for a human user, but allows for a calling program (or script) to ensure that a particular testcase with a particular version is found and executed, even if the testcase has been renamed or modified in the meantime (remember that the ID is changed with every modification). If the same testcase is found in multiple suite files (i.e. in different versions), this will ensure that the correct version will be executed&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--saveSuite &amp;lt;fileName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;saves the generated as-hoq suite. Useful if you want to archive such a dynamically generated scatter-gather suite separately from the result file(s), or to automatically construct new suites. Notice that the &amp;quot;.elf&amp;quot; result file will always include the generated ad-hoq suite, so archival of the generated ad-hoq suite is only needed if you generate pdf, html or other non-elf reports.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test Parameters ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--parameter &amp;amp;lt;fileName&amp;amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039; / &#039;&#039;&#039;&amp;lt;code&amp;gt;-P &amp;amp;lt;fileName&amp;amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Load a parameter set from a file. A parameter set contains values for a test suite&#039;s top environment. This can be either in XML format, as generated with the [[Environment_Editor|&amp;quot;&#039;&#039;Save-Parameter-Set&#039;&#039;&amp;quot; menu function]], a CSV file, containing key-value pairs or a JSON file containing a JSON dictionary object.&amp;lt;p&amp;gt;Parameter files in either format can be created manually in a text editor, provided by a QM system (such as expeccoALM, HP Quality Center or similar), generated by another controlling program or generated by expecco itself via the &amp;quot;&#039;&#039;Save-Parameter&#039;&#039;&amp;quot; menu function of the [[Environment_Editor|environment editor]].&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;The parameter file may contain values for a subset of the environment variables. In this case, the values from the parameter file overwrite corresponding values present in the loaded test suite, leaving other values unchanged.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--parameter:&amp;amp;lt;key&amp;amp;gt;=&amp;amp;lt;value&amp;amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039; / &#039;&#039;&#039;&amp;lt;code&amp;gt;-P:&amp;amp;lt;key&amp;amp;gt;=&amp;amp;lt;value&amp;amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Sets an individual parameter for the next &amp;quot;--execute&amp;quot; argument.&amp;lt;p&amp;gt;If multiple &amp;quot;--execute&amp;quot; arguments are given (i.e. multiple suites are to be executed in sequence), these parameter values are collected and given to the next execution only, and overwrite corresponding values from either a parameter set (see above) or from the suite itself.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;Thus, it is possible to execute the same suite with different parameters in one command line (see example above).&amp;lt;br&amp;gt;(this option is available with expecco vsn &amp;gt;= 2.10)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test Execution via Scripting ====&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--scriptFile &amp;amp;lt;fileName&amp;amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;read and execute a script from a file (see scripting below).&lt;br /&gt;
&lt;br /&gt;
==== Reporting ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--verdicts&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Send execution and result info in human readable format to the stderr output. (see [[#Verdicts Example|example below]].)&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--logFile &amp;lt;fileName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Used to change the name of the generated log file, where stderr is written to.&amp;lt;br&amp;gt;This is only useful if running in server mode.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--exitCode &amp;lt;n&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Defines the exit code to be used independent of the test outcome.&amp;lt;br&amp;gt;The default is 0 (zero) if all tests pass, and non-zero when they do not. However, some calling programs (make/jenkins,...) may misinterpret this exit code and treat the whole job as non-executable. Use this flag to prevent this. It is still possible to change the exitCode for a particular outcome by adding one of the following options after this option.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--exitCodeOnFail &amp;lt;n&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Defines the exit code in case any test ends with a test-failure status.&amp;lt;br&amp;gt;The default is 0 (zero), so that when you run expecco out of make, jenkins or other tools which check for the exit status, the calling program does not interpret this status as if expecco itself failed to execute. This option also changes the exitCodeOnError and exitCodeOnInconclusive values (see below), unless explicitly defined by those options.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--exitCodeOnError &amp;lt;n&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Defines the exit code in case any test ends with a test-error status.&amp;lt;br&amp;gt;The default is 0 (zero), so that when you run expecco out of make, jenkins or other tools which check for the exit status, the calling program does not interpret this status as if expecco itself failed to execute. This option also changes the exitCodeOnInconclusive values (see below), unless explicitly defined by that option.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--exitCodeOnInconclusive &amp;lt;n&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Defines the exit code in case any test ends with an inconclusive status.&amp;lt;br&amp;gt;The default is 0 (zero), so that when you run expecco out of make, jenkins or other tools which check for the exit status, the calling program does not interpret this status as if expecco itself failed to execute.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--elfReportFile &amp;lt;elfFilename&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Writes a report in expecoo&#039;s native XML logfile format. The report contains a lot of detail information and could be processed by an XSLT processor or a similar tool. It also contains enough additional information about test plans and actions so that expecco can redisplay the activity log tree from this file. The generated file can be opened directly via the command line (&amp;quot;expecco &amp;lt;file&amp;gt;.elf&amp;quot;) or by double clicking on the elf-file in the operating system&#039;s desktop.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--csvReportFile &amp;lt;csvFilename&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Writes a summary report in CSV format. Each row consists of:&amp;lt;br&amp;gt;&lt;br /&gt;
** &#039;&#039;TESTSUITE&#039;&#039; - the filename&lt;br /&gt;
** &#039;&#039;TESTPLAN&#039;&#039;  - the test plan&lt;br /&gt;
** &#039;&#039;TESTCASE&#039;&#039;  - the test case&lt;br /&gt;
** &#039;&#039;VERDICT&#039;&#039;   - the test result; one of SUCCESS, FAILED, ERROR or INCONCLUSIVE&lt;br /&gt;
** &#039;&#039;INFO&#039;&#039;      - additional info in case of failure&lt;br /&gt;
:Additional pseudo verdicts such as STARTTIME, ENDTIME etc. are written. A typical CVS output file can be found in the [[#CSV File Example|examples]].&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--textReportFile &amp;lt;textFilename&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Writes a summary report in a human readable textual format. A typical text output file can be found in the [[#Textual File Example|examples]].&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--xmlReportFile &amp;lt;xmlFilename&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Writes a report in XML format. The report contains a lot of detail information and could usually be processed by an XSLT processor or simular tool. A typical XML output file can be found in the [[#XML File Example|examples]].&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--pdfReportFile &amp;lt;pdfFilename&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Writes a summary report in pdf format.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--htmlReportFile &amp;lt;htmlFilename&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Writes a summary report in html format.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--junitReportFile &amp;lt;htmlFilename&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Writes a summary report in a junit compatible XML format. Useful, when expecco is to be started by jenkins or similar driver programs.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--polarionReportFile &amp;lt;htmlFilename&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Writes a summary report in an XML format which is especially suited for the Polarion QM tool. The structure of the generated XML is the same as with the junit format above, but a slightly different time format is used.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--reportTemplateName &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Use the given report template (must be an element inside the test suite) for the following &amp;quot;--xxxReportFile&amp;quot; argument. If no such argument is given, the default template as defined in the suite is used.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--server&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Starts expecco in server mode. This combines the &amp;quot;&#039;&#039;--service&#039;&#039;&amp;quot;, &amp;quot;&#039;&#039;--infoService&#039;&#039;&amp;quot; and &amp;quot;&#039;&#039;--remoteControlService&#039;&#039;&amp;quot; flags. All of those services as described below are started with that single command line argument.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--service&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Starts expecco in server mode. In this mode, HTTP-SOAP and HTTP-REST requests can be used to remote-control expecco&#039;s execution; especially, to execute and monitor tests, and upload results. The most obvious use for this is for expecco to act as an execution host (test slave) for an expeccoALM or Polarion server.&amp;lt;br&amp;gt;However, because standard protocols are used, this may also be used to interface the execution engine to many other QM management or automation systems (e.g. HP Quality Centre). The interface is described below.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--infoService&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Provide an additional info service which allows for monitoring and control of an expecco server via a web browser (server mode only).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--remoteControlService&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Provide an additional service to interact with a running test. Dialog requests, single stepping, starting, pausing and stopping of tests is possible via remote REST requests. This service is used by the Android remote control app, which is available upon request (server mode only).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--port &amp;lt;portNr&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Used to change the HTTP and SOAP port numbers, when running in server mode.&amp;lt;br&amp;gt;The default is 9090 (server mode only).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--scripting &amp;lt;portNr&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Enable scripting (remote control via Telnet ascii interface) on portNr ([[#Scripting Example|see more below]]).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--allowHost &amp;lt;hostName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Allow hostName to connect to the scripting port. Repeat for multiple hosts (see more below).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Utility Functions ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--diff &amp;lt;file1&amp;gt; &amp;lt;file2&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Print differences between two test suites. This can be used eg. to automatically generate log messages for a revision control system (please read the section on &amp;quot;Integration with Source Code Management System&amp;quot; below).&amp;lt;br&amp;gt;(This function is only available in release &amp;amp;ge; 2.7)&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Command Exit Status ===&lt;br /&gt;
&lt;br /&gt;
*0 - all tests passed&lt;br /&gt;
&lt;br /&gt;
*&amp;gt;0 various other errors (command line, file not found, etc.)&lt;br /&gt;
&lt;br /&gt;
*101 - at least one test failed (FAIL status). This exitCode can be overwritten by a command line argument.&lt;br /&gt;
&lt;br /&gt;
*102 - at least one test was inconcusive (INCONCLUSIVE status). This exitCode can be overwritten by a command line argument.&lt;br /&gt;
&lt;br /&gt;
*103 - at least one test lead to an error (ERROR status). This exitCode can be overwritten by a command line argument.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The diff option returns 0 if the compared suites are the same, or 200+n, (where n is the number of differences) otherwise.&lt;br /&gt;
&lt;br /&gt;
== Sample Outputs ==&lt;br /&gt;
&lt;br /&gt;
The following output files were generated by executing the test suite from the file:&lt;br /&gt;
:&amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;quot;&lt;br /&gt;
which contains a single test plan named:&lt;br /&gt;
:&amp;quot;Example Testplan&amp;quot;&lt;br /&gt;
which contains three test cases named:&lt;br /&gt;
:&amp;quot;Test1&amp;quot;&lt;br /&gt;
:&amp;quot;Test2&amp;quot;&lt;br /&gt;
:&amp;quot;Test3-Should fail&amp;quot;&lt;br /&gt;
of which the first two are supposed to PASS and the last one generates an ERROR.&lt;br /&gt;
&lt;br /&gt;
All timestamp information is written in ISO8601 format.&lt;br /&gt;
&lt;br /&gt;
Be reminded that the following reports are condensed reports, which only contain a subset of the information contained in expecco&#039;s native &amp;quot;.elf&amp;quot; file format. The &amp;quot;elf&amp;quot; file contains all of the execution, trace and data-flow information and the original suite as executed. &amp;quot;elf&amp;quot;-files can be reloaded at any time into the expecco UI and the test be reexecuted. Also, any of the other reports can be regenerated, posyibly with different report options (i.e. detail). &lt;br /&gt;
&lt;br /&gt;
Thus it is highly recommended that these &amp;quot;elf&amp;quot; files are archived after a test run, in addition to any of the condensed report files (eg. pdf or junit report).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CSV File Example (&amp;quot;&amp;lt;code&amp;gt;--csvReportFile&amp;lt;/code&amp;gt;&amp;quot; option) ===&lt;br /&gt;
&lt;br /&gt;
By default, entries are separated by &amp;quot;;&amp;quot;-characters. Additional double quotes (&amp;quot;) are used to delimit strings with embedded &amp;quot;;&amp;quot; or spaces. Any double quote within such a string is doubled.&lt;br /&gt;
CSV is a simple and very common interchange format.&lt;br /&gt;
For example, CSV files can be imported into Microsoft Word, Exel and Openoffice (and many other).&lt;br /&gt;
&lt;br /&gt;
 TESTSUITE;TESTPLAN;TESTCASE;VERDICT;INFO&lt;br /&gt;
 ;;;StartTime;2008-10-31T08:57:13.689&lt;br /&gt;
 &amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;quot;;&amp;quot;Example Testplan&amp;quot;;Test1;PASSED;  &lt;br /&gt;
 &amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;quot;;&amp;quot;Example Testplan&amp;quot;;Test2;PASSED;  &lt;br /&gt;
 &amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;quot;;&amp;quot;Example Testplan&amp;quot;;&amp;quot;Test3 - Should fail&amp;quot;;ERROR;   &lt;br /&gt;
 ;;;EndTime;2008-10-31T08:57:18.746&lt;br /&gt;
&lt;br /&gt;
=== XML File Example (&amp;quot;&amp;lt;code&amp;gt;--xmlReportFile&amp;lt;/code&amp;gt;&amp;quot; option) ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;SummaryReport&amp;gt;&lt;br /&gt;
   &amp;lt;StartTime&amp;gt;2008-10-31T08:56:49.774&amp;lt;/StartTime&amp;gt; &lt;br /&gt;
   &amp;lt;TestSuite&amp;gt;&lt;br /&gt;
     &amp;lt;File&amp;gt;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;lt;/File&amp;gt; &lt;br /&gt;
     &amp;lt;TestPlan&amp;gt;&lt;br /&gt;
       &amp;lt;Name&amp;gt;Example Testplan&amp;lt;/Name&amp;gt; &lt;br /&gt;
       &amp;lt;TestCase&amp;gt;&lt;br /&gt;
         &amp;lt;Name&amp;gt;Test 1&amp;lt;/Name&amp;gt; &lt;br /&gt;
         &amp;lt;Verdict&amp;gt;PASSED&amp;lt;/Verdict&amp;gt; &lt;br /&gt;
       &amp;lt;/TestCase&amp;gt;&lt;br /&gt;
       &amp;lt;TestCase&amp;gt;&lt;br /&gt;
         &amp;lt;Name&amp;gt;Test 2&amp;lt;/Name&amp;gt; &lt;br /&gt;
         &amp;lt;Verdict&amp;gt;PASSED&amp;lt;/Verdict&amp;gt; &lt;br /&gt;
       &amp;lt;/TestCase&amp;gt;&lt;br /&gt;
       &amp;lt;TestCase&amp;gt;&lt;br /&gt;
         &amp;lt;Name&amp;gt;Test 3 - Should fail&amp;lt;/Name&amp;gt; &lt;br /&gt;
         &amp;lt;Verdict&amp;gt;ERROR&amp;lt;/Verdict&amp;gt; &lt;br /&gt;
       &amp;lt;/TestCase&amp;gt;&lt;br /&gt;
     &amp;lt;/TestPlan&amp;gt;&lt;br /&gt;
   &amp;lt;/TestSuite&amp;gt;&lt;br /&gt;
   &amp;lt;EndTime&amp;gt;2008-10-31T08:56:55.142&amp;lt;/EndTime&amp;gt; &lt;br /&gt;
 &amp;lt;/SummaryReport&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is not to be confused with the &amp;quot;elf&amp;quot; result file format, which is also XML based, but contains a lot more detail. &lt;br /&gt;
&lt;br /&gt;
Notice also, that the junit report format (&amp;quot;&amp;lt;code&amp;gt;--junitReport&amp;lt;/code&amp;gt;&amp;quot; option) is similar in structure but uses different tags.&lt;br /&gt;
Junit reports are compatible to reports generated by Java jUnit frameworks.&lt;br /&gt;
They can thus be used to generate reports and trends in Jenkins/Hudson and other tools which understand the jUnit report format.&lt;br /&gt;
&lt;br /&gt;
=== Textual File Example (&amp;quot;&amp;lt;code&amp;gt;--textReportFile&amp;lt;/code&amp;gt;&amp;quot; option) ===&lt;br /&gt;
&lt;br /&gt;
 Test Execution Summary&lt;br /&gt;
   Start: 2008-10-31 08:56:12.751&lt;br /&gt;
   TestSuite: &amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&lt;br /&gt;
     TestPlan: Example Testplan&lt;br /&gt;
       Test 1 ....................... PASSED&lt;br /&gt;
       Test 2 ....................... PASSED&lt;br /&gt;
       Test 3 - Should fail ......... ERROR&lt;br /&gt;
   Finish: 2008-10-31 08:56:18.009&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--Orginal:&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&lt;br /&gt;
TESTSUITE;TESTPLAN;TESTCASE;VERDICT;INFO&lt;br /&gt;
;;;StartTime;2008-10-31T08:57:13.689&lt;br /&gt;
&amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;quot;;&amp;quot;Example Testplan&amp;quot;;Test1;PASSED;  &lt;br /&gt;
&amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;quot;;&amp;quot;Example Testplan&amp;quot;;Test2;PASSED;  &lt;br /&gt;
&amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;quot;;&amp;quot;Example Testplan&amp;quot;;&amp;quot;Test3 - Should fail&amp;quot;;ERROR;   &lt;br /&gt;
;;;EndTime;2008-10-31T08:57:18.746&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&amp;lt;SummaryReport&amp;gt;&lt;br /&gt;
  &amp;lt;StartTime&amp;gt;2008-10-31T08:56:49.774&amp;lt;/StartTime&amp;gt; &lt;br /&gt;
  &amp;lt;TestSuite&amp;gt;&lt;br /&gt;
    &amp;lt;File&amp;gt;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;lt;/File&amp;gt; &lt;br /&gt;
    &amp;lt;TestPlan&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Example Testplan&amp;lt;/Name&amp;gt; &lt;br /&gt;
      &amp;lt;TestCase&amp;gt;&lt;br /&gt;
        &amp;lt;Name&amp;gt;Test 1&amp;lt;/Name&amp;gt; &lt;br /&gt;
        &amp;lt;Verdict&amp;gt;PASSED&amp;lt;/Verdict&amp;gt; &lt;br /&gt;
      &amp;lt;/TestCase&amp;gt;&lt;br /&gt;
      &amp;lt;TestCase&amp;gt;&lt;br /&gt;
        &amp;lt;Name&amp;gt;Test 2&amp;lt;/Name&amp;gt; &lt;br /&gt;
        &amp;lt;Verdict&amp;gt;PASSED&amp;lt;/Verdict&amp;gt; &lt;br /&gt;
      &amp;lt;/TestCase&amp;gt;&lt;br /&gt;
      &amp;lt;TestCase&amp;gt;&lt;br /&gt;
        &amp;lt;Name&amp;gt;Test 3 - Should fail&amp;lt;/Name&amp;gt; &lt;br /&gt;
        &amp;lt;Verdict&amp;gt;ERROR&amp;lt;/Verdict&amp;gt; &lt;br /&gt;
      &amp;lt;/TestCase&amp;gt;&lt;br /&gt;
    &amp;lt;/TestPlan&amp;gt;&lt;br /&gt;
  &amp;lt;/TestSuite&amp;gt;&lt;br /&gt;
  &amp;lt;EndTime&amp;gt;2008-10-31T08:56:55.142&amp;lt;/EndTime&amp;gt; &lt;br /&gt;
&amp;lt;/SummaryReport&amp;gt;&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------&lt;br /&gt;
Test Execution Summary&lt;br /&gt;
  Start: 2008-10-31 08:56:12.751&lt;br /&gt;
&lt;br /&gt;
  TestSuite: &amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&lt;br /&gt;
    TestPlan: Example Testplan&lt;br /&gt;
      Test 1 ....................... PASSED&lt;br /&gt;
      Test 2 ....................... PASSED&lt;br /&gt;
      Test 3 - Should fail ......... ERROR&lt;br /&gt;
&lt;br /&gt;
  Finish: 2008-10-31 08:56:18.009&lt;br /&gt;
------------------------------------------------------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Verdicts Example ===&lt;br /&gt;
&lt;br /&gt;
the &amp;quot;&amp;lt;code&amp;gt;--verdicts&amp;lt;/code&amp;gt;&amp;quot; option generates a simple trace on the standard error (to be redirected into a file):&lt;br /&gt;
&lt;br /&gt;
 C:\selftest\commandLineArgs&amp;gt; expecco --noBanner --noTray --verdicts &lt;br /&gt;
 --parameter paramesForTest.xpar --execute parameterTest.ets&amp;lt;br&amp;gt;&lt;br /&gt;
 Expecco [info]: start testSuite &amp;quot;parameterTest.ets&amp;quot;...&lt;br /&gt;
 Expecco [info]: using parameters &amp;quot;paramesForTest.xpar&amp;quot;...&lt;br /&gt;
 Expecco [info]: start testPlan &amp;quot;Test Parameters From CommandLine&amp;quot;&lt;br /&gt;
 Expecco [info]: start testCase &amp;quot;Validate Parameters&amp;quot;&lt;br /&gt;
 Expecco [info]: done testCase &amp;quot;Validate Parameters&amp;quot;; STATUS=PASSED&lt;br /&gt;
 Expecco [info]: done testPlan &amp;quot;Test Parameters From CommandLine&amp;quot;; STATUS=PASSED&lt;br /&gt;
 Expecco [info]: done testSuite &amp;quot;parameterTest.ets&amp;quot;; STATUS=PASSED&lt;br /&gt;
&lt;br /&gt;
== Integration with Quality Managament and Automation Tools ==&lt;br /&gt;
&lt;br /&gt;
=== Integration with Jenkins ===&lt;br /&gt;
&lt;br /&gt;
To have expecco tests being executed automatically by Jenkins, take the following example as a guideline. This is a real world setup, taken from our own setup within eXept.&lt;br /&gt;
&lt;br /&gt;
# Create a test job, which is triggered by a successful build (or a change in the test suite repository)&lt;br /&gt;
# Check the &amp;quot;Block Build while prerequisite Jobs are Active&amp;quot; flag&lt;br /&gt;
# Check either the &amp;quot;Trigger from Source Code Management&amp;quot; or the &amp;quot;Trigger from other Job&amp;quot; flags&lt;br /&gt;
# Check &amp;quot;Abort build if it is Stuck&amp;quot; (just to make sure, that a faulty suite does not block Jenkins)&lt;br /&gt;
# Check &amp;quot;Fail the Build if Stuck&amp;quot; and give it a reasonable elastic Time-out Strategy (we use 300% of the last 10 builds, to make sure a longer execution time due to more test cases will not be interpreted as a stuck, and an extra timeout of 30 minutes. The timeout is very generous for the expected execution time of a few minutes).&lt;br /&gt;
# Check &amp;quot;Run xvnc during Build&amp;quot; to allow for monitoring, what is going on. This is also required, if the test needs a UI.&lt;br /&gt;
# Define the &amp;quot;Build Procedure&amp;quot; as &amp;quot;Execute Shell Script&amp;quot; (Unix/Linux) or &amp;quot;Execute Batch Job&amp;quot; (Windows)&lt;br /&gt;
# Enter a build procedure similar to the ours, which is:&lt;br /&gt;
#::&amp;lt;code&amp;gt;cd exept\expecco\application&lt;br /&gt;
#::del *.junit&lt;br /&gt;
#::expecco.com --noBanner --exitOnInternalError --noTray \&lt;br /&gt;
#::::--jUnitReportFile selfTestResult.junit \&lt;br /&gt;
#::::--execute ..\projects\expecco\eXpeccoSelfTest.ets&lt;br /&gt;
#::expecco.com --noBanner --noTray \&lt;br /&gt;
#::::--jUnitReportFile CommunicationWithExpeccoNETResult.junit \&lt;br /&gt;
#::::--execute ..\projects\expecco\CommunicationWithExpeccoNET.ets&amp;lt;/code&amp;gt;&lt;br /&gt;
#:The details (especially paths and names) will of cause be different in your setup. The above uses the relative paths as it first changes the current directory to where the previous build has compiled the executable, which will of course not be the case in your setup.&lt;br /&gt;
# Define a &amp;quot;Post-build Action&amp;quot;&lt;br /&gt;
# Check &amp;quot;Publish Junit Test Results&amp;quot;&lt;br /&gt;
# Enter a path expression to declare the location of the resulting reports. Here, we used:&amp;lt;PRE&amp;gt;exept\expecco\application\*.junit&amp;lt;/PRE&amp;gt;&lt;br /&gt;
# Check the &amp;quot;Publish Test Attachments&amp;quot; flag, so the results will be presented in the Jenkins management console&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! Because expecco has been told to generate jUnit compatible report files, we can use Jenkins&#039; existing jUnit support. However, the jUnit xml format does not support the full range of information which is present in the native expecco result files (especially the activity log and pin value information is not included). Therefore, it is a good idea to also generate a regular &amp;quot;.elf&amp;quot; (expecco log file) and add it to the archived build artefacts.&lt;br /&gt;
&lt;br /&gt;
=== Integration with expeccoALM ===&lt;br /&gt;
Expecco and ExpeccoALM (formerly called &amp;quot;&#039;&#039;expeccoNET&#039;&#039;&amp;quot;) have been originally designed to work together. Therefore, only a minimum setup is required:&lt;br /&gt;
# ensure that an expecco test execution slave is running on each test host (server farm, virtual machines, etc.). Depending on the operating system, this is either done by installing expecco as a service (Windows), or by adding appropriate startup actions to your &amp;quot;init.d&amp;quot; files (Unix).&lt;br /&gt;
# define the test host(s) in expeccoALM.&lt;br /&gt;
# (optionally) define the devices available and attached to the execution slave machine in expeccoALM&lt;br /&gt;
&lt;br /&gt;
ExpeccoALM will ask the expecco slaves about their operating system environment. So jobs will be automatically executed on matching CPU/OS machines. However, if tests require special resources (devices) to be attached, these must be defined and listed in expeccoALM as well. If your test has corresponding resource-requirements defined (see resources/inventory), expeccoALM will both ensure that the test will execute on the correct machine, and also reserve the resource during the execution. Also, test scheduling, if defined to be automatic, will be optimized to minimize resource usage, and to ensure that a higher number of tests can be executed in parallel.&lt;br /&gt;
&lt;br /&gt;
=== Integration into a SOA Infrastructure ===&lt;br /&gt;
&lt;br /&gt;
For this, expecco should be started on the test host(s) in so called &amp;quot;slave&amp;quot; mode.&lt;br /&gt;
In this mode, expecco awaits for execution commands via SOAP or REST, executes tests in the background and returns status information (progress) and results (reports).&lt;br /&gt;
&lt;br /&gt;
Because tests may execute for a long time (hours or even days), the execution is performed asynchonously; first, the test has to be downloaded to the slave, then execution started. The start-command returns a ticket, which is a test-run-identifier, by which the execution progress can be queried (polled) while the test is running. Finally, a &amp;quot;finished&amp;quot; status is returned, upon which the result can be aquired via another service call.&lt;br /&gt;
&lt;br /&gt;
Multiple such test slaves can be started on multiple machines, and each test slave may (if required) execute multiple tests in parallel (although this is usually limited to one, to avoid conflicts when external resources are accessed).&lt;br /&gt;
&lt;br /&gt;
To start expecco in slave mode, use the command line:&lt;br /&gt;
 expecco --service&lt;br /&gt;
&lt;br /&gt;
or, if the default port (9090) is not available, use:&lt;br /&gt;
 expecco --service --port 9090&lt;br /&gt;
&lt;br /&gt;
The service interface is described below; typically, you can talk to expecco via:&lt;br /&gt;
 http://localhost:9090/expeccoService&lt;br /&gt;
or:&lt;br /&gt;
 http://localhost:9090/expeccoService/rest&lt;br /&gt;
&lt;br /&gt;
The SOAP wsdl is returned via:&lt;br /&gt;
 http://localhost:9090/wsdl/ExpeccoSOAPService.wsdl&lt;br /&gt;
&lt;br /&gt;
and - if the inforService is also running - general status information with:&lt;br /&gt;
 http://localhost:9090/info&lt;br /&gt;
&lt;br /&gt;
=== Integration with HP Quality Center ===&lt;br /&gt;
&lt;br /&gt;
This is described in the [[ HP Quality Center Plugin ]] document.&lt;br /&gt;
&lt;br /&gt;
=== Integration with Polarion ===&lt;br /&gt;
&lt;br /&gt;
This is described in the [[ Polarion Plugin]] document.&lt;br /&gt;
&lt;br /&gt;
== Integration with Source Code Management Tools ==&lt;br /&gt;
&lt;br /&gt;
=== Background Info on what is Contained in a &amp;quot;.ets&amp;quot; File ===&lt;br /&gt;
&lt;br /&gt;
Expecco stores testsuites in a file with &#039;.ets&#039; extension (which stands for: &amp;quot;&#039;&#039;Expecco-Test-Suite&#039;&#039;&amp;quot;) and result logs in &#039;.elf&#039; files (stands for: &amp;quot;&#039;&#039;Expecco-Log-File&#039;&#039;&amp;quot;).&lt;br /&gt;
These are technically zip files - i.e. a bundle of individual files which can be extracted with the common zip command line tool (winzip under Windows systems, zip/unzip under Unix systems).&lt;br /&gt;
&lt;br /&gt;
For example, &amp;quot;&amp;lt;code&amp;gt;unzip -l foo.ets&amp;lt;/code&amp;gt;&amp;quot; lists the individual components, of which especially the block descriptions and attachments may be of interest.&lt;br /&gt;
&lt;br /&gt;
Notice, that you have to be careful when ets-files are bundled with zip manually: for various consistency checks, expecco generates a validation signature of the components and saves this as an additional file inside the .ets file.&lt;br /&gt;
This signature file must be preserved and it must be consistent with the other zip-components. In effect, this means that an ets can only be constructed from the very same components, using the very same signature file as were extracted before. Otherwise, expecco refuses to load the &amp;quot;.ets&amp;quot; file later.&lt;br /&gt;
&lt;br /&gt;
=== Version Management of &amp;quot;.ets&amp;quot; files ===&lt;br /&gt;
&lt;br /&gt;
Unless a QA system like &amp;quot;expeccoALM&amp;quot; is used, ets-files can be stored and maintained in any other source code management (SCM) system, for example, CVS, SVN, hg/Mercurial, git, Perforce etc.&lt;br /&gt;
Make sure to store the .ets as binary file, and/or disable source expansion of version tag lines (for example, &amp;quot;$Header&amp;quot; or &amp;quot;$Id&amp;quot; in CVS). Consult your particular SCM system&#039;s documentation on how this is done.&lt;br /&gt;
&lt;br /&gt;
As an alternative, it is possible to unzip the ets into individual components, store them separately, and zip them back into an ets, when a previous version is extracted from the SCM system. However, you must be careful to preserve the contents exactly as is, including the signature and other meta data, and not mix versions. I.e. all individual component files must be checkedIn/out in sync and as a group - it is not possible to update individual files from previous versions. The reason is that action blocks are referred to by their versionID, and these IDs will certainly be inconsistent, when previous versions of individual action blocks are mixed into another version&#039;s suite. &lt;br /&gt;
&lt;br /&gt;
If, for whatever reason, you must checkin individual action blocks, we highly recommend to check in BOTH the bundled ets (and use that for later test execution), AND check in the individual components, and use only those for meta actions, such as comparison, documentation or other administrative tasks.&lt;br /&gt;
&lt;br /&gt;
=== Generating Diff Lists or other Version Information ===&lt;br /&gt;
&lt;br /&gt;
Many source code management systems allow for hook-scripts to be added to checkin/checkout actions, and/or to redefine the command to be used for diff-list generation.&lt;br /&gt;
&lt;br /&gt;
For example, in the SVN system, an external diff tool can be defined. You could write a little shell or batch script, which calls expecco with the &amp;quot;&amp;lt;code&amp;gt;--diff&amp;lt;/code&amp;gt;&amp;quot; option which is described above. Thus, you would get meaningful diff output even from checked in ets-bundle files.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;&amp;lt;code&amp;gt;expecco --diff&amp;lt;/code&amp;gt;&amp;quot; option is also useful as a command line tool to get diff lists - even if your SCM system does not allow for such automatic hooks.&lt;br /&gt;
&lt;br /&gt;
== Scripting ==&lt;br /&gt;
&lt;br /&gt;
Expecco can be scripted either by reading a script from a file or remote controlled via a telnet like command-line interface.&lt;br /&gt;
This is useful to execute complex test scenarios and meta tasks, to create or manipulate test suites automatically and for self-testing expecco by using another expecco to control its GUI. &lt;br /&gt;
It can also be used to execute and automate more complex scenarios without using expeccoALM.&lt;br /&gt;
&amp;lt;br&amp;gt;Example uses are:&lt;br /&gt;
* Sequentially load and/or execute all suites found in a folder, reimport libraries, save the updated suite&lt;br /&gt;
* Construct new suites by merging/selecting tests from other suites&lt;br /&gt;
* Bulk renaming, commenting, attributing etc.&lt;br /&gt;
* Change attachments inside a number of suites&lt;br /&gt;
* Controlling an application or web interface (via a GUI plugin) and saving a sequence of screen shots&lt;br /&gt;
&lt;br /&gt;
By default, the scripting interface expects expressions in JavaScript syntax (but with a Smalltalk object model), &lt;br /&gt;
similar to the language used for elementary block definition. However, the language can be changed to Smalltalk syntax via a &amp;quot;~&amp;quot; directive.&lt;br /&gt;
&lt;br /&gt;
=== Script File Example ===&lt;br /&gt;
&lt;br /&gt;
To control expecco via a scriptfile, use the &amp;quot;&amp;lt;code&amp;gt;--scriptFile &amp;amp;lt;filename&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;quot; command line argument, where &amp;lt;filename&amp;gt; must be a file containing JavaScript expressions.&lt;br /&gt;
&lt;br /&gt;
For example, the following script file named &amp;quot;run3Suites.js&amp;quot; may contain the code:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
    // Example for an automatic expecco script.&lt;br /&gt;
    // (loads and executes a number of test suites)&lt;br /&gt;
    //&lt;br /&gt;
&lt;br /&gt;
    // to enable debugging in case of an error.&lt;br /&gt;
    // STXScriptingServer.errorDebugging(true);&lt;br /&gt;
&lt;br /&gt;
    var files = [&lt;br /&gt;
        &amp;quot;foo.ets&amp;quot;,&lt;br /&gt;
        &amp;quot;bar.ets&amp;quot;,&lt;br /&gt;
        &amp;quot;baz.ets&amp;quot;,&lt;br /&gt;
    ];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    Expecco::ExpeccoPreferences.current.automaticReimportOnLoad(true);&lt;br /&gt;
    Expecco::ExpeccoPreferences.current.checkForReimportableImportsOnLoad(true);&lt;br /&gt;
    Expecco::ExpeccoPreferences.current.checkForAnchestorOnAutomaticReimport(false);&lt;br /&gt;
    // Expecco::ExpeccoPreferences.current.libraryPath(importPathes);&lt;br /&gt;
&lt;br /&gt;
    // --------------------&lt;br /&gt;
&lt;br /&gt;
    function executeTestPlan ( aTestPlan ) {&lt;br /&gt;
       Stderr.nextPutLine(&amp;quot;executing testplan &amp;quot;+aTestPlan.name()+&amp;quot;...&amp;quot;);&lt;br /&gt;
       resultList = aTestPlan.execute();&lt;br /&gt;
       Stderr.nextPutLine(&amp;quot;done.&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
    function runSuite(suiteFile) {&lt;br /&gt;
        var loadedProject;&lt;br /&gt;
&lt;br /&gt;
        Stderr.nextPutLine(&amp;quot;loading &amp;quot;+suiteFile+&amp;quot;...&amp;quot;);&lt;br /&gt;
        expecco.loadProjectFromFile(suiteFile);&lt;br /&gt;
        loadedProject = expecco.project();&lt;br /&gt;
&lt;br /&gt;
        if (loadedProject == null) {&lt;br /&gt;
            Stderr.nextPutLine(&amp;quot;failed to load library &amp;quot;+suiteFile+&amp;quot;.&amp;quot;);&lt;br /&gt;
            Smalltalk.exit(1);&lt;br /&gt;
        } else {&lt;br /&gt;
            loadedProject.allTestPlansDo( executTestPlan );&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    files.do(runSuite);&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And can be executed with:&lt;br /&gt;
&lt;br /&gt;
    expecco --scriptFile run3Suites.js&lt;br /&gt;
&lt;br /&gt;
for windowless operation, use the &amp;quot;&amp;lt;code&amp;gt;--noWindow&amp;lt;/code&amp;gt;&amp;quot; command line argument.&lt;br /&gt;
To speed up the startup, you can turn off the loading of plugins, with a &amp;quot;&amp;lt;code&amp;gt;--noPlugins&amp;lt;/code&amp;gt;&amp;quot; argument (and possibly load any required plugins explicitly via additional plugin arguments).&lt;br /&gt;
Finally, enable debug messages with a &amp;quot;&amp;lt;code&amp;gt;--debug&amp;lt;/code&amp;gt;&amp;quot; argument.&lt;br /&gt;
Thus, the recommended options for scripting are:&lt;br /&gt;
  &lt;br /&gt;
    expecco --debug --noPlugins --noWindow --scriptFile run3Suites.js&lt;br /&gt;
&lt;br /&gt;
of course, this command line can be put into a shell (or batch) script file, and then executed with a single word command.&lt;br /&gt;
&lt;br /&gt;
=== Telnet Scripting Example ===&lt;br /&gt;
&lt;br /&gt;
The remote scripting service is enabled when a &amp;quot;&amp;lt;code&amp;gt;--scripting&amp;lt;/code&amp;gt;&amp;quot; command line argument is given.&lt;br /&gt;
By default, the service only accepts connections from the local host (for security reasons). Using the &amp;quot;&amp;lt;code&amp;gt;--allowHost&amp;lt;/code&amp;gt;&amp;quot; option, more hosts can be gained access to the scripting feature - but be aware, that this opens a potential security hole, as all of the internal functions can be accessed via the scripting system (and this includes the possibility to write files and call operating system services with the access rights of the one who started the scripting server).&lt;br /&gt;
&lt;br /&gt;
When used with a remote script connection (telnet),&lt;br /&gt;
additional connection- and execution related commands are introduced by lines starting with the &amp;quot;~&amp;quot; (tilde) escape character (similar to telnet). &lt;br /&gt;
For example, &amp;quot;~.&amp;quot; (tilde-period) is used to close the connection. &lt;br /&gt;
Press &amp;quot;~?&amp;quot; (tilde-question) for help.&lt;br /&gt;
 &lt;br /&gt;
The following is a trace of a typical scripting session (user input in bold):&lt;br /&gt;
&lt;br /&gt;
 c:\programs\expecco&amp;gt; &amp;lt;b&amp;gt;expecco --scripting 8008&amp;lt;/b&amp;gt;&lt;br /&gt;
 c:\programs\expecco&amp;gt;     ... expecco now running in the background with GUI ...&lt;br /&gt;
 ...&lt;br /&gt;
 c:\programs\expecco&amp;gt; &amp;lt;b&amp;gt;telnet localhost 8008&amp;lt;/b&amp;gt;&lt;br /&gt;
 Welcome to Expecco (Type ~? for help)&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;println(expecco);&amp;lt;/b&amp;gt;&lt;br /&gt;
 an Expecco::Browser&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;expecco.menuNewProject();&amp;lt;/b&amp;gt;&lt;br /&gt;
 ...expecco performs the new-function from its menu...&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;expecco.loadProjectFromFile(&amp;quot;C:\Users\cg\testsuites\webedition\projects\BearerTest.ets&amp;quot;);&amp;lt;/b&amp;gt;&lt;br /&gt;
 ...expecco loads the testSuite...&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;expecco.close();&amp;lt;/b&amp;gt;&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;~.&amp;lt;/b&amp;gt;&lt;br /&gt;
 Lost Connection.&lt;br /&gt;
 c:\programs\expecco&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also start a scripting session without an initial expecco browser window:&lt;br /&gt;
&lt;br /&gt;
 c:\programs\expecco&amp;gt; &amp;lt;b&amp;gt;expecco --noWindow --scripting 8008&amp;lt;/b&amp;gt;&lt;br /&gt;
 c:\programs\expecco&amp;gt;     ... expecco now running in the background without GUI ...&lt;br /&gt;
 ...&lt;br /&gt;
 c:\programs\expecco&amp;gt; &amp;lt;b&amp;gt;telnet localhost 8008&amp;lt;/b&amp;gt;&lt;br /&gt;
 Welcome to Expecco (Type ~? for help)&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;println(expecco);&amp;lt;/b&amp;gt;&lt;br /&gt;
 an Expecco::Browser&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;expecco;&amp;lt;/b&amp;gt;&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;~v+&amp;lt;/b&amp;gt; // turn result-printing on&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;expecco&amp;lt;/b&amp;gt;&lt;br /&gt;
 an Expecco::Browser&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;~v-&amp;lt;/b&amp;gt; // and off again&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;expecco.loadProjectFromFile(&amp;quot;~/SomeTest.ets&amp;quot;);&amp;lt;/b&amp;gt;&lt;br /&gt;
 ...expecco loads the testSuite...&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;var blk = expecco.project.elementWithName(&amp;quot;My Action&amp;quot;);&amp;lt;/b&amp;gt;&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;blk.name(&amp;quot;My Fun Action&amp;quot;);&amp;lt;/b&amp;gt;&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;expecco.saveProjectToFile(&amp;quot;~/ModifiedTest.ets&amp;quot;);&amp;lt;/b&amp;gt;&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;expecco.close();&amp;lt;/b&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;lt;b&amp;gt;~.&amp;lt;/b&amp;gt;&lt;br /&gt;
 Lost Connection.&lt;br /&gt;
 c:\programs\expecco&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Scripting API Overview ==&lt;br /&gt;
&lt;br /&gt;
A few objects are predefined by name; among them are &amp;quot;&#039;&#039;expecco&#039;&#039;&amp;quot;, which refers to the browser itself (i.e. the UI) and &amp;quot;&#039;&#039;environment&#039;&#039;&amp;quot;, which refers to a collection of variable bindings (this is a dictionary of interpreter variables - not to be confused with a variable environment as known inside an expecco activity block).&lt;br /&gt;
&amp;lt;BR&amp;gt;New variables can be defined with a &amp;quot;&amp;lt;code&amp;gt;var &amp;amp;lt;name&amp;amp;gt;;&amp;lt;/code&amp;gt;&amp;quot; statement. For example:&lt;br /&gt;
&amp;lt;CODE&amp;gt;&amp;lt;PRE&amp;gt;&lt;br /&gt;
    var ws;&lt;br /&gt;
&lt;br /&gt;
    ws = new ExpeccoWorkspaceApplication;&lt;br /&gt;
    ws.open();&lt;br /&gt;
    ws.close();&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&amp;lt;/CODE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== expecco Object ====&lt;br /&gt;
&lt;br /&gt;
The variable named &amp;quot;&#039;&#039;expecco&#039;&#039;&amp;quot; refers to the opened GUI-object, which represents the expecco application itself. &lt;br /&gt;
&lt;br /&gt;
===== Expecco Functions =====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;project()&#039;&#039;&#039;&amp;lt;br&amp;gt;the current project&lt;br /&gt;
*&#039;&#039;&#039;currentApplication()&#039;&#039;&#039;&amp;lt;br&amp;gt;the current page (initially, there is only one)&lt;br /&gt;
*&#039;&#039;&#039;currentTreeApplication()&#039;&#039;&#039;&amp;lt;br&amp;gt;the current tree sub-application&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;selectModelItem( anItem )&#039;&#039;&#039;&amp;lt;br&amp;gt;select an item and open an editor for it&lt;br /&gt;
*&#039;&#039;&#039;selectedModelItems()&#039;&#039;&#039;&amp;lt;br&amp;gt;returns a collection of selected items&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
===== Menu Functions =====&lt;br /&gt;
These execute the underlying menu functions (as if clicked by the user).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;menuNewProject()&#039;&#039;&#039;&amp;lt;br&amp;gt;creates a new testSuite&lt;br /&gt;
*&#039;&#039;&#039;menuOpen()&#039;&#039;&#039;&amp;lt;br&amp;gt;opens a dialog requesting a testSuite&lt;br /&gt;
*&#039;&#039;&#039;menuExit()&#039;&#039;&#039;&amp;lt;br&amp;gt;closes the expecco application&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;loadProjectFromFile(fileNameString)&#039;&#039;&#039;&amp;lt;br&amp;gt;load a testSuite&lt;br /&gt;
*&#039;&#039;&#039;saveProjectToFile(fileNameString)&#039;&#039;&#039;&amp;lt;br&amp;gt;save the testSuite&lt;br /&gt;
*&#039;&#039;&#039;selectTestPlanWithName(testPlaneNameString)&#039;&#039;&#039;&amp;lt;br&amp;gt;select a testplan item by name&lt;br /&gt;
*&#039;&#039;&#039;selectTestPlanWithFunctionalId(uuid)&#039;&#039;&#039;&amp;lt;br&amp;gt;select a testplan item by uuid&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;testSuite()&#039;&#039;&#039;&amp;lt;br&amp;gt;retrieves the testSuite object (see below)&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
===== Test Suite (Project) Functions =====&lt;br /&gt;
the project as returned by the above &amp;quot;project()&amp;quot; function provides access to its elements:&lt;br /&gt;
&amp;lt;br&amp;gt;(see also [[ Expecco API#Test Suite Project Functions]])&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;authorName()&#039;&#039;&#039;&amp;lt;br&amp;gt;get the author name string&lt;br /&gt;
*&#039;&#039;&#039;authorName(aString)&#039;&#039;&#039;&amp;lt;br&amp;gt;set the author name string&lt;br /&gt;
*&#039;&#039;&#039;versionString()&#039;&#039;&#039;&amp;lt;br&amp;gt;get the version string&lt;br /&gt;
*&#039;&#039;&#039;versionString(aString)&#039;&#039;&#039;&amp;lt;br&amp;gt;set the version string&lt;br /&gt;
*&#039;&#039;&#039;projectsWorkingDirectory()&#039;&#039;&#039;&amp;lt;br&amp;gt;the directory, where attachments etc. are found&lt;br /&gt;
*&#039;&#039;&#039;ensureEnvironment()&#039;&#039;&#039;&amp;lt;br&amp;gt;an instantiated environment (concrete values). See below.&lt;br /&gt;
*&#039;&#039;&#039;elementWithName( nameString )&#039;&#039;&#039;&amp;lt;br&amp;gt;returns a matching element or null if not found&lt;br /&gt;
*&#039;&#039;&#039;elementWithId( aUUID )&#039;&#039;&#039;&amp;lt;br&amp;gt;returns that element or null if not present. (create the UUID with &amp;quot;&amp;lt;stringConstant&amp;gt;.asUUID&amp;quot; )&lt;br /&gt;
*&#039;&#039;&#039;elementWithFunctionalId( aUUID )&#039;&#039;&#039;&amp;lt;br&amp;gt;returns that element or null if not present&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
==== Environment Object ====&lt;br /&gt;
&lt;br /&gt;
Environment objects are used to store key-value bindings for expecco variables. Environments form a hierarchy, where values are searched for in an environment&#039;s parent environment, if not present. This hierarchy follows the containing compound activity chain up to the project (= test suite) environment.&lt;br /&gt;
Additional temporary environments are kept by the executor and the browser, to keep temporary values for a single execution&#039;s or a single session&#039;s lifetime.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;at(key)&#039;&#039;&#039;&amp;lt;br&amp;gt;retrieves a value, given the name of the entry. Raises and error if no variable exists by that name.&lt;br /&gt;
*&#039;&#039;&#039;at_ifAbsent(key, default)&#039;&#039;&#039;&amp;lt;br&amp;gt;like above, but returns default if no variable exists by that name (instead of raising an error).&lt;br /&gt;
*&#039;&#039;&#039;includesKey(key)&#039;&#039;&#039;&amp;lt;br&amp;gt;true if a variable by that name exists, false otherwise.&lt;br /&gt;
*&#039;&#039;&#039;at_put(key, value)&#039;&#039;&#039;&amp;lt;br&amp;gt;store value as variable named key. Raises an error, in an attempt to change a readOnly variable&lt;br /&gt;
*&#039;&#039;&#039;environmentDescription()&#039;&#039;&#039;&amp;lt;br&amp;gt;returns the environment&#039;s description. This describes types, default values and read/write attributes per entry.&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
==== EnvironmentDescription Object ====&lt;br /&gt;
&lt;br /&gt;
This is a collection of entries which describe variables of an environment. It does only hold the description, not the bindings themself; i.e. it contains the information required to instantiate an environment. EnvironmentDescriptions inherit from OrderedCollection and therefore entries are accessed via &amp;quot;at:&amp;quot; using a numeric index from 1 to the environmentDescription&#039;s size.&lt;br /&gt;
&lt;br /&gt;
Entries (as per variable) provide the following protocol:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;name()&#039;&#039;&#039;&amp;lt;br&amp;gt;the name of the variable&lt;br /&gt;
*&#039;&#039;&#039;isReadOnly()&#039;&#039;&#039;&amp;lt;br&amp;gt;true if readonly&lt;br /&gt;
*&#039;&#039;&#039;defaultValue()&#039;&#039;&#039;&amp;lt;br&amp;gt;the initial value, assigned when the environment is created&lt;br /&gt;
*&#039;&#039;&#039;datatype()&#039;&#039;&#039;&amp;lt;br&amp;gt;the type of the variable&lt;br /&gt;
*&#039;&#039;&#039;comment()&#039;&#039;&#039;&amp;lt;br&amp;gt;description&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
== Remote Controlling and Monitoring Expecco ==&lt;br /&gt;
&lt;br /&gt;
Expecco itself can be automated by various mechanisms:&lt;br /&gt;
&lt;br /&gt;
* via command line arguments (described in [[ #Command Line | &amp;quot;Command Line&amp;quot;]] above)&lt;br /&gt;
&lt;br /&gt;
* via script files (see [[ #Script File Example | &amp;quot;Script File Example&amp;quot;]] above)&lt;br /&gt;
&lt;br /&gt;
* via the telnet interface (see [[ #Telnet Scripting Example | &amp;quot;Telnet Scripting Example&amp;quot;]] above)&lt;br /&gt;
&lt;br /&gt;
* via standard RPC mechanisms, such as SOAP or REST.&lt;br /&gt;
&lt;br /&gt;
Especially the RPC mechanisms are useful to integrate expecco into the company test infrastructure.&lt;br /&gt;
Such interfaces are meant for programmatic control of an expecco slave from quality management, application life cycle and other scheduling tools.&lt;br /&gt;
Our own companion product, ExpeccoALM and third party tools, such as Polarion use these service interfaces.&lt;br /&gt;
&lt;br /&gt;
Notice, that for integration into a Jenkins infrastructure, command line arguments or scripts may be a more cost efective means to control automated expecco testruns.&lt;br /&gt;
&lt;br /&gt;
=== Expecco as a Slave Node in a Test Lab ===&lt;br /&gt;
&lt;br /&gt;
The service interfaces are useful to control unmonitored slave machines in the network, among which expecco test execution jobs are scheduled by another program. ExpeccoALM and other quality management tools use these to initiate test runs in a test server farm. &lt;br /&gt;
For this, the basic operations &amp;quot;download of a suite&amp;quot;, &amp;quot;execute a suite&amp;quot; and &amp;quot;requesting execution results&amp;quot; are available as service calls.&lt;br /&gt;
&lt;br /&gt;
Both SOAP and REST services are available, if expecco is started with the &amp;quot;&#039;&#039;--server&#039;&#039;&amp;quot; argument. &lt;br /&gt;
An optional &amp;quot;&#039;&#039;--port&#039;&#039;&amp;quot; argument allows for the HTTP port to be changed from the default (9090) on which expecco is listening.&lt;br /&gt;
&lt;br /&gt;
For debugging and testing, the service can be also be started from the interactive UI, via expecco&#039;s main menu (in the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Web-Services&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Start / Stop&#039;&#039;&amp;quot; menu items).&lt;br /&gt;
&lt;br /&gt;
These services use HTTP requests as transport layer.&lt;br /&gt;
&lt;br /&gt;
==== Expecco SOAP Service Interface ====&lt;br /&gt;
&lt;br /&gt;
This accepts SOAP requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
A partial WSDL spec can be aqcuired from the running service via &amp;quot;&amp;lt;code&amp;gt;host:9090/wsdl/ExpeccoSOAPService.wsdl&amp;lt;/code&amp;gt;&amp;quot; (partial, because it is currently not does not contain complete type information).&lt;br /&gt;
&lt;br /&gt;
The service entries are:&lt;br /&gt;
&lt;br /&gt;
===== Loading and Executing a Suite =====&lt;br /&gt;
&lt;br /&gt;
The execute request is the main service entry. It passes the suite and also optional parameters.&lt;br /&gt;
&lt;br /&gt;
The test suite can be bade available to expecco either by passing it with the request (as base64 CDATA), or by passing a URL from which expecco can fetch the suite iteslf.&lt;br /&gt;
&lt;br /&gt;
The execute call contains the following fields:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;message name=&amp;quot;expecco_executeProject_v5_Request&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;id&amp;quot; type=&amp;quot;UUID&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;testSuiteId&amp;quot; type=&amp;quot;UUID&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;dataSource&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;dataSourceUri&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;environment&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;testplans&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;resources&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;optionalParameters&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and responds with:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_executeProject_v5_Response&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;result&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This call starts execution, and immediately returns a response, which consists of an identifier.&lt;br /&gt;
This identifier can later be used to ask expecco about the execution status. As a test may take a long time to finish,&lt;br /&gt;
it is useful to poll via status requests from time to time, to see if the execution has finished and to get progress status. &lt;br /&gt;
&lt;br /&gt;
The parameters are:&lt;br /&gt;
&lt;br /&gt;
* id - mandatory; a ticket ID; this should be a UUID-string, to avoid possible conflicts&lt;br /&gt;
* testSuiteId - mandatory; the UUID of the suite to execute. See below for details about download optimizations&lt;br /&gt;
* dataSource - optional; if present, this should contain the whole ets-file&#039;s contents as a Base64 encoded CDATA string&lt;br /&gt;
* dataSourceUri - optional; if present, this should be the URI from which expecco shall fetch the suite. See below for details&lt;br /&gt;
* environment - optional; top-level environment variable values. This can be used to provide alternative initial values for variables in the top level variable environment (the &amp;quot;Project-Environment&amp;quot;)&lt;br /&gt;
* testplans - optional; a list of UUIDs of testplans to execute. If not present, all top-level testplans are executed&lt;br /&gt;
* resources - optional; a list of resources to be used by the test (see expeccoALM resource description)&lt;br /&gt;
* optionalParameters - optional; an array containing additional parameters as key-value elements.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;optionalParameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
A list of key-value elements (i.e. must have an even number of elements, of the form [k1 v1 k2 v2 ... kN vN] ).&lt;br /&gt;
Each key is an xsd:string, each value&#039;s type depends on the key, but all of them are currently also strings.&lt;br /&gt;
The list of supported parameters is open for future extension of the interface. Currently, the following are recognized:&lt;br /&gt;
* [ &amp;quot;generateLog&amp;quot; xsd:boolean ] - the boolean arg must be &amp;quot;true&amp;quot; or &amp;quot;false&amp;quot;&lt;br /&gt;
* [ &amp;quot;generatePDFReport&amp;quot; xsd:boolean ] - boolean arg, must be either &amp;quot;true&amp;quot; or &amp;quot;false&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;testplans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
this allows selective execution of individual test plans and also individual test cases (from within a test plan) from the suite.&lt;br /&gt;
If not present, all test plans as present in the suite are executed.&lt;br /&gt;
If present, the testPlans parameter must be an xsdarray of pairs (i.e. each array element is again an xsdarray with 2 elements).&lt;br /&gt;
Each top level element describes one testplan to be executed. The first element of each being the testplan&#039;s UUID, the second another array, listing the testcases by UUID.&lt;br /&gt;
For example, if the suite contains three testplans, named &amp;quot;a&amp;quot;, &amp;quot;b&amp;quot; and &amp;quot;c&amp;quot;, with plan &amp;quot;a&amp;quot; having id-a and &amp;quot;b&amp;quot; having id-b as UUID.&lt;br /&gt;
A testPlans argument might look like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ &lt;br /&gt;
    [ id-a ]&lt;br /&gt;
    [ id-b [  id-tcb-1 id-tcb-2 ] ]&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and specify that testplan &amp;quot;a&amp;quot; should be executed fully (i.e. all test cases), and only the testcases tcb-1 and tcb-2 are to be executed from testplan &amp;quot;b&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;environment&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
-- to be described --&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;resources&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
-- to be described --&lt;br /&gt;
&lt;br /&gt;
The reply consists of the ticket-id, which has to be passed in further status requests.&lt;br /&gt;
&lt;br /&gt;
===== Loading Only =====&lt;br /&gt;
&lt;br /&gt;
It is also possible, to download a suite without execution, via the &amp;quot;download&amp;quot; request:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_downloadProject_Request&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;testSuiteId&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;dataSourceBase64&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;dataSourceUri&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;optionalParameters&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_downloadProject_Response&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;result&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Download Optimization =====&lt;br /&gt;
&lt;br /&gt;
Expecco remembers downloaded suites in a temporary folder, to avoid repeated transfers of possibly huge test suites.&lt;br /&gt;
If a URI is passed (but no base64 encoded data), expecco checks if the suite is already present on the test host,&lt;br /&gt;
and will not fetch it again, if already present. If not present, expecco will fetch the suite via a HTTP request from the URI.&lt;br /&gt;
&lt;br /&gt;
If no URI is passed (i.e. both data and dataURI fields are empty), expecco will either respond with an error reply, if not present,&lt;br /&gt;
or with an ok response, if already present.&lt;br /&gt;
&lt;br /&gt;
Thus, if you have to pass the suite as data (i.e. there is no file service available, from which expecco could fetch the suite),&lt;br /&gt;
it is recommended to first check if a suite is already present (by sending a download request without data) and check for an error return. If no error is reported, the suite is already there and no further download action is required. If there is an error response,&lt;br /&gt;
the client should send the suite with another download request, this time with a non-empty data field.&lt;br /&gt;
&lt;br /&gt;
After any successfull download (either via download, or via execute request), the suite can be executed by an execute request without data.&lt;br /&gt;
&lt;br /&gt;
===== Execution by Suite File Name =====&lt;br /&gt;
&lt;br /&gt;
An alternative to downloading suites is to execute suites which are already present on the execution slave. For this, expecco should be started with a &amp;quot;--suiteDirectory&amp;quot; option, which specifies the folder name, where common test suites are located.&lt;br /&gt;
The executeTestSuiteFile-request is used to execute one of the suites in that directory.&lt;br /&gt;
&lt;br /&gt;
The call contains the following fields:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;message name=&amp;quot;expecco_executeTestSuiteFile_Request&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;id&amp;quot; type=&amp;quot;UUID&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;fileName&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;environment&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;testplans&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;resources&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;optionalParameters&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If successful, a ticketID is returned (same as above execute-request).&lt;br /&gt;
&lt;br /&gt;
===== Status Request =====&lt;br /&gt;
&lt;br /&gt;
This query returns status information about an ongoing execution. Its single parameter field must contain a ticketId as described in the above execute request.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_getExecutionInfo_Request&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;ticketId&amp;quot; type=&amp;quot;UUID&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_getExecutionInfo_Response&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;result&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A client may have to send multiple &amp;quot;getExecutionInfo&amp;quot; requests, until a &amp;quot;finished&amp;quot; status is returned.&lt;br /&gt;
Expecco will keep the generated reports and log files in a temporary folder, until fetched via a getResult request.&lt;br /&gt;
This allows for both expecco and the client to be turned off and restarted, without loosing any status information.&lt;br /&gt;
&lt;br /&gt;
===== Result Request =====&lt;br /&gt;
&lt;br /&gt;
Once finished, reports and log files should be fetched from expecco.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_getResult_Request&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;ticketId&amp;quot; type=&amp;quot;UUID&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;removeResultBoolean&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_getResult_Response&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;result&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the &amp;quot;getResult&amp;quot; request, corrsponding files are automatically removed from the temporary folder by expecco.&lt;br /&gt;
&lt;br /&gt;
===== Terminate/Abort Request =====&lt;br /&gt;
&lt;br /&gt;
Use this, to abort and terminate an ongoing test execution.&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_killExecution_Request&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;ticketId&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_killExecution_Response&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;result&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Remove Ticket Request =====&lt;br /&gt;
&lt;br /&gt;
Use this, to tell expecco, that no further interest exists in a ticket.&lt;br /&gt;
If the test is still running, it is aborted. If it is about to be started, it will not be.&lt;br /&gt;
Any temporary files which might have already been created due to this execution are removed.&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_killExecution_Request&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;ticketId&amp;quot; type=&amp;quot;UUID&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_killExecution_Response&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;result&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Ping =====&lt;br /&gt;
&lt;br /&gt;
This request answers with information about the host, architecture, disk usage and other status about the machine on which expecco is running. Also, a list of available plugins on the target machine is returned. Of course, it is also useful to see if the expecco service is ready and the communication works as expected.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;ping_Request&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;ping_Response&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;result&amp;quot; type=&amp;quot;xsd:array&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Cleanup of Old Result/Log Files =====&lt;br /&gt;
&lt;br /&gt;
This request can be used to remove all temporary files, especially leftover report- and log files. &lt;br /&gt;
This should be used, if a client has crashed, and lost track of &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_cleanupTempFiles_Request&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_cleanupTempFiles_Response&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;result&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Example Wire Protocol Trace =====&lt;br /&gt;
&lt;br /&gt;
Client asks expecco to execute a suite.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;-- HTTP Request to Expecco --&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
POST / HTTP/1.1 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
User-Agent: Smalltalk/X 6.2.5.0 &lt;br /&gt;
Host: 127.0.0.1:9090 &lt;br /&gt;
Content-Length: 8925 &lt;br /&gt;
Content-Type: text/xml; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
SOAPAction: &amp;quot;&amp;quot; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;env:Envelope &lt;br /&gt;
   xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
   xmlns:env=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; &lt;br /&gt;
   xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
   xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
   env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;env:Body env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;m:expecco_executeProject_v5 xmlns:m=&amp;quot;http://www.mars.dti.ne.jp/~umejava/smalltalk/soapOpera/rpc/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;optionalParameters xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
        xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
        xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
        enc:arrayType=&amp;quot;xsd:anyType[6]&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;generateReport&amp;lt;/item&amp;gt;&lt;br /&gt;
    &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;true&amp;lt;/item&amp;gt;&lt;br /&gt;
    &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;generateLog&amp;lt;/item&amp;gt;&lt;br /&gt;
    &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;true&amp;lt;/item&amp;gt;&lt;br /&gt;
    &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;runAllTestcasesIfEmptyTestcaseList&amp;lt;/item&amp;gt;&lt;br /&gt;
    &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;true&amp;lt;/item&amp;gt;&lt;br /&gt;
   &amp;lt;/optionalParameters&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;testSuiteId xsi:type=&amp;quot;UUID&amp;quot;&amp;gt;228168f0-747b-11df-a41b-00ff7b08316c&amp;lt;/testSuiteId&amp;gt;&lt;br /&gt;
   &amp;lt;testplans &lt;br /&gt;
        xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
        xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
        xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
        enc:arrayType=&amp;quot;xsd:arrayType[1]&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;item &lt;br /&gt;
            xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
            xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
            xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
            env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
            enc:arrayType=&amp;quot;xsd:anyType[2]&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;item &lt;br /&gt;
                env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
                xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;f71c4700-7477-11df-a41b-00ff7b08316c&lt;br /&gt;
            &amp;lt;/item&amp;gt;&lt;br /&gt;
            &amp;lt;item &lt;br /&gt;
                xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
                xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
                xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
                env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
                enc:arrayType=&amp;quot;xsd:anyType[0]&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/item&amp;gt;&lt;br /&gt;
   &amp;lt;/testplans&amp;gt;&lt;br /&gt;
   &amp;lt;id xsi:type=&amp;quot;UUID&amp;quot;&amp;gt;200d93e1-a258-11e4-b9eb-c48508c91d3c&amp;lt;/id&amp;gt;&lt;br /&gt;
   &amp;lt;dataSource xsi:null=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;dataSourceUri xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;http://127.0.0.1:8662/expeccoALM/tentativeObjects/a84b2d96-d133-47db-9fc2-17208b490bfe.a&lt;br /&gt;
   &amp;lt;/dataSourceUri&amp;gt;&lt;br /&gt;
   &amp;lt;environment &lt;br /&gt;
        xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
        xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
        xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
        enc:arrayType=&amp;quot;xsd:anyType[22]&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_Host__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;sr-laptop&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_LoginUserName__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;admin&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_FullUserName__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;.&amp;amp;#32;&amp;amp;#42;admin&amp;amp;#42;&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_TestHost__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;127.0.0.1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_Definition_UUID__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;e5c9cb30-a253-11e4-9f24-c48508c91d3c&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_Definition_ID__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;d4&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_Definition_Name__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Test&amp;amp;#32;For&amp;amp;#32;Resources&amp;amp;#32;and&amp;amp;#32;Skills&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_Definition_Summary__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_Run_UUID__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;200d93e1-a258-11e4-b9eb-c48508c91d3c&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_Run_ID__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;r14&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_TestSuite_VersionNumber__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;1&amp;lt;/item&amp;gt;&lt;br /&gt;
   &amp;lt;/environment&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;resources &lt;br /&gt;
       xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
       xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
       xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
       enc:arrayType=&amp;quot;xsd:anyType[28]&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Resource&amp;amp;#32;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:integer&amp;quot;&amp;gt;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Resource&amp;amp;#32;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Skill1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;attribute1-1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Integer&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;0&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Resource&amp;amp;#32;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:integer&amp;quot;&amp;gt;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Resource&amp;amp;#32;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Skill2&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;attribute2-1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Integer&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;0&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Resource&amp;amp;#32;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:integer&amp;quot;&amp;gt;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Resource&amp;amp;#32;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Skill2&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;attribute2-2&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Float&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;0.0&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Resource&amp;amp;#32;2&amp;amp;#32;eeee&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:integer&amp;quot;&amp;gt;2&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Resource&amp;amp;#32;2&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Skill1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;attribute1-1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Integer&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;0&amp;lt;/item&amp;gt;&lt;br /&gt;
   &amp;lt;/resources&amp;gt;&lt;br /&gt;
  &amp;lt;/m:expecco_executeProject_v5&amp;gt;&lt;br /&gt;
 &amp;lt;/env:Body&amp;gt;&lt;br /&gt;
&amp;lt;/env:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;gt;-- response from Expecco&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HTTP/1.1 200 OK &lt;br /&gt;
Content-Type: text/xml &lt;br /&gt;
Content-Length: 649 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;env:Envelope xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:env=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;env:Body env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;m:expecco_executeProject_v5Response xmlns:m=&amp;quot;http://www.mars.dti.ne.jp/~umejava/smalltalk/soapOpera/rpc/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;result xsi:type=&amp;quot;UUID&amp;quot;&amp;gt;200d93e1-a258-11e4-b9eb-c48508c91d3c&amp;lt;/result&amp;gt;&lt;br /&gt;
  &amp;lt;/m:expecco_executeProject_v5Response&amp;gt;&lt;br /&gt;
 &amp;lt;/env:Body&amp;gt;&lt;br /&gt;
&amp;lt;/env:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Client asks expecco for execution state&lt;br /&gt;
&lt;br /&gt;
&amp;lt;-- HTTP Request to expecco&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
POST / HTTP/1.1 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
User-Agent: Smalltalk/X 6.2.5.0 &lt;br /&gt;
Host: 127.0.0.1:9090 &lt;br /&gt;
Content-Length: 635 &lt;br /&gt;
Content-Type: text/xml; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
SOAPAction: &amp;quot;&amp;quot; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;env:Envelope xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:env=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;env:Body env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;m:expecco_getExecutionInfo xmlns:m=&amp;quot;http://www.mars.dti.ne.jp/~umejava/smalltalk/soapOpera/rpc/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;ticketId xsi:type=&amp;quot;UUID&amp;quot;&amp;gt;200d93e1-a258-11e4-b9eb-c48508c91d3c&amp;lt;/ticketId&amp;gt;&lt;br /&gt;
  &amp;lt;/m:expecco_getExecutionInfo&amp;gt;&lt;br /&gt;
 &amp;lt;/env:Body&amp;gt;&lt;br /&gt;
&amp;lt;/env:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;gt;-- response from Expecco (while still executing)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HTTP/1.1 200 OK &lt;br /&gt;
Content-Type: text/xml &lt;br /&gt;
Content-Length: 2579 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;env:Envelope xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:env=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;env:Body env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;m:expecco_getExecutionInfoResponse xmlns:m=&amp;quot;http://www.mars.dti.ne.jp/~umejava/smalltalk/soapOpera/rpc/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;result&amp;gt;&lt;br /&gt;
    &amp;lt;executionResultState xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;executingTestSuite&amp;lt;/executionResultState&amp;gt;&lt;br /&gt;
    &amp;lt;currentActivity xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;executing&amp;amp;#32;Neuer&amp;amp;#32;Testplan&amp;lt;/currentActivity&amp;gt;&lt;br /&gt;
    &amp;lt;pdfReportFileURL xsi:null=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;summaryResult&amp;gt;&lt;br /&gt;
     &amp;lt;summaryTestplanExecutionResults xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; enc:arrayType=&amp;quot;xsd:anyType[1]&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;summaryTestPlanItems xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; enc:arrayType=&amp;quot;xsd:anyType[1]&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;detailString xsi:null=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
         &amp;lt;resultActivityState xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Successful&amp;lt;/resultActivityState&amp;gt;&lt;br /&gt;
         &amp;lt;testplanItemName xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Neue&amp;amp;#32;Aktion&amp;lt;/testplanItemName&amp;gt;&lt;br /&gt;
         &amp;lt;expeccoClass xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Expecco::SummaryTestPlanItemExecutionResult&amp;lt;/expeccoClass&amp;gt;&lt;br /&gt;
        &amp;lt;/item&amp;gt;&lt;br /&gt;
       &amp;lt;/summaryTestPlanItems&amp;gt;&lt;br /&gt;
       &amp;lt;testPlanId xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;22623ef0-757d-11df-a41b-00ff7b08316c&amp;lt;/testPlanId&amp;gt;&lt;br /&gt;
       &amp;lt;expeccoClass xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Expecco::SummaryTestPlanExecutionResult&amp;lt;/expeccoClass&amp;gt;&lt;br /&gt;
       &amp;lt;testPlanName xsi:null=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;/summaryTestplanExecutionResults&amp;gt;&lt;br /&gt;
     &amp;lt;testSuiteName xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Test&amp;amp;#32;For&amp;amp;#32;Resources&amp;amp;#32;and&amp;amp;#32;Skills&amp;lt;/testSuiteName&amp;gt;&lt;br /&gt;
     &amp;lt;testSuiteId xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;228168f0-747b-11df-a41b-00ff7b08316c&amp;lt;/testSuiteId&amp;gt;&lt;br /&gt;
     &amp;lt;expeccoClass xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Expecco::SummaryTestSuiteExecutionResult&amp;lt;/expeccoClass&amp;gt;&lt;br /&gt;
    &amp;lt;/summaryResult&amp;gt;&lt;br /&gt;
    &amp;lt;logFileURL xsi:null=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;expeccoClass xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Expecco::SoapExecutionResult::SummaryEncoding&amp;lt;/expeccoClass&amp;gt;&lt;br /&gt;
    &amp;lt;executionProgress xsi:type=&amp;quot;xsd:integer&amp;quot;&amp;gt;0&amp;lt;/executionProgress&amp;gt;&lt;br /&gt;
   &amp;lt;/result&amp;gt;&lt;br /&gt;
  &amp;lt;/m:expecco_getExecutionInfoResponse&amp;gt;&lt;br /&gt;
 &amp;lt;/env:Body&amp;gt;&lt;br /&gt;
&amp;lt;/env:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;gt;-- response from Expecco (after execution)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
HTTP/1.1 200 OK &lt;br /&gt;
Content-Type: text/xml &lt;br /&gt;
Content-Length: 2781 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
.....................&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;env:Envelope xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:env=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;env:Body env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;m:expecco_getExecutionInfoResponse xmlns:m=&amp;quot;http://www.mars.dti.ne.jp/~umejava/smalltalk/soapOpera/rpc/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;result&amp;gt;&lt;br /&gt;
    &amp;lt;executionResultState xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;finished&amp;lt;/executionResultState&amp;gt;&lt;br /&gt;
    &amp;lt;currentActivity xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;executing&amp;amp;#32;Neuer&amp;amp;#32;Testplan&amp;lt;/currentActivity&amp;gt;&lt;br /&gt;
    &amp;lt;pdfReportFileURL xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;http://127.0.0.1:9090/expeccoResultFiles/ad8011e1-a25c-11e4-b9eb-c48508c91d3c.pdf&amp;lt;/pdfReportFileURL&amp;gt;&lt;br /&gt;
    &amp;lt;summaryResult&amp;gt;&lt;br /&gt;
     &amp;lt;summaryTestplanExecutionResults xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; enc:arrayType=&amp;quot;xsd:anyType[1]&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;summaryTestPlanItems xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; enc:arrayType=&amp;quot;xsd:anyType[1]&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;detailString xsi:null=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
         &amp;lt;resultActivityState xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Successful&amp;lt;/resultActivityState&amp;gt;&lt;br /&gt;
         &amp;lt;testplanItemName xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Neue&amp;amp;#32;Aktion&amp;lt;/testplanItemName&amp;gt;&lt;br /&gt;
         &amp;lt;expeccoClass xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Expecco::SummaryTestPlanItemExecutionResult&amp;lt;/expeccoClass&amp;gt;&lt;br /&gt;
        &amp;lt;/item&amp;gt;&lt;br /&gt;
       &amp;lt;/summaryTestPlanItems&amp;gt;&lt;br /&gt;
       &amp;lt;testPlanId xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;22623ef0-757d-11df-a41b-00ff7b08316c&amp;lt;/testPlanId&amp;gt;&lt;br /&gt;
       &amp;lt;expeccoClass xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Expecco::SummaryTestPlanExecutionResult&amp;lt;/expeccoClass&amp;gt;&lt;br /&gt;
       &amp;lt;testPlanName xsi:null=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;/summaryTestplanExecutionResults&amp;gt;&lt;br /&gt;
     &amp;lt;testSuiteName xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Test&amp;amp;#32;For&amp;amp;#32;Resources&amp;amp;#32;and&amp;amp;#32;Skills&amp;lt;/testSuiteName&amp;gt;&lt;br /&gt;
     &amp;lt;testSuiteId xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;228168f0-747b-11df-a41b-00ff7b08316c&amp;lt;/testSuiteId&amp;gt;&lt;br /&gt;
     &amp;lt;expeccoClass xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Expecco::SummaryTestSuiteExecutionResult&amp;lt;/expeccoClass&amp;gt;&lt;br /&gt;
    &amp;lt;/summaryResult&amp;gt;&lt;br /&gt;
    &amp;lt;logFileURL xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;http://127.0.0.1:9090/expeccoResultFiles/ad8011e1-a25c-11e4-b9eb-c48508c91d3c.elf&amp;lt;/logFileURL&amp;gt;&lt;br /&gt;
    &amp;lt;expeccoClass xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Expecco::SoapExecutionResult::SummaryEncoding&amp;lt;/expeccoClass&amp;gt;&lt;br /&gt;
    &amp;lt;executionProgress xsi:type=&amp;quot;xsd:integer&amp;quot;&amp;gt;100&amp;lt;/executionProgress&amp;gt;&lt;br /&gt;
   &amp;lt;/result&amp;gt;&lt;br /&gt;
  &amp;lt;/m:expecco_getExecutionInfoResponse&amp;gt;&lt;br /&gt;
 &amp;lt;/env:Body&amp;gt;&lt;br /&gt;
&amp;lt;/env:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Client fetches the report and log files from expecco:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;-- HTTP Request to expecco (fetch logfile)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
GET /expeccoResultFiles/ad8011e1-a25c-11e4-b9eb-c48508c91d3c.elf HTTP/1.1 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
User-Agent: Mozilla/3.0N &lt;br /&gt;
Host: 127.0.0.1:9090 &lt;br /&gt;
Accept-Encoding: chunked &lt;br /&gt;
Accept-Language: en,* &lt;br /&gt;
Accept-Charset: iso-8859-1,*,utf-8 &lt;br /&gt;
Accept: */* &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;gt;-- HTTP response from expecco &lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
HTTP/1.1 200 OK &lt;br /&gt;
Content-Type: application/x-expecco-logfile &lt;br /&gt;
Content-Length: 12690 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
Cache-Control: max-age=86400 &lt;br /&gt;
Last-modified: Thu, 22 Jan 2015 17:32:50 GMT &lt;br /&gt;
&lt;br /&gt;
... a lot of elf-file data ...&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;-- HTTP Request to expecco (fetch pdf report)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
GET /expeccoResultFiles/ad8011e1-a25c-11e4-b9eb-c48508c91d3c.pdf HTTP/1.1 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
User-Agent: Mozilla/3.0N &lt;br /&gt;
Host: 127.0.0.1:9090 &lt;br /&gt;
Accept-Encoding: chunked &lt;br /&gt;
Accept-Language: en,* &lt;br /&gt;
Accept-Charset: iso-8859-1,*,utf-8 &lt;br /&gt;
Accept: */* &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;gt;-- HTTP response from expecco&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
HTTP/1.1 200 OK &lt;br /&gt;
Content-Type: application/pdf &lt;br /&gt;
Content-Length: 29768 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
Cache-Control: max-age=86400 &lt;br /&gt;
Last-modified: Thu, 22 Jan 2015 17:32:51 GMT &lt;br /&gt;
&lt;br /&gt;
... a lot of pdf data ...&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Client releases ticket (so expecco can remove the temporary data)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;-- HTTP Request to expecco&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
POST / HTTP/1.1 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
User-Agent: Smalltalk/X 6.2.5.0 &lt;br /&gt;
Host: 127.0.0.1:9090 &lt;br /&gt;
Content-Length: 627 &lt;br /&gt;
Content-Type: text/xml; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
SOAPAction: &amp;quot;&amp;quot; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;env:Envelope xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:env=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;env:Body env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;m:expecco_removeTicket xmlns:m=&amp;quot;http://www.mars.dti.ne.jp/~umejava/smalltalk/soapOpera/rpc/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;ticketId xsi:type=&amp;quot;UUID&amp;quot;&amp;gt;ad8011e1-a25c-11e4-b9eb-c48508c91d3c&amp;lt;/ticketId&amp;gt;&lt;br /&gt;
  &amp;lt;/m:expecco_removeTicket&amp;gt;&lt;br /&gt;
 &amp;lt;/env:Body&amp;gt;&lt;br /&gt;
&amp;lt;/env:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;gt;-- HTTP response from expecco&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
HTTP/1.1 200 OK &lt;br /&gt;
Content-Type: text/xml &lt;br /&gt;
Content-Length: 614 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
.....................&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;env:Envelope xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:env=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;env:Body env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;m:expecco_removeTicketResponse xmlns:m=&amp;quot;http://www.mars.dti.ne.jp/~umejava/smalltalk/soapOpera/rpc/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;result xsi:type=&amp;quot;xsd:boolean&amp;quot;&amp;gt;true&amp;lt;/result&amp;gt;&lt;br /&gt;
  &amp;lt;/m:expecco_removeTicketResponse&amp;gt;&lt;br /&gt;
 &amp;lt;/env:Body&amp;gt;&lt;br /&gt;
&amp;lt;/env:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
===== Example Session Using &amp;quot;&amp;lt;code&amp;gt;wget&amp;lt;/code&amp;gt;&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
Using &amp;quot;wget&amp;quot; with SOAP is possible, but a little complicated, because correct SOAP requests have to be constructed, and ticket-numbers be extracted from responses. It is much easier with the REST service.&lt;br /&gt;
&lt;br /&gt;
See below for a description.&lt;br /&gt;
&lt;br /&gt;
==== Expecco REST Service Interface ====&lt;br /&gt;
&lt;br /&gt;
This accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The REST service supports the same set of operations as the SOAP service described above, but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are all HTTP-GET requests, possibly with attached JSON encoded argument data. &lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
See details [[ Starting_expecco_via_Command_Line/rest | &amp;quot;expecco rest service interface&amp;quot;]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expecco Remote Control REST Service Interface ===&lt;br /&gt;
&lt;br /&gt;
A secondary REST service is available to interact with a running test.&lt;br /&gt;
This service is used by the &amp;quot;expecco remote control App&amp;quot;, which is available for Android devices (tablets and cell phones).&lt;br /&gt;
 &lt;br /&gt;
This accepts REST requests, via the URL &amp;quot;/remote&amp;quot;. I.e. the default URL is &amp;quot;host:9090/remote&amp;quot;.&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &amp;quot;host:9090/remote/protocolInfo&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
When this service is active, the standard Dialog requests (input boxes, with &amp;quot;OK&amp;quot;/&amp;quot;Cancel&amp;quot; buttons) will also be presented on the remote controlling app, and can be answered either on the PC-screen OR on a remote android device.&lt;br /&gt;
An obvious application of this is when the test system (hardware) needs manual interaction and you have to leave the workplace for this. Here, it is very convenient to be able to answer questions like &amp;quot;Insert Cable X and press OK to proceed&amp;quot; from a mobile device. Avoiding the need to walk back to the workplace to click on the &amp;quot;OK&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
=== Expecco Short Status Information Service ===&lt;br /&gt;
&lt;br /&gt;
This is a very simple HTTP service, which delivers a single page with a status overview.&lt;br /&gt;
This service is started when the &amp;quot;&amp;lt;code&amp;gt;--infoService&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;--server&amp;lt;/code&amp;gt;&amp;quot; command line arguments are present.&lt;br /&gt;
 &lt;br /&gt;
This accepts HTTP requests, via the URL &amp;quot;/info&amp;quot;. &lt;br /&gt;
I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/info&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The main use of this service is to quickly check the status of a testslave from a remote webbrowser,&lt;br /&gt;
without a need for a more complicated SOAP or REST service client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Back to [[Online_Documentation#Topic:_Execution | Online Documentation]]&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/en&amp;diff=8476</id>
		<title>Starting expecco via Command Line/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/en&amp;diff=8476"/>
		<updated>2017-04-02T12:49:35Z</updated>

		<summary type="html">&lt;p&gt;Ab: /* Expecco REST Service Interface */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
expecco can be started manually via the command line, by batch or shell scripts or automatically via the crontab (Unix) or scheduled tasks / services (Windows) mechanism of the operating system. Thus, you can have tests to execute unattended and without GUI &amp;quot;overnight&amp;quot;. This is also the method to integrate expecco with other quality tools, such as Jenkins, HP-Quality Center, Polarion, expeccoALM etc.&lt;br /&gt;
 &lt;br /&gt;
Command line options allow for test suites to be loaded, executed and result files being generated without requiring user interaction.&lt;br /&gt;
&lt;br /&gt;
In addition to the above, expecco can also be started in a slave mode as a service, to wait for incoming test-run request from a QM system, such as expeccoALM or Polarion. Expecco can respond to request via SOAP or REST calls to load, execute and report test suites. The expeccoNET automation environment assumes that expecco is already running on each slave host, and each has been started with a  &amp;quot;--server&amp;quot; command line argument. It uses HTTP+SOAP/REST to communicate with those expecco slaves by default.&lt;br /&gt;
&lt;br /&gt;
In this later &amp;quot;slave mode&amp;quot;, expecco is installed to run as a daemon process (under Unix) or as a service (under Windows), and will be automatically started by the operating system, when it boots. The details of how it is installed vary between operating systems: under Unix, it needs to be registered in the init-tab-folder, under Windows it needs to be installed as a Windows service.&lt;br /&gt;
&lt;br /&gt;
== Command Line ==&lt;br /&gt;
&lt;br /&gt;
If expecco is started without command line arguments, it will open up showing the initial welcome screen. The same behavior as if started via the desktop.&lt;br /&gt;
&lt;br /&gt;
With a single file argument, expecco will read a test suite from the given file and open an editor window on it (but will not execute it). &lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco &amp;lt;testsuite filename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is the same behavior as if a test suite file (.ets) is dropped onto the expecco icon via the desktop.&lt;br /&gt;
&lt;br /&gt;
The simplest command line to execute a test suite is:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --execute &amp;lt;testsuite filename&amp;gt; ...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;testsuite filename&amp;gt; is the test suite&#039;s filename, as saved from within the expecco GUI application. This should be a saved &amp;quot;.ets&amp;quot; testSuite file. If more than one test suite filename is given, each is processed in sequence. All top-level test plans as found in the test suite(s) are executed (see below for more options).&lt;br /&gt;
&lt;br /&gt;
:By default, the overall execution outcome is returned by the command&#039;s return value (exit code), which is&lt;br /&gt;
::0        - all PASSED&lt;br /&gt;
::non-zero - any ERROR, FAILURES or INCONCLUSIVE items.&lt;br /&gt;
&lt;br /&gt;
The return value is useful if expecco is started via a makefile, or from jenkins for example. If the caller needs a different exit code, use one of the exitCodeOnXXX options as described below. This is useful to avoid a &#039;&#039;make&#039;&#039; or &#039;&#039;jenkins&#039;&#039; process from stopping.&lt;br /&gt;
&lt;br /&gt;
To get a list of available options, type:&lt;br /&gt;
 &#039;&#039;&#039;expecco --help&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Command Line Options ===&lt;br /&gt;
Command line options are handled at two places: the runtime system (Smalltalk/X VM) and the expecco application itself.&lt;br /&gt;
When expecco is started, the VM is first to look for command line arguments and processes any of the VM options, until&lt;br /&gt;
a non-VM option is encountered. It passes the remaining options to expecco&#039;s main entry.&lt;br /&gt;
Thus, any option which is given after the first non-VM option will not be handled by the VM, but by expecco. Therefore, no VM options should be placed after the first non-VM option. VM options are marked as &amp;quot;&#039;&#039;VM option&#039;&#039;&amp;quot; in the list below.&lt;br /&gt;
&lt;br /&gt;
Also, some options are specific to the operating system, on which expecco is executed. These are marked as &amp;quot;&#039;&#039;Windows&#039;&#039;&amp;quot;, &amp;quot;&#039;&#039;Linux&#039;&#039;&amp;quot; etc.&lt;br /&gt;
&lt;br /&gt;
=== Recommended Command Line Options ===&lt;br /&gt;
&lt;br /&gt;
To start expecco on an existing test suite, use:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco &amp;lt;testsuite filename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
this is also the way expecco is started, when a test suite file is double-clicked on the Linux or Windows desktop, or when a test-suite document is dropped onto the expecco icon.&lt;br /&gt;
The above opens the expecco GUI and loads the given test suite initially. However, it does not automatically execute any test.&lt;br /&gt;
&lt;br /&gt;
To execute a suite, add a &amp;quot;&#039;&#039;&#039;--execute&#039;&#039;&#039;&amp;quot; argument (or in expecco 2.10, &amp;quot;-E&amp;quot;), as in:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --execute &amp;lt;testsuite filename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You will notice, that expecco shows a banner intitially; this can be disabled with a &#039;&#039;&#039;--noBanner&#039;&#039;&#039; option. Also, under windows, a small tray icon is shown in the lower right, which provides a controlling UI. This is disabled with &#039;&#039;&#039;--noTray&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Finally, as mentioned before, the test&#039;s outcome is reported via the exit code. If you want a little more information on the status of individiual test cases, use a &#039;&#039;&#039;--verdicts&#039;&#039;&#039; option.&lt;br /&gt;
&lt;br /&gt;
This makes the following a good start for your command line:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --noBanner --noTray --verdicts --execute &amp;lt;testsuite filename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
or, if you want to use a special parameter-file, to provide values for (some of) the project-variables:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --noBanner --noTray --verdicts --parameter &amp;amp;lt;param-file&amp;amp;gt; --execute &amp;amp;lt;filename&amp;amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Parameter files are XML, CSV or JSON-files containing key-value pairs. They are usually created by saving an environment from within the expecco GUI (see [[Environment Editor]]).&lt;br /&gt;
&lt;br /&gt;
All of the above command lines opened an expecco UI window.&lt;br /&gt;
To execute a suite without GUI, add a &amp;quot;&#039;&#039;&#039;--noWindow&#039;&#039;&#039;&amp;quot; argument.&lt;br /&gt;
&lt;br /&gt;
To compose &amp;quot;scatter-gather&amp;quot; test cases from possibly multiple suites, found in a directory use:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --suiteDirectory &amp;amp;lt;dirName&amp;amp;gt; --testCaseNames &amp;quot;T01,T02,T05&amp;quot; --execute&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
or, to explicitly specify the suite-files where test cases are taken from, use:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --testCaseNames &amp;quot;T01,T02,T05&amp;quot; --execute &amp;amp;lt;suiteFile1&amp;amp;gt;.ets &amp;amp;lt;suiteFile2&amp;amp;gt;.ets ...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Finally, to get a report, add a &amp;quot;&#039;&#039;&#039;--xxxReportFile &amp;amp;lt;fileName&amp;amp;gt;&#039;&#039;&#039;&amp;quot; argument, as in:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --noBanner --noWindow --noTray --verdicts --parameter &amp;amp;lt;param-file&amp;amp;gt;&#039;&#039;&#039; \&lt;br /&gt;
 &#039;&#039;&#039;        --pdfReportFile result.pdf --execute &amp;amp;lt;filename&amp;amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
All options are described in more detail below.&lt;br /&gt;
&lt;br /&gt;
=== Executing Multiple Test Suites in Sequence ===&lt;br /&gt;
&lt;br /&gt;
It is possible to run multiple (possibly different) test suites with one command line to reduce startup and project loading times.&lt;br /&gt;
For this, provide multiple &amp;quot;--execute &amp;amp;lt;filename&amp;amp;gt;&amp;quot; arguments to the command line, as in:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --execute &amp;amp;lt;suiteFile1&amp;amp;gt;.ets --execute &amp;lt;suiteFile2&amp;amp;gt;.ets ...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
with this command line, expecco first executes the toplevel testplan(s) from &amp;quot;suiteFile1.ets&amp;quot;, then those from &amp;quot;suiteFile2.ets&amp;quot;. All parameters (i.e. top-level variable values) will be taken from within the corresponing suite file.&lt;br /&gt;
&lt;br /&gt;
To change individual parameters, use &amp;quot;--parameter:key=value&amp;quot; arguments before the corresponing --execute argument. For example, to execute the same suite with different parameters, use a command line like:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --parameter:device=samsung --execute mobileTest.ets&#039;&#039;&#039; \&lt;br /&gt;
 &#039;&#039;&#039;        --parameter:device=nexus --execute mobileTest.ets&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Opening a Previous Result File ===&lt;br /&gt;
&lt;br /&gt;
As described below, expecco can generate result files in various formats and different detail. The pdf, html and junit outputs will contain summary information to be read by humans, archived or to be passed to other programs (eg. to jenkins for statistics).&lt;br /&gt;
&lt;br /&gt;
The native result file (.elf) contains all trace and logging information including the original test suite.&lt;br /&gt;
&lt;br /&gt;
As such, it can be archived to ensure that the test result can always be associated to the exact suite being executed, even if the suite file is lost or has been modified in the meanwhile.&lt;br /&gt;
&lt;br /&gt;
These .elf result files are generated either via corresponding command line options or manually via the &amp;quot;&#039;&#039;Test Results&#039;&#039;&amp;quot;-&amp;quot;&#039;&#039;Save Result As...&#039;&#039;&amp;quot; menu item.&lt;br /&gt;
Like regular suite files, they can be opened via the command line or via the &amp;quot;&#039;&#039;File&#039;&#039;&amp;quot;-&amp;quot;&#039;&#039;Open...&#039;&#039;&amp;quot; menu item.&lt;br /&gt;
&lt;br /&gt;
When opened, the original suite (at the time of execution), the trace- and log data and the execution times will be presented. It is even possible to re-execute individual blocks, test plans or the whole suite.&lt;br /&gt;
 &lt;br /&gt;
This feature is very powerful, in that it allows for the result file to be given to a developer and will help to analyse the data values, control flows and even to rerun tests  and reproduce errors/failures.&lt;br /&gt;
&lt;br /&gt;
=== Detailed Option Description ===&lt;br /&gt;
&lt;br /&gt;
==== Information/Debugging/Logging ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--help&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Prints an up-to-date list of possible options and command line arguments.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--version&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Prints the expecco release identification and exits.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--noBanner&amp;lt;/code&amp;gt;&#039;&#039;&#039; (&#039;&#039;VM option&#039;&#039;)&amp;lt;br&amp;gt;Suppress the splash startup banner.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--console&amp;lt;/code&amp;gt;&#039;&#039;&#039; (&#039;&#039;VM option&#039;&#039;, &#039;&#039;Windows only&#039;&#039;)&amp;lt;br&amp;gt;Open a debug console window for Stdout and Stderr.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--verbose&amp;lt;/code&amp;gt;&#039;&#039;&#039; (&#039;&#039;VM option&#039;&#039;)&amp;lt;br&amp;gt;Additional startup, execution and result info is sent in human readable format to the stderr output. This is mainly meant to analyze startup problems and is actually more useful for expecco developers. It may be too much of printout, so try &amp;quot;&#039;&#039;--verdicts&#039;&#039;&amp;quot; instead.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--debug&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Turns on startup debugging. By default, if an error occurs during startup, expecco terminates itself. With this option enabled, a command line debugger is opened instead. This is probably only useful for plugin developers.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--silent&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Suppresses most info, warning and error messages which are sent to stderr/stdout. This is mainly meant to remove unwanted informational messages (for example, when plugins cannot be loaded during startup, etc.).&amp;lt;br&amp;gt;(this option is available with expecco vsn &amp;gt;= 2.10)&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Startup ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--settings &amp;lt;fileName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Force using &amp;lt;fileName&amp;gt; instead of the default &amp;quot;&amp;lt;code&amp;gt;~/.expecco/.expeccoPreferences&amp;lt;/code&amp;gt;&amp;quot; to be used for the settings file name. Useful if you want different setups to be linked to different desktop icons, or to start expecco with particular settings from a batch or shell script. To generate a preferences file, open the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; - &#039;&#039;Settings&#039;&#039;&amp;quot; dialog, change the settings as required, and select the &amp;quot;&#039;&#039;File&#039;&#039;&amp;quot;-&amp;quot;&#039;&#039;Save As...&#039;&#039;&amp;quot; menu item.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--licenseFile &amp;lt;fileName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Use this license, instead of the default &amp;quot;&amp;lt;code&amp;gt;~/.expecco/.expeccoLicense&amp;lt;/code&amp;gt;&amp;quot;. If a license server (floating licenses) is used, the license server&#039;s hostname and port information is read from the settings file.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--licenseServerHost &amp;lt;hostName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Use this host as license server, instead of the one specified in the settings file (or if no settings file was ever specified). This may be needed when running expecco as a test slave (daemon or service).&amp;lt;br&amp;gt;(this option is available with expecco vsn &amp;gt;= 2.10)&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--licenseServerPort &amp;lt;portNr&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Use this port-nr when contacting the license server, instead of the one specified in the settings file (or if no settings file was ever specified). This may be needed when running expecco as a test slave (daemon or service).&amp;lt;br&amp;gt;(this option is available with expecco vsn &amp;gt;= 2.10)&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--noTray&amp;lt;/code&amp;gt;&#039;&#039;&#039; (&#039;&#039;Windows only&#039;&#039;)&amp;lt;br&amp;gt;Disable the tray control icon (server and execute modes only).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--tray&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Force a tray window to be shown, even if running in non-server (slave) mode. The tray window displays the current execution status, memory situation, thread status and other internal information, which is probably only useful for developers.&amp;lt;br&amp;gt;(this option is available with expecco vsn &amp;gt;= 2.10)&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--noWindow&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Do not open the main window (useful when scripting or executing only).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--noDisplay&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Do not open any window (useful when scripting or executing only).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--noPlugins&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Disable plugin loading. This makes startup somewhat faster, depending on the number of plugins found in your installation directory. You can still force individual plugins to be loaded using the &amp;quot;&#039;&#039;&#039;--loadPlugin&#039;&#039;&#039;&amp;quot; option. Use &amp;quot;&#039;&#039;--noPlugins&#039;&#039;&amp;quot; followed by a list of individual &amp;quot;&#039;&#039;--loadPlugin&#039;&#039;&amp;quot; options, to tune startup time with a minimum set of required plugins being loaded.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--loadPlugin &amp;lt;pluginName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Force loading a specific plugin. This is only useful if a &amp;quot;&#039;&#039;&#039;--noPlugins&#039;&#039;&#039;&amp;quot; option was given before. &#039;&#039;pluginName&#039;&#039; is the name of the folder in the &amp;quot;plugin&amp;quot; folder (under the expecco installation folder). Use &amp;quot;&#039;&#039;--noPlugins&#039;&#039;&amp;quot; followed by a list of individual &amp;quot;loadPlugin&amp;quot; options, to tune startup time with a minimum set of required plugins being loaded.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--noUpdateCheck&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;If configured by the user&#039;s settings, expecco automatically checks for updates and patches when started (by checking the exept web-server for the presence of new patch files). This option disables that check, even if configured in the settings. Notice, that this is usually controlled by the user settings; however, in situations where settings are shared among multiple machines (network drive) and a test host has no (or should not have) internet access, it may be useful to disable this from the command line. It is especially useful, if you are disconnected from the Internet (isolated test-lab), to avoid time delays resulting from connection failures.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--requireLogin&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Opens expecco in a (lightweight) multi-user mode, in which a username must be entered before the actual interaction with expecco begins. This user name will be used to load custom per-user settings (named &amp;quot;&amp;lt;code&amp;gt;.expeccoSettings_&amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;&amp;quot;) and will also be used in the generated reports. Also, the &amp;quot;&#039;&#039;File&#039;&#039;&amp;quot; menu will contain an additional &amp;quot;&#039;&#039;Logout&#039;&#039;&amp;quot; menu item, which brings back the initial login dialog.&amp;lt;br&amp;gt;This mode is useful, if expecco is used on a machine by multiple users, and expecco should remain opened (i.e. as a test stand). For example in a production floor, where tests are executed in multiple shifts by multiple operators.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--load &amp;lt;fileName or packageName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Loads a class file, extension or user plugin. The argument must be either the name of a Smalltalk source or binary file, or the name of a package (which must be found in the &amp;quot;&amp;lt;code&amp;gt;packages&amp;lt;/code&amp;gt;&amp;quot; subfolder under the expecco installation folder). For details on how to generate such packages, read [[Creating_new_Class_Library_Packages/en | &amp;quot;Creating new Class Library Packages&amp;quot;]].&lt;br /&gt;
&lt;br /&gt;
==== Test Execution ====&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--execute &amp;amp;lt;fileName&amp;amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;read and execute a suite. Starting with expecco 2.10, you can also use &amp;quot;-E &amp;amp;lt;fileName&amp;amp;gt;&amp;quot;, which makes the command line a bit shorter.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--execute&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;without a filename, this should be the last argument of a scatter-gather dynamically generated suite command (see below: scatter-gather tests)&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test Selection  ====&lt;br /&gt;
&lt;br /&gt;
the following options allow for individual test plans to be selected for execution from a suite which contains multiple test plans. Without any such option, &#039;&#039;--execute&#039;&#039; will run all top-level testplans found in the suite in sequence.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--testPlanName &amp;lt;namePattern&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Only execute test plans with a matching name.&amp;lt;br&amp;gt;For backward compatibility, &amp;quot;&#039;&#039;&#039;&amp;lt;code&amp;gt;--testSuiteName &amp;lt;namePattern&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;quot; is still supported and has the same effect.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--testPlanTag &amp;lt;tagPattern&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Only execute test plans with a matching tag.&amp;lt;br&amp;gt;For backward compatibility, &amp;quot;&#039;&#039;&#039;&amp;lt;code&amp;gt;--testSuiteTag &amp;lt;tagPattern&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;quot; is still supported and has the same effect.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--testPlanID &amp;lt;uuid&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Only execute that particular test plan (repeat to execute multiple test plans).&amp;lt;br&amp;gt;Starting with release 2.7, the following shortcut can also be used: &#039;&#039;&#039;&amp;lt;code&amp;gt;--testSuiteID &amp;quot;&amp;lt;uuid1&amp;gt;,&amp;lt;uuid2&amp;gt;,...,&amp;lt;uuidN&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;&#039;&#039;&#039;.&amp;lt;br&amp;gt;For backward compatibility, &amp;quot;&#039;&#039;&#039;&amp;lt;code&amp;gt;--testSuiteID &amp;lt;uuid&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;quot; is still supported and has the same effect.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Scatter Gather Test Suite Composition ====&lt;br /&gt;
&lt;br /&gt;
these options allow for a test plan to be composed out of a single or multiple of individual suite files. When composing, a new test plan is temporarily created, which contains the specified test cases. This is in contrast to the above options, where preexisting test plans are selected for execution.&lt;br /&gt;
&lt;br /&gt;
Typically, this kind of composition is used when expecco is called from a QA system, such as Polarion or HP Quality Centre, where individual &amp;quot;test sets&amp;quot; are composed out of a collection of existing test cases. &lt;br /&gt;
&lt;br /&gt;
Notice, that this may lead to longer startup times, depending on the number of suites found in the suite directory, because suite files there will be opened and searched for matching test cases. If the same set of tests needs to be executed multiple times, it may be agood idea to use the &amp;quot;--saveSuite&amp;quot; option, to have the composed suite saved into a file for later reuse.&lt;br /&gt;
&lt;br /&gt;
Also notice, that this works best, if testcase have unique names or are known by their ID (which is globally unique). If your test management system can provide unique identifiers, these should be used to name your testcases inside the suite (typically, a unique name of the test-case or requirement is used to name corresponding test-cases).&lt;br /&gt;
&amp;lt;br&amp;gt;(These options are only available in release &amp;amp;ge; 2.7)&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--suiteDirectory &amp;lt;dirName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;defines the directory, where test suite files are searched for composed test plans. Test cases as specified in one of the options below must be found in one of the files present there. Notice, that the first file which contains a requested test case action will be chosen. Thus, you should ensure, that only one version of each suite is present there. Typically, an up-to-date test suite directory as checked out from the revision control system is specified here. If this argument is not given, test cases are searched in the list of explicitly listed suite files (&amp;quot;.ets&amp;quot; arguments).&amp;lt;p&amp;gt;This option also specifies the directory where suites are found for remote execution (see description of SOAP and REST services below).&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--suiteTitle &amp;lt;string&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;defines the name of the new test plan, which is created dynamically. This is used to control the labels in the generated report files.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--testCaseNames &amp;lt;name-list&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;defines the test cases to be included in the test by name. name-list is a list of comma-separated names of the individual test actions.&amp;lt;br&amp;gt;Please only use this option, if your testcases have unique names and are found only once in any suite found in the suite directory. Otherwise, the first suite which contains that name will be chosen (see below for better selection options).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--testCaseFIDs &amp;lt;id-list&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;defines the test cases to be included in the test by function ID. id-list is a list of comma-separated UUIDs of the individual test actions.&amp;lt;br&amp;gt;This option is probably not very user-friendly for a human, but allows for a calling program (or script) that the testcase is found even if it has been renamed in the meanwhile (remember that functional IDs are assigned once when an item is created and remain unchanged over the whole lifetime).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--testCaseIDs &amp;lt;id-list&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;defines the test cases to be included in the test by version ID. id-list is a list of comma-separated UUIDs of the individual test actions.&amp;lt;br&amp;gt;This option may be very unfriendly for a human user, but allows for a calling program (or script) to ensure that a particular testcase with a particular version is found and executed, even if the testcase has been renamed or modified in the meantime (remember that the ID is changed with every modification). If the same testcase is found in multiple suite files (i.e. in different versions), this will ensure that the correct version will be executed&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--saveSuite &amp;lt;fileName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;saves the generated as-hoq suite. Useful if you want to archive such a dynamically generated scatter-gather suite separately from the result file(s), or to automatically construct new suites. Notice that the &amp;quot;.elf&amp;quot; result file will always include the generated ad-hoq suite, so archival of the generated ad-hoq suite is only needed if you generate pdf, html or other non-elf reports.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test Parameters ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--parameter &amp;amp;lt;fileName&amp;amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039; / &#039;&#039;&#039;&amp;lt;code&amp;gt;-P &amp;amp;lt;fileName&amp;amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Load a parameter set from a file. A parameter set contains values for a test suite&#039;s top environment. This can be either in XML format, as generated with the [[Environment_Editor|&amp;quot;&#039;&#039;Save-Parameter-Set&#039;&#039;&amp;quot; menu function]], a CSV file, containing key-value pairs or a JSON file containing a JSON dictionary object.&amp;lt;p&amp;gt;Parameter files in either format can be created manually in a text editor, provided by a QM system (such as expeccoALM, HP Quality Center or similar), generated by another controlling program or generated by expecco itself via the &amp;quot;&#039;&#039;Save-Parameter&#039;&#039;&amp;quot; menu function of the [[Environment_Editor|environment editor]].&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;The parameter file may contain values for a subset of the environment variables. In this case, the values from the parameter file overwrite corresponding values present in the loaded test suite, leaving other values unchanged.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--parameter:&amp;amp;lt;key&amp;amp;gt;=&amp;amp;lt;value&amp;amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039; / &#039;&#039;&#039;&amp;lt;code&amp;gt;-P:&amp;amp;lt;key&amp;amp;gt;=&amp;amp;lt;value&amp;amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Sets an individual parameter for the next &amp;quot;--execute&amp;quot; argument.&amp;lt;p&amp;gt;If multiple &amp;quot;--execute&amp;quot; arguments are given (i.e. multiple suites are to be executed in sequence), these parameter values are collected and given to the next execution only, and overwrite corresponding values from either a parameter set (see above) or from the suite itself.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;Thus, it is possible to execute the same suite with different parameters in one command line (see example above).&amp;lt;br&amp;gt;(this option is available with expecco vsn &amp;gt;= 2.10)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test Execution via Scripting ====&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--scriptFile &amp;amp;lt;fileName&amp;amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;read and execute a script from a file (see scripting below).&lt;br /&gt;
&lt;br /&gt;
==== Reporting ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--verdicts&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Send execution and result info in human readable format to the stderr output. (see [[#Verdicts Example|example below]].)&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--logFile &amp;lt;fileName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Used to change the name of the generated log file, where stderr is written to.&amp;lt;br&amp;gt;This is only useful if running in server mode.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--exitCode &amp;lt;n&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Defines the exit code to be used independent of the test outcome.&amp;lt;br&amp;gt;The default is 0 (zero) if all tests pass, and non-zero when they do not. However, some calling programs (make/jenkins,...) may misinterpret this exit code and treat the whole job as non-executable. Use this flag to prevent this. It is still possible to change the exitCode for a particular outcome by adding one of the following options after this option.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--exitCodeOnFail &amp;lt;n&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Defines the exit code in case any test ends with a test-failure status.&amp;lt;br&amp;gt;The default is 0 (zero), so that when you run expecco out of make, jenkins or other tools which check for the exit status, the calling program does not interpret this status as if expecco itself failed to execute. This option also changes the exitCodeOnError and exitCodeOnInconclusive values (see below), unless explicitly defined by those options.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--exitCodeOnError &amp;lt;n&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Defines the exit code in case any test ends with a test-error status.&amp;lt;br&amp;gt;The default is 0 (zero), so that when you run expecco out of make, jenkins or other tools which check for the exit status, the calling program does not interpret this status as if expecco itself failed to execute. This option also changes the exitCodeOnInconclusive values (see below), unless explicitly defined by that option.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--exitCodeOnInconclusive &amp;lt;n&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Defines the exit code in case any test ends with an inconclusive status.&amp;lt;br&amp;gt;The default is 0 (zero), so that when you run expecco out of make, jenkins or other tools which check for the exit status, the calling program does not interpret this status as if expecco itself failed to execute.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--elfReportFile &amp;lt;elfFilename&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Writes a report in expecoo&#039;s native XML logfile format. The report contains a lot of detail information and could be processed by an XSLT processor or a similar tool. It also contains enough additional information about test plans and actions so that expecco can redisplay the activity log tree from this file. The generated file can be opened directly via the command line (&amp;quot;expecco &amp;lt;file&amp;gt;.elf&amp;quot;) or by double clicking on the elf-file in the operating system&#039;s desktop.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--csvReportFile &amp;lt;csvFilename&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Writes a summary report in CSV format. Each row consists of:&amp;lt;br&amp;gt;&lt;br /&gt;
** &#039;&#039;TESTSUITE&#039;&#039; - the filename&lt;br /&gt;
** &#039;&#039;TESTPLAN&#039;&#039;  - the test plan&lt;br /&gt;
** &#039;&#039;TESTCASE&#039;&#039;  - the test case&lt;br /&gt;
** &#039;&#039;VERDICT&#039;&#039;   - the test result; one of SUCCESS, FAILED, ERROR or INCONCLUSIVE&lt;br /&gt;
** &#039;&#039;INFO&#039;&#039;      - additional info in case of failure&lt;br /&gt;
:Additional pseudo verdicts such as STARTTIME, ENDTIME etc. are written. A typical CVS output file can be found in the [[#CSV File Example|examples]].&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--textReportFile &amp;lt;textFilename&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Writes a summary report in a human readable textual format. A typical text output file can be found in the [[#Textual File Example|examples]].&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--xmlReportFile &amp;lt;xmlFilename&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Writes a report in XML format. The report contains a lot of detail information and could usually be processed by an XSLT processor or simular tool. A typical XML output file can be found in the [[#XML File Example|examples]].&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--pdfReportFile &amp;lt;pdfFilename&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Writes a summary report in pdf format.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--htmlReportFile &amp;lt;htmlFilename&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Writes a summary report in html format.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--junitReportFile &amp;lt;htmlFilename&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Writes a summary report in a junit compatible XML format. Useful, when expecco is to be started by jenkins or similar driver programs.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--polarionReportFile &amp;lt;htmlFilename&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Writes a summary report in an XML format which is especially suited for the Polarion QM tool. The structure of the generated XML is the same as with the junit format above, but a slightly different time format is used.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--reportTemplateName &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Use the given report template (must be an element inside the test suite) for the following &amp;quot;--xxxReportFile&amp;quot; argument. If no such argument is given, the default template as defined in the suite is used.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--server&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Starts expecco in server mode. This combines the &amp;quot;&#039;&#039;--service&#039;&#039;&amp;quot;, &amp;quot;&#039;&#039;--infoService&#039;&#039;&amp;quot; and &amp;quot;&#039;&#039;--remoteControlService&#039;&#039;&amp;quot; flags. All of those services as described below are started with that single command line argument.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--service&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Starts expecco in server mode. In this mode, HTTP-SOAP and HTTP-REST requests can be used to remote-control expecco&#039;s execution; especially, to execute and monitor tests, and upload results. The most obvious use for this is for expecco to act as an execution host (test slave) for an expeccoALM or Polarion server.&amp;lt;br&amp;gt;However, because standard protocols are used, this may also be used to interface the execution engine to many other QM management or automation systems (e.g. HP Quality Centre). The interface is described below.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--infoService&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Provide an additional info service which allows for monitoring and control of an expecco server via a web browser (server mode only).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--remoteControlService&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Provide an additional service to interact with a running test. Dialog requests, single stepping, starting, pausing and stopping of tests is possible via remote REST requests. This service is used by the Android remote control app, which is available upon request (server mode only).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--port &amp;lt;portNr&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Used to change the HTTP and SOAP port numbers, when running in server mode.&amp;lt;br&amp;gt;The default is 9090 (server mode only).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--scripting &amp;lt;portNr&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Enable scripting (remote control via Telnet ascii interface) on portNr ([[#Scripting Example|see more below]]).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--allowHost &amp;lt;hostName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Allow hostName to connect to the scripting port. Repeat for multiple hosts (see more below).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Utility Functions ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--diff &amp;lt;file1&amp;gt; &amp;lt;file2&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Print differences between two test suites. This can be used eg. to automatically generate log messages for a revision control system (please read the section on &amp;quot;Integration with Source Code Management System&amp;quot; below).&amp;lt;br&amp;gt;(This function is only available in release &amp;amp;ge; 2.7)&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Command Exit Status ===&lt;br /&gt;
&lt;br /&gt;
*0 - all tests passed&lt;br /&gt;
&lt;br /&gt;
*&amp;gt;0 various other errors (command line, file not found, etc.)&lt;br /&gt;
&lt;br /&gt;
*101 - at least one test failed (FAIL status). This exitCode can be overwritten by a command line argument.&lt;br /&gt;
&lt;br /&gt;
*102 - at least one test was inconcusive (INCONCLUSIVE status). This exitCode can be overwritten by a command line argument.&lt;br /&gt;
&lt;br /&gt;
*103 - at least one test lead to an error (ERROR status). This exitCode can be overwritten by a command line argument.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The diff option returns 0 if the compared suites are the same, or 200+n, (where n is the number of differences) otherwise.&lt;br /&gt;
&lt;br /&gt;
== Sample Outputs ==&lt;br /&gt;
&lt;br /&gt;
The following output files were generated by executing the test suite from the file:&lt;br /&gt;
:&amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;quot;&lt;br /&gt;
which contains a single test plan named:&lt;br /&gt;
:&amp;quot;Example Testplan&amp;quot;&lt;br /&gt;
which contains three test cases named:&lt;br /&gt;
:&amp;quot;Test1&amp;quot;&lt;br /&gt;
:&amp;quot;Test2&amp;quot;&lt;br /&gt;
:&amp;quot;Test3-Should fail&amp;quot;&lt;br /&gt;
of which the first two are supposed to PASS and the last one generates an ERROR.&lt;br /&gt;
&lt;br /&gt;
All timestamp information is written in ISO8601 format.&lt;br /&gt;
&lt;br /&gt;
Be reminded that the following reports are condensed reports, which only contain a subset of the information contained in expecco&#039;s native &amp;quot;.elf&amp;quot; file format. The &amp;quot;elf&amp;quot; file contains all of the execution, trace and data-flow information and the original suite as executed. &amp;quot;elf&amp;quot;-files can be reloaded at any time into the expecco UI and the test be reexecuted. Also, any of the other reports can be regenerated, posyibly with different report options (i.e. detail). &lt;br /&gt;
&lt;br /&gt;
Thus it is highly recommended that these &amp;quot;elf&amp;quot; files are archived after a test run, in addition to any of the condensed report files (eg. pdf or junit report).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CSV File Example (&amp;quot;&amp;lt;code&amp;gt;--csvReportFile&amp;lt;/code&amp;gt;&amp;quot; option) ===&lt;br /&gt;
&lt;br /&gt;
By default, entries are separated by &amp;quot;;&amp;quot;-characters. Additional double quotes (&amp;quot;) are used to delimit strings with embedded &amp;quot;;&amp;quot; or spaces. Any double quote within such a string is doubled.&lt;br /&gt;
CSV is a simple and very common interchange format.&lt;br /&gt;
For example, CSV files can be imported into Microsoft Word, Exel and Openoffice (and many other).&lt;br /&gt;
&lt;br /&gt;
 TESTSUITE;TESTPLAN;TESTCASE;VERDICT;INFO&lt;br /&gt;
 ;;;StartTime;2008-10-31T08:57:13.689&lt;br /&gt;
 &amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;quot;;&amp;quot;Example Testplan&amp;quot;;Test1;PASSED;  &lt;br /&gt;
 &amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;quot;;&amp;quot;Example Testplan&amp;quot;;Test2;PASSED;  &lt;br /&gt;
 &amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;quot;;&amp;quot;Example Testplan&amp;quot;;&amp;quot;Test3 - Should fail&amp;quot;;ERROR;   &lt;br /&gt;
 ;;;EndTime;2008-10-31T08:57:18.746&lt;br /&gt;
&lt;br /&gt;
=== XML File Example (&amp;quot;&amp;lt;code&amp;gt;--xmlReportFile&amp;lt;/code&amp;gt;&amp;quot; option) ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;SummaryReport&amp;gt;&lt;br /&gt;
   &amp;lt;StartTime&amp;gt;2008-10-31T08:56:49.774&amp;lt;/StartTime&amp;gt; &lt;br /&gt;
   &amp;lt;TestSuite&amp;gt;&lt;br /&gt;
     &amp;lt;File&amp;gt;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;lt;/File&amp;gt; &lt;br /&gt;
     &amp;lt;TestPlan&amp;gt;&lt;br /&gt;
       &amp;lt;Name&amp;gt;Example Testplan&amp;lt;/Name&amp;gt; &lt;br /&gt;
       &amp;lt;TestCase&amp;gt;&lt;br /&gt;
         &amp;lt;Name&amp;gt;Test 1&amp;lt;/Name&amp;gt; &lt;br /&gt;
         &amp;lt;Verdict&amp;gt;PASSED&amp;lt;/Verdict&amp;gt; &lt;br /&gt;
       &amp;lt;/TestCase&amp;gt;&lt;br /&gt;
       &amp;lt;TestCase&amp;gt;&lt;br /&gt;
         &amp;lt;Name&amp;gt;Test 2&amp;lt;/Name&amp;gt; &lt;br /&gt;
         &amp;lt;Verdict&amp;gt;PASSED&amp;lt;/Verdict&amp;gt; &lt;br /&gt;
       &amp;lt;/TestCase&amp;gt;&lt;br /&gt;
       &amp;lt;TestCase&amp;gt;&lt;br /&gt;
         &amp;lt;Name&amp;gt;Test 3 - Should fail&amp;lt;/Name&amp;gt; &lt;br /&gt;
         &amp;lt;Verdict&amp;gt;ERROR&amp;lt;/Verdict&amp;gt; &lt;br /&gt;
       &amp;lt;/TestCase&amp;gt;&lt;br /&gt;
     &amp;lt;/TestPlan&amp;gt;&lt;br /&gt;
   &amp;lt;/TestSuite&amp;gt;&lt;br /&gt;
   &amp;lt;EndTime&amp;gt;2008-10-31T08:56:55.142&amp;lt;/EndTime&amp;gt; &lt;br /&gt;
 &amp;lt;/SummaryReport&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is not to be confused with the &amp;quot;elf&amp;quot; result file format, which is also XML based, but contains a lot more detail. &lt;br /&gt;
&lt;br /&gt;
Notice also, that the junit report format (&amp;quot;&amp;lt;code&amp;gt;--junitReport&amp;lt;/code&amp;gt;&amp;quot; option) is similar in structure but uses different tags.&lt;br /&gt;
Junit reports are compatible to reports generated by Java jUnit frameworks.&lt;br /&gt;
They can thus be used to generate reports and trends in Jenkins/Hudson and other tools which understand the jUnit report format.&lt;br /&gt;
&lt;br /&gt;
=== Textual File Example (&amp;quot;&amp;lt;code&amp;gt;--textReportFile&amp;lt;/code&amp;gt;&amp;quot; option) ===&lt;br /&gt;
&lt;br /&gt;
 Test Execution Summary&lt;br /&gt;
   Start: 2008-10-31 08:56:12.751&lt;br /&gt;
   TestSuite: &amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&lt;br /&gt;
     TestPlan: Example Testplan&lt;br /&gt;
       Test 1 ....................... PASSED&lt;br /&gt;
       Test 2 ....................... PASSED&lt;br /&gt;
       Test 3 - Should fail ......... ERROR&lt;br /&gt;
   Finish: 2008-10-31 08:56:18.009&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--Orginal:&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&lt;br /&gt;
TESTSUITE;TESTPLAN;TESTCASE;VERDICT;INFO&lt;br /&gt;
;;;StartTime;2008-10-31T08:57:13.689&lt;br /&gt;
&amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;quot;;&amp;quot;Example Testplan&amp;quot;;Test1;PASSED;  &lt;br /&gt;
&amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;quot;;&amp;quot;Example Testplan&amp;quot;;Test2;PASSED;  &lt;br /&gt;
&amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;quot;;&amp;quot;Example Testplan&amp;quot;;&amp;quot;Test3 - Should fail&amp;quot;;ERROR;   &lt;br /&gt;
;;;EndTime;2008-10-31T08:57:18.746&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&amp;lt;SummaryReport&amp;gt;&lt;br /&gt;
  &amp;lt;StartTime&amp;gt;2008-10-31T08:56:49.774&amp;lt;/StartTime&amp;gt; &lt;br /&gt;
  &amp;lt;TestSuite&amp;gt;&lt;br /&gt;
    &amp;lt;File&amp;gt;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;lt;/File&amp;gt; &lt;br /&gt;
    &amp;lt;TestPlan&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Example Testplan&amp;lt;/Name&amp;gt; &lt;br /&gt;
      &amp;lt;TestCase&amp;gt;&lt;br /&gt;
        &amp;lt;Name&amp;gt;Test 1&amp;lt;/Name&amp;gt; &lt;br /&gt;
        &amp;lt;Verdict&amp;gt;PASSED&amp;lt;/Verdict&amp;gt; &lt;br /&gt;
      &amp;lt;/TestCase&amp;gt;&lt;br /&gt;
      &amp;lt;TestCase&amp;gt;&lt;br /&gt;
        &amp;lt;Name&amp;gt;Test 2&amp;lt;/Name&amp;gt; &lt;br /&gt;
        &amp;lt;Verdict&amp;gt;PASSED&amp;lt;/Verdict&amp;gt; &lt;br /&gt;
      &amp;lt;/TestCase&amp;gt;&lt;br /&gt;
      &amp;lt;TestCase&amp;gt;&lt;br /&gt;
        &amp;lt;Name&amp;gt;Test 3 - Should fail&amp;lt;/Name&amp;gt; &lt;br /&gt;
        &amp;lt;Verdict&amp;gt;ERROR&amp;lt;/Verdict&amp;gt; &lt;br /&gt;
      &amp;lt;/TestCase&amp;gt;&lt;br /&gt;
    &amp;lt;/TestPlan&amp;gt;&lt;br /&gt;
  &amp;lt;/TestSuite&amp;gt;&lt;br /&gt;
  &amp;lt;EndTime&amp;gt;2008-10-31T08:56:55.142&amp;lt;/EndTime&amp;gt; &lt;br /&gt;
&amp;lt;/SummaryReport&amp;gt;&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------&lt;br /&gt;
Test Execution Summary&lt;br /&gt;
  Start: 2008-10-31 08:56:12.751&lt;br /&gt;
&lt;br /&gt;
  TestSuite: &amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&lt;br /&gt;
    TestPlan: Example Testplan&lt;br /&gt;
      Test 1 ....................... PASSED&lt;br /&gt;
      Test 2 ....................... PASSED&lt;br /&gt;
      Test 3 - Should fail ......... ERROR&lt;br /&gt;
&lt;br /&gt;
  Finish: 2008-10-31 08:56:18.009&lt;br /&gt;
------------------------------------------------------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Verdicts Example ===&lt;br /&gt;
&lt;br /&gt;
the &amp;quot;&amp;lt;code&amp;gt;--verdicts&amp;lt;/code&amp;gt;&amp;quot; option generates a simple trace on the standard error (to be redirected into a file):&lt;br /&gt;
&lt;br /&gt;
 C:\selftest\commandLineArgs&amp;gt; expecco --noBanner --noTray --verdicts &lt;br /&gt;
 --parameter paramesForTest.xpar --execute parameterTest.ets&amp;lt;br&amp;gt;&lt;br /&gt;
 Expecco [info]: start testSuite &amp;quot;parameterTest.ets&amp;quot;...&lt;br /&gt;
 Expecco [info]: using parameters &amp;quot;paramesForTest.xpar&amp;quot;...&lt;br /&gt;
 Expecco [info]: start testPlan &amp;quot;Test Parameters From CommandLine&amp;quot;&lt;br /&gt;
 Expecco [info]: start testCase &amp;quot;Validate Parameters&amp;quot;&lt;br /&gt;
 Expecco [info]: done testCase &amp;quot;Validate Parameters&amp;quot;; STATUS=PASSED&lt;br /&gt;
 Expecco [info]: done testPlan &amp;quot;Test Parameters From CommandLine&amp;quot;; STATUS=PASSED&lt;br /&gt;
 Expecco [info]: done testSuite &amp;quot;parameterTest.ets&amp;quot;; STATUS=PASSED&lt;br /&gt;
&lt;br /&gt;
== Integration with Quality Managament and Automation Tools ==&lt;br /&gt;
&lt;br /&gt;
=== Integration with Jenkins ===&lt;br /&gt;
&lt;br /&gt;
To have expecco tests being executed automatically by Jenkins, take the following example as a guideline. This is a real world setup, taken from our own setup within eXept.&lt;br /&gt;
&lt;br /&gt;
# Create a test job, which is triggered by a successful build (or a change in the test suite repository)&lt;br /&gt;
# Check the &amp;quot;Block Build while prerequisite Jobs are Active&amp;quot; flag&lt;br /&gt;
# Check either the &amp;quot;Trigger from Source Code Management&amp;quot; or the &amp;quot;Trigger from other Job&amp;quot; flags&lt;br /&gt;
# Check &amp;quot;Abort build if it is Stuck&amp;quot; (just to make sure, that a faulty suite does not block Jenkins)&lt;br /&gt;
# Check &amp;quot;Fail the Build if Stuck&amp;quot; and give it a reasonable elastic Time-out Strategy (we use 300% of the last 10 builds, to make sure a longer execution time due to more test cases will not be interpreted as a stuck, and an extra timeout of 30 minutes. The timeout is very generous for the expected execution time of a few minutes).&lt;br /&gt;
# Check &amp;quot;Run xvnc during Build&amp;quot; to allow for monitoring, what is going on. This is also required, if the test needs a UI.&lt;br /&gt;
# Define the &amp;quot;Build Procedure&amp;quot; as &amp;quot;Execute Shell Script&amp;quot; (Unix/Linux) or &amp;quot;Execute Batch Job&amp;quot; (Windows)&lt;br /&gt;
# Enter a build procedure similar to the ours, which is:&lt;br /&gt;
#::&amp;lt;code&amp;gt;cd exept\expecco\application&lt;br /&gt;
#::del *.junit&lt;br /&gt;
#::expecco.com --noBanner --exitOnInternalError --noTray \&lt;br /&gt;
#::::--jUnitReportFile selfTestResult.junit \&lt;br /&gt;
#::::--execute ..\projects\expecco\eXpeccoSelfTest.ets&lt;br /&gt;
#::expecco.com --noBanner --noTray \&lt;br /&gt;
#::::--jUnitReportFile CommunicationWithExpeccoNETResult.junit \&lt;br /&gt;
#::::--execute ..\projects\expecco\CommunicationWithExpeccoNET.ets&amp;lt;/code&amp;gt;&lt;br /&gt;
#:The details (especially paths and names) will of cause be different in your setup. The above uses the relative paths as it first changes the current directory to where the previous build has compiled the executable, which will of course not be the case in your setup.&lt;br /&gt;
# Define a &amp;quot;Post-build Action&amp;quot;&lt;br /&gt;
# Check &amp;quot;Publish Junit Test Results&amp;quot;&lt;br /&gt;
# Enter a path expression to declare the location of the resulting reports. Here, we used:&amp;lt;PRE&amp;gt;exept\expecco\application\*.junit&amp;lt;/PRE&amp;gt;&lt;br /&gt;
# Check the &amp;quot;Publish Test Attachments&amp;quot; flag, so the results will be presented in the Jenkins management console&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! Because expecco has been told to generate jUnit compatible report files, we can use Jenkins&#039; existing jUnit support. However, the jUnit xml format does not support the full range of information which is present in the native expecco result files (especially the activity log and pin value information is not included). Therefore, it is a good idea to also generate a regular &amp;quot;.elf&amp;quot; (expecco log file) and add it to the archived build artefacts.&lt;br /&gt;
&lt;br /&gt;
=== Integration with expeccoALM ===&lt;br /&gt;
Expecco and ExpeccoALM (formerly called &amp;quot;&#039;&#039;expeccoNET&#039;&#039;&amp;quot;) have been originally designed to work together. Therefore, only a minimum setup is required:&lt;br /&gt;
# ensure that an expecco test execution slave is running on each test host (server farm, virtual machines, etc.). Depending on the operating system, this is either done by installing expecco as a service (Windows), or by adding appropriate startup actions to your &amp;quot;init.d&amp;quot; files (Unix).&lt;br /&gt;
# define the test host(s) in expeccoALM.&lt;br /&gt;
# (optionally) define the devices available and attached to the execution slave machine in expeccoALM&lt;br /&gt;
&lt;br /&gt;
ExpeccoALM will ask the expecco slaves about their operating system environment. So jobs will be automatically executed on matching CPU/OS machines. However, if tests require special resources (devices) to be attached, these must be defined and listed in expeccoALM as well. If your test has corresponding resource-requirements defined (see resources/inventory), expeccoALM will both ensure that the test will execute on the correct machine, and also reserve the resource during the execution. Also, test scheduling, if defined to be automatic, will be optimized to minimize resource usage, and to ensure that a higher number of tests can be executed in parallel.&lt;br /&gt;
&lt;br /&gt;
=== Integration into a SOA Infrastructure ===&lt;br /&gt;
&lt;br /&gt;
For this, expecco should be started on the test host(s) in so called &amp;quot;slave&amp;quot; mode.&lt;br /&gt;
In this mode, expecco awaits for execution commands via SOAP or REST, executes tests in the background and returns status information (progress) and results (reports).&lt;br /&gt;
&lt;br /&gt;
Because tests may execute for a long time (hours or even days), the execution is performed asynchonously; first, the test has to be downloaded to the slave, then execution started. The start-command returns a ticket, which is a test-run-identifier, by which the execution progress can be queried (polled) while the test is running. Finally, a &amp;quot;finished&amp;quot; status is returned, upon which the result can be aquired via another service call.&lt;br /&gt;
&lt;br /&gt;
Multiple such test slaves can be started on multiple machines, and each test slave may (if required) execute multiple tests in parallel (although this is usually limited to one, to avoid conflicts when external resources are accessed).&lt;br /&gt;
&lt;br /&gt;
To start expecco in slave mode, use the command line:&lt;br /&gt;
 expecco --service&lt;br /&gt;
&lt;br /&gt;
or, if the default port (9090) is not available, use:&lt;br /&gt;
 expecco --service --port 9090&lt;br /&gt;
&lt;br /&gt;
The service interface is described below; typically, you can talk to expecco via:&lt;br /&gt;
 http://localhost:9090/expeccoService&lt;br /&gt;
or:&lt;br /&gt;
 http://localhost:9090/expeccoService/rest&lt;br /&gt;
&lt;br /&gt;
The SOAP wsdl is returned via:&lt;br /&gt;
 http://localhost:9090/wsdl/ExpeccoSOAPService.wsdl&lt;br /&gt;
&lt;br /&gt;
and - if the inforService is also running - general status information with:&lt;br /&gt;
 http://localhost:9090/info&lt;br /&gt;
&lt;br /&gt;
=== Integration with HP Quality Center ===&lt;br /&gt;
&lt;br /&gt;
This is described in the [[ HP Quality Center Plugin ]] document.&lt;br /&gt;
&lt;br /&gt;
=== Integration with Polarion ===&lt;br /&gt;
&lt;br /&gt;
This is described in the [[ Polarion Plugin]] document.&lt;br /&gt;
&lt;br /&gt;
== Integration with Source Code Management Tools ==&lt;br /&gt;
&lt;br /&gt;
=== Background Info on what is Contained in a &amp;quot;.ets&amp;quot; File ===&lt;br /&gt;
&lt;br /&gt;
Expecco stores testsuites in a file with &#039;.ets&#039; extension (which stands for: &amp;quot;&#039;&#039;Expecco-Test-Suite&#039;&#039;&amp;quot;) and result logs in &#039;.elf&#039; files (stands for: &amp;quot;&#039;&#039;Expecco-Log-File&#039;&#039;&amp;quot;).&lt;br /&gt;
These are technically zip files - i.e. a bundle of individual files which can be extracted with the common zip command line tool (winzip under Windows systems, zip/unzip under Unix systems).&lt;br /&gt;
&lt;br /&gt;
For example, &amp;quot;&amp;lt;code&amp;gt;unzip -l foo.ets&amp;lt;/code&amp;gt;&amp;quot; lists the individual components, of which especially the block descriptions and attachments may be of interest.&lt;br /&gt;
&lt;br /&gt;
Notice, that you have to be careful when ets-files are bundled with zip manually: for various consistency checks, expecco generates a validation signature of the components and saves this as an additional file inside the .ets file.&lt;br /&gt;
This signature file must be preserved and it must be consistent with the other zip-components. In effect, this means that an ets can only be constructed from the very same components, using the very same signature file as were extracted before. Otherwise, expecco refuses to load the &amp;quot;.ets&amp;quot; file later.&lt;br /&gt;
&lt;br /&gt;
=== Version Management of &amp;quot;.ets&amp;quot; files ===&lt;br /&gt;
&lt;br /&gt;
Unless a QA system like &amp;quot;expeccoALM&amp;quot; is used, ets-files can be stored and maintained in any other source code management (SCM) system, for example, CVS, SVN, hg/Mercurial, git, Perforce etc.&lt;br /&gt;
Make sure to store the .ets as binary file, and/or disable source expansion of version tag lines (for example, &amp;quot;$Header&amp;quot; or &amp;quot;$Id&amp;quot; in CVS). Consult your particular SCM system&#039;s documentation on how this is done.&lt;br /&gt;
&lt;br /&gt;
As an alternative, it is possible to unzip the ets into individual components, store them separately, and zip them back into an ets, when a previous version is extracted from the SCM system. However, you must be careful to preserve the contents exactly as is, including the signature and other meta data, and not mix versions. I.e. all individual component files must be checkedIn/out in sync and as a group - it is not possible to update individual files from previous versions. The reason is that action blocks are referred to by their versionID, and these IDs will certainly be inconsistent, when previous versions of individual action blocks are mixed into another version&#039;s suite. &lt;br /&gt;
&lt;br /&gt;
If, for whatever reason, you must checkin individual action blocks, we highly recommend to check in BOTH the bundled ets (and use that for later test execution), AND check in the individual components, and use only those for meta actions, such as comparison, documentation or other administrative tasks.&lt;br /&gt;
&lt;br /&gt;
=== Generating Diff Lists or other Version Information ===&lt;br /&gt;
&lt;br /&gt;
Many source code management systems allow for hook-scripts to be added to checkin/checkout actions, and/or to redefine the command to be used for diff-list generation.&lt;br /&gt;
&lt;br /&gt;
For example, in the SVN system, an external diff tool can be defined. You could write a little shell or batch script, which calls expecco with the &amp;quot;&amp;lt;code&amp;gt;--diff&amp;lt;/code&amp;gt;&amp;quot; option which is described above. Thus, you would get meaningful diff output even from checked in ets-bundle files.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;&amp;lt;code&amp;gt;expecco --diff&amp;lt;/code&amp;gt;&amp;quot; option is also useful as a command line tool to get diff lists - even if your SCM system does not allow for such automatic hooks.&lt;br /&gt;
&lt;br /&gt;
== Scripting ==&lt;br /&gt;
&lt;br /&gt;
Expecco can be scripted either by reading a script from a file or remote controlled via a telnet like command-line interface.&lt;br /&gt;
This is useful to execute complex test scenarios and meta tasks, to create or manipulate test suites automatically and for self-testing expecco by using another expecco to control its GUI. &lt;br /&gt;
It can also be used to execute and automate more complex scenarios without using expeccoALM.&lt;br /&gt;
&amp;lt;br&amp;gt;Example uses are:&lt;br /&gt;
* Sequentially load and/or execute all suites found in a folder, reimport libraries, save the updated suite&lt;br /&gt;
* Construct new suites by merging/selecting tests from other suites&lt;br /&gt;
* Bulk renaming, commenting, attributing etc.&lt;br /&gt;
* Change attachments inside a number of suites&lt;br /&gt;
* Controlling an application or web interface (via a GUI plugin) and saving a sequence of screen shots&lt;br /&gt;
&lt;br /&gt;
By default, the scripting interface expects expressions in JavaScript syntax (but with a Smalltalk object model), &lt;br /&gt;
similar to the language used for elementary block definition. However, the language can be changed to Smalltalk syntax via a &amp;quot;~&amp;quot; directive.&lt;br /&gt;
&lt;br /&gt;
=== Script File Example ===&lt;br /&gt;
&lt;br /&gt;
To control expecco via a scriptfile, use the &amp;quot;&amp;lt;code&amp;gt;--scriptFile &amp;amp;lt;filename&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;quot; command line argument, where &amp;lt;filename&amp;gt; must be a file containing JavaScript expressions.&lt;br /&gt;
&lt;br /&gt;
For example, the following script file named &amp;quot;run3Suites.js&amp;quot; may contain the code:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
    // Example for an automatic expecco script.&lt;br /&gt;
    // (loads and executes a number of test suites)&lt;br /&gt;
    //&lt;br /&gt;
&lt;br /&gt;
    // to enable debugging in case of an error.&lt;br /&gt;
    // STXScriptingServer.errorDebugging(true);&lt;br /&gt;
&lt;br /&gt;
    var files = [&lt;br /&gt;
        &amp;quot;foo.ets&amp;quot;,&lt;br /&gt;
        &amp;quot;bar.ets&amp;quot;,&lt;br /&gt;
        &amp;quot;baz.ets&amp;quot;,&lt;br /&gt;
    ];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    Expecco::ExpeccoPreferences.current.automaticReimportOnLoad(true);&lt;br /&gt;
    Expecco::ExpeccoPreferences.current.checkForReimportableImportsOnLoad(true);&lt;br /&gt;
    Expecco::ExpeccoPreferences.current.checkForAnchestorOnAutomaticReimport(false);&lt;br /&gt;
    // Expecco::ExpeccoPreferences.current.libraryPath(importPathes);&lt;br /&gt;
&lt;br /&gt;
    // --------------------&lt;br /&gt;
&lt;br /&gt;
    function executeTestPlan ( aTestPlan ) {&lt;br /&gt;
       Stderr.nextPutLine(&amp;quot;executing testplan &amp;quot;+aTestPlan.name()+&amp;quot;...&amp;quot;);&lt;br /&gt;
       resultList = aTestPlan.execute();&lt;br /&gt;
       Stderr.nextPutLine(&amp;quot;done.&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
    function runSuite(suiteFile) {&lt;br /&gt;
        var loadedProject;&lt;br /&gt;
&lt;br /&gt;
        Stderr.nextPutLine(&amp;quot;loading &amp;quot;+suiteFile+&amp;quot;...&amp;quot;);&lt;br /&gt;
        expecco.loadProjectFromFile(suiteFile);&lt;br /&gt;
        loadedProject = expecco.project();&lt;br /&gt;
&lt;br /&gt;
        if (loadedProject == null) {&lt;br /&gt;
            Stderr.nextPutLine(&amp;quot;failed to load library &amp;quot;+suiteFile+&amp;quot;.&amp;quot;);&lt;br /&gt;
            Smalltalk.exit(1);&lt;br /&gt;
        } else {&lt;br /&gt;
            loadedProject.allTestPlansDo( executTestPlan );&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    files.do(runSuite);&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And can be executed with:&lt;br /&gt;
&lt;br /&gt;
    expecco --scriptFile run3Suites.js&lt;br /&gt;
&lt;br /&gt;
for windowless operation, use the &amp;quot;&amp;lt;code&amp;gt;--noWindow&amp;lt;/code&amp;gt;&amp;quot; command line argument.&lt;br /&gt;
To speed up the startup, you can turn off the loading of plugins, with a &amp;quot;&amp;lt;code&amp;gt;--noPlugins&amp;lt;/code&amp;gt;&amp;quot; argument (and possibly load any required plugins explicitly via additional plugin arguments).&lt;br /&gt;
Finally, enable debug messages with a &amp;quot;&amp;lt;code&amp;gt;--debug&amp;lt;/code&amp;gt;&amp;quot; argument.&lt;br /&gt;
Thus, the recommended options for scripting are:&lt;br /&gt;
  &lt;br /&gt;
    expecco --debug --noPlugins --noWindow --scriptFile run3Suites.js&lt;br /&gt;
&lt;br /&gt;
of course, this command line can be put into a shell (or batch) script file, and then executed with a single word command.&lt;br /&gt;
&lt;br /&gt;
=== Telnet Scripting Example ===&lt;br /&gt;
&lt;br /&gt;
The remote scripting service is enabled when a &amp;quot;&amp;lt;code&amp;gt;--scripting&amp;lt;/code&amp;gt;&amp;quot; command line argument is given.&lt;br /&gt;
By default, the service only accepts connections from the local host (for security reasons). Using the &amp;quot;&amp;lt;code&amp;gt;--allowHost&amp;lt;/code&amp;gt;&amp;quot; option, more hosts can be gained access to the scripting feature - but be aware, that this opens a potential security hole, as all of the internal functions can be accessed via the scripting system (and this includes the possibility to write files and call operating system services with the access rights of the one who started the scripting server).&lt;br /&gt;
&lt;br /&gt;
When used with a remote script connection (telnet),&lt;br /&gt;
additional connection- and execution related commands are introduced by lines starting with the &amp;quot;~&amp;quot; (tilde) escape character (similar to telnet). &lt;br /&gt;
For example, &amp;quot;~.&amp;quot; (tilde-period) is used to close the connection. &lt;br /&gt;
Press &amp;quot;~?&amp;quot; (tilde-question) for help.&lt;br /&gt;
 &lt;br /&gt;
The following is a trace of a typical scripting session (user input in bold):&lt;br /&gt;
&lt;br /&gt;
 c:\programs\expecco&amp;gt; &amp;lt;b&amp;gt;expecco --scripting 8008&amp;lt;/b&amp;gt;&lt;br /&gt;
 c:\programs\expecco&amp;gt;     ... expecco now running in the background with GUI ...&lt;br /&gt;
 ...&lt;br /&gt;
 c:\programs\expecco&amp;gt; &amp;lt;b&amp;gt;telnet localhost 8008&amp;lt;/b&amp;gt;&lt;br /&gt;
 Welcome to Expecco (Type ~? for help)&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;println(expecco);&amp;lt;/b&amp;gt;&lt;br /&gt;
 an Expecco::Browser&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;expecco.menuNewProject();&amp;lt;/b&amp;gt;&lt;br /&gt;
 ...expecco performs the new-function from its menu...&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;expecco.loadProjectFromFile(&amp;quot;C:\Users\cg\testsuites\webedition\projects\BearerTest.ets&amp;quot;);&amp;lt;/b&amp;gt;&lt;br /&gt;
 ...expecco loads the testSuite...&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;expecco.close();&amp;lt;/b&amp;gt;&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;~.&amp;lt;/b&amp;gt;&lt;br /&gt;
 Lost Connection.&lt;br /&gt;
 c:\programs\expecco&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also start a scripting session without an initial expecco browser window:&lt;br /&gt;
&lt;br /&gt;
 c:\programs\expecco&amp;gt; &amp;lt;b&amp;gt;expecco --noWindow --scripting 8008&amp;lt;/b&amp;gt;&lt;br /&gt;
 c:\programs\expecco&amp;gt;     ... expecco now running in the background without GUI ...&lt;br /&gt;
 ...&lt;br /&gt;
 c:\programs\expecco&amp;gt; &amp;lt;b&amp;gt;telnet localhost 8008&amp;lt;/b&amp;gt;&lt;br /&gt;
 Welcome to Expecco (Type ~? for help)&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;println(expecco);&amp;lt;/b&amp;gt;&lt;br /&gt;
 an Expecco::Browser&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;expecco;&amp;lt;/b&amp;gt;&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;~v+&amp;lt;/b&amp;gt; // turn result-printing on&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;expecco&amp;lt;/b&amp;gt;&lt;br /&gt;
 an Expecco::Browser&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;~v-&amp;lt;/b&amp;gt; // and off again&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;expecco.loadProjectFromFile(&amp;quot;~/SomeTest.ets&amp;quot;);&amp;lt;/b&amp;gt;&lt;br /&gt;
 ...expecco loads the testSuite...&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;var blk = expecco.project.elementWithName(&amp;quot;My Action&amp;quot;);&amp;lt;/b&amp;gt;&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;blk.name(&amp;quot;My Fun Action&amp;quot;);&amp;lt;/b&amp;gt;&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;expecco.saveProjectToFile(&amp;quot;~/ModifiedTest.ets&amp;quot;);&amp;lt;/b&amp;gt;&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;expecco.close();&amp;lt;/b&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;lt;b&amp;gt;~.&amp;lt;/b&amp;gt;&lt;br /&gt;
 Lost Connection.&lt;br /&gt;
 c:\programs\expecco&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Scripting API Overview ==&lt;br /&gt;
&lt;br /&gt;
A few objects are predefined by name; among them are &amp;quot;&#039;&#039;expecco&#039;&#039;&amp;quot;, which refers to the browser itself (i.e. the UI) and &amp;quot;&#039;&#039;environment&#039;&#039;&amp;quot;, which refers to a collection of variable bindings (this is a dictionary of interpreter variables - not to be confused with a variable environment as known inside an expecco activity block).&lt;br /&gt;
&amp;lt;BR&amp;gt;New variables can be defined with a &amp;quot;&amp;lt;code&amp;gt;var &amp;amp;lt;name&amp;amp;gt;;&amp;lt;/code&amp;gt;&amp;quot; statement. For example:&lt;br /&gt;
&amp;lt;CODE&amp;gt;&amp;lt;PRE&amp;gt;&lt;br /&gt;
    var ws;&lt;br /&gt;
&lt;br /&gt;
    ws = new ExpeccoWorkspaceApplication;&lt;br /&gt;
    ws.open();&lt;br /&gt;
    ws.close();&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&amp;lt;/CODE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== expecco Object ====&lt;br /&gt;
&lt;br /&gt;
The variable named &amp;quot;&#039;&#039;expecco&#039;&#039;&amp;quot; refers to the opened GUI-object, which represents the expecco application itself. &lt;br /&gt;
&lt;br /&gt;
===== Expecco Functions =====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;project()&#039;&#039;&#039;&amp;lt;br&amp;gt;the current project&lt;br /&gt;
*&#039;&#039;&#039;currentApplication()&#039;&#039;&#039;&amp;lt;br&amp;gt;the current page (initially, there is only one)&lt;br /&gt;
*&#039;&#039;&#039;currentTreeApplication()&#039;&#039;&#039;&amp;lt;br&amp;gt;the current tree sub-application&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;selectModelItem( anItem )&#039;&#039;&#039;&amp;lt;br&amp;gt;select an item and open an editor for it&lt;br /&gt;
*&#039;&#039;&#039;selectedModelItems()&#039;&#039;&#039;&amp;lt;br&amp;gt;returns a collection of selected items&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
===== Menu Functions =====&lt;br /&gt;
These execute the underlying menu functions (as if clicked by the user).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;menuNewProject()&#039;&#039;&#039;&amp;lt;br&amp;gt;creates a new testSuite&lt;br /&gt;
*&#039;&#039;&#039;menuOpen()&#039;&#039;&#039;&amp;lt;br&amp;gt;opens a dialog requesting a testSuite&lt;br /&gt;
*&#039;&#039;&#039;menuExit()&#039;&#039;&#039;&amp;lt;br&amp;gt;closes the expecco application&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;loadProjectFromFile(fileNameString)&#039;&#039;&#039;&amp;lt;br&amp;gt;load a testSuite&lt;br /&gt;
*&#039;&#039;&#039;saveProjectToFile(fileNameString)&#039;&#039;&#039;&amp;lt;br&amp;gt;save the testSuite&lt;br /&gt;
*&#039;&#039;&#039;selectTestPlanWithName(testPlaneNameString)&#039;&#039;&#039;&amp;lt;br&amp;gt;select a testplan item by name&lt;br /&gt;
*&#039;&#039;&#039;selectTestPlanWithFunctionalId(uuid)&#039;&#039;&#039;&amp;lt;br&amp;gt;select a testplan item by uuid&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;testSuite()&#039;&#039;&#039;&amp;lt;br&amp;gt;retrieves the testSuite object (see below)&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
===== Test Suite (Project) Functions =====&lt;br /&gt;
the project as returned by the above &amp;quot;project()&amp;quot; function provides access to its elements:&lt;br /&gt;
&amp;lt;br&amp;gt;(see also [[ Expecco API#Test Suite Project Functions]])&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;authorName()&#039;&#039;&#039;&amp;lt;br&amp;gt;get the author name string&lt;br /&gt;
*&#039;&#039;&#039;authorName(aString)&#039;&#039;&#039;&amp;lt;br&amp;gt;set the author name string&lt;br /&gt;
*&#039;&#039;&#039;versionString()&#039;&#039;&#039;&amp;lt;br&amp;gt;get the version string&lt;br /&gt;
*&#039;&#039;&#039;versionString(aString)&#039;&#039;&#039;&amp;lt;br&amp;gt;set the version string&lt;br /&gt;
*&#039;&#039;&#039;projectsWorkingDirectory()&#039;&#039;&#039;&amp;lt;br&amp;gt;the directory, where attachments etc. are found&lt;br /&gt;
*&#039;&#039;&#039;ensureEnvironment()&#039;&#039;&#039;&amp;lt;br&amp;gt;an instantiated environment (concrete values). See below.&lt;br /&gt;
*&#039;&#039;&#039;elementWithName( nameString )&#039;&#039;&#039;&amp;lt;br&amp;gt;returns a matching element or null if not found&lt;br /&gt;
*&#039;&#039;&#039;elementWithId( aUUID )&#039;&#039;&#039;&amp;lt;br&amp;gt;returns that element or null if not present. (create the UUID with &amp;quot;&amp;lt;stringConstant&amp;gt;.asUUID&amp;quot; )&lt;br /&gt;
*&#039;&#039;&#039;elementWithFunctionalId( aUUID )&#039;&#039;&#039;&amp;lt;br&amp;gt;returns that element or null if not present&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
==== Environment Object ====&lt;br /&gt;
&lt;br /&gt;
Environment objects are used to store key-value bindings for expecco variables. Environments form a hierarchy, where values are searched for in an environment&#039;s parent environment, if not present. This hierarchy follows the containing compound activity chain up to the project (= test suite) environment.&lt;br /&gt;
Additional temporary environments are kept by the executor and the browser, to keep temporary values for a single execution&#039;s or a single session&#039;s lifetime.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;at(key)&#039;&#039;&#039;&amp;lt;br&amp;gt;retrieves a value, given the name of the entry. Raises and error if no variable exists by that name.&lt;br /&gt;
*&#039;&#039;&#039;at_ifAbsent(key, default)&#039;&#039;&#039;&amp;lt;br&amp;gt;like above, but returns default if no variable exists by that name (instead of raising an error).&lt;br /&gt;
*&#039;&#039;&#039;includesKey(key)&#039;&#039;&#039;&amp;lt;br&amp;gt;true if a variable by that name exists, false otherwise.&lt;br /&gt;
*&#039;&#039;&#039;at_put(key, value)&#039;&#039;&#039;&amp;lt;br&amp;gt;store value as variable named key. Raises an error, in an attempt to change a readOnly variable&lt;br /&gt;
*&#039;&#039;&#039;environmentDescription()&#039;&#039;&#039;&amp;lt;br&amp;gt;returns the environment&#039;s description. This describes types, default values and read/write attributes per entry.&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
==== EnvironmentDescription Object ====&lt;br /&gt;
&lt;br /&gt;
This is a collection of entries which describe variables of an environment. It does only hold the description, not the bindings themself; i.e. it contains the information required to instantiate an environment. EnvironmentDescriptions inherit from OrderedCollection and therefore entries are accessed via &amp;quot;at:&amp;quot; using a numeric index from 1 to the environmentDescription&#039;s size.&lt;br /&gt;
&lt;br /&gt;
Entries (as per variable) provide the following protocol:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;name()&#039;&#039;&#039;&amp;lt;br&amp;gt;the name of the variable&lt;br /&gt;
*&#039;&#039;&#039;isReadOnly()&#039;&#039;&#039;&amp;lt;br&amp;gt;true if readonly&lt;br /&gt;
*&#039;&#039;&#039;defaultValue()&#039;&#039;&#039;&amp;lt;br&amp;gt;the initial value, assigned when the environment is created&lt;br /&gt;
*&#039;&#039;&#039;datatype()&#039;&#039;&#039;&amp;lt;br&amp;gt;the type of the variable&lt;br /&gt;
*&#039;&#039;&#039;comment()&#039;&#039;&#039;&amp;lt;br&amp;gt;description&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
== Remote Controlling and Monitoring Expecco ==&lt;br /&gt;
&lt;br /&gt;
Expecco itself can be automated by various mechanisms:&lt;br /&gt;
&lt;br /&gt;
* via command line arguments (described in [[ #Command Line | &amp;quot;Command Line&amp;quot;]] above)&lt;br /&gt;
&lt;br /&gt;
* via script files (see [[ #Script File Example | &amp;quot;Script File Example&amp;quot;]] above)&lt;br /&gt;
&lt;br /&gt;
* via the telnet interface (see [[ #Telnet Scripting Example | &amp;quot;Telnet Scripting Example&amp;quot;]] above)&lt;br /&gt;
&lt;br /&gt;
* via standard RPC mechanisms, such as SOAP or REST.&lt;br /&gt;
&lt;br /&gt;
Especially the RPC mechanisms are useful to integrate expecco into the company test infrastructure.&lt;br /&gt;
Such interfaces are meant for programmatic control of an expecco slave from quality management, application life cycle and other scheduling tools.&lt;br /&gt;
Our own companion product, ExpeccoALM and third party tools, such as Polarion use these service interfaces.&lt;br /&gt;
&lt;br /&gt;
Notice, that for integration into a Jenkins infrastructure, command line arguments or scripts may be a more cost efective means to control automated expecco testruns.&lt;br /&gt;
&lt;br /&gt;
=== Expecco as a Slave Node in a Test Lab ===&lt;br /&gt;
&lt;br /&gt;
The service interfaces are useful to control unmonitored slave machines in the network, among which expecco test execution jobs are scheduled by another program. ExpeccoALM and other quality management tools use these to initiate test runs in a test server farm. &lt;br /&gt;
For this, the basic operations &amp;quot;download of a suite&amp;quot;, &amp;quot;execute a suite&amp;quot; and &amp;quot;requesting execution results&amp;quot; are available as service calls.&lt;br /&gt;
&lt;br /&gt;
Both SOAP and REST services are available, if expecco is started with the &amp;quot;&#039;&#039;--server&#039;&#039;&amp;quot; argument. &lt;br /&gt;
An optional &amp;quot;&#039;&#039;--port&#039;&#039;&amp;quot; argument allows for the HTTP port to be changed from the default (9090) on which expecco is listening.&lt;br /&gt;
&lt;br /&gt;
For debugging and testing, the service can be also be started from the interactive UI, via expecco&#039;s main menu (in the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Web-Services&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Start / Stop&#039;&#039;&amp;quot; menu items).&lt;br /&gt;
&lt;br /&gt;
These services use HTTP requests as transport layer.&lt;br /&gt;
&lt;br /&gt;
==== Expecco SOAP Service Interface ====&lt;br /&gt;
&lt;br /&gt;
This accepts SOAP requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
A partial WSDL spec can be aqcuired from the running service via &amp;quot;&amp;lt;code&amp;gt;host:9090/wsdl/ExpeccoSOAPService.wsdl&amp;lt;/code&amp;gt;&amp;quot; (partial, because it is currently not does not contain complete type information).&lt;br /&gt;
&lt;br /&gt;
The service entries are:&lt;br /&gt;
&lt;br /&gt;
===== Loading and Executing a Suite =====&lt;br /&gt;
&lt;br /&gt;
The execute request is the main service entry. It passes the suite and also optional parameters.&lt;br /&gt;
&lt;br /&gt;
The test suite can be bade available to expecco either by passing it with the request (as base64 CDATA), or by passing a URL from which expecco can fetch the suite iteslf.&lt;br /&gt;
&lt;br /&gt;
The execute call contains the following fields:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;message name=&amp;quot;expecco_executeProject_v5_Request&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;id&amp;quot; type=&amp;quot;UUID&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;testSuiteId&amp;quot; type=&amp;quot;UUID&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;dataSource&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;dataSourceUri&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;environment&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;testplans&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;resources&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;optionalParameters&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and responds with:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_executeProject_v5_Response&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;result&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This call starts execution, and immediately returns a response, which consists of an identifier.&lt;br /&gt;
This identifier can later be used to ask expecco about the execution status. As a test may take a long time to finish,&lt;br /&gt;
it is useful to poll via status requests from time to time, to see if the execution has finished and to get progress status. &lt;br /&gt;
&lt;br /&gt;
The parameters are:&lt;br /&gt;
&lt;br /&gt;
* id - mandatory; a ticket ID; this should be a UUID-string, to avoid possible conflicts&lt;br /&gt;
* testSuiteId - mandatory; the UUID of the suite to execute. See below for details about download optimizations&lt;br /&gt;
* dataSource - optional; if present, this should contain the whole ets-file&#039;s contents as a Base64 encoded CDATA string&lt;br /&gt;
* dataSourceUri - optional; if present, this should be the URI from which expecco shall fetch the suite. See below for details&lt;br /&gt;
* environment - optional; top-level environment variable values. This can be used to provide alternative initial values for variables in the top level variable environment (the &amp;quot;Project-Environment&amp;quot;)&lt;br /&gt;
* testplans - optional; a list of UUIDs of testplans to execute. If not present, all top-level testplans are executed&lt;br /&gt;
* resources - optional; a list of resources to be used by the test (see expeccoALM resource description)&lt;br /&gt;
* optionalParameters - optional; an array containing additional parameters as key-value elements.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;optionalParameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
A list of key-value elements (i.e. must have an even number of elements, of the form [k1 v1 k2 v2 ... kN vN] ).&lt;br /&gt;
Each key is an xsd:string, each value&#039;s type depends on the key, but all of them are currently also strings.&lt;br /&gt;
The list of supported parameters is open for future extension of the interface. Currently, the following are recognized:&lt;br /&gt;
* [ &amp;quot;generateLog&amp;quot; xsd:boolean ] - the boolean arg must be &amp;quot;true&amp;quot; or &amp;quot;false&amp;quot;&lt;br /&gt;
* [ &amp;quot;generatePDFReport&amp;quot; xsd:boolean ] - boolean arg, must be either &amp;quot;true&amp;quot; or &amp;quot;false&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;testplans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
this allows selective execution of individual test plans and also individual test cases (from within a test plan) from the suite.&lt;br /&gt;
If not present, all test plans as present in the suite are executed.&lt;br /&gt;
If present, the testPlans parameter must be an xsdarray of pairs (i.e. each array element is again an xsdarray with 2 elements).&lt;br /&gt;
Each top level element describes one testplan to be executed. The first element of each being the testplan&#039;s UUID, the second another array, listing the testcases by UUID.&lt;br /&gt;
For example, if the suite contains three testplans, named &amp;quot;a&amp;quot;, &amp;quot;b&amp;quot; and &amp;quot;c&amp;quot;, with plan &amp;quot;a&amp;quot; having id-a and &amp;quot;b&amp;quot; having id-b as UUID.&lt;br /&gt;
A testPlans argument might look like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ &lt;br /&gt;
    [ id-a ]&lt;br /&gt;
    [ id-b [  id-tcb-1 id-tcb-2 ] ]&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and specify that testplan &amp;quot;a&amp;quot; should be executed fully (i.e. all test cases), and only the testcases tcb-1 and tcb-2 are to be executed from testplan &amp;quot;b&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;environment&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
-- to be described --&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;resources&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
-- to be described --&lt;br /&gt;
&lt;br /&gt;
The reply consists of the ticket-id, which has to be passed in further status requests.&lt;br /&gt;
&lt;br /&gt;
===== Loading Only =====&lt;br /&gt;
&lt;br /&gt;
It is also possible, to download a suite without execution, via the &amp;quot;download&amp;quot; request:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_downloadProject_Request&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;testSuiteId&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;dataSourceBase64&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;dataSourceUri&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;optionalParameters&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_downloadProject_Response&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;result&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Download Optimization =====&lt;br /&gt;
&lt;br /&gt;
Expecco remembers downloaded suites in a temporary folder, to avoid repeated transfers of possibly huge test suites.&lt;br /&gt;
If a URI is passed (but no base64 encoded data), expecco checks if the suite is already present on the test host,&lt;br /&gt;
and will not fetch it again, if already present. If not present, expecco will fetch the suite via a HTTP request from the URI.&lt;br /&gt;
&lt;br /&gt;
If no URI is passed (i.e. both data and dataURI fields are empty), expecco will either respond with an error reply, if not present,&lt;br /&gt;
or with an ok response, if already present.&lt;br /&gt;
&lt;br /&gt;
Thus, if you have to pass the suite as data (i.e. there is no file service available, from which expecco could fetch the suite),&lt;br /&gt;
it is recommended to first check if a suite is already present (by sending a download request without data) and check for an error return. If no error is reported, the suite is already there and no further download action is required. If there is an error response,&lt;br /&gt;
the client should send the suite with another download request, this time with a non-empty data field.&lt;br /&gt;
&lt;br /&gt;
After any successfull download (either via download, or via execute request), the suite can be executed by an execute request without data.&lt;br /&gt;
&lt;br /&gt;
===== Execution by Suite File Name =====&lt;br /&gt;
&lt;br /&gt;
An alternative to downloading suites is to execute suites which are already present on the execution slave. For this, expecco should be started with a &amp;quot;--suiteDirectory&amp;quot; option, which specifies the folder name, where common test suites are located.&lt;br /&gt;
The executeTestSuiteFile-request is used to execute one of the suites in that directory.&lt;br /&gt;
&lt;br /&gt;
The call contains the following fields:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;message name=&amp;quot;expecco_executeTestSuiteFile_Request&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;id&amp;quot; type=&amp;quot;UUID&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;fileName&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;environment&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;testplans&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;resources&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;optionalParameters&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If successful, a ticketID is returned (same as above execute-request).&lt;br /&gt;
&lt;br /&gt;
===== Status Request =====&lt;br /&gt;
&lt;br /&gt;
This query returns status information about an ongoing execution. Its single parameter field must contain a ticketId as described in the above execute request.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_getExecutionInfo_Request&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;ticketId&amp;quot; type=&amp;quot;UUID&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_getExecutionInfo_Response&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;result&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A client may have to send multiple &amp;quot;getExecutionInfo&amp;quot; requests, until a &amp;quot;finished&amp;quot; status is returned.&lt;br /&gt;
Expecco will keep the generated reports and log files in a temporary folder, until fetched via a getResult request.&lt;br /&gt;
This allows for both expecco and the client to be turned off and restarted, without loosing any status information.&lt;br /&gt;
&lt;br /&gt;
===== Result Request =====&lt;br /&gt;
&lt;br /&gt;
Once finished, reports and log files should be fetched from expecco.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_getResult_Request&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;ticketId&amp;quot; type=&amp;quot;UUID&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;removeResultBoolean&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_getResult_Response&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;result&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the &amp;quot;getResult&amp;quot; request, corrsponding files are automatically removed from the temporary folder by expecco.&lt;br /&gt;
&lt;br /&gt;
===== Terminate/Abort Request =====&lt;br /&gt;
&lt;br /&gt;
Use this, to abort and terminate an ongoing test execution.&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_killExecution_Request&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;ticketId&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_killExecution_Response&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;result&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Remove Ticket Request =====&lt;br /&gt;
&lt;br /&gt;
Use this, to tell expecco, that no further interest exists in a ticket.&lt;br /&gt;
If the test is still running, it is aborted. If it is about to be started, it will not be.&lt;br /&gt;
Any temporary files which might have already been created due to this execution are removed.&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_killExecution_Request&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;ticketId&amp;quot; type=&amp;quot;UUID&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_killExecution_Response&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;result&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Ping =====&lt;br /&gt;
&lt;br /&gt;
This request answers with information about the host, architecture, disk usage and other status about the machine on which expecco is running. Also, a list of available plugins on the target machine is returned. Of course, it is also useful to see if the expecco service is ready and the communication works as expected.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;ping_Request&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;ping_Response&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;result&amp;quot; type=&amp;quot;xsd:array&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Cleanup of Old Result/Log Files =====&lt;br /&gt;
&lt;br /&gt;
This request can be used to remove all temporary files, especially leftover report- and log files. &lt;br /&gt;
This should be used, if a client has crashed, and lost track of &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_cleanupTempFiles_Request&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_cleanupTempFiles_Response&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;result&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Example Wire Protocol Trace =====&lt;br /&gt;
&lt;br /&gt;
Client asks expecco to execute a suite.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;-- HTTP Request to Expecco --&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
POST / HTTP/1.1 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
User-Agent: Smalltalk/X 6.2.5.0 &lt;br /&gt;
Host: 127.0.0.1:9090 &lt;br /&gt;
Content-Length: 8925 &lt;br /&gt;
Content-Type: text/xml; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
SOAPAction: &amp;quot;&amp;quot; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;env:Envelope &lt;br /&gt;
   xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
   xmlns:env=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; &lt;br /&gt;
   xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
   xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
   env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;env:Body env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;m:expecco_executeProject_v5 xmlns:m=&amp;quot;http://www.mars.dti.ne.jp/~umejava/smalltalk/soapOpera/rpc/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;optionalParameters xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
        xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
        xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
        enc:arrayType=&amp;quot;xsd:anyType[6]&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;generateReport&amp;lt;/item&amp;gt;&lt;br /&gt;
    &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;true&amp;lt;/item&amp;gt;&lt;br /&gt;
    &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;generateLog&amp;lt;/item&amp;gt;&lt;br /&gt;
    &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;true&amp;lt;/item&amp;gt;&lt;br /&gt;
    &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;runAllTestcasesIfEmptyTestcaseList&amp;lt;/item&amp;gt;&lt;br /&gt;
    &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;true&amp;lt;/item&amp;gt;&lt;br /&gt;
   &amp;lt;/optionalParameters&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;testSuiteId xsi:type=&amp;quot;UUID&amp;quot;&amp;gt;228168f0-747b-11df-a41b-00ff7b08316c&amp;lt;/testSuiteId&amp;gt;&lt;br /&gt;
   &amp;lt;testplans &lt;br /&gt;
        xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
        xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
        xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
        enc:arrayType=&amp;quot;xsd:arrayType[1]&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;item &lt;br /&gt;
            xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
            xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
            xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
            env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
            enc:arrayType=&amp;quot;xsd:anyType[2]&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;item &lt;br /&gt;
                env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
                xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;f71c4700-7477-11df-a41b-00ff7b08316c&lt;br /&gt;
            &amp;lt;/item&amp;gt;&lt;br /&gt;
            &amp;lt;item &lt;br /&gt;
                xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
                xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
                xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
                env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
                enc:arrayType=&amp;quot;xsd:anyType[0]&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/item&amp;gt;&lt;br /&gt;
   &amp;lt;/testplans&amp;gt;&lt;br /&gt;
   &amp;lt;id xsi:type=&amp;quot;UUID&amp;quot;&amp;gt;200d93e1-a258-11e4-b9eb-c48508c91d3c&amp;lt;/id&amp;gt;&lt;br /&gt;
   &amp;lt;dataSource xsi:null=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;dataSourceUri xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;http://127.0.0.1:8662/expeccoALM/tentativeObjects/a84b2d96-d133-47db-9fc2-17208b490bfe.a&lt;br /&gt;
   &amp;lt;/dataSourceUri&amp;gt;&lt;br /&gt;
   &amp;lt;environment &lt;br /&gt;
        xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
        xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
        xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
        enc:arrayType=&amp;quot;xsd:anyType[22]&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_Host__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;sr-laptop&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_LoginUserName__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;admin&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_FullUserName__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;.&amp;amp;#32;&amp;amp;#42;admin&amp;amp;#42;&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_TestHost__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;127.0.0.1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_Definition_UUID__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;e5c9cb30-a253-11e4-9f24-c48508c91d3c&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_Definition_ID__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;d4&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_Definition_Name__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Test&amp;amp;#32;For&amp;amp;#32;Resources&amp;amp;#32;and&amp;amp;#32;Skills&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_Definition_Summary__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_Run_UUID__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;200d93e1-a258-11e4-b9eb-c48508c91d3c&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_Run_ID__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;r14&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_TestSuite_VersionNumber__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;1&amp;lt;/item&amp;gt;&lt;br /&gt;
   &amp;lt;/environment&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;resources &lt;br /&gt;
       xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
       xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
       xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
       enc:arrayType=&amp;quot;xsd:anyType[28]&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Resource&amp;amp;#32;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:integer&amp;quot;&amp;gt;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Resource&amp;amp;#32;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Skill1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;attribute1-1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Integer&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;0&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Resource&amp;amp;#32;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:integer&amp;quot;&amp;gt;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Resource&amp;amp;#32;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Skill2&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;attribute2-1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Integer&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;0&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Resource&amp;amp;#32;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:integer&amp;quot;&amp;gt;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Resource&amp;amp;#32;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Skill2&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;attribute2-2&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Float&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;0.0&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Resource&amp;amp;#32;2&amp;amp;#32;eeee&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:integer&amp;quot;&amp;gt;2&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Resource&amp;amp;#32;2&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Skill1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;attribute1-1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Integer&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;0&amp;lt;/item&amp;gt;&lt;br /&gt;
   &amp;lt;/resources&amp;gt;&lt;br /&gt;
  &amp;lt;/m:expecco_executeProject_v5&amp;gt;&lt;br /&gt;
 &amp;lt;/env:Body&amp;gt;&lt;br /&gt;
&amp;lt;/env:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;gt;-- response from Expecco&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HTTP/1.1 200 OK &lt;br /&gt;
Content-Type: text/xml &lt;br /&gt;
Content-Length: 649 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;env:Envelope xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:env=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;env:Body env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;m:expecco_executeProject_v5Response xmlns:m=&amp;quot;http://www.mars.dti.ne.jp/~umejava/smalltalk/soapOpera/rpc/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;result xsi:type=&amp;quot;UUID&amp;quot;&amp;gt;200d93e1-a258-11e4-b9eb-c48508c91d3c&amp;lt;/result&amp;gt;&lt;br /&gt;
  &amp;lt;/m:expecco_executeProject_v5Response&amp;gt;&lt;br /&gt;
 &amp;lt;/env:Body&amp;gt;&lt;br /&gt;
&amp;lt;/env:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Client asks expecco for execution state&lt;br /&gt;
&lt;br /&gt;
&amp;lt;-- HTTP Request to expecco&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
POST / HTTP/1.1 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
User-Agent: Smalltalk/X 6.2.5.0 &lt;br /&gt;
Host: 127.0.0.1:9090 &lt;br /&gt;
Content-Length: 635 &lt;br /&gt;
Content-Type: text/xml; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
SOAPAction: &amp;quot;&amp;quot; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;env:Envelope xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:env=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;env:Body env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;m:expecco_getExecutionInfo xmlns:m=&amp;quot;http://www.mars.dti.ne.jp/~umejava/smalltalk/soapOpera/rpc/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;ticketId xsi:type=&amp;quot;UUID&amp;quot;&amp;gt;200d93e1-a258-11e4-b9eb-c48508c91d3c&amp;lt;/ticketId&amp;gt;&lt;br /&gt;
  &amp;lt;/m:expecco_getExecutionInfo&amp;gt;&lt;br /&gt;
 &amp;lt;/env:Body&amp;gt;&lt;br /&gt;
&amp;lt;/env:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;gt;-- response from Expecco (while still executing)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HTTP/1.1 200 OK &lt;br /&gt;
Content-Type: text/xml &lt;br /&gt;
Content-Length: 2579 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;env:Envelope xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:env=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;env:Body env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;m:expecco_getExecutionInfoResponse xmlns:m=&amp;quot;http://www.mars.dti.ne.jp/~umejava/smalltalk/soapOpera/rpc/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;result&amp;gt;&lt;br /&gt;
    &amp;lt;executionResultState xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;executingTestSuite&amp;lt;/executionResultState&amp;gt;&lt;br /&gt;
    &amp;lt;currentActivity xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;executing&amp;amp;#32;Neuer&amp;amp;#32;Testplan&amp;lt;/currentActivity&amp;gt;&lt;br /&gt;
    &amp;lt;pdfReportFileURL xsi:null=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;summaryResult&amp;gt;&lt;br /&gt;
     &amp;lt;summaryTestplanExecutionResults xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; enc:arrayType=&amp;quot;xsd:anyType[1]&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;summaryTestPlanItems xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; enc:arrayType=&amp;quot;xsd:anyType[1]&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;detailString xsi:null=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
         &amp;lt;resultActivityState xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Successful&amp;lt;/resultActivityState&amp;gt;&lt;br /&gt;
         &amp;lt;testplanItemName xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Neue&amp;amp;#32;Aktion&amp;lt;/testplanItemName&amp;gt;&lt;br /&gt;
         &amp;lt;expeccoClass xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Expecco::SummaryTestPlanItemExecutionResult&amp;lt;/expeccoClass&amp;gt;&lt;br /&gt;
        &amp;lt;/item&amp;gt;&lt;br /&gt;
       &amp;lt;/summaryTestPlanItems&amp;gt;&lt;br /&gt;
       &amp;lt;testPlanId xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;22623ef0-757d-11df-a41b-00ff7b08316c&amp;lt;/testPlanId&amp;gt;&lt;br /&gt;
       &amp;lt;expeccoClass xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Expecco::SummaryTestPlanExecutionResult&amp;lt;/expeccoClass&amp;gt;&lt;br /&gt;
       &amp;lt;testPlanName xsi:null=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;/summaryTestplanExecutionResults&amp;gt;&lt;br /&gt;
     &amp;lt;testSuiteName xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Test&amp;amp;#32;For&amp;amp;#32;Resources&amp;amp;#32;and&amp;amp;#32;Skills&amp;lt;/testSuiteName&amp;gt;&lt;br /&gt;
     &amp;lt;testSuiteId xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;228168f0-747b-11df-a41b-00ff7b08316c&amp;lt;/testSuiteId&amp;gt;&lt;br /&gt;
     &amp;lt;expeccoClass xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Expecco::SummaryTestSuiteExecutionResult&amp;lt;/expeccoClass&amp;gt;&lt;br /&gt;
    &amp;lt;/summaryResult&amp;gt;&lt;br /&gt;
    &amp;lt;logFileURL xsi:null=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;expeccoClass xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Expecco::SoapExecutionResult::SummaryEncoding&amp;lt;/expeccoClass&amp;gt;&lt;br /&gt;
    &amp;lt;executionProgress xsi:type=&amp;quot;xsd:integer&amp;quot;&amp;gt;0&amp;lt;/executionProgress&amp;gt;&lt;br /&gt;
   &amp;lt;/result&amp;gt;&lt;br /&gt;
  &amp;lt;/m:expecco_getExecutionInfoResponse&amp;gt;&lt;br /&gt;
 &amp;lt;/env:Body&amp;gt;&lt;br /&gt;
&amp;lt;/env:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;gt;-- response from Expecco (after execution)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
HTTP/1.1 200 OK &lt;br /&gt;
Content-Type: text/xml &lt;br /&gt;
Content-Length: 2781 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
.....................&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;env:Envelope xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:env=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;env:Body env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;m:expecco_getExecutionInfoResponse xmlns:m=&amp;quot;http://www.mars.dti.ne.jp/~umejava/smalltalk/soapOpera/rpc/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;result&amp;gt;&lt;br /&gt;
    &amp;lt;executionResultState xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;finished&amp;lt;/executionResultState&amp;gt;&lt;br /&gt;
    &amp;lt;currentActivity xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;executing&amp;amp;#32;Neuer&amp;amp;#32;Testplan&amp;lt;/currentActivity&amp;gt;&lt;br /&gt;
    &amp;lt;pdfReportFileURL xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;http://127.0.0.1:9090/expeccoResultFiles/ad8011e1-a25c-11e4-b9eb-c48508c91d3c.pdf&amp;lt;/pdfReportFileURL&amp;gt;&lt;br /&gt;
    &amp;lt;summaryResult&amp;gt;&lt;br /&gt;
     &amp;lt;summaryTestplanExecutionResults xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; enc:arrayType=&amp;quot;xsd:anyType[1]&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;summaryTestPlanItems xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; enc:arrayType=&amp;quot;xsd:anyType[1]&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;detailString xsi:null=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
         &amp;lt;resultActivityState xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Successful&amp;lt;/resultActivityState&amp;gt;&lt;br /&gt;
         &amp;lt;testplanItemName xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Neue&amp;amp;#32;Aktion&amp;lt;/testplanItemName&amp;gt;&lt;br /&gt;
         &amp;lt;expeccoClass xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Expecco::SummaryTestPlanItemExecutionResult&amp;lt;/expeccoClass&amp;gt;&lt;br /&gt;
        &amp;lt;/item&amp;gt;&lt;br /&gt;
       &amp;lt;/summaryTestPlanItems&amp;gt;&lt;br /&gt;
       &amp;lt;testPlanId xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;22623ef0-757d-11df-a41b-00ff7b08316c&amp;lt;/testPlanId&amp;gt;&lt;br /&gt;
       &amp;lt;expeccoClass xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Expecco::SummaryTestPlanExecutionResult&amp;lt;/expeccoClass&amp;gt;&lt;br /&gt;
       &amp;lt;testPlanName xsi:null=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;/summaryTestplanExecutionResults&amp;gt;&lt;br /&gt;
     &amp;lt;testSuiteName xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Test&amp;amp;#32;For&amp;amp;#32;Resources&amp;amp;#32;and&amp;amp;#32;Skills&amp;lt;/testSuiteName&amp;gt;&lt;br /&gt;
     &amp;lt;testSuiteId xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;228168f0-747b-11df-a41b-00ff7b08316c&amp;lt;/testSuiteId&amp;gt;&lt;br /&gt;
     &amp;lt;expeccoClass xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Expecco::SummaryTestSuiteExecutionResult&amp;lt;/expeccoClass&amp;gt;&lt;br /&gt;
    &amp;lt;/summaryResult&amp;gt;&lt;br /&gt;
    &amp;lt;logFileURL xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;http://127.0.0.1:9090/expeccoResultFiles/ad8011e1-a25c-11e4-b9eb-c48508c91d3c.elf&amp;lt;/logFileURL&amp;gt;&lt;br /&gt;
    &amp;lt;expeccoClass xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Expecco::SoapExecutionResult::SummaryEncoding&amp;lt;/expeccoClass&amp;gt;&lt;br /&gt;
    &amp;lt;executionProgress xsi:type=&amp;quot;xsd:integer&amp;quot;&amp;gt;100&amp;lt;/executionProgress&amp;gt;&lt;br /&gt;
   &amp;lt;/result&amp;gt;&lt;br /&gt;
  &amp;lt;/m:expecco_getExecutionInfoResponse&amp;gt;&lt;br /&gt;
 &amp;lt;/env:Body&amp;gt;&lt;br /&gt;
&amp;lt;/env:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Client fetches the report and log files from expecco:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;-- HTTP Request to expecco (fetch logfile)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
GET /expeccoResultFiles/ad8011e1-a25c-11e4-b9eb-c48508c91d3c.elf HTTP/1.1 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
User-Agent: Mozilla/3.0N &lt;br /&gt;
Host: 127.0.0.1:9090 &lt;br /&gt;
Accept-Encoding: chunked &lt;br /&gt;
Accept-Language: en,* &lt;br /&gt;
Accept-Charset: iso-8859-1,*,utf-8 &lt;br /&gt;
Accept: */* &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;gt;-- HTTP response from expecco &lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
HTTP/1.1 200 OK &lt;br /&gt;
Content-Type: application/x-expecco-logfile &lt;br /&gt;
Content-Length: 12690 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
Cache-Control: max-age=86400 &lt;br /&gt;
Last-modified: Thu, 22 Jan 2015 17:32:50 GMT &lt;br /&gt;
&lt;br /&gt;
... a lot of elf-file data ...&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;-- HTTP Request to expecco (fetch pdf report)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
GET /expeccoResultFiles/ad8011e1-a25c-11e4-b9eb-c48508c91d3c.pdf HTTP/1.1 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
User-Agent: Mozilla/3.0N &lt;br /&gt;
Host: 127.0.0.1:9090 &lt;br /&gt;
Accept-Encoding: chunked &lt;br /&gt;
Accept-Language: en,* &lt;br /&gt;
Accept-Charset: iso-8859-1,*,utf-8 &lt;br /&gt;
Accept: */* &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;gt;-- HTTP response from expecco&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
HTTP/1.1 200 OK &lt;br /&gt;
Content-Type: application/pdf &lt;br /&gt;
Content-Length: 29768 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
Cache-Control: max-age=86400 &lt;br /&gt;
Last-modified: Thu, 22 Jan 2015 17:32:51 GMT &lt;br /&gt;
&lt;br /&gt;
... a lot of pdf data ...&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Client releases ticket (so expecco can remove the temporary data)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;-- HTTP Request to expecco&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
POST / HTTP/1.1 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
User-Agent: Smalltalk/X 6.2.5.0 &lt;br /&gt;
Host: 127.0.0.1:9090 &lt;br /&gt;
Content-Length: 627 &lt;br /&gt;
Content-Type: text/xml; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
SOAPAction: &amp;quot;&amp;quot; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;env:Envelope xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:env=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;env:Body env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;m:expecco_removeTicket xmlns:m=&amp;quot;http://www.mars.dti.ne.jp/~umejava/smalltalk/soapOpera/rpc/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;ticketId xsi:type=&amp;quot;UUID&amp;quot;&amp;gt;ad8011e1-a25c-11e4-b9eb-c48508c91d3c&amp;lt;/ticketId&amp;gt;&lt;br /&gt;
  &amp;lt;/m:expecco_removeTicket&amp;gt;&lt;br /&gt;
 &amp;lt;/env:Body&amp;gt;&lt;br /&gt;
&amp;lt;/env:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;gt;-- HTTP response from expecco&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
HTTP/1.1 200 OK &lt;br /&gt;
Content-Type: text/xml &lt;br /&gt;
Content-Length: 614 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
.....................&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;env:Envelope xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:env=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;env:Body env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;m:expecco_removeTicketResponse xmlns:m=&amp;quot;http://www.mars.dti.ne.jp/~umejava/smalltalk/soapOpera/rpc/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;result xsi:type=&amp;quot;xsd:boolean&amp;quot;&amp;gt;true&amp;lt;/result&amp;gt;&lt;br /&gt;
  &amp;lt;/m:expecco_removeTicketResponse&amp;gt;&lt;br /&gt;
 &amp;lt;/env:Body&amp;gt;&lt;br /&gt;
&amp;lt;/env:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
===== Example Session Using &amp;quot;&amp;lt;code&amp;gt;wget&amp;lt;/code&amp;gt;&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
Using &amp;quot;wget&amp;quot; with SOAP is possible, but a little complicated, because correct SOAP requests have to be constructed, and ticket-numbers be extracted from responses. It is much easier with the REST service.&lt;br /&gt;
&lt;br /&gt;
See below for a description.&lt;br /&gt;
&lt;br /&gt;
==== Expecco REST Service Interface ====&lt;br /&gt;
&lt;br /&gt;
This accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The REST service supports the same set of operations as the SOAP service described above, but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are all HTTP-GET requests, possibly with attached JSON encoded argument data. &lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
See details [[ Starting_expecco_via_Command_Line/rest | &amp;quot;expecco rest service interface&amp;quot;]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== ProtocolInfo Request &amp;quot;/expeccoService/rest/protocolInfo&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;; currently always &amp;quot;GET&amp;quot;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        &amp;quot;URLPath&amp;quot; : &amp;quot;expeccoService/rest&amp;quot; ,&lt;br /&gt;
        &amp;quot;Service&amp;quot; : &amp;quot;ExpeccoRestService&amp;quot;, &lt;br /&gt;
        &amp;quot;Version&amp;quot; : 1 ,&lt;br /&gt;
        &amp;quot;Protocol&amp;quot; : &lt;br /&gt;
            [&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;execute&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;start execution; return ticketID.&amp;quot; ,&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;download&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;start execution; return ticketID.&amp;quot; ,&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;executeTestSuiteFile&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;execute suite file; return ticketID.&amp;quot; ,&lt;br /&gt;
                },    &lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;getExecutionInfo&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(ID:String)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot; ,&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;killExecution&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(ID:String)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;removeTicket&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(ID:String)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                { &lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;cleanupTempFiles&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;ping&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;test reachability and return some status info.&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;protocolInfo&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot;, &lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
===== Execute Request &amp;quot;/expeccoService/rest/execute&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface above, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
===== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
===== Execute File Request &amp;quot;/expeccoService/rest/executeTestSuiteFile&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteFileName - name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
The file must be present/reachable by the expecco slave.&lt;br /&gt;
It may be either an absolute pathname (typically on a shared network drive) or&lt;br /&gt;
a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument.&lt;br /&gt;
&lt;br /&gt;
===== GetExecutionInfo Request &amp;quot;/expeccoService/rest/getExecutionInfo&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
===== KillExecution Request &amp;quot;/expeccoService/rest/killExecution&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
===== RemoveTicket Request &amp;quot;/expeccoService/rest/removeTicket&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
===== Cleanup Request &amp;quot;/expeccoService/rest/cleanupTempFiles&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
===== Ping Request &amp;quot;/expeccoService/rest/ping&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
===== Example Wire Protocol Trace =====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Example Session Using &amp;quot;&amp;lt;code&amp;gt;wget&amp;lt;/code&amp;gt;&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
Using &amp;quot;wget&amp;quot; with SOAP is possible, but a little complicated, because correct SOAP requests have to be constructed, and ticket-numbers be extracted from responses. It is much easier with the REST service.&lt;br /&gt;
&lt;br /&gt;
Assuming, you have a folder containing 3 suites &amp;quot;suiteA.ets&amp;quot;, &amp;quot;suiteB.ets&amp;quot; and &amp;quot;suiteC.ets&amp;quot;, and you want to send them to a running expecco slave via REST, here is how to do it:&lt;br /&gt;
&lt;br /&gt;
1) to check if the expecco slave is up and running, send it a&lt;br /&gt;
&lt;br /&gt;
=== Expecco Remote Control REST Service Interface ===&lt;br /&gt;
&lt;br /&gt;
A secondary REST service is available to interact with a running test.&lt;br /&gt;
This service is used by the &amp;quot;expecco remote control App&amp;quot;, which is available for Android devices (tablets and cell phones).&lt;br /&gt;
 &lt;br /&gt;
This accepts REST requests, via the URL &amp;quot;/remote&amp;quot;. I.e. the default URL is &amp;quot;host:9090/remote&amp;quot;.&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &amp;quot;host:9090/remote/protocolInfo&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
When this service is active, the standard Dialog requests (input boxes, with &amp;quot;OK&amp;quot;/&amp;quot;Cancel&amp;quot; buttons) will also be presented on the remote controlling app, and can be answered either on the PC-screen OR on a remote android device.&lt;br /&gt;
An obvious application of this is when the test system (hardware) needs manual interaction and you have to leave the workplace for this. Here, it is very convenient to be able to answer questions like &amp;quot;Insert Cable X and press OK to proceed&amp;quot; from a mobile device. Avoiding the need to walk back to the workplace to click on the &amp;quot;OK&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
=== Expecco Short Status Information Service ===&lt;br /&gt;
&lt;br /&gt;
This is a very simple HTTP service, which delivers a single page with a status overview.&lt;br /&gt;
This service is started when the &amp;quot;&amp;lt;code&amp;gt;--infoService&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;--server&amp;lt;/code&amp;gt;&amp;quot; command line arguments are present.&lt;br /&gt;
 &lt;br /&gt;
This accepts HTTP requests, via the URL &amp;quot;/info&amp;quot;. &lt;br /&gt;
I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/info&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The main use of this service is to quickly check the status of a testslave from a remote webbrowser,&lt;br /&gt;
without a need for a more complicated SOAP or REST service client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Back to [[Online_Documentation#Topic:_Execution | Online Documentation]]&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/en&amp;diff=8475</id>
		<title>Starting expecco via Command Line/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/en&amp;diff=8475"/>
		<updated>2017-04-02T12:48:18Z</updated>

		<summary type="html">&lt;p&gt;Ab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
expecco can be started manually via the command line, by batch or shell scripts or automatically via the crontab (Unix) or scheduled tasks / services (Windows) mechanism of the operating system. Thus, you can have tests to execute unattended and without GUI &amp;quot;overnight&amp;quot;. This is also the method to integrate expecco with other quality tools, such as Jenkins, HP-Quality Center, Polarion, expeccoALM etc.&lt;br /&gt;
 &lt;br /&gt;
Command line options allow for test suites to be loaded, executed and result files being generated without requiring user interaction.&lt;br /&gt;
&lt;br /&gt;
In addition to the above, expecco can also be started in a slave mode as a service, to wait for incoming test-run request from a QM system, such as expeccoALM or Polarion. Expecco can respond to request via SOAP or REST calls to load, execute and report test suites. The expeccoNET automation environment assumes that expecco is already running on each slave host, and each has been started with a  &amp;quot;--server&amp;quot; command line argument. It uses HTTP+SOAP/REST to communicate with those expecco slaves by default.&lt;br /&gt;
&lt;br /&gt;
In this later &amp;quot;slave mode&amp;quot;, expecco is installed to run as a daemon process (under Unix) or as a service (under Windows), and will be automatically started by the operating system, when it boots. The details of how it is installed vary between operating systems: under Unix, it needs to be registered in the init-tab-folder, under Windows it needs to be installed as a Windows service.&lt;br /&gt;
&lt;br /&gt;
== Command Line ==&lt;br /&gt;
&lt;br /&gt;
If expecco is started without command line arguments, it will open up showing the initial welcome screen. The same behavior as if started via the desktop.&lt;br /&gt;
&lt;br /&gt;
With a single file argument, expecco will read a test suite from the given file and open an editor window on it (but will not execute it). &lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco &amp;lt;testsuite filename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is the same behavior as if a test suite file (.ets) is dropped onto the expecco icon via the desktop.&lt;br /&gt;
&lt;br /&gt;
The simplest command line to execute a test suite is:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --execute &amp;lt;testsuite filename&amp;gt; ...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;testsuite filename&amp;gt; is the test suite&#039;s filename, as saved from within the expecco GUI application. This should be a saved &amp;quot;.ets&amp;quot; testSuite file. If more than one test suite filename is given, each is processed in sequence. All top-level test plans as found in the test suite(s) are executed (see below for more options).&lt;br /&gt;
&lt;br /&gt;
:By default, the overall execution outcome is returned by the command&#039;s return value (exit code), which is&lt;br /&gt;
::0        - all PASSED&lt;br /&gt;
::non-zero - any ERROR, FAILURES or INCONCLUSIVE items.&lt;br /&gt;
&lt;br /&gt;
The return value is useful if expecco is started via a makefile, or from jenkins for example. If the caller needs a different exit code, use one of the exitCodeOnXXX options as described below. This is useful to avoid a &#039;&#039;make&#039;&#039; or &#039;&#039;jenkins&#039;&#039; process from stopping.&lt;br /&gt;
&lt;br /&gt;
To get a list of available options, type:&lt;br /&gt;
 &#039;&#039;&#039;expecco --help&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Command Line Options ===&lt;br /&gt;
Command line options are handled at two places: the runtime system (Smalltalk/X VM) and the expecco application itself.&lt;br /&gt;
When expecco is started, the VM is first to look for command line arguments and processes any of the VM options, until&lt;br /&gt;
a non-VM option is encountered. It passes the remaining options to expecco&#039;s main entry.&lt;br /&gt;
Thus, any option which is given after the first non-VM option will not be handled by the VM, but by expecco. Therefore, no VM options should be placed after the first non-VM option. VM options are marked as &amp;quot;&#039;&#039;VM option&#039;&#039;&amp;quot; in the list below.&lt;br /&gt;
&lt;br /&gt;
Also, some options are specific to the operating system, on which expecco is executed. These are marked as &amp;quot;&#039;&#039;Windows&#039;&#039;&amp;quot;, &amp;quot;&#039;&#039;Linux&#039;&#039;&amp;quot; etc.&lt;br /&gt;
&lt;br /&gt;
=== Recommended Command Line Options ===&lt;br /&gt;
&lt;br /&gt;
To start expecco on an existing test suite, use:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco &amp;lt;testsuite filename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
this is also the way expecco is started, when a test suite file is double-clicked on the Linux or Windows desktop, or when a test-suite document is dropped onto the expecco icon.&lt;br /&gt;
The above opens the expecco GUI and loads the given test suite initially. However, it does not automatically execute any test.&lt;br /&gt;
&lt;br /&gt;
To execute a suite, add a &amp;quot;&#039;&#039;&#039;--execute&#039;&#039;&#039;&amp;quot; argument (or in expecco 2.10, &amp;quot;-E&amp;quot;), as in:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --execute &amp;lt;testsuite filename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You will notice, that expecco shows a banner intitially; this can be disabled with a &#039;&#039;&#039;--noBanner&#039;&#039;&#039; option. Also, under windows, a small tray icon is shown in the lower right, which provides a controlling UI. This is disabled with &#039;&#039;&#039;--noTray&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Finally, as mentioned before, the test&#039;s outcome is reported via the exit code. If you want a little more information on the status of individiual test cases, use a &#039;&#039;&#039;--verdicts&#039;&#039;&#039; option.&lt;br /&gt;
&lt;br /&gt;
This makes the following a good start for your command line:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --noBanner --noTray --verdicts --execute &amp;lt;testsuite filename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
or, if you want to use a special parameter-file, to provide values for (some of) the project-variables:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --noBanner --noTray --verdicts --parameter &amp;amp;lt;param-file&amp;amp;gt; --execute &amp;amp;lt;filename&amp;amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Parameter files are XML, CSV or JSON-files containing key-value pairs. They are usually created by saving an environment from within the expecco GUI (see [[Environment Editor]]).&lt;br /&gt;
&lt;br /&gt;
All of the above command lines opened an expecco UI window.&lt;br /&gt;
To execute a suite without GUI, add a &amp;quot;&#039;&#039;&#039;--noWindow&#039;&#039;&#039;&amp;quot; argument.&lt;br /&gt;
&lt;br /&gt;
To compose &amp;quot;scatter-gather&amp;quot; test cases from possibly multiple suites, found in a directory use:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --suiteDirectory &amp;amp;lt;dirName&amp;amp;gt; --testCaseNames &amp;quot;T01,T02,T05&amp;quot; --execute&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
or, to explicitly specify the suite-files where test cases are taken from, use:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --testCaseNames &amp;quot;T01,T02,T05&amp;quot; --execute &amp;amp;lt;suiteFile1&amp;amp;gt;.ets &amp;amp;lt;suiteFile2&amp;amp;gt;.ets ...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Finally, to get a report, add a &amp;quot;&#039;&#039;&#039;--xxxReportFile &amp;amp;lt;fileName&amp;amp;gt;&#039;&#039;&#039;&amp;quot; argument, as in:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --noBanner --noWindow --noTray --verdicts --parameter &amp;amp;lt;param-file&amp;amp;gt;&#039;&#039;&#039; \&lt;br /&gt;
 &#039;&#039;&#039;        --pdfReportFile result.pdf --execute &amp;amp;lt;filename&amp;amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
All options are described in more detail below.&lt;br /&gt;
&lt;br /&gt;
=== Executing Multiple Test Suites in Sequence ===&lt;br /&gt;
&lt;br /&gt;
It is possible to run multiple (possibly different) test suites with one command line to reduce startup and project loading times.&lt;br /&gt;
For this, provide multiple &amp;quot;--execute &amp;amp;lt;filename&amp;amp;gt;&amp;quot; arguments to the command line, as in:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --execute &amp;amp;lt;suiteFile1&amp;amp;gt;.ets --execute &amp;lt;suiteFile2&amp;amp;gt;.ets ...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
with this command line, expecco first executes the toplevel testplan(s) from &amp;quot;suiteFile1.ets&amp;quot;, then those from &amp;quot;suiteFile2.ets&amp;quot;. All parameters (i.e. top-level variable values) will be taken from within the corresponing suite file.&lt;br /&gt;
&lt;br /&gt;
To change individual parameters, use &amp;quot;--parameter:key=value&amp;quot; arguments before the corresponing --execute argument. For example, to execute the same suite with different parameters, use a command line like:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --parameter:device=samsung --execute mobileTest.ets&#039;&#039;&#039; \&lt;br /&gt;
 &#039;&#039;&#039;        --parameter:device=nexus --execute mobileTest.ets&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Opening a Previous Result File ===&lt;br /&gt;
&lt;br /&gt;
As described below, expecco can generate result files in various formats and different detail. The pdf, html and junit outputs will contain summary information to be read by humans, archived or to be passed to other programs (eg. to jenkins for statistics).&lt;br /&gt;
&lt;br /&gt;
The native result file (.elf) contains all trace and logging information including the original test suite.&lt;br /&gt;
&lt;br /&gt;
As such, it can be archived to ensure that the test result can always be associated to the exact suite being executed, even if the suite file is lost or has been modified in the meanwhile.&lt;br /&gt;
&lt;br /&gt;
These .elf result files are generated either via corresponding command line options or manually via the &amp;quot;&#039;&#039;Test Results&#039;&#039;&amp;quot;-&amp;quot;&#039;&#039;Save Result As...&#039;&#039;&amp;quot; menu item.&lt;br /&gt;
Like regular suite files, they can be opened via the command line or via the &amp;quot;&#039;&#039;File&#039;&#039;&amp;quot;-&amp;quot;&#039;&#039;Open...&#039;&#039;&amp;quot; menu item.&lt;br /&gt;
&lt;br /&gt;
When opened, the original suite (at the time of execution), the trace- and log data and the execution times will be presented. It is even possible to re-execute individual blocks, test plans or the whole suite.&lt;br /&gt;
 &lt;br /&gt;
This feature is very powerful, in that it allows for the result file to be given to a developer and will help to analyse the data values, control flows and even to rerun tests  and reproduce errors/failures.&lt;br /&gt;
&lt;br /&gt;
=== Detailed Option Description ===&lt;br /&gt;
&lt;br /&gt;
==== Information/Debugging/Logging ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--help&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Prints an up-to-date list of possible options and command line arguments.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--version&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Prints the expecco release identification and exits.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--noBanner&amp;lt;/code&amp;gt;&#039;&#039;&#039; (&#039;&#039;VM option&#039;&#039;)&amp;lt;br&amp;gt;Suppress the splash startup banner.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--console&amp;lt;/code&amp;gt;&#039;&#039;&#039; (&#039;&#039;VM option&#039;&#039;, &#039;&#039;Windows only&#039;&#039;)&amp;lt;br&amp;gt;Open a debug console window for Stdout and Stderr.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--verbose&amp;lt;/code&amp;gt;&#039;&#039;&#039; (&#039;&#039;VM option&#039;&#039;)&amp;lt;br&amp;gt;Additional startup, execution and result info is sent in human readable format to the stderr output. This is mainly meant to analyze startup problems and is actually more useful for expecco developers. It may be too much of printout, so try &amp;quot;&#039;&#039;--verdicts&#039;&#039;&amp;quot; instead.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--debug&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Turns on startup debugging. By default, if an error occurs during startup, expecco terminates itself. With this option enabled, a command line debugger is opened instead. This is probably only useful for plugin developers.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--silent&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Suppresses most info, warning and error messages which are sent to stderr/stdout. This is mainly meant to remove unwanted informational messages (for example, when plugins cannot be loaded during startup, etc.).&amp;lt;br&amp;gt;(this option is available with expecco vsn &amp;gt;= 2.10)&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Startup ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--settings &amp;lt;fileName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Force using &amp;lt;fileName&amp;gt; instead of the default &amp;quot;&amp;lt;code&amp;gt;~/.expecco/.expeccoPreferences&amp;lt;/code&amp;gt;&amp;quot; to be used for the settings file name. Useful if you want different setups to be linked to different desktop icons, or to start expecco with particular settings from a batch or shell script. To generate a preferences file, open the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; - &#039;&#039;Settings&#039;&#039;&amp;quot; dialog, change the settings as required, and select the &amp;quot;&#039;&#039;File&#039;&#039;&amp;quot;-&amp;quot;&#039;&#039;Save As...&#039;&#039;&amp;quot; menu item.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--licenseFile &amp;lt;fileName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Use this license, instead of the default &amp;quot;&amp;lt;code&amp;gt;~/.expecco/.expeccoLicense&amp;lt;/code&amp;gt;&amp;quot;. If a license server (floating licenses) is used, the license server&#039;s hostname and port information is read from the settings file.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--licenseServerHost &amp;lt;hostName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Use this host as license server, instead of the one specified in the settings file (or if no settings file was ever specified). This may be needed when running expecco as a test slave (daemon or service).&amp;lt;br&amp;gt;(this option is available with expecco vsn &amp;gt;= 2.10)&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--licenseServerPort &amp;lt;portNr&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Use this port-nr when contacting the license server, instead of the one specified in the settings file (or if no settings file was ever specified). This may be needed when running expecco as a test slave (daemon or service).&amp;lt;br&amp;gt;(this option is available with expecco vsn &amp;gt;= 2.10)&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--noTray&amp;lt;/code&amp;gt;&#039;&#039;&#039; (&#039;&#039;Windows only&#039;&#039;)&amp;lt;br&amp;gt;Disable the tray control icon (server and execute modes only).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--tray&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Force a tray window to be shown, even if running in non-server (slave) mode. The tray window displays the current execution status, memory situation, thread status and other internal information, which is probably only useful for developers.&amp;lt;br&amp;gt;(this option is available with expecco vsn &amp;gt;= 2.10)&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--noWindow&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Do not open the main window (useful when scripting or executing only).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--noDisplay&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Do not open any window (useful when scripting or executing only).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--noPlugins&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Disable plugin loading. This makes startup somewhat faster, depending on the number of plugins found in your installation directory. You can still force individual plugins to be loaded using the &amp;quot;&#039;&#039;&#039;--loadPlugin&#039;&#039;&#039;&amp;quot; option. Use &amp;quot;&#039;&#039;--noPlugins&#039;&#039;&amp;quot; followed by a list of individual &amp;quot;&#039;&#039;--loadPlugin&#039;&#039;&amp;quot; options, to tune startup time with a minimum set of required plugins being loaded.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--loadPlugin &amp;lt;pluginName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Force loading a specific plugin. This is only useful if a &amp;quot;&#039;&#039;&#039;--noPlugins&#039;&#039;&#039;&amp;quot; option was given before. &#039;&#039;pluginName&#039;&#039; is the name of the folder in the &amp;quot;plugin&amp;quot; folder (under the expecco installation folder). Use &amp;quot;&#039;&#039;--noPlugins&#039;&#039;&amp;quot; followed by a list of individual &amp;quot;loadPlugin&amp;quot; options, to tune startup time with a minimum set of required plugins being loaded.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--noUpdateCheck&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;If configured by the user&#039;s settings, expecco automatically checks for updates and patches when started (by checking the exept web-server for the presence of new patch files). This option disables that check, even if configured in the settings. Notice, that this is usually controlled by the user settings; however, in situations where settings are shared among multiple machines (network drive) and a test host has no (or should not have) internet access, it may be useful to disable this from the command line. It is especially useful, if you are disconnected from the Internet (isolated test-lab), to avoid time delays resulting from connection failures.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--requireLogin&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Opens expecco in a (lightweight) multi-user mode, in which a username must be entered before the actual interaction with expecco begins. This user name will be used to load custom per-user settings (named &amp;quot;&amp;lt;code&amp;gt;.expeccoSettings_&amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;&amp;quot;) and will also be used in the generated reports. Also, the &amp;quot;&#039;&#039;File&#039;&#039;&amp;quot; menu will contain an additional &amp;quot;&#039;&#039;Logout&#039;&#039;&amp;quot; menu item, which brings back the initial login dialog.&amp;lt;br&amp;gt;This mode is useful, if expecco is used on a machine by multiple users, and expecco should remain opened (i.e. as a test stand). For example in a production floor, where tests are executed in multiple shifts by multiple operators.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--load &amp;lt;fileName or packageName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Loads a class file, extension or user plugin. The argument must be either the name of a Smalltalk source or binary file, or the name of a package (which must be found in the &amp;quot;&amp;lt;code&amp;gt;packages&amp;lt;/code&amp;gt;&amp;quot; subfolder under the expecco installation folder). For details on how to generate such packages, read [[Creating_new_Class_Library_Packages/en | &amp;quot;Creating new Class Library Packages&amp;quot;]].&lt;br /&gt;
&lt;br /&gt;
==== Test Execution ====&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--execute &amp;amp;lt;fileName&amp;amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;read and execute a suite. Starting with expecco 2.10, you can also use &amp;quot;-E &amp;amp;lt;fileName&amp;amp;gt;&amp;quot;, which makes the command line a bit shorter.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--execute&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;without a filename, this should be the last argument of a scatter-gather dynamically generated suite command (see below: scatter-gather tests)&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test Selection  ====&lt;br /&gt;
&lt;br /&gt;
the following options allow for individual test plans to be selected for execution from a suite which contains multiple test plans. Without any such option, &#039;&#039;--execute&#039;&#039; will run all top-level testplans found in the suite in sequence.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--testPlanName &amp;lt;namePattern&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Only execute test plans with a matching name.&amp;lt;br&amp;gt;For backward compatibility, &amp;quot;&#039;&#039;&#039;&amp;lt;code&amp;gt;--testSuiteName &amp;lt;namePattern&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;quot; is still supported and has the same effect.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--testPlanTag &amp;lt;tagPattern&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Only execute test plans with a matching tag.&amp;lt;br&amp;gt;For backward compatibility, &amp;quot;&#039;&#039;&#039;&amp;lt;code&amp;gt;--testSuiteTag &amp;lt;tagPattern&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;quot; is still supported and has the same effect.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--testPlanID &amp;lt;uuid&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Only execute that particular test plan (repeat to execute multiple test plans).&amp;lt;br&amp;gt;Starting with release 2.7, the following shortcut can also be used: &#039;&#039;&#039;&amp;lt;code&amp;gt;--testSuiteID &amp;quot;&amp;lt;uuid1&amp;gt;,&amp;lt;uuid2&amp;gt;,...,&amp;lt;uuidN&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;&#039;&#039;&#039;.&amp;lt;br&amp;gt;For backward compatibility, &amp;quot;&#039;&#039;&#039;&amp;lt;code&amp;gt;--testSuiteID &amp;lt;uuid&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;quot; is still supported and has the same effect.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Scatter Gather Test Suite Composition ====&lt;br /&gt;
&lt;br /&gt;
these options allow for a test plan to be composed out of a single or multiple of individual suite files. When composing, a new test plan is temporarily created, which contains the specified test cases. This is in contrast to the above options, where preexisting test plans are selected for execution.&lt;br /&gt;
&lt;br /&gt;
Typically, this kind of composition is used when expecco is called from a QA system, such as Polarion or HP Quality Centre, where individual &amp;quot;test sets&amp;quot; are composed out of a collection of existing test cases. &lt;br /&gt;
&lt;br /&gt;
Notice, that this may lead to longer startup times, depending on the number of suites found in the suite directory, because suite files there will be opened and searched for matching test cases. If the same set of tests needs to be executed multiple times, it may be agood idea to use the &amp;quot;--saveSuite&amp;quot; option, to have the composed suite saved into a file for later reuse.&lt;br /&gt;
&lt;br /&gt;
Also notice, that this works best, if testcase have unique names or are known by their ID (which is globally unique). If your test management system can provide unique identifiers, these should be used to name your testcases inside the suite (typically, a unique name of the test-case or requirement is used to name corresponding test-cases).&lt;br /&gt;
&amp;lt;br&amp;gt;(These options are only available in release &amp;amp;ge; 2.7)&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--suiteDirectory &amp;lt;dirName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;defines the directory, where test suite files are searched for composed test plans. Test cases as specified in one of the options below must be found in one of the files present there. Notice, that the first file which contains a requested test case action will be chosen. Thus, you should ensure, that only one version of each suite is present there. Typically, an up-to-date test suite directory as checked out from the revision control system is specified here. If this argument is not given, test cases are searched in the list of explicitly listed suite files (&amp;quot;.ets&amp;quot; arguments).&amp;lt;p&amp;gt;This option also specifies the directory where suites are found for remote execution (see description of SOAP and REST services below).&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--suiteTitle &amp;lt;string&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;defines the name of the new test plan, which is created dynamically. This is used to control the labels in the generated report files.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--testCaseNames &amp;lt;name-list&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;defines the test cases to be included in the test by name. name-list is a list of comma-separated names of the individual test actions.&amp;lt;br&amp;gt;Please only use this option, if your testcases have unique names and are found only once in any suite found in the suite directory. Otherwise, the first suite which contains that name will be chosen (see below for better selection options).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--testCaseFIDs &amp;lt;id-list&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;defines the test cases to be included in the test by function ID. id-list is a list of comma-separated UUIDs of the individual test actions.&amp;lt;br&amp;gt;This option is probably not very user-friendly for a human, but allows for a calling program (or script) that the testcase is found even if it has been renamed in the meanwhile (remember that functional IDs are assigned once when an item is created and remain unchanged over the whole lifetime).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--testCaseIDs &amp;lt;id-list&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;defines the test cases to be included in the test by version ID. id-list is a list of comma-separated UUIDs of the individual test actions.&amp;lt;br&amp;gt;This option may be very unfriendly for a human user, but allows for a calling program (or script) to ensure that a particular testcase with a particular version is found and executed, even if the testcase has been renamed or modified in the meantime (remember that the ID is changed with every modification). If the same testcase is found in multiple suite files (i.e. in different versions), this will ensure that the correct version will be executed&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--saveSuite &amp;lt;fileName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;saves the generated as-hoq suite. Useful if you want to archive such a dynamically generated scatter-gather suite separately from the result file(s), or to automatically construct new suites. Notice that the &amp;quot;.elf&amp;quot; result file will always include the generated ad-hoq suite, so archival of the generated ad-hoq suite is only needed if you generate pdf, html or other non-elf reports.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test Parameters ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--parameter &amp;amp;lt;fileName&amp;amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039; / &#039;&#039;&#039;&amp;lt;code&amp;gt;-P &amp;amp;lt;fileName&amp;amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Load a parameter set from a file. A parameter set contains values for a test suite&#039;s top environment. This can be either in XML format, as generated with the [[Environment_Editor|&amp;quot;&#039;&#039;Save-Parameter-Set&#039;&#039;&amp;quot; menu function]], a CSV file, containing key-value pairs or a JSON file containing a JSON dictionary object.&amp;lt;p&amp;gt;Parameter files in either format can be created manually in a text editor, provided by a QM system (such as expeccoALM, HP Quality Center or similar), generated by another controlling program or generated by expecco itself via the &amp;quot;&#039;&#039;Save-Parameter&#039;&#039;&amp;quot; menu function of the [[Environment_Editor|environment editor]].&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;The parameter file may contain values for a subset of the environment variables. In this case, the values from the parameter file overwrite corresponding values present in the loaded test suite, leaving other values unchanged.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--parameter:&amp;amp;lt;key&amp;amp;gt;=&amp;amp;lt;value&amp;amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039; / &#039;&#039;&#039;&amp;lt;code&amp;gt;-P:&amp;amp;lt;key&amp;amp;gt;=&amp;amp;lt;value&amp;amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Sets an individual parameter for the next &amp;quot;--execute&amp;quot; argument.&amp;lt;p&amp;gt;If multiple &amp;quot;--execute&amp;quot; arguments are given (i.e. multiple suites are to be executed in sequence), these parameter values are collected and given to the next execution only, and overwrite corresponding values from either a parameter set (see above) or from the suite itself.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;Thus, it is possible to execute the same suite with different parameters in one command line (see example above).&amp;lt;br&amp;gt;(this option is available with expecco vsn &amp;gt;= 2.10)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test Execution via Scripting ====&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--scriptFile &amp;amp;lt;fileName&amp;amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;read and execute a script from a file (see scripting below).&lt;br /&gt;
&lt;br /&gt;
==== Reporting ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--verdicts&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Send execution and result info in human readable format to the stderr output. (see [[#Verdicts Example|example below]].)&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--logFile &amp;lt;fileName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Used to change the name of the generated log file, where stderr is written to.&amp;lt;br&amp;gt;This is only useful if running in server mode.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--exitCode &amp;lt;n&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Defines the exit code to be used independent of the test outcome.&amp;lt;br&amp;gt;The default is 0 (zero) if all tests pass, and non-zero when they do not. However, some calling programs (make/jenkins,...) may misinterpret this exit code and treat the whole job as non-executable. Use this flag to prevent this. It is still possible to change the exitCode for a particular outcome by adding one of the following options after this option.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--exitCodeOnFail &amp;lt;n&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Defines the exit code in case any test ends with a test-failure status.&amp;lt;br&amp;gt;The default is 0 (zero), so that when you run expecco out of make, jenkins or other tools which check for the exit status, the calling program does not interpret this status as if expecco itself failed to execute. This option also changes the exitCodeOnError and exitCodeOnInconclusive values (see below), unless explicitly defined by those options.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--exitCodeOnError &amp;lt;n&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Defines the exit code in case any test ends with a test-error status.&amp;lt;br&amp;gt;The default is 0 (zero), so that when you run expecco out of make, jenkins or other tools which check for the exit status, the calling program does not interpret this status as if expecco itself failed to execute. This option also changes the exitCodeOnInconclusive values (see below), unless explicitly defined by that option.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--exitCodeOnInconclusive &amp;lt;n&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Defines the exit code in case any test ends with an inconclusive status.&amp;lt;br&amp;gt;The default is 0 (zero), so that when you run expecco out of make, jenkins or other tools which check for the exit status, the calling program does not interpret this status as if expecco itself failed to execute.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--elfReportFile &amp;lt;elfFilename&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Writes a report in expecoo&#039;s native XML logfile format. The report contains a lot of detail information and could be processed by an XSLT processor or a similar tool. It also contains enough additional information about test plans and actions so that expecco can redisplay the activity log tree from this file. The generated file can be opened directly via the command line (&amp;quot;expecco &amp;lt;file&amp;gt;.elf&amp;quot;) or by double clicking on the elf-file in the operating system&#039;s desktop.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--csvReportFile &amp;lt;csvFilename&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Writes a summary report in CSV format. Each row consists of:&amp;lt;br&amp;gt;&lt;br /&gt;
** &#039;&#039;TESTSUITE&#039;&#039; - the filename&lt;br /&gt;
** &#039;&#039;TESTPLAN&#039;&#039;  - the test plan&lt;br /&gt;
** &#039;&#039;TESTCASE&#039;&#039;  - the test case&lt;br /&gt;
** &#039;&#039;VERDICT&#039;&#039;   - the test result; one of SUCCESS, FAILED, ERROR or INCONCLUSIVE&lt;br /&gt;
** &#039;&#039;INFO&#039;&#039;      - additional info in case of failure&lt;br /&gt;
:Additional pseudo verdicts such as STARTTIME, ENDTIME etc. are written. A typical CVS output file can be found in the [[#CSV File Example|examples]].&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--textReportFile &amp;lt;textFilename&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Writes a summary report in a human readable textual format. A typical text output file can be found in the [[#Textual File Example|examples]].&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--xmlReportFile &amp;lt;xmlFilename&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Writes a report in XML format. The report contains a lot of detail information and could usually be processed by an XSLT processor or simular tool. A typical XML output file can be found in the [[#XML File Example|examples]].&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--pdfReportFile &amp;lt;pdfFilename&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Writes a summary report in pdf format.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--htmlReportFile &amp;lt;htmlFilename&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Writes a summary report in html format.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--junitReportFile &amp;lt;htmlFilename&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Writes a summary report in a junit compatible XML format. Useful, when expecco is to be started by jenkins or similar driver programs.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--polarionReportFile &amp;lt;htmlFilename&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Writes a summary report in an XML format which is especially suited for the Polarion QM tool. The structure of the generated XML is the same as with the junit format above, but a slightly different time format is used.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--reportTemplateName &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Use the given report template (must be an element inside the test suite) for the following &amp;quot;--xxxReportFile&amp;quot; argument. If no such argument is given, the default template as defined in the suite is used.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--server&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Starts expecco in server mode. This combines the &amp;quot;&#039;&#039;--service&#039;&#039;&amp;quot;, &amp;quot;&#039;&#039;--infoService&#039;&#039;&amp;quot; and &amp;quot;&#039;&#039;--remoteControlService&#039;&#039;&amp;quot; flags. All of those services as described below are started with that single command line argument.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--service&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Starts expecco in server mode. In this mode, HTTP-SOAP and HTTP-REST requests can be used to remote-control expecco&#039;s execution; especially, to execute and monitor tests, and upload results. The most obvious use for this is for expecco to act as an execution host (test slave) for an expeccoALM or Polarion server.&amp;lt;br&amp;gt;However, because standard protocols are used, this may also be used to interface the execution engine to many other QM management or automation systems (e.g. HP Quality Centre). The interface is described below.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--infoService&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Provide an additional info service which allows for monitoring and control of an expecco server via a web browser (server mode only).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--remoteControlService&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Provide an additional service to interact with a running test. Dialog requests, single stepping, starting, pausing and stopping of tests is possible via remote REST requests. This service is used by the Android remote control app, which is available upon request (server mode only).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--port &amp;lt;portNr&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Used to change the HTTP and SOAP port numbers, when running in server mode.&amp;lt;br&amp;gt;The default is 9090 (server mode only).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--scripting &amp;lt;portNr&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Enable scripting (remote control via Telnet ascii interface) on portNr ([[#Scripting Example|see more below]]).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--allowHost &amp;lt;hostName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Allow hostName to connect to the scripting port. Repeat for multiple hosts (see more below).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Utility Functions ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--diff &amp;lt;file1&amp;gt; &amp;lt;file2&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Print differences between two test suites. This can be used eg. to automatically generate log messages for a revision control system (please read the section on &amp;quot;Integration with Source Code Management System&amp;quot; below).&amp;lt;br&amp;gt;(This function is only available in release &amp;amp;ge; 2.7)&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Command Exit Status ===&lt;br /&gt;
&lt;br /&gt;
*0 - all tests passed&lt;br /&gt;
&lt;br /&gt;
*&amp;gt;0 various other errors (command line, file not found, etc.)&lt;br /&gt;
&lt;br /&gt;
*101 - at least one test failed (FAIL status). This exitCode can be overwritten by a command line argument.&lt;br /&gt;
&lt;br /&gt;
*102 - at least one test was inconcusive (INCONCLUSIVE status). This exitCode can be overwritten by a command line argument.&lt;br /&gt;
&lt;br /&gt;
*103 - at least one test lead to an error (ERROR status). This exitCode can be overwritten by a command line argument.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The diff option returns 0 if the compared suites are the same, or 200+n, (where n is the number of differences) otherwise.&lt;br /&gt;
&lt;br /&gt;
== Sample Outputs ==&lt;br /&gt;
&lt;br /&gt;
The following output files were generated by executing the test suite from the file:&lt;br /&gt;
:&amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;quot;&lt;br /&gt;
which contains a single test plan named:&lt;br /&gt;
:&amp;quot;Example Testplan&amp;quot;&lt;br /&gt;
which contains three test cases named:&lt;br /&gt;
:&amp;quot;Test1&amp;quot;&lt;br /&gt;
:&amp;quot;Test2&amp;quot;&lt;br /&gt;
:&amp;quot;Test3-Should fail&amp;quot;&lt;br /&gt;
of which the first two are supposed to PASS and the last one generates an ERROR.&lt;br /&gt;
&lt;br /&gt;
All timestamp information is written in ISO8601 format.&lt;br /&gt;
&lt;br /&gt;
Be reminded that the following reports are condensed reports, which only contain a subset of the information contained in expecco&#039;s native &amp;quot;.elf&amp;quot; file format. The &amp;quot;elf&amp;quot; file contains all of the execution, trace and data-flow information and the original suite as executed. &amp;quot;elf&amp;quot;-files can be reloaded at any time into the expecco UI and the test be reexecuted. Also, any of the other reports can be regenerated, posyibly with different report options (i.e. detail). &lt;br /&gt;
&lt;br /&gt;
Thus it is highly recommended that these &amp;quot;elf&amp;quot; files are archived after a test run, in addition to any of the condensed report files (eg. pdf or junit report).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CSV File Example (&amp;quot;&amp;lt;code&amp;gt;--csvReportFile&amp;lt;/code&amp;gt;&amp;quot; option) ===&lt;br /&gt;
&lt;br /&gt;
By default, entries are separated by &amp;quot;;&amp;quot;-characters. Additional double quotes (&amp;quot;) are used to delimit strings with embedded &amp;quot;;&amp;quot; or spaces. Any double quote within such a string is doubled.&lt;br /&gt;
CSV is a simple and very common interchange format.&lt;br /&gt;
For example, CSV files can be imported into Microsoft Word, Exel and Openoffice (and many other).&lt;br /&gt;
&lt;br /&gt;
 TESTSUITE;TESTPLAN;TESTCASE;VERDICT;INFO&lt;br /&gt;
 ;;;StartTime;2008-10-31T08:57:13.689&lt;br /&gt;
 &amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;quot;;&amp;quot;Example Testplan&amp;quot;;Test1;PASSED;  &lt;br /&gt;
 &amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;quot;;&amp;quot;Example Testplan&amp;quot;;Test2;PASSED;  &lt;br /&gt;
 &amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;quot;;&amp;quot;Example Testplan&amp;quot;;&amp;quot;Test3 - Should fail&amp;quot;;ERROR;   &lt;br /&gt;
 ;;;EndTime;2008-10-31T08:57:18.746&lt;br /&gt;
&lt;br /&gt;
=== XML File Example (&amp;quot;&amp;lt;code&amp;gt;--xmlReportFile&amp;lt;/code&amp;gt;&amp;quot; option) ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;SummaryReport&amp;gt;&lt;br /&gt;
   &amp;lt;StartTime&amp;gt;2008-10-31T08:56:49.774&amp;lt;/StartTime&amp;gt; &lt;br /&gt;
   &amp;lt;TestSuite&amp;gt;&lt;br /&gt;
     &amp;lt;File&amp;gt;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;lt;/File&amp;gt; &lt;br /&gt;
     &amp;lt;TestPlan&amp;gt;&lt;br /&gt;
       &amp;lt;Name&amp;gt;Example Testplan&amp;lt;/Name&amp;gt; &lt;br /&gt;
       &amp;lt;TestCase&amp;gt;&lt;br /&gt;
         &amp;lt;Name&amp;gt;Test 1&amp;lt;/Name&amp;gt; &lt;br /&gt;
         &amp;lt;Verdict&amp;gt;PASSED&amp;lt;/Verdict&amp;gt; &lt;br /&gt;
       &amp;lt;/TestCase&amp;gt;&lt;br /&gt;
       &amp;lt;TestCase&amp;gt;&lt;br /&gt;
         &amp;lt;Name&amp;gt;Test 2&amp;lt;/Name&amp;gt; &lt;br /&gt;
         &amp;lt;Verdict&amp;gt;PASSED&amp;lt;/Verdict&amp;gt; &lt;br /&gt;
       &amp;lt;/TestCase&amp;gt;&lt;br /&gt;
       &amp;lt;TestCase&amp;gt;&lt;br /&gt;
         &amp;lt;Name&amp;gt;Test 3 - Should fail&amp;lt;/Name&amp;gt; &lt;br /&gt;
         &amp;lt;Verdict&amp;gt;ERROR&amp;lt;/Verdict&amp;gt; &lt;br /&gt;
       &amp;lt;/TestCase&amp;gt;&lt;br /&gt;
     &amp;lt;/TestPlan&amp;gt;&lt;br /&gt;
   &amp;lt;/TestSuite&amp;gt;&lt;br /&gt;
   &amp;lt;EndTime&amp;gt;2008-10-31T08:56:55.142&amp;lt;/EndTime&amp;gt; &lt;br /&gt;
 &amp;lt;/SummaryReport&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is not to be confused with the &amp;quot;elf&amp;quot; result file format, which is also XML based, but contains a lot more detail. &lt;br /&gt;
&lt;br /&gt;
Notice also, that the junit report format (&amp;quot;&amp;lt;code&amp;gt;--junitReport&amp;lt;/code&amp;gt;&amp;quot; option) is similar in structure but uses different tags.&lt;br /&gt;
Junit reports are compatible to reports generated by Java jUnit frameworks.&lt;br /&gt;
They can thus be used to generate reports and trends in Jenkins/Hudson and other tools which understand the jUnit report format.&lt;br /&gt;
&lt;br /&gt;
=== Textual File Example (&amp;quot;&amp;lt;code&amp;gt;--textReportFile&amp;lt;/code&amp;gt;&amp;quot; option) ===&lt;br /&gt;
&lt;br /&gt;
 Test Execution Summary&lt;br /&gt;
   Start: 2008-10-31 08:56:12.751&lt;br /&gt;
   TestSuite: &amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&lt;br /&gt;
     TestPlan: Example Testplan&lt;br /&gt;
       Test 1 ....................... PASSED&lt;br /&gt;
       Test 2 ....................... PASSED&lt;br /&gt;
       Test 3 - Should fail ......... ERROR&lt;br /&gt;
   Finish: 2008-10-31 08:56:18.009&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--Orginal:&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&lt;br /&gt;
TESTSUITE;TESTPLAN;TESTCASE;VERDICT;INFO&lt;br /&gt;
;;;StartTime;2008-10-31T08:57:13.689&lt;br /&gt;
&amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;quot;;&amp;quot;Example Testplan&amp;quot;;Test1;PASSED;  &lt;br /&gt;
&amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;quot;;&amp;quot;Example Testplan&amp;quot;;Test2;PASSED;  &lt;br /&gt;
&amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;quot;;&amp;quot;Example Testplan&amp;quot;;&amp;quot;Test3 - Should fail&amp;quot;;ERROR;   &lt;br /&gt;
;;;EndTime;2008-10-31T08:57:18.746&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&amp;lt;SummaryReport&amp;gt;&lt;br /&gt;
  &amp;lt;StartTime&amp;gt;2008-10-31T08:56:49.774&amp;lt;/StartTime&amp;gt; &lt;br /&gt;
  &amp;lt;TestSuite&amp;gt;&lt;br /&gt;
    &amp;lt;File&amp;gt;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;lt;/File&amp;gt; &lt;br /&gt;
    &amp;lt;TestPlan&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Example Testplan&amp;lt;/Name&amp;gt; &lt;br /&gt;
      &amp;lt;TestCase&amp;gt;&lt;br /&gt;
        &amp;lt;Name&amp;gt;Test 1&amp;lt;/Name&amp;gt; &lt;br /&gt;
        &amp;lt;Verdict&amp;gt;PASSED&amp;lt;/Verdict&amp;gt; &lt;br /&gt;
      &amp;lt;/TestCase&amp;gt;&lt;br /&gt;
      &amp;lt;TestCase&amp;gt;&lt;br /&gt;
        &amp;lt;Name&amp;gt;Test 2&amp;lt;/Name&amp;gt; &lt;br /&gt;
        &amp;lt;Verdict&amp;gt;PASSED&amp;lt;/Verdict&amp;gt; &lt;br /&gt;
      &amp;lt;/TestCase&amp;gt;&lt;br /&gt;
      &amp;lt;TestCase&amp;gt;&lt;br /&gt;
        &amp;lt;Name&amp;gt;Test 3 - Should fail&amp;lt;/Name&amp;gt; &lt;br /&gt;
        &amp;lt;Verdict&amp;gt;ERROR&amp;lt;/Verdict&amp;gt; &lt;br /&gt;
      &amp;lt;/TestCase&amp;gt;&lt;br /&gt;
    &amp;lt;/TestPlan&amp;gt;&lt;br /&gt;
  &amp;lt;/TestSuite&amp;gt;&lt;br /&gt;
  &amp;lt;EndTime&amp;gt;2008-10-31T08:56:55.142&amp;lt;/EndTime&amp;gt; &lt;br /&gt;
&amp;lt;/SummaryReport&amp;gt;&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------&lt;br /&gt;
Test Execution Summary&lt;br /&gt;
  Start: 2008-10-31 08:56:12.751&lt;br /&gt;
&lt;br /&gt;
  TestSuite: &amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&lt;br /&gt;
    TestPlan: Example Testplan&lt;br /&gt;
      Test 1 ....................... PASSED&lt;br /&gt;
      Test 2 ....................... PASSED&lt;br /&gt;
      Test 3 - Should fail ......... ERROR&lt;br /&gt;
&lt;br /&gt;
  Finish: 2008-10-31 08:56:18.009&lt;br /&gt;
------------------------------------------------------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Verdicts Example ===&lt;br /&gt;
&lt;br /&gt;
the &amp;quot;&amp;lt;code&amp;gt;--verdicts&amp;lt;/code&amp;gt;&amp;quot; option generates a simple trace on the standard error (to be redirected into a file):&lt;br /&gt;
&lt;br /&gt;
 C:\selftest\commandLineArgs&amp;gt; expecco --noBanner --noTray --verdicts &lt;br /&gt;
 --parameter paramesForTest.xpar --execute parameterTest.ets&amp;lt;br&amp;gt;&lt;br /&gt;
 Expecco [info]: start testSuite &amp;quot;parameterTest.ets&amp;quot;...&lt;br /&gt;
 Expecco [info]: using parameters &amp;quot;paramesForTest.xpar&amp;quot;...&lt;br /&gt;
 Expecco [info]: start testPlan &amp;quot;Test Parameters From CommandLine&amp;quot;&lt;br /&gt;
 Expecco [info]: start testCase &amp;quot;Validate Parameters&amp;quot;&lt;br /&gt;
 Expecco [info]: done testCase &amp;quot;Validate Parameters&amp;quot;; STATUS=PASSED&lt;br /&gt;
 Expecco [info]: done testPlan &amp;quot;Test Parameters From CommandLine&amp;quot;; STATUS=PASSED&lt;br /&gt;
 Expecco [info]: done testSuite &amp;quot;parameterTest.ets&amp;quot;; STATUS=PASSED&lt;br /&gt;
&lt;br /&gt;
== Integration with Quality Managament and Automation Tools ==&lt;br /&gt;
&lt;br /&gt;
=== Integration with Jenkins ===&lt;br /&gt;
&lt;br /&gt;
To have expecco tests being executed automatically by Jenkins, take the following example as a guideline. This is a real world setup, taken from our own setup within eXept.&lt;br /&gt;
&lt;br /&gt;
# Create a test job, which is triggered by a successful build (or a change in the test suite repository)&lt;br /&gt;
# Check the &amp;quot;Block Build while prerequisite Jobs are Active&amp;quot; flag&lt;br /&gt;
# Check either the &amp;quot;Trigger from Source Code Management&amp;quot; or the &amp;quot;Trigger from other Job&amp;quot; flags&lt;br /&gt;
# Check &amp;quot;Abort build if it is Stuck&amp;quot; (just to make sure, that a faulty suite does not block Jenkins)&lt;br /&gt;
# Check &amp;quot;Fail the Build if Stuck&amp;quot; and give it a reasonable elastic Time-out Strategy (we use 300% of the last 10 builds, to make sure a longer execution time due to more test cases will not be interpreted as a stuck, and an extra timeout of 30 minutes. The timeout is very generous for the expected execution time of a few minutes).&lt;br /&gt;
# Check &amp;quot;Run xvnc during Build&amp;quot; to allow for monitoring, what is going on. This is also required, if the test needs a UI.&lt;br /&gt;
# Define the &amp;quot;Build Procedure&amp;quot; as &amp;quot;Execute Shell Script&amp;quot; (Unix/Linux) or &amp;quot;Execute Batch Job&amp;quot; (Windows)&lt;br /&gt;
# Enter a build procedure similar to the ours, which is:&lt;br /&gt;
#::&amp;lt;code&amp;gt;cd exept\expecco\application&lt;br /&gt;
#::del *.junit&lt;br /&gt;
#::expecco.com --noBanner --exitOnInternalError --noTray \&lt;br /&gt;
#::::--jUnitReportFile selfTestResult.junit \&lt;br /&gt;
#::::--execute ..\projects\expecco\eXpeccoSelfTest.ets&lt;br /&gt;
#::expecco.com --noBanner --noTray \&lt;br /&gt;
#::::--jUnitReportFile CommunicationWithExpeccoNETResult.junit \&lt;br /&gt;
#::::--execute ..\projects\expecco\CommunicationWithExpeccoNET.ets&amp;lt;/code&amp;gt;&lt;br /&gt;
#:The details (especially paths and names) will of cause be different in your setup. The above uses the relative paths as it first changes the current directory to where the previous build has compiled the executable, which will of course not be the case in your setup.&lt;br /&gt;
# Define a &amp;quot;Post-build Action&amp;quot;&lt;br /&gt;
# Check &amp;quot;Publish Junit Test Results&amp;quot;&lt;br /&gt;
# Enter a path expression to declare the location of the resulting reports. Here, we used:&amp;lt;PRE&amp;gt;exept\expecco\application\*.junit&amp;lt;/PRE&amp;gt;&lt;br /&gt;
# Check the &amp;quot;Publish Test Attachments&amp;quot; flag, so the results will be presented in the Jenkins management console&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! Because expecco has been told to generate jUnit compatible report files, we can use Jenkins&#039; existing jUnit support. However, the jUnit xml format does not support the full range of information which is present in the native expecco result files (especially the activity log and pin value information is not included). Therefore, it is a good idea to also generate a regular &amp;quot;.elf&amp;quot; (expecco log file) and add it to the archived build artefacts.&lt;br /&gt;
&lt;br /&gt;
=== Integration with expeccoALM ===&lt;br /&gt;
Expecco and ExpeccoALM (formerly called &amp;quot;&#039;&#039;expeccoNET&#039;&#039;&amp;quot;) have been originally designed to work together. Therefore, only a minimum setup is required:&lt;br /&gt;
# ensure that an expecco test execution slave is running on each test host (server farm, virtual machines, etc.). Depending on the operating system, this is either done by installing expecco as a service (Windows), or by adding appropriate startup actions to your &amp;quot;init.d&amp;quot; files (Unix).&lt;br /&gt;
# define the test host(s) in expeccoALM.&lt;br /&gt;
# (optionally) define the devices available and attached to the execution slave machine in expeccoALM&lt;br /&gt;
&lt;br /&gt;
ExpeccoALM will ask the expecco slaves about their operating system environment. So jobs will be automatically executed on matching CPU/OS machines. However, if tests require special resources (devices) to be attached, these must be defined and listed in expeccoALM as well. If your test has corresponding resource-requirements defined (see resources/inventory), expeccoALM will both ensure that the test will execute on the correct machine, and also reserve the resource during the execution. Also, test scheduling, if defined to be automatic, will be optimized to minimize resource usage, and to ensure that a higher number of tests can be executed in parallel.&lt;br /&gt;
&lt;br /&gt;
=== Integration into a SOA Infrastructure ===&lt;br /&gt;
&lt;br /&gt;
For this, expecco should be started on the test host(s) in so called &amp;quot;slave&amp;quot; mode.&lt;br /&gt;
In this mode, expecco awaits for execution commands via SOAP or REST, executes tests in the background and returns status information (progress) and results (reports).&lt;br /&gt;
&lt;br /&gt;
Because tests may execute for a long time (hours or even days), the execution is performed asynchonously; first, the test has to be downloaded to the slave, then execution started. The start-command returns a ticket, which is a test-run-identifier, by which the execution progress can be queried (polled) while the test is running. Finally, a &amp;quot;finished&amp;quot; status is returned, upon which the result can be aquired via another service call.&lt;br /&gt;
&lt;br /&gt;
Multiple such test slaves can be started on multiple machines, and each test slave may (if required) execute multiple tests in parallel (although this is usually limited to one, to avoid conflicts when external resources are accessed).&lt;br /&gt;
&lt;br /&gt;
To start expecco in slave mode, use the command line:&lt;br /&gt;
 expecco --service&lt;br /&gt;
&lt;br /&gt;
or, if the default port (9090) is not available, use:&lt;br /&gt;
 expecco --service --port 9090&lt;br /&gt;
&lt;br /&gt;
The service interface is described below; typically, you can talk to expecco via:&lt;br /&gt;
 http://localhost:9090/expeccoService&lt;br /&gt;
or:&lt;br /&gt;
 http://localhost:9090/expeccoService/rest&lt;br /&gt;
&lt;br /&gt;
The SOAP wsdl is returned via:&lt;br /&gt;
 http://localhost:9090/wsdl/ExpeccoSOAPService.wsdl&lt;br /&gt;
&lt;br /&gt;
and - if the inforService is also running - general status information with:&lt;br /&gt;
 http://localhost:9090/info&lt;br /&gt;
&lt;br /&gt;
=== Integration with HP Quality Center ===&lt;br /&gt;
&lt;br /&gt;
This is described in the [[ HP Quality Center Plugin ]] document.&lt;br /&gt;
&lt;br /&gt;
=== Integration with Polarion ===&lt;br /&gt;
&lt;br /&gt;
This is described in the [[ Polarion Plugin]] document.&lt;br /&gt;
&lt;br /&gt;
== Integration with Source Code Management Tools ==&lt;br /&gt;
&lt;br /&gt;
=== Background Info on what is Contained in a &amp;quot;.ets&amp;quot; File ===&lt;br /&gt;
&lt;br /&gt;
Expecco stores testsuites in a file with &#039;.ets&#039; extension (which stands for: &amp;quot;&#039;&#039;Expecco-Test-Suite&#039;&#039;&amp;quot;) and result logs in &#039;.elf&#039; files (stands for: &amp;quot;&#039;&#039;Expecco-Log-File&#039;&#039;&amp;quot;).&lt;br /&gt;
These are technically zip files - i.e. a bundle of individual files which can be extracted with the common zip command line tool (winzip under Windows systems, zip/unzip under Unix systems).&lt;br /&gt;
&lt;br /&gt;
For example, &amp;quot;&amp;lt;code&amp;gt;unzip -l foo.ets&amp;lt;/code&amp;gt;&amp;quot; lists the individual components, of which especially the block descriptions and attachments may be of interest.&lt;br /&gt;
&lt;br /&gt;
Notice, that you have to be careful when ets-files are bundled with zip manually: for various consistency checks, expecco generates a validation signature of the components and saves this as an additional file inside the .ets file.&lt;br /&gt;
This signature file must be preserved and it must be consistent with the other zip-components. In effect, this means that an ets can only be constructed from the very same components, using the very same signature file as were extracted before. Otherwise, expecco refuses to load the &amp;quot;.ets&amp;quot; file later.&lt;br /&gt;
&lt;br /&gt;
=== Version Management of &amp;quot;.ets&amp;quot; files ===&lt;br /&gt;
&lt;br /&gt;
Unless a QA system like &amp;quot;expeccoALM&amp;quot; is used, ets-files can be stored and maintained in any other source code management (SCM) system, for example, CVS, SVN, hg/Mercurial, git, Perforce etc.&lt;br /&gt;
Make sure to store the .ets as binary file, and/or disable source expansion of version tag lines (for example, &amp;quot;$Header&amp;quot; or &amp;quot;$Id&amp;quot; in CVS). Consult your particular SCM system&#039;s documentation on how this is done.&lt;br /&gt;
&lt;br /&gt;
As an alternative, it is possible to unzip the ets into individual components, store them separately, and zip them back into an ets, when a previous version is extracted from the SCM system. However, you must be careful to preserve the contents exactly as is, including the signature and other meta data, and not mix versions. I.e. all individual component files must be checkedIn/out in sync and as a group - it is not possible to update individual files from previous versions. The reason is that action blocks are referred to by their versionID, and these IDs will certainly be inconsistent, when previous versions of individual action blocks are mixed into another version&#039;s suite. &lt;br /&gt;
&lt;br /&gt;
If, for whatever reason, you must checkin individual action blocks, we highly recommend to check in BOTH the bundled ets (and use that for later test execution), AND check in the individual components, and use only those for meta actions, such as comparison, documentation or other administrative tasks.&lt;br /&gt;
&lt;br /&gt;
=== Generating Diff Lists or other Version Information ===&lt;br /&gt;
&lt;br /&gt;
Many source code management systems allow for hook-scripts to be added to checkin/checkout actions, and/or to redefine the command to be used for diff-list generation.&lt;br /&gt;
&lt;br /&gt;
For example, in the SVN system, an external diff tool can be defined. You could write a little shell or batch script, which calls expecco with the &amp;quot;&amp;lt;code&amp;gt;--diff&amp;lt;/code&amp;gt;&amp;quot; option which is described above. Thus, you would get meaningful diff output even from checked in ets-bundle files.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;&amp;lt;code&amp;gt;expecco --diff&amp;lt;/code&amp;gt;&amp;quot; option is also useful as a command line tool to get diff lists - even if your SCM system does not allow for such automatic hooks.&lt;br /&gt;
&lt;br /&gt;
== Scripting ==&lt;br /&gt;
&lt;br /&gt;
Expecco can be scripted either by reading a script from a file or remote controlled via a telnet like command-line interface.&lt;br /&gt;
This is useful to execute complex test scenarios and meta tasks, to create or manipulate test suites automatically and for self-testing expecco by using another expecco to control its GUI. &lt;br /&gt;
It can also be used to execute and automate more complex scenarios without using expeccoALM.&lt;br /&gt;
&amp;lt;br&amp;gt;Example uses are:&lt;br /&gt;
* Sequentially load and/or execute all suites found in a folder, reimport libraries, save the updated suite&lt;br /&gt;
* Construct new suites by merging/selecting tests from other suites&lt;br /&gt;
* Bulk renaming, commenting, attributing etc.&lt;br /&gt;
* Change attachments inside a number of suites&lt;br /&gt;
* Controlling an application or web interface (via a GUI plugin) and saving a sequence of screen shots&lt;br /&gt;
&lt;br /&gt;
By default, the scripting interface expects expressions in JavaScript syntax (but with a Smalltalk object model), &lt;br /&gt;
similar to the language used for elementary block definition. However, the language can be changed to Smalltalk syntax via a &amp;quot;~&amp;quot; directive.&lt;br /&gt;
&lt;br /&gt;
=== Script File Example ===&lt;br /&gt;
&lt;br /&gt;
To control expecco via a scriptfile, use the &amp;quot;&amp;lt;code&amp;gt;--scriptFile &amp;amp;lt;filename&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;quot; command line argument, where &amp;lt;filename&amp;gt; must be a file containing JavaScript expressions.&lt;br /&gt;
&lt;br /&gt;
For example, the following script file named &amp;quot;run3Suites.js&amp;quot; may contain the code:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
    // Example for an automatic expecco script.&lt;br /&gt;
    // (loads and executes a number of test suites)&lt;br /&gt;
    //&lt;br /&gt;
&lt;br /&gt;
    // to enable debugging in case of an error.&lt;br /&gt;
    // STXScriptingServer.errorDebugging(true);&lt;br /&gt;
&lt;br /&gt;
    var files = [&lt;br /&gt;
        &amp;quot;foo.ets&amp;quot;,&lt;br /&gt;
        &amp;quot;bar.ets&amp;quot;,&lt;br /&gt;
        &amp;quot;baz.ets&amp;quot;,&lt;br /&gt;
    ];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    Expecco::ExpeccoPreferences.current.automaticReimportOnLoad(true);&lt;br /&gt;
    Expecco::ExpeccoPreferences.current.checkForReimportableImportsOnLoad(true);&lt;br /&gt;
    Expecco::ExpeccoPreferences.current.checkForAnchestorOnAutomaticReimport(false);&lt;br /&gt;
    // Expecco::ExpeccoPreferences.current.libraryPath(importPathes);&lt;br /&gt;
&lt;br /&gt;
    // --------------------&lt;br /&gt;
&lt;br /&gt;
    function executeTestPlan ( aTestPlan ) {&lt;br /&gt;
       Stderr.nextPutLine(&amp;quot;executing testplan &amp;quot;+aTestPlan.name()+&amp;quot;...&amp;quot;);&lt;br /&gt;
       resultList = aTestPlan.execute();&lt;br /&gt;
       Stderr.nextPutLine(&amp;quot;done.&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
    function runSuite(suiteFile) {&lt;br /&gt;
        var loadedProject;&lt;br /&gt;
&lt;br /&gt;
        Stderr.nextPutLine(&amp;quot;loading &amp;quot;+suiteFile+&amp;quot;...&amp;quot;);&lt;br /&gt;
        expecco.loadProjectFromFile(suiteFile);&lt;br /&gt;
        loadedProject = expecco.project();&lt;br /&gt;
&lt;br /&gt;
        if (loadedProject == null) {&lt;br /&gt;
            Stderr.nextPutLine(&amp;quot;failed to load library &amp;quot;+suiteFile+&amp;quot;.&amp;quot;);&lt;br /&gt;
            Smalltalk.exit(1);&lt;br /&gt;
        } else {&lt;br /&gt;
            loadedProject.allTestPlansDo( executTestPlan );&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    files.do(runSuite);&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And can be executed with:&lt;br /&gt;
&lt;br /&gt;
    expecco --scriptFile run3Suites.js&lt;br /&gt;
&lt;br /&gt;
for windowless operation, use the &amp;quot;&amp;lt;code&amp;gt;--noWindow&amp;lt;/code&amp;gt;&amp;quot; command line argument.&lt;br /&gt;
To speed up the startup, you can turn off the loading of plugins, with a &amp;quot;&amp;lt;code&amp;gt;--noPlugins&amp;lt;/code&amp;gt;&amp;quot; argument (and possibly load any required plugins explicitly via additional plugin arguments).&lt;br /&gt;
Finally, enable debug messages with a &amp;quot;&amp;lt;code&amp;gt;--debug&amp;lt;/code&amp;gt;&amp;quot; argument.&lt;br /&gt;
Thus, the recommended options for scripting are:&lt;br /&gt;
  &lt;br /&gt;
    expecco --debug --noPlugins --noWindow --scriptFile run3Suites.js&lt;br /&gt;
&lt;br /&gt;
of course, this command line can be put into a shell (or batch) script file, and then executed with a single word command.&lt;br /&gt;
&lt;br /&gt;
=== Telnet Scripting Example ===&lt;br /&gt;
&lt;br /&gt;
The remote scripting service is enabled when a &amp;quot;&amp;lt;code&amp;gt;--scripting&amp;lt;/code&amp;gt;&amp;quot; command line argument is given.&lt;br /&gt;
By default, the service only accepts connections from the local host (for security reasons). Using the &amp;quot;&amp;lt;code&amp;gt;--allowHost&amp;lt;/code&amp;gt;&amp;quot; option, more hosts can be gained access to the scripting feature - but be aware, that this opens a potential security hole, as all of the internal functions can be accessed via the scripting system (and this includes the possibility to write files and call operating system services with the access rights of the one who started the scripting server).&lt;br /&gt;
&lt;br /&gt;
When used with a remote script connection (telnet),&lt;br /&gt;
additional connection- and execution related commands are introduced by lines starting with the &amp;quot;~&amp;quot; (tilde) escape character (similar to telnet). &lt;br /&gt;
For example, &amp;quot;~.&amp;quot; (tilde-period) is used to close the connection. &lt;br /&gt;
Press &amp;quot;~?&amp;quot; (tilde-question) for help.&lt;br /&gt;
 &lt;br /&gt;
The following is a trace of a typical scripting session (user input in bold):&lt;br /&gt;
&lt;br /&gt;
 c:\programs\expecco&amp;gt; &amp;lt;b&amp;gt;expecco --scripting 8008&amp;lt;/b&amp;gt;&lt;br /&gt;
 c:\programs\expecco&amp;gt;     ... expecco now running in the background with GUI ...&lt;br /&gt;
 ...&lt;br /&gt;
 c:\programs\expecco&amp;gt; &amp;lt;b&amp;gt;telnet localhost 8008&amp;lt;/b&amp;gt;&lt;br /&gt;
 Welcome to Expecco (Type ~? for help)&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;println(expecco);&amp;lt;/b&amp;gt;&lt;br /&gt;
 an Expecco::Browser&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;expecco.menuNewProject();&amp;lt;/b&amp;gt;&lt;br /&gt;
 ...expecco performs the new-function from its menu...&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;expecco.loadProjectFromFile(&amp;quot;C:\Users\cg\testsuites\webedition\projects\BearerTest.ets&amp;quot;);&amp;lt;/b&amp;gt;&lt;br /&gt;
 ...expecco loads the testSuite...&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;expecco.close();&amp;lt;/b&amp;gt;&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;~.&amp;lt;/b&amp;gt;&lt;br /&gt;
 Lost Connection.&lt;br /&gt;
 c:\programs\expecco&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also start a scripting session without an initial expecco browser window:&lt;br /&gt;
&lt;br /&gt;
 c:\programs\expecco&amp;gt; &amp;lt;b&amp;gt;expecco --noWindow --scripting 8008&amp;lt;/b&amp;gt;&lt;br /&gt;
 c:\programs\expecco&amp;gt;     ... expecco now running in the background without GUI ...&lt;br /&gt;
 ...&lt;br /&gt;
 c:\programs\expecco&amp;gt; &amp;lt;b&amp;gt;telnet localhost 8008&amp;lt;/b&amp;gt;&lt;br /&gt;
 Welcome to Expecco (Type ~? for help)&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;println(expecco);&amp;lt;/b&amp;gt;&lt;br /&gt;
 an Expecco::Browser&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;expecco;&amp;lt;/b&amp;gt;&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;~v+&amp;lt;/b&amp;gt; // turn result-printing on&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;expecco&amp;lt;/b&amp;gt;&lt;br /&gt;
 an Expecco::Browser&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;~v-&amp;lt;/b&amp;gt; // and off again&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;expecco.loadProjectFromFile(&amp;quot;~/SomeTest.ets&amp;quot;);&amp;lt;/b&amp;gt;&lt;br /&gt;
 ...expecco loads the testSuite...&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;var blk = expecco.project.elementWithName(&amp;quot;My Action&amp;quot;);&amp;lt;/b&amp;gt;&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;blk.name(&amp;quot;My Fun Action&amp;quot;);&amp;lt;/b&amp;gt;&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;expecco.saveProjectToFile(&amp;quot;~/ModifiedTest.ets&amp;quot;);&amp;lt;/b&amp;gt;&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;expecco.close();&amp;lt;/b&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;lt;b&amp;gt;~.&amp;lt;/b&amp;gt;&lt;br /&gt;
 Lost Connection.&lt;br /&gt;
 c:\programs\expecco&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Scripting API Overview ==&lt;br /&gt;
&lt;br /&gt;
A few objects are predefined by name; among them are &amp;quot;&#039;&#039;expecco&#039;&#039;&amp;quot;, which refers to the browser itself (i.e. the UI) and &amp;quot;&#039;&#039;environment&#039;&#039;&amp;quot;, which refers to a collection of variable bindings (this is a dictionary of interpreter variables - not to be confused with a variable environment as known inside an expecco activity block).&lt;br /&gt;
&amp;lt;BR&amp;gt;New variables can be defined with a &amp;quot;&amp;lt;code&amp;gt;var &amp;amp;lt;name&amp;amp;gt;;&amp;lt;/code&amp;gt;&amp;quot; statement. For example:&lt;br /&gt;
&amp;lt;CODE&amp;gt;&amp;lt;PRE&amp;gt;&lt;br /&gt;
    var ws;&lt;br /&gt;
&lt;br /&gt;
    ws = new ExpeccoWorkspaceApplication;&lt;br /&gt;
    ws.open();&lt;br /&gt;
    ws.close();&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&amp;lt;/CODE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== expecco Object ====&lt;br /&gt;
&lt;br /&gt;
The variable named &amp;quot;&#039;&#039;expecco&#039;&#039;&amp;quot; refers to the opened GUI-object, which represents the expecco application itself. &lt;br /&gt;
&lt;br /&gt;
===== Expecco Functions =====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;project()&#039;&#039;&#039;&amp;lt;br&amp;gt;the current project&lt;br /&gt;
*&#039;&#039;&#039;currentApplication()&#039;&#039;&#039;&amp;lt;br&amp;gt;the current page (initially, there is only one)&lt;br /&gt;
*&#039;&#039;&#039;currentTreeApplication()&#039;&#039;&#039;&amp;lt;br&amp;gt;the current tree sub-application&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;selectModelItem( anItem )&#039;&#039;&#039;&amp;lt;br&amp;gt;select an item and open an editor for it&lt;br /&gt;
*&#039;&#039;&#039;selectedModelItems()&#039;&#039;&#039;&amp;lt;br&amp;gt;returns a collection of selected items&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
===== Menu Functions =====&lt;br /&gt;
These execute the underlying menu functions (as if clicked by the user).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;menuNewProject()&#039;&#039;&#039;&amp;lt;br&amp;gt;creates a new testSuite&lt;br /&gt;
*&#039;&#039;&#039;menuOpen()&#039;&#039;&#039;&amp;lt;br&amp;gt;opens a dialog requesting a testSuite&lt;br /&gt;
*&#039;&#039;&#039;menuExit()&#039;&#039;&#039;&amp;lt;br&amp;gt;closes the expecco application&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;loadProjectFromFile(fileNameString)&#039;&#039;&#039;&amp;lt;br&amp;gt;load a testSuite&lt;br /&gt;
*&#039;&#039;&#039;saveProjectToFile(fileNameString)&#039;&#039;&#039;&amp;lt;br&amp;gt;save the testSuite&lt;br /&gt;
*&#039;&#039;&#039;selectTestPlanWithName(testPlaneNameString)&#039;&#039;&#039;&amp;lt;br&amp;gt;select a testplan item by name&lt;br /&gt;
*&#039;&#039;&#039;selectTestPlanWithFunctionalId(uuid)&#039;&#039;&#039;&amp;lt;br&amp;gt;select a testplan item by uuid&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;testSuite()&#039;&#039;&#039;&amp;lt;br&amp;gt;retrieves the testSuite object (see below)&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
===== Test Suite (Project) Functions =====&lt;br /&gt;
the project as returned by the above &amp;quot;project()&amp;quot; function provides access to its elements:&lt;br /&gt;
&amp;lt;br&amp;gt;(see also [[ Expecco API#Test Suite Project Functions]])&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;authorName()&#039;&#039;&#039;&amp;lt;br&amp;gt;get the author name string&lt;br /&gt;
*&#039;&#039;&#039;authorName(aString)&#039;&#039;&#039;&amp;lt;br&amp;gt;set the author name string&lt;br /&gt;
*&#039;&#039;&#039;versionString()&#039;&#039;&#039;&amp;lt;br&amp;gt;get the version string&lt;br /&gt;
*&#039;&#039;&#039;versionString(aString)&#039;&#039;&#039;&amp;lt;br&amp;gt;set the version string&lt;br /&gt;
*&#039;&#039;&#039;projectsWorkingDirectory()&#039;&#039;&#039;&amp;lt;br&amp;gt;the directory, where attachments etc. are found&lt;br /&gt;
*&#039;&#039;&#039;ensureEnvironment()&#039;&#039;&#039;&amp;lt;br&amp;gt;an instantiated environment (concrete values). See below.&lt;br /&gt;
*&#039;&#039;&#039;elementWithName( nameString )&#039;&#039;&#039;&amp;lt;br&amp;gt;returns a matching element or null if not found&lt;br /&gt;
*&#039;&#039;&#039;elementWithId( aUUID )&#039;&#039;&#039;&amp;lt;br&amp;gt;returns that element or null if not present. (create the UUID with &amp;quot;&amp;lt;stringConstant&amp;gt;.asUUID&amp;quot; )&lt;br /&gt;
*&#039;&#039;&#039;elementWithFunctionalId( aUUID )&#039;&#039;&#039;&amp;lt;br&amp;gt;returns that element or null if not present&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
==== Environment Object ====&lt;br /&gt;
&lt;br /&gt;
Environment objects are used to store key-value bindings for expecco variables. Environments form a hierarchy, where values are searched for in an environment&#039;s parent environment, if not present. This hierarchy follows the containing compound activity chain up to the project (= test suite) environment.&lt;br /&gt;
Additional temporary environments are kept by the executor and the browser, to keep temporary values for a single execution&#039;s or a single session&#039;s lifetime.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;at(key)&#039;&#039;&#039;&amp;lt;br&amp;gt;retrieves a value, given the name of the entry. Raises and error if no variable exists by that name.&lt;br /&gt;
*&#039;&#039;&#039;at_ifAbsent(key, default)&#039;&#039;&#039;&amp;lt;br&amp;gt;like above, but returns default if no variable exists by that name (instead of raising an error).&lt;br /&gt;
*&#039;&#039;&#039;includesKey(key)&#039;&#039;&#039;&amp;lt;br&amp;gt;true if a variable by that name exists, false otherwise.&lt;br /&gt;
*&#039;&#039;&#039;at_put(key, value)&#039;&#039;&#039;&amp;lt;br&amp;gt;store value as variable named key. Raises an error, in an attempt to change a readOnly variable&lt;br /&gt;
*&#039;&#039;&#039;environmentDescription()&#039;&#039;&#039;&amp;lt;br&amp;gt;returns the environment&#039;s description. This describes types, default values and read/write attributes per entry.&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
==== EnvironmentDescription Object ====&lt;br /&gt;
&lt;br /&gt;
This is a collection of entries which describe variables of an environment. It does only hold the description, not the bindings themself; i.e. it contains the information required to instantiate an environment. EnvironmentDescriptions inherit from OrderedCollection and therefore entries are accessed via &amp;quot;at:&amp;quot; using a numeric index from 1 to the environmentDescription&#039;s size.&lt;br /&gt;
&lt;br /&gt;
Entries (as per variable) provide the following protocol:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;name()&#039;&#039;&#039;&amp;lt;br&amp;gt;the name of the variable&lt;br /&gt;
*&#039;&#039;&#039;isReadOnly()&#039;&#039;&#039;&amp;lt;br&amp;gt;true if readonly&lt;br /&gt;
*&#039;&#039;&#039;defaultValue()&#039;&#039;&#039;&amp;lt;br&amp;gt;the initial value, assigned when the environment is created&lt;br /&gt;
*&#039;&#039;&#039;datatype()&#039;&#039;&#039;&amp;lt;br&amp;gt;the type of the variable&lt;br /&gt;
*&#039;&#039;&#039;comment()&#039;&#039;&#039;&amp;lt;br&amp;gt;description&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
== Remote Controlling and Monitoring Expecco ==&lt;br /&gt;
&lt;br /&gt;
Expecco itself can be automated by various mechanisms:&lt;br /&gt;
&lt;br /&gt;
* via command line arguments (described in [[ #Command Line | &amp;quot;Command Line&amp;quot;]] above)&lt;br /&gt;
&lt;br /&gt;
* via script files (see [[ #Script File Example | &amp;quot;Script File Example&amp;quot;]] above)&lt;br /&gt;
&lt;br /&gt;
* via the telnet interface (see [[ #Telnet Scripting Example | &amp;quot;Telnet Scripting Example&amp;quot;]] above)&lt;br /&gt;
&lt;br /&gt;
* via standard RPC mechanisms, such as SOAP or REST.&lt;br /&gt;
&lt;br /&gt;
Especially the RPC mechanisms are useful to integrate expecco into the company test infrastructure.&lt;br /&gt;
Such interfaces are meant for programmatic control of an expecco slave from quality management, application life cycle and other scheduling tools.&lt;br /&gt;
Our own companion product, ExpeccoALM and third party tools, such as Polarion use these service interfaces.&lt;br /&gt;
&lt;br /&gt;
Notice, that for integration into a Jenkins infrastructure, command line arguments or scripts may be a more cost efective means to control automated expecco testruns.&lt;br /&gt;
&lt;br /&gt;
=== Expecco as a Slave Node in a Test Lab ===&lt;br /&gt;
&lt;br /&gt;
The service interfaces are useful to control unmonitored slave machines in the network, among which expecco test execution jobs are scheduled by another program. ExpeccoALM and other quality management tools use these to initiate test runs in a test server farm. &lt;br /&gt;
For this, the basic operations &amp;quot;download of a suite&amp;quot;, &amp;quot;execute a suite&amp;quot; and &amp;quot;requesting execution results&amp;quot; are available as service calls.&lt;br /&gt;
&lt;br /&gt;
Both SOAP and REST services are available, if expecco is started with the &amp;quot;&#039;&#039;--server&#039;&#039;&amp;quot; argument. &lt;br /&gt;
An optional &amp;quot;&#039;&#039;--port&#039;&#039;&amp;quot; argument allows for the HTTP port to be changed from the default (9090) on which expecco is listening.&lt;br /&gt;
&lt;br /&gt;
For debugging and testing, the service can be also be started from the interactive UI, via expecco&#039;s main menu (in the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Web-Services&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Start / Stop&#039;&#039;&amp;quot; menu items).&lt;br /&gt;
&lt;br /&gt;
These services use HTTP requests as transport layer.&lt;br /&gt;
&lt;br /&gt;
==== Expecco SOAP Service Interface ====&lt;br /&gt;
&lt;br /&gt;
This accepts SOAP requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
A partial WSDL spec can be aqcuired from the running service via &amp;quot;&amp;lt;code&amp;gt;host:9090/wsdl/ExpeccoSOAPService.wsdl&amp;lt;/code&amp;gt;&amp;quot; (partial, because it is currently not does not contain complete type information).&lt;br /&gt;
&lt;br /&gt;
The service entries are:&lt;br /&gt;
&lt;br /&gt;
===== Loading and Executing a Suite =====&lt;br /&gt;
&lt;br /&gt;
The execute request is the main service entry. It passes the suite and also optional parameters.&lt;br /&gt;
&lt;br /&gt;
The test suite can be bade available to expecco either by passing it with the request (as base64 CDATA), or by passing a URL from which expecco can fetch the suite iteslf.&lt;br /&gt;
&lt;br /&gt;
The execute call contains the following fields:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;message name=&amp;quot;expecco_executeProject_v5_Request&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;id&amp;quot; type=&amp;quot;UUID&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;testSuiteId&amp;quot; type=&amp;quot;UUID&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;dataSource&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;dataSourceUri&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;environment&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;testplans&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;resources&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;optionalParameters&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and responds with:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_executeProject_v5_Response&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;result&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This call starts execution, and immediately returns a response, which consists of an identifier.&lt;br /&gt;
This identifier can later be used to ask expecco about the execution status. As a test may take a long time to finish,&lt;br /&gt;
it is useful to poll via status requests from time to time, to see if the execution has finished and to get progress status. &lt;br /&gt;
&lt;br /&gt;
The parameters are:&lt;br /&gt;
&lt;br /&gt;
* id - mandatory; a ticket ID; this should be a UUID-string, to avoid possible conflicts&lt;br /&gt;
* testSuiteId - mandatory; the UUID of the suite to execute. See below for details about download optimizations&lt;br /&gt;
* dataSource - optional; if present, this should contain the whole ets-file&#039;s contents as a Base64 encoded CDATA string&lt;br /&gt;
* dataSourceUri - optional; if present, this should be the URI from which expecco shall fetch the suite. See below for details&lt;br /&gt;
* environment - optional; top-level environment variable values. This can be used to provide alternative initial values for variables in the top level variable environment (the &amp;quot;Project-Environment&amp;quot;)&lt;br /&gt;
* testplans - optional; a list of UUIDs of testplans to execute. If not present, all top-level testplans are executed&lt;br /&gt;
* resources - optional; a list of resources to be used by the test (see expeccoALM resource description)&lt;br /&gt;
* optionalParameters - optional; an array containing additional parameters as key-value elements.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;optionalParameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
A list of key-value elements (i.e. must have an even number of elements, of the form [k1 v1 k2 v2 ... kN vN] ).&lt;br /&gt;
Each key is an xsd:string, each value&#039;s type depends on the key, but all of them are currently also strings.&lt;br /&gt;
The list of supported parameters is open for future extension of the interface. Currently, the following are recognized:&lt;br /&gt;
* [ &amp;quot;generateLog&amp;quot; xsd:boolean ] - the boolean arg must be &amp;quot;true&amp;quot; or &amp;quot;false&amp;quot;&lt;br /&gt;
* [ &amp;quot;generatePDFReport&amp;quot; xsd:boolean ] - boolean arg, must be either &amp;quot;true&amp;quot; or &amp;quot;false&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;testplans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
this allows selective execution of individual test plans and also individual test cases (from within a test plan) from the suite.&lt;br /&gt;
If not present, all test plans as present in the suite are executed.&lt;br /&gt;
If present, the testPlans parameter must be an xsdarray of pairs (i.e. each array element is again an xsdarray with 2 elements).&lt;br /&gt;
Each top level element describes one testplan to be executed. The first element of each being the testplan&#039;s UUID, the second another array, listing the testcases by UUID.&lt;br /&gt;
For example, if the suite contains three testplans, named &amp;quot;a&amp;quot;, &amp;quot;b&amp;quot; and &amp;quot;c&amp;quot;, with plan &amp;quot;a&amp;quot; having id-a and &amp;quot;b&amp;quot; having id-b as UUID.&lt;br /&gt;
A testPlans argument might look like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ &lt;br /&gt;
    [ id-a ]&lt;br /&gt;
    [ id-b [  id-tcb-1 id-tcb-2 ] ]&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and specify that testplan &amp;quot;a&amp;quot; should be executed fully (i.e. all test cases), and only the testcases tcb-1 and tcb-2 are to be executed from testplan &amp;quot;b&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;environment&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
-- to be described --&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;resources&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
-- to be described --&lt;br /&gt;
&lt;br /&gt;
The reply consists of the ticket-id, which has to be passed in further status requests.&lt;br /&gt;
&lt;br /&gt;
===== Loading Only =====&lt;br /&gt;
&lt;br /&gt;
It is also possible, to download a suite without execution, via the &amp;quot;download&amp;quot; request:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_downloadProject_Request&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;testSuiteId&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;dataSourceBase64&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;dataSourceUri&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;optionalParameters&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_downloadProject_Response&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;result&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Download Optimization =====&lt;br /&gt;
&lt;br /&gt;
Expecco remembers downloaded suites in a temporary folder, to avoid repeated transfers of possibly huge test suites.&lt;br /&gt;
If a URI is passed (but no base64 encoded data), expecco checks if the suite is already present on the test host,&lt;br /&gt;
and will not fetch it again, if already present. If not present, expecco will fetch the suite via a HTTP request from the URI.&lt;br /&gt;
&lt;br /&gt;
If no URI is passed (i.e. both data and dataURI fields are empty), expecco will either respond with an error reply, if not present,&lt;br /&gt;
or with an ok response, if already present.&lt;br /&gt;
&lt;br /&gt;
Thus, if you have to pass the suite as data (i.e. there is no file service available, from which expecco could fetch the suite),&lt;br /&gt;
it is recommended to first check if a suite is already present (by sending a download request without data) and check for an error return. If no error is reported, the suite is already there and no further download action is required. If there is an error response,&lt;br /&gt;
the client should send the suite with another download request, this time with a non-empty data field.&lt;br /&gt;
&lt;br /&gt;
After any successfull download (either via download, or via execute request), the suite can be executed by an execute request without data.&lt;br /&gt;
&lt;br /&gt;
===== Execution by Suite File Name =====&lt;br /&gt;
&lt;br /&gt;
An alternative to downloading suites is to execute suites which are already present on the execution slave. For this, expecco should be started with a &amp;quot;--suiteDirectory&amp;quot; option, which specifies the folder name, where common test suites are located.&lt;br /&gt;
The executeTestSuiteFile-request is used to execute one of the suites in that directory.&lt;br /&gt;
&lt;br /&gt;
The call contains the following fields:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;message name=&amp;quot;expecco_executeTestSuiteFile_Request&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;id&amp;quot; type=&amp;quot;UUID&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;fileName&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;environment&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;testplans&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;resources&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;optionalParameters&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If successful, a ticketID is returned (same as above execute-request).&lt;br /&gt;
&lt;br /&gt;
===== Status Request =====&lt;br /&gt;
&lt;br /&gt;
This query returns status information about an ongoing execution. Its single parameter field must contain a ticketId as described in the above execute request.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_getExecutionInfo_Request&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;ticketId&amp;quot; type=&amp;quot;UUID&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_getExecutionInfo_Response&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;result&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A client may have to send multiple &amp;quot;getExecutionInfo&amp;quot; requests, until a &amp;quot;finished&amp;quot; status is returned.&lt;br /&gt;
Expecco will keep the generated reports and log files in a temporary folder, until fetched via a getResult request.&lt;br /&gt;
This allows for both expecco and the client to be turned off and restarted, without loosing any status information.&lt;br /&gt;
&lt;br /&gt;
===== Result Request =====&lt;br /&gt;
&lt;br /&gt;
Once finished, reports and log files should be fetched from expecco.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_getResult_Request&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;ticketId&amp;quot; type=&amp;quot;UUID&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;removeResultBoolean&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_getResult_Response&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;result&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the &amp;quot;getResult&amp;quot; request, corrsponding files are automatically removed from the temporary folder by expecco.&lt;br /&gt;
&lt;br /&gt;
===== Terminate/Abort Request =====&lt;br /&gt;
&lt;br /&gt;
Use this, to abort and terminate an ongoing test execution.&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_killExecution_Request&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;ticketId&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_killExecution_Response&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;result&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Remove Ticket Request =====&lt;br /&gt;
&lt;br /&gt;
Use this, to tell expecco, that no further interest exists in a ticket.&lt;br /&gt;
If the test is still running, it is aborted. If it is about to be started, it will not be.&lt;br /&gt;
Any temporary files which might have already been created due to this execution are removed.&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_killExecution_Request&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;ticketId&amp;quot; type=&amp;quot;UUID&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_killExecution_Response&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;result&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Ping =====&lt;br /&gt;
&lt;br /&gt;
This request answers with information about the host, architecture, disk usage and other status about the machine on which expecco is running. Also, a list of available plugins on the target machine is returned. Of course, it is also useful to see if the expecco service is ready and the communication works as expected.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;ping_Request&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;ping_Response&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;result&amp;quot; type=&amp;quot;xsd:array&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Cleanup of Old Result/Log Files =====&lt;br /&gt;
&lt;br /&gt;
This request can be used to remove all temporary files, especially leftover report- and log files. &lt;br /&gt;
This should be used, if a client has crashed, and lost track of &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_cleanupTempFiles_Request&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_cleanupTempFiles_Response&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;result&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Example Wire Protocol Trace =====&lt;br /&gt;
&lt;br /&gt;
Client asks expecco to execute a suite.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;-- HTTP Request to Expecco --&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
POST / HTTP/1.1 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
User-Agent: Smalltalk/X 6.2.5.0 &lt;br /&gt;
Host: 127.0.0.1:9090 &lt;br /&gt;
Content-Length: 8925 &lt;br /&gt;
Content-Type: text/xml; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
SOAPAction: &amp;quot;&amp;quot; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;env:Envelope &lt;br /&gt;
   xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
   xmlns:env=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; &lt;br /&gt;
   xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
   xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
   env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;env:Body env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;m:expecco_executeProject_v5 xmlns:m=&amp;quot;http://www.mars.dti.ne.jp/~umejava/smalltalk/soapOpera/rpc/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;optionalParameters xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
        xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
        xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
        enc:arrayType=&amp;quot;xsd:anyType[6]&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;generateReport&amp;lt;/item&amp;gt;&lt;br /&gt;
    &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;true&amp;lt;/item&amp;gt;&lt;br /&gt;
    &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;generateLog&amp;lt;/item&amp;gt;&lt;br /&gt;
    &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;true&amp;lt;/item&amp;gt;&lt;br /&gt;
    &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;runAllTestcasesIfEmptyTestcaseList&amp;lt;/item&amp;gt;&lt;br /&gt;
    &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;true&amp;lt;/item&amp;gt;&lt;br /&gt;
   &amp;lt;/optionalParameters&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;testSuiteId xsi:type=&amp;quot;UUID&amp;quot;&amp;gt;228168f0-747b-11df-a41b-00ff7b08316c&amp;lt;/testSuiteId&amp;gt;&lt;br /&gt;
   &amp;lt;testplans &lt;br /&gt;
        xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
        xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
        xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
        enc:arrayType=&amp;quot;xsd:arrayType[1]&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;item &lt;br /&gt;
            xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
            xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
            xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
            env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
            enc:arrayType=&amp;quot;xsd:anyType[2]&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;item &lt;br /&gt;
                env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
                xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;f71c4700-7477-11df-a41b-00ff7b08316c&lt;br /&gt;
            &amp;lt;/item&amp;gt;&lt;br /&gt;
            &amp;lt;item &lt;br /&gt;
                xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
                xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
                xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
                env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
                enc:arrayType=&amp;quot;xsd:anyType[0]&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/item&amp;gt;&lt;br /&gt;
   &amp;lt;/testplans&amp;gt;&lt;br /&gt;
   &amp;lt;id xsi:type=&amp;quot;UUID&amp;quot;&amp;gt;200d93e1-a258-11e4-b9eb-c48508c91d3c&amp;lt;/id&amp;gt;&lt;br /&gt;
   &amp;lt;dataSource xsi:null=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;dataSourceUri xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;http://127.0.0.1:8662/expeccoALM/tentativeObjects/a84b2d96-d133-47db-9fc2-17208b490bfe.a&lt;br /&gt;
   &amp;lt;/dataSourceUri&amp;gt;&lt;br /&gt;
   &amp;lt;environment &lt;br /&gt;
        xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
        xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
        xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
        enc:arrayType=&amp;quot;xsd:anyType[22]&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_Host__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;sr-laptop&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_LoginUserName__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;admin&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_FullUserName__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;.&amp;amp;#32;&amp;amp;#42;admin&amp;amp;#42;&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_TestHost__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;127.0.0.1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_Definition_UUID__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;e5c9cb30-a253-11e4-9f24-c48508c91d3c&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_Definition_ID__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;d4&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_Definition_Name__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Test&amp;amp;#32;For&amp;amp;#32;Resources&amp;amp;#32;and&amp;amp;#32;Skills&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_Definition_Summary__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_Run_UUID__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;200d93e1-a258-11e4-b9eb-c48508c91d3c&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_Run_ID__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;r14&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_TestSuite_VersionNumber__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;1&amp;lt;/item&amp;gt;&lt;br /&gt;
   &amp;lt;/environment&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;resources &lt;br /&gt;
       xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
       xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
       xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
       enc:arrayType=&amp;quot;xsd:anyType[28]&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Resource&amp;amp;#32;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:integer&amp;quot;&amp;gt;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Resource&amp;amp;#32;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Skill1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;attribute1-1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Integer&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;0&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Resource&amp;amp;#32;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:integer&amp;quot;&amp;gt;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Resource&amp;amp;#32;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Skill2&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;attribute2-1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Integer&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;0&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Resource&amp;amp;#32;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:integer&amp;quot;&amp;gt;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Resource&amp;amp;#32;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Skill2&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;attribute2-2&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Float&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;0.0&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Resource&amp;amp;#32;2&amp;amp;#32;eeee&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:integer&amp;quot;&amp;gt;2&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Resource&amp;amp;#32;2&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Skill1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;attribute1-1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Integer&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;0&amp;lt;/item&amp;gt;&lt;br /&gt;
   &amp;lt;/resources&amp;gt;&lt;br /&gt;
  &amp;lt;/m:expecco_executeProject_v5&amp;gt;&lt;br /&gt;
 &amp;lt;/env:Body&amp;gt;&lt;br /&gt;
&amp;lt;/env:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;gt;-- response from Expecco&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HTTP/1.1 200 OK &lt;br /&gt;
Content-Type: text/xml &lt;br /&gt;
Content-Length: 649 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;env:Envelope xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:env=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;env:Body env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;m:expecco_executeProject_v5Response xmlns:m=&amp;quot;http://www.mars.dti.ne.jp/~umejava/smalltalk/soapOpera/rpc/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;result xsi:type=&amp;quot;UUID&amp;quot;&amp;gt;200d93e1-a258-11e4-b9eb-c48508c91d3c&amp;lt;/result&amp;gt;&lt;br /&gt;
  &amp;lt;/m:expecco_executeProject_v5Response&amp;gt;&lt;br /&gt;
 &amp;lt;/env:Body&amp;gt;&lt;br /&gt;
&amp;lt;/env:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Client asks expecco for execution state&lt;br /&gt;
&lt;br /&gt;
&amp;lt;-- HTTP Request to expecco&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
POST / HTTP/1.1 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
User-Agent: Smalltalk/X 6.2.5.0 &lt;br /&gt;
Host: 127.0.0.1:9090 &lt;br /&gt;
Content-Length: 635 &lt;br /&gt;
Content-Type: text/xml; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
SOAPAction: &amp;quot;&amp;quot; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;env:Envelope xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:env=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;env:Body env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;m:expecco_getExecutionInfo xmlns:m=&amp;quot;http://www.mars.dti.ne.jp/~umejava/smalltalk/soapOpera/rpc/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;ticketId xsi:type=&amp;quot;UUID&amp;quot;&amp;gt;200d93e1-a258-11e4-b9eb-c48508c91d3c&amp;lt;/ticketId&amp;gt;&lt;br /&gt;
  &amp;lt;/m:expecco_getExecutionInfo&amp;gt;&lt;br /&gt;
 &amp;lt;/env:Body&amp;gt;&lt;br /&gt;
&amp;lt;/env:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;gt;-- response from Expecco (while still executing)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HTTP/1.1 200 OK &lt;br /&gt;
Content-Type: text/xml &lt;br /&gt;
Content-Length: 2579 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;env:Envelope xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:env=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;env:Body env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;m:expecco_getExecutionInfoResponse xmlns:m=&amp;quot;http://www.mars.dti.ne.jp/~umejava/smalltalk/soapOpera/rpc/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;result&amp;gt;&lt;br /&gt;
    &amp;lt;executionResultState xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;executingTestSuite&amp;lt;/executionResultState&amp;gt;&lt;br /&gt;
    &amp;lt;currentActivity xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;executing&amp;amp;#32;Neuer&amp;amp;#32;Testplan&amp;lt;/currentActivity&amp;gt;&lt;br /&gt;
    &amp;lt;pdfReportFileURL xsi:null=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;summaryResult&amp;gt;&lt;br /&gt;
     &amp;lt;summaryTestplanExecutionResults xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; enc:arrayType=&amp;quot;xsd:anyType[1]&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;summaryTestPlanItems xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; enc:arrayType=&amp;quot;xsd:anyType[1]&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;detailString xsi:null=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
         &amp;lt;resultActivityState xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Successful&amp;lt;/resultActivityState&amp;gt;&lt;br /&gt;
         &amp;lt;testplanItemName xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Neue&amp;amp;#32;Aktion&amp;lt;/testplanItemName&amp;gt;&lt;br /&gt;
         &amp;lt;expeccoClass xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Expecco::SummaryTestPlanItemExecutionResult&amp;lt;/expeccoClass&amp;gt;&lt;br /&gt;
        &amp;lt;/item&amp;gt;&lt;br /&gt;
       &amp;lt;/summaryTestPlanItems&amp;gt;&lt;br /&gt;
       &amp;lt;testPlanId xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;22623ef0-757d-11df-a41b-00ff7b08316c&amp;lt;/testPlanId&amp;gt;&lt;br /&gt;
       &amp;lt;expeccoClass xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Expecco::SummaryTestPlanExecutionResult&amp;lt;/expeccoClass&amp;gt;&lt;br /&gt;
       &amp;lt;testPlanName xsi:null=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;/summaryTestplanExecutionResults&amp;gt;&lt;br /&gt;
     &amp;lt;testSuiteName xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Test&amp;amp;#32;For&amp;amp;#32;Resources&amp;amp;#32;and&amp;amp;#32;Skills&amp;lt;/testSuiteName&amp;gt;&lt;br /&gt;
     &amp;lt;testSuiteId xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;228168f0-747b-11df-a41b-00ff7b08316c&amp;lt;/testSuiteId&amp;gt;&lt;br /&gt;
     &amp;lt;expeccoClass xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Expecco::SummaryTestSuiteExecutionResult&amp;lt;/expeccoClass&amp;gt;&lt;br /&gt;
    &amp;lt;/summaryResult&amp;gt;&lt;br /&gt;
    &amp;lt;logFileURL xsi:null=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;expeccoClass xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Expecco::SoapExecutionResult::SummaryEncoding&amp;lt;/expeccoClass&amp;gt;&lt;br /&gt;
    &amp;lt;executionProgress xsi:type=&amp;quot;xsd:integer&amp;quot;&amp;gt;0&amp;lt;/executionProgress&amp;gt;&lt;br /&gt;
   &amp;lt;/result&amp;gt;&lt;br /&gt;
  &amp;lt;/m:expecco_getExecutionInfoResponse&amp;gt;&lt;br /&gt;
 &amp;lt;/env:Body&amp;gt;&lt;br /&gt;
&amp;lt;/env:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;gt;-- response from Expecco (after execution)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
HTTP/1.1 200 OK &lt;br /&gt;
Content-Type: text/xml &lt;br /&gt;
Content-Length: 2781 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
.....................&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;env:Envelope xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:env=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;env:Body env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;m:expecco_getExecutionInfoResponse xmlns:m=&amp;quot;http://www.mars.dti.ne.jp/~umejava/smalltalk/soapOpera/rpc/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;result&amp;gt;&lt;br /&gt;
    &amp;lt;executionResultState xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;finished&amp;lt;/executionResultState&amp;gt;&lt;br /&gt;
    &amp;lt;currentActivity xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;executing&amp;amp;#32;Neuer&amp;amp;#32;Testplan&amp;lt;/currentActivity&amp;gt;&lt;br /&gt;
    &amp;lt;pdfReportFileURL xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;http://127.0.0.1:9090/expeccoResultFiles/ad8011e1-a25c-11e4-b9eb-c48508c91d3c.pdf&amp;lt;/pdfReportFileURL&amp;gt;&lt;br /&gt;
    &amp;lt;summaryResult&amp;gt;&lt;br /&gt;
     &amp;lt;summaryTestplanExecutionResults xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; enc:arrayType=&amp;quot;xsd:anyType[1]&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;summaryTestPlanItems xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; enc:arrayType=&amp;quot;xsd:anyType[1]&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;detailString xsi:null=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
         &amp;lt;resultActivityState xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Successful&amp;lt;/resultActivityState&amp;gt;&lt;br /&gt;
         &amp;lt;testplanItemName xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Neue&amp;amp;#32;Aktion&amp;lt;/testplanItemName&amp;gt;&lt;br /&gt;
         &amp;lt;expeccoClass xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Expecco::SummaryTestPlanItemExecutionResult&amp;lt;/expeccoClass&amp;gt;&lt;br /&gt;
        &amp;lt;/item&amp;gt;&lt;br /&gt;
       &amp;lt;/summaryTestPlanItems&amp;gt;&lt;br /&gt;
       &amp;lt;testPlanId xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;22623ef0-757d-11df-a41b-00ff7b08316c&amp;lt;/testPlanId&amp;gt;&lt;br /&gt;
       &amp;lt;expeccoClass xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Expecco::SummaryTestPlanExecutionResult&amp;lt;/expeccoClass&amp;gt;&lt;br /&gt;
       &amp;lt;testPlanName xsi:null=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;/summaryTestplanExecutionResults&amp;gt;&lt;br /&gt;
     &amp;lt;testSuiteName xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Test&amp;amp;#32;For&amp;amp;#32;Resources&amp;amp;#32;and&amp;amp;#32;Skills&amp;lt;/testSuiteName&amp;gt;&lt;br /&gt;
     &amp;lt;testSuiteId xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;228168f0-747b-11df-a41b-00ff7b08316c&amp;lt;/testSuiteId&amp;gt;&lt;br /&gt;
     &amp;lt;expeccoClass xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Expecco::SummaryTestSuiteExecutionResult&amp;lt;/expeccoClass&amp;gt;&lt;br /&gt;
    &amp;lt;/summaryResult&amp;gt;&lt;br /&gt;
    &amp;lt;logFileURL xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;http://127.0.0.1:9090/expeccoResultFiles/ad8011e1-a25c-11e4-b9eb-c48508c91d3c.elf&amp;lt;/logFileURL&amp;gt;&lt;br /&gt;
    &amp;lt;expeccoClass xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Expecco::SoapExecutionResult::SummaryEncoding&amp;lt;/expeccoClass&amp;gt;&lt;br /&gt;
    &amp;lt;executionProgress xsi:type=&amp;quot;xsd:integer&amp;quot;&amp;gt;100&amp;lt;/executionProgress&amp;gt;&lt;br /&gt;
   &amp;lt;/result&amp;gt;&lt;br /&gt;
  &amp;lt;/m:expecco_getExecutionInfoResponse&amp;gt;&lt;br /&gt;
 &amp;lt;/env:Body&amp;gt;&lt;br /&gt;
&amp;lt;/env:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Client fetches the report and log files from expecco:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;-- HTTP Request to expecco (fetch logfile)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
GET /expeccoResultFiles/ad8011e1-a25c-11e4-b9eb-c48508c91d3c.elf HTTP/1.1 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
User-Agent: Mozilla/3.0N &lt;br /&gt;
Host: 127.0.0.1:9090 &lt;br /&gt;
Accept-Encoding: chunked &lt;br /&gt;
Accept-Language: en,* &lt;br /&gt;
Accept-Charset: iso-8859-1,*,utf-8 &lt;br /&gt;
Accept: */* &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;gt;-- HTTP response from expecco &lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
HTTP/1.1 200 OK &lt;br /&gt;
Content-Type: application/x-expecco-logfile &lt;br /&gt;
Content-Length: 12690 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
Cache-Control: max-age=86400 &lt;br /&gt;
Last-modified: Thu, 22 Jan 2015 17:32:50 GMT &lt;br /&gt;
&lt;br /&gt;
... a lot of elf-file data ...&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;-- HTTP Request to expecco (fetch pdf report)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
GET /expeccoResultFiles/ad8011e1-a25c-11e4-b9eb-c48508c91d3c.pdf HTTP/1.1 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
User-Agent: Mozilla/3.0N &lt;br /&gt;
Host: 127.0.0.1:9090 &lt;br /&gt;
Accept-Encoding: chunked &lt;br /&gt;
Accept-Language: en,* &lt;br /&gt;
Accept-Charset: iso-8859-1,*,utf-8 &lt;br /&gt;
Accept: */* &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;gt;-- HTTP response from expecco&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
HTTP/1.1 200 OK &lt;br /&gt;
Content-Type: application/pdf &lt;br /&gt;
Content-Length: 29768 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
Cache-Control: max-age=86400 &lt;br /&gt;
Last-modified: Thu, 22 Jan 2015 17:32:51 GMT &lt;br /&gt;
&lt;br /&gt;
... a lot of pdf data ...&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Client releases ticket (so expecco can remove the temporary data)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;-- HTTP Request to expecco&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
POST / HTTP/1.1 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
User-Agent: Smalltalk/X 6.2.5.0 &lt;br /&gt;
Host: 127.0.0.1:9090 &lt;br /&gt;
Content-Length: 627 &lt;br /&gt;
Content-Type: text/xml; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
SOAPAction: &amp;quot;&amp;quot; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;env:Envelope xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:env=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;env:Body env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;m:expecco_removeTicket xmlns:m=&amp;quot;http://www.mars.dti.ne.jp/~umejava/smalltalk/soapOpera/rpc/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;ticketId xsi:type=&amp;quot;UUID&amp;quot;&amp;gt;ad8011e1-a25c-11e4-b9eb-c48508c91d3c&amp;lt;/ticketId&amp;gt;&lt;br /&gt;
  &amp;lt;/m:expecco_removeTicket&amp;gt;&lt;br /&gt;
 &amp;lt;/env:Body&amp;gt;&lt;br /&gt;
&amp;lt;/env:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;gt;-- HTTP response from expecco&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
HTTP/1.1 200 OK &lt;br /&gt;
Content-Type: text/xml &lt;br /&gt;
Content-Length: 614 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
.....................&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;env:Envelope xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:env=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;env:Body env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;m:expecco_removeTicketResponse xmlns:m=&amp;quot;http://www.mars.dti.ne.jp/~umejava/smalltalk/soapOpera/rpc/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;result xsi:type=&amp;quot;xsd:boolean&amp;quot;&amp;gt;true&amp;lt;/result&amp;gt;&lt;br /&gt;
  &amp;lt;/m:expecco_removeTicketResponse&amp;gt;&lt;br /&gt;
 &amp;lt;/env:Body&amp;gt;&lt;br /&gt;
&amp;lt;/env:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
===== Example Session Using &amp;quot;&amp;lt;code&amp;gt;wget&amp;lt;/code&amp;gt;&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
Using &amp;quot;wget&amp;quot; with SOAP is possible, but a little complicated, because correct SOAP requests have to be constructed, and ticket-numbers be extracted from responses. It is much easier with the REST service.&lt;br /&gt;
&lt;br /&gt;
See below for a description.&lt;br /&gt;
&lt;br /&gt;
==== Expecco REST Service Interface ====&lt;br /&gt;
&lt;br /&gt;
This accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The REST service supports the same set of operations as the SOAP service described above, but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are all HTTP-GET requests, possibly with attached JSON encoded argument data. &lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
See details [[ Starting_expecco_via_Comand_Line/rest/en | &amp;quot;expecco rest service interface&amp;quot;]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== ProtocolInfo Request &amp;quot;/expeccoService/rest/protocolInfo&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;; currently always &amp;quot;GET&amp;quot;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        &amp;quot;URLPath&amp;quot; : &amp;quot;expeccoService/rest&amp;quot; ,&lt;br /&gt;
        &amp;quot;Service&amp;quot; : &amp;quot;ExpeccoRestService&amp;quot;, &lt;br /&gt;
        &amp;quot;Version&amp;quot; : 1 ,&lt;br /&gt;
        &amp;quot;Protocol&amp;quot; : &lt;br /&gt;
            [&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;execute&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;start execution; return ticketID.&amp;quot; ,&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;download&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;start execution; return ticketID.&amp;quot; ,&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;executeTestSuiteFile&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;execute suite file; return ticketID.&amp;quot; ,&lt;br /&gt;
                },    &lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;getExecutionInfo&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(ID:String)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot; ,&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;killExecution&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(ID:String)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;removeTicket&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(ID:String)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                { &lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;cleanupTempFiles&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;ping&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;test reachability and return some status info.&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;protocolInfo&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot;, &lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
===== Execute Request &amp;quot;/expeccoService/rest/execute&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface above, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
===== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
===== Execute File Request &amp;quot;/expeccoService/rest/executeTestSuiteFile&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteFileName - name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
The file must be present/reachable by the expecco slave.&lt;br /&gt;
It may be either an absolute pathname (typically on a shared network drive) or&lt;br /&gt;
a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument.&lt;br /&gt;
&lt;br /&gt;
===== GetExecutionInfo Request &amp;quot;/expeccoService/rest/getExecutionInfo&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
===== KillExecution Request &amp;quot;/expeccoService/rest/killExecution&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
===== RemoveTicket Request &amp;quot;/expeccoService/rest/removeTicket&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
===== Cleanup Request &amp;quot;/expeccoService/rest/cleanupTempFiles&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
===== Ping Request &amp;quot;/expeccoService/rest/ping&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
===== Example Wire Protocol Trace =====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Example Session Using &amp;quot;&amp;lt;code&amp;gt;wget&amp;lt;/code&amp;gt;&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
Using &amp;quot;wget&amp;quot; with SOAP is possible, but a little complicated, because correct SOAP requests have to be constructed, and ticket-numbers be extracted from responses. It is much easier with the REST service.&lt;br /&gt;
&lt;br /&gt;
Assuming, you have a folder containing 3 suites &amp;quot;suiteA.ets&amp;quot;, &amp;quot;suiteB.ets&amp;quot; and &amp;quot;suiteC.ets&amp;quot;, and you want to send them to a running expecco slave via REST, here is how to do it:&lt;br /&gt;
&lt;br /&gt;
1) to check if the expecco slave is up and running, send it a&lt;br /&gt;
&lt;br /&gt;
=== Expecco Remote Control REST Service Interface ===&lt;br /&gt;
&lt;br /&gt;
A secondary REST service is available to interact with a running test.&lt;br /&gt;
This service is used by the &amp;quot;expecco remote control App&amp;quot;, which is available for Android devices (tablets and cell phones).&lt;br /&gt;
 &lt;br /&gt;
This accepts REST requests, via the URL &amp;quot;/remote&amp;quot;. I.e. the default URL is &amp;quot;host:9090/remote&amp;quot;.&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &amp;quot;host:9090/remote/protocolInfo&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
When this service is active, the standard Dialog requests (input boxes, with &amp;quot;OK&amp;quot;/&amp;quot;Cancel&amp;quot; buttons) will also be presented on the remote controlling app, and can be answered either on the PC-screen OR on a remote android device.&lt;br /&gt;
An obvious application of this is when the test system (hardware) needs manual interaction and you have to leave the workplace for this. Here, it is very convenient to be able to answer questions like &amp;quot;Insert Cable X and press OK to proceed&amp;quot; from a mobile device. Avoiding the need to walk back to the workplace to click on the &amp;quot;OK&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
=== Expecco Short Status Information Service ===&lt;br /&gt;
&lt;br /&gt;
This is a very simple HTTP service, which delivers a single page with a status overview.&lt;br /&gt;
This service is started when the &amp;quot;&amp;lt;code&amp;gt;--infoService&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;--server&amp;lt;/code&amp;gt;&amp;quot; command line arguments are present.&lt;br /&gt;
 &lt;br /&gt;
This accepts HTTP requests, via the URL &amp;quot;/info&amp;quot;. &lt;br /&gt;
I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/info&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The main use of this service is to quickly check the status of a testslave from a remote webbrowser,&lt;br /&gt;
without a need for a more complicated SOAP or REST service client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Back to [[Online_Documentation#Topic:_Execution | Online Documentation]]&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/en&amp;diff=8474</id>
		<title>Starting expecco via Command Line/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/en&amp;diff=8474"/>
		<updated>2017-04-02T12:43:32Z</updated>

		<summary type="html">&lt;p&gt;Ab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
expecco can be started manually via the command line, by batch or shell scripts or automatically via the crontab (Unix) or scheduled tasks / services (Windows) mechanism of the operating system. Thus, you can have tests to execute unattended and without GUI &amp;quot;overnight&amp;quot;. This is also the method to integrate expecco with other quality tools, such as Jenkins, HP-Quality Center, Polarion, expeccoALM etc.&lt;br /&gt;
 &lt;br /&gt;
Command line options allow for test suites to be loaded, executed and result files being generated without requiring user interaction.&lt;br /&gt;
&lt;br /&gt;
In addition to the above, expecco can also be started in a slave mode as a service, to wait for incoming test-run request from a QM system, such as expeccoALM or Polarion. Expecco can respond to request via SOAP or REST calls to load, execute and report test suites. The expeccoNET automation environment assumes that expecco is already running on each slave host, and each has been started with a  &amp;quot;--server&amp;quot; command line argument. It uses HTTP+SOAP/REST to communicate with those expecco slaves by default.&lt;br /&gt;
&lt;br /&gt;
In this later &amp;quot;slave mode&amp;quot;, expecco is installed to run as a daemon process (under Unix) or as a service (under Windows), and will be automatically started by the operating system, when it boots. The details of how it is installed vary between operating systems: under Unix, it needs to be registered in the init-tab-folder, under Windows it needs to be installed as a Windows service.&lt;br /&gt;
&lt;br /&gt;
== Command Line ==&lt;br /&gt;
&lt;br /&gt;
If expecco is started without command line arguments, it will open up showing the initial welcome screen. The same behavior as if started via the desktop.&lt;br /&gt;
&lt;br /&gt;
With a single file argument, expecco will read a test suite from the given file and open an editor window on it (but will not execute it). &lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco &amp;lt;testsuite filename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is the same behavior as if a test suite file (.ets) is dropped onto the expecco icon via the desktop.&lt;br /&gt;
&lt;br /&gt;
The simplest command line to execute a test suite is:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --execute &amp;lt;testsuite filename&amp;gt; ...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;testsuite filename&amp;gt; is the test suite&#039;s filename, as saved from within the expecco GUI application. This should be a saved &amp;quot;.ets&amp;quot; testSuite file. If more than one test suite filename is given, each is processed in sequence. All top-level test plans as found in the test suite(s) are executed (see below for more options).&lt;br /&gt;
&lt;br /&gt;
:By default, the overall execution outcome is returned by the command&#039;s return value (exit code), which is&lt;br /&gt;
::0        - all PASSED&lt;br /&gt;
::non-zero - any ERROR, FAILURES or INCONCLUSIVE items.&lt;br /&gt;
&lt;br /&gt;
The return value is useful if expecco is started via a makefile, or from jenkins for example. If the caller needs a different exit code, use one of the exitCodeOnXXX options as described below. This is useful to avoid a &#039;&#039;make&#039;&#039; or &#039;&#039;jenkins&#039;&#039; process from stopping.&lt;br /&gt;
&lt;br /&gt;
To get a list of available options, type:&lt;br /&gt;
 &#039;&#039;&#039;expecco --help&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Command Line Options ===&lt;br /&gt;
Command line options are handled at two places: the runtime system (Smalltalk/X VM) and the expecco application itself.&lt;br /&gt;
When expecco is started, the VM is first to look for command line arguments and processes any of the VM options, until&lt;br /&gt;
a non-VM option is encountered. It passes the remaining options to expecco&#039;s main entry.&lt;br /&gt;
Thus, any option which is given after the first non-VM option will not be handled by the VM, but by expecco. Therefore, no VM options should be placed after the first non-VM option. VM options are marked as &amp;quot;&#039;&#039;VM option&#039;&#039;&amp;quot; in the list below.&lt;br /&gt;
&lt;br /&gt;
Also, some options are specific to the operating system, on which expecco is executed. These are marked as &amp;quot;&#039;&#039;Windows&#039;&#039;&amp;quot;, &amp;quot;&#039;&#039;Linux&#039;&#039;&amp;quot; etc.&lt;br /&gt;
&lt;br /&gt;
=== Recommended Command Line Options ===&lt;br /&gt;
&lt;br /&gt;
To start expecco on an existing test suite, use:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco &amp;lt;testsuite filename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
this is also the way expecco is started, when a test suite file is double-clicked on the Linux or Windows desktop, or when a test-suite document is dropped onto the expecco icon.&lt;br /&gt;
The above opens the expecco GUI and loads the given test suite initially. However, it does not automatically execute any test.&lt;br /&gt;
&lt;br /&gt;
To execute a suite, add a &amp;quot;&#039;&#039;&#039;--execute&#039;&#039;&#039;&amp;quot; argument (or in expecco 2.10, &amp;quot;-E&amp;quot;), as in:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --execute &amp;lt;testsuite filename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You will notice, that expecco shows a banner intitially; this can be disabled with a &#039;&#039;&#039;--noBanner&#039;&#039;&#039; option. Also, under windows, a small tray icon is shown in the lower right, which provides a controlling UI. This is disabled with &#039;&#039;&#039;--noTray&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Finally, as mentioned before, the test&#039;s outcome is reported via the exit code. If you want a little more information on the status of individiual test cases, use a &#039;&#039;&#039;--verdicts&#039;&#039;&#039; option.&lt;br /&gt;
&lt;br /&gt;
This makes the following a good start for your command line:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --noBanner --noTray --verdicts --execute &amp;lt;testsuite filename&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
or, if you want to use a special parameter-file, to provide values for (some of) the project-variables:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --noBanner --noTray --verdicts --parameter &amp;amp;lt;param-file&amp;amp;gt; --execute &amp;amp;lt;filename&amp;amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Parameter files are XML, CSV or JSON-files containing key-value pairs. They are usually created by saving an environment from within the expecco GUI (see [[Environment Editor]]).&lt;br /&gt;
&lt;br /&gt;
All of the above command lines opened an expecco UI window.&lt;br /&gt;
To execute a suite without GUI, add a &amp;quot;&#039;&#039;&#039;--noWindow&#039;&#039;&#039;&amp;quot; argument.&lt;br /&gt;
&lt;br /&gt;
To compose &amp;quot;scatter-gather&amp;quot; test cases from possibly multiple suites, found in a directory use:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --suiteDirectory &amp;amp;lt;dirName&amp;amp;gt; --testCaseNames &amp;quot;T01,T02,T05&amp;quot; --execute&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
or, to explicitly specify the suite-files where test cases are taken from, use:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --testCaseNames &amp;quot;T01,T02,T05&amp;quot; --execute &amp;amp;lt;suiteFile1&amp;amp;gt;.ets &amp;amp;lt;suiteFile2&amp;amp;gt;.ets ...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Finally, to get a report, add a &amp;quot;&#039;&#039;&#039;--xxxReportFile &amp;amp;lt;fileName&amp;amp;gt;&#039;&#039;&#039;&amp;quot; argument, as in:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --noBanner --noWindow --noTray --verdicts --parameter &amp;amp;lt;param-file&amp;amp;gt;&#039;&#039;&#039; \&lt;br /&gt;
 &#039;&#039;&#039;        --pdfReportFile result.pdf --execute &amp;amp;lt;filename&amp;amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
All options are described in more detail below.&lt;br /&gt;
&lt;br /&gt;
=== Executing Multiple Test Suites in Sequence ===&lt;br /&gt;
&lt;br /&gt;
It is possible to run multiple (possibly different) test suites with one command line to reduce startup and project loading times.&lt;br /&gt;
For this, provide multiple &amp;quot;--execute &amp;amp;lt;filename&amp;amp;gt;&amp;quot; arguments to the command line, as in:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --execute &amp;amp;lt;suiteFile1&amp;amp;gt;.ets --execute &amp;lt;suiteFile2&amp;amp;gt;.ets ...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
with this command line, expecco first executes the toplevel testplan(s) from &amp;quot;suiteFile1.ets&amp;quot;, then those from &amp;quot;suiteFile2.ets&amp;quot;. All parameters (i.e. top-level variable values) will be taken from within the corresponing suite file.&lt;br /&gt;
&lt;br /&gt;
To change individual parameters, use &amp;quot;--parameter:key=value&amp;quot; arguments before the corresponing --execute argument. For example, to execute the same suite with different parameters, use a command line like:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;expecco --parameter:device=samsung --execute mobileTest.ets&#039;&#039;&#039; \&lt;br /&gt;
 &#039;&#039;&#039;        --parameter:device=nexus --execute mobileTest.ets&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Opening a Previous Result File ===&lt;br /&gt;
&lt;br /&gt;
As described below, expecco can generate result files in various formats and different detail. The pdf, html and junit outputs will contain summary information to be read by humans, archived or to be passed to other programs (eg. to jenkins for statistics).&lt;br /&gt;
&lt;br /&gt;
The native result file (.elf) contains all trace and logging information including the original test suite.&lt;br /&gt;
&lt;br /&gt;
As such, it can be archived to ensure that the test result can always be associated to the exact suite being executed, even if the suite file is lost or has been modified in the meanwhile.&lt;br /&gt;
&lt;br /&gt;
These .elf result files are generated either via corresponding command line options or manually via the &amp;quot;&#039;&#039;Test Results&#039;&#039;&amp;quot;-&amp;quot;&#039;&#039;Save Result As...&#039;&#039;&amp;quot; menu item.&lt;br /&gt;
Like regular suite files, they can be opened via the command line or via the &amp;quot;&#039;&#039;File&#039;&#039;&amp;quot;-&amp;quot;&#039;&#039;Open...&#039;&#039;&amp;quot; menu item.&lt;br /&gt;
&lt;br /&gt;
When opened, the original suite (at the time of execution), the trace- and log data and the execution times will be presented. It is even possible to re-execute individual blocks, test plans or the whole suite.&lt;br /&gt;
 &lt;br /&gt;
This feature is very powerful, in that it allows for the result file to be given to a developer and will help to analyse the data values, control flows and even to rerun tests  and reproduce errors/failures.&lt;br /&gt;
&lt;br /&gt;
=== Detailed Option Description ===&lt;br /&gt;
&lt;br /&gt;
==== Information/Debugging/Logging ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--help&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Prints an up-to-date list of possible options and command line arguments.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--version&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Prints the expecco release identification and exits.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--noBanner&amp;lt;/code&amp;gt;&#039;&#039;&#039; (&#039;&#039;VM option&#039;&#039;)&amp;lt;br&amp;gt;Suppress the splash startup banner.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--console&amp;lt;/code&amp;gt;&#039;&#039;&#039; (&#039;&#039;VM option&#039;&#039;, &#039;&#039;Windows only&#039;&#039;)&amp;lt;br&amp;gt;Open a debug console window for Stdout and Stderr.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--verbose&amp;lt;/code&amp;gt;&#039;&#039;&#039; (&#039;&#039;VM option&#039;&#039;)&amp;lt;br&amp;gt;Additional startup, execution and result info is sent in human readable format to the stderr output. This is mainly meant to analyze startup problems and is actually more useful for expecco developers. It may be too much of printout, so try &amp;quot;&#039;&#039;--verdicts&#039;&#039;&amp;quot; instead.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--debug&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Turns on startup debugging. By default, if an error occurs during startup, expecco terminates itself. With this option enabled, a command line debugger is opened instead. This is probably only useful for plugin developers.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--silent&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Suppresses most info, warning and error messages which are sent to stderr/stdout. This is mainly meant to remove unwanted informational messages (for example, when plugins cannot be loaded during startup, etc.).&amp;lt;br&amp;gt;(this option is available with expecco vsn &amp;gt;= 2.10)&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Startup ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--settings &amp;lt;fileName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Force using &amp;lt;fileName&amp;gt; instead of the default &amp;quot;&amp;lt;code&amp;gt;~/.expecco/.expeccoPreferences&amp;lt;/code&amp;gt;&amp;quot; to be used for the settings file name. Useful if you want different setups to be linked to different desktop icons, or to start expecco with particular settings from a batch or shell script. To generate a preferences file, open the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; - &#039;&#039;Settings&#039;&#039;&amp;quot; dialog, change the settings as required, and select the &amp;quot;&#039;&#039;File&#039;&#039;&amp;quot;-&amp;quot;&#039;&#039;Save As...&#039;&#039;&amp;quot; menu item.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--licenseFile &amp;lt;fileName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Use this license, instead of the default &amp;quot;&amp;lt;code&amp;gt;~/.expecco/.expeccoLicense&amp;lt;/code&amp;gt;&amp;quot;. If a license server (floating licenses) is used, the license server&#039;s hostname and port information is read from the settings file.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--licenseServerHost &amp;lt;hostName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Use this host as license server, instead of the one specified in the settings file (or if no settings file was ever specified). This may be needed when running expecco as a test slave (daemon or service).&amp;lt;br&amp;gt;(this option is available with expecco vsn &amp;gt;= 2.10)&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--licenseServerPort &amp;lt;portNr&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Use this port-nr when contacting the license server, instead of the one specified in the settings file (or if no settings file was ever specified). This may be needed when running expecco as a test slave (daemon or service).&amp;lt;br&amp;gt;(this option is available with expecco vsn &amp;gt;= 2.10)&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--noTray&amp;lt;/code&amp;gt;&#039;&#039;&#039; (&#039;&#039;Windows only&#039;&#039;)&amp;lt;br&amp;gt;Disable the tray control icon (server and execute modes only).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--tray&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Force a tray window to be shown, even if running in non-server (slave) mode. The tray window displays the current execution status, memory situation, thread status and other internal information, which is probably only useful for developers.&amp;lt;br&amp;gt;(this option is available with expecco vsn &amp;gt;= 2.10)&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--noWindow&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Do not open the main window (useful when scripting or executing only).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--noDisplay&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Do not open any window (useful when scripting or executing only).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--noPlugins&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Disable plugin loading. This makes startup somewhat faster, depending on the number of plugins found in your installation directory. You can still force individual plugins to be loaded using the &amp;quot;&#039;&#039;&#039;--loadPlugin&#039;&#039;&#039;&amp;quot; option. Use &amp;quot;&#039;&#039;--noPlugins&#039;&#039;&amp;quot; followed by a list of individual &amp;quot;&#039;&#039;--loadPlugin&#039;&#039;&amp;quot; options, to tune startup time with a minimum set of required plugins being loaded.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--loadPlugin &amp;lt;pluginName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Force loading a specific plugin. This is only useful if a &amp;quot;&#039;&#039;&#039;--noPlugins&#039;&#039;&#039;&amp;quot; option was given before. &#039;&#039;pluginName&#039;&#039; is the name of the folder in the &amp;quot;plugin&amp;quot; folder (under the expecco installation folder). Use &amp;quot;&#039;&#039;--noPlugins&#039;&#039;&amp;quot; followed by a list of individual &amp;quot;loadPlugin&amp;quot; options, to tune startup time with a minimum set of required plugins being loaded.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--noUpdateCheck&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;If configured by the user&#039;s settings, expecco automatically checks for updates and patches when started (by checking the exept web-server for the presence of new patch files). This option disables that check, even if configured in the settings. Notice, that this is usually controlled by the user settings; however, in situations where settings are shared among multiple machines (network drive) and a test host has no (or should not have) internet access, it may be useful to disable this from the command line. It is especially useful, if you are disconnected from the Internet (isolated test-lab), to avoid time delays resulting from connection failures.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--requireLogin&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Opens expecco in a (lightweight) multi-user mode, in which a username must be entered before the actual interaction with expecco begins. This user name will be used to load custom per-user settings (named &amp;quot;&amp;lt;code&amp;gt;.expeccoSettings_&amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;&amp;quot;) and will also be used in the generated reports. Also, the &amp;quot;&#039;&#039;File&#039;&#039;&amp;quot; menu will contain an additional &amp;quot;&#039;&#039;Logout&#039;&#039;&amp;quot; menu item, which brings back the initial login dialog.&amp;lt;br&amp;gt;This mode is useful, if expecco is used on a machine by multiple users, and expecco should remain opened (i.e. as a test stand). For example in a production floor, where tests are executed in multiple shifts by multiple operators.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--load &amp;lt;fileName or packageName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Loads a class file, extension or user plugin. The argument must be either the name of a Smalltalk source or binary file, or the name of a package (which must be found in the &amp;quot;&amp;lt;code&amp;gt;packages&amp;lt;/code&amp;gt;&amp;quot; subfolder under the expecco installation folder). For details on how to generate such packages, read [[Creating_new_Class_Library_Packages/en | &amp;quot;Creating new Class Library Packages&amp;quot;]].&lt;br /&gt;
&lt;br /&gt;
==== Test Execution ====&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--execute &amp;amp;lt;fileName&amp;amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;read and execute a suite. Starting with expecco 2.10, you can also use &amp;quot;-E &amp;amp;lt;fileName&amp;amp;gt;&amp;quot;, which makes the command line a bit shorter.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--execute&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;without a filename, this should be the last argument of a scatter-gather dynamically generated suite command (see below: scatter-gather tests)&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test Selection  ====&lt;br /&gt;
&lt;br /&gt;
the following options allow for individual test plans to be selected for execution from a suite which contains multiple test plans. Without any such option, &#039;&#039;--execute&#039;&#039; will run all top-level testplans found in the suite in sequence.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--testPlanName &amp;lt;namePattern&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Only execute test plans with a matching name.&amp;lt;br&amp;gt;For backward compatibility, &amp;quot;&#039;&#039;&#039;&amp;lt;code&amp;gt;--testSuiteName &amp;lt;namePattern&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;quot; is still supported and has the same effect.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--testPlanTag &amp;lt;tagPattern&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Only execute test plans with a matching tag.&amp;lt;br&amp;gt;For backward compatibility, &amp;quot;&#039;&#039;&#039;&amp;lt;code&amp;gt;--testSuiteTag &amp;lt;tagPattern&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;quot; is still supported and has the same effect.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--testPlanID &amp;lt;uuid&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Only execute that particular test plan (repeat to execute multiple test plans).&amp;lt;br&amp;gt;Starting with release 2.7, the following shortcut can also be used: &#039;&#039;&#039;&amp;lt;code&amp;gt;--testSuiteID &amp;quot;&amp;lt;uuid1&amp;gt;,&amp;lt;uuid2&amp;gt;,...,&amp;lt;uuidN&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;&#039;&#039;&#039;.&amp;lt;br&amp;gt;For backward compatibility, &amp;quot;&#039;&#039;&#039;&amp;lt;code&amp;gt;--testSuiteID &amp;lt;uuid&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;quot; is still supported and has the same effect.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Scatter Gather Test Suite Composition ====&lt;br /&gt;
&lt;br /&gt;
these options allow for a test plan to be composed out of a single or multiple of individual suite files. When composing, a new test plan is temporarily created, which contains the specified test cases. This is in contrast to the above options, where preexisting test plans are selected for execution.&lt;br /&gt;
&lt;br /&gt;
Typically, this kind of composition is used when expecco is called from a QA system, such as Polarion or HP Quality Centre, where individual &amp;quot;test sets&amp;quot; are composed out of a collection of existing test cases. &lt;br /&gt;
&lt;br /&gt;
Notice, that this may lead to longer startup times, depending on the number of suites found in the suite directory, because suite files there will be opened and searched for matching test cases. If the same set of tests needs to be executed multiple times, it may be agood idea to use the &amp;quot;--saveSuite&amp;quot; option, to have the composed suite saved into a file for later reuse.&lt;br /&gt;
&lt;br /&gt;
Also notice, that this works best, if testcase have unique names or are known by their ID (which is globally unique). If your test management system can provide unique identifiers, these should be used to name your testcases inside the suite (typically, a unique name of the test-case or requirement is used to name corresponding test-cases).&lt;br /&gt;
&amp;lt;br&amp;gt;(These options are only available in release &amp;amp;ge; 2.7)&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--suiteDirectory &amp;lt;dirName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;defines the directory, where test suite files are searched for composed test plans. Test cases as specified in one of the options below must be found in one of the files present there. Notice, that the first file which contains a requested test case action will be chosen. Thus, you should ensure, that only one version of each suite is present there. Typically, an up-to-date test suite directory as checked out from the revision control system is specified here. If this argument is not given, test cases are searched in the list of explicitly listed suite files (&amp;quot;.ets&amp;quot; arguments).&amp;lt;p&amp;gt;This option also specifies the directory where suites are found for remote execution (see description of SOAP and REST services below).&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--suiteTitle &amp;lt;string&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;defines the name of the new test plan, which is created dynamically. This is used to control the labels in the generated report files.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--testCaseNames &amp;lt;name-list&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;defines the test cases to be included in the test by name. name-list is a list of comma-separated names of the individual test actions.&amp;lt;br&amp;gt;Please only use this option, if your testcases have unique names and are found only once in any suite found in the suite directory. Otherwise, the first suite which contains that name will be chosen (see below for better selection options).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--testCaseFIDs &amp;lt;id-list&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;defines the test cases to be included in the test by function ID. id-list is a list of comma-separated UUIDs of the individual test actions.&amp;lt;br&amp;gt;This option is probably not very user-friendly for a human, but allows for a calling program (or script) that the testcase is found even if it has been renamed in the meanwhile (remember that functional IDs are assigned once when an item is created and remain unchanged over the whole lifetime).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--testCaseIDs &amp;lt;id-list&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;defines the test cases to be included in the test by version ID. id-list is a list of comma-separated UUIDs of the individual test actions.&amp;lt;br&amp;gt;This option may be very unfriendly for a human user, but allows for a calling program (or script) to ensure that a particular testcase with a particular version is found and executed, even if the testcase has been renamed or modified in the meantime (remember that the ID is changed with every modification). If the same testcase is found in multiple suite files (i.e. in different versions), this will ensure that the correct version will be executed&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--saveSuite &amp;lt;fileName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;saves the generated as-hoq suite. Useful if you want to archive such a dynamically generated scatter-gather suite separately from the result file(s), or to automatically construct new suites. Notice that the &amp;quot;.elf&amp;quot; result file will always include the generated ad-hoq suite, so archival of the generated ad-hoq suite is only needed if you generate pdf, html or other non-elf reports.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test Parameters ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--parameter &amp;amp;lt;fileName&amp;amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039; / &#039;&#039;&#039;&amp;lt;code&amp;gt;-P &amp;amp;lt;fileName&amp;amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Load a parameter set from a file. A parameter set contains values for a test suite&#039;s top environment. This can be either in XML format, as generated with the [[Environment_Editor|&amp;quot;&#039;&#039;Save-Parameter-Set&#039;&#039;&amp;quot; menu function]], a CSV file, containing key-value pairs or a JSON file containing a JSON dictionary object.&amp;lt;p&amp;gt;Parameter files in either format can be created manually in a text editor, provided by a QM system (such as expeccoALM, HP Quality Center or similar), generated by another controlling program or generated by expecco itself via the &amp;quot;&#039;&#039;Save-Parameter&#039;&#039;&amp;quot; menu function of the [[Environment_Editor|environment editor]].&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;The parameter file may contain values for a subset of the environment variables. In this case, the values from the parameter file overwrite corresponding values present in the loaded test suite, leaving other values unchanged.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--parameter:&amp;amp;lt;key&amp;amp;gt;=&amp;amp;lt;value&amp;amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039; / &#039;&#039;&#039;&amp;lt;code&amp;gt;-P:&amp;amp;lt;key&amp;amp;gt;=&amp;amp;lt;value&amp;amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Sets an individual parameter for the next &amp;quot;--execute&amp;quot; argument.&amp;lt;p&amp;gt;If multiple &amp;quot;--execute&amp;quot; arguments are given (i.e. multiple suites are to be executed in sequence), these parameter values are collected and given to the next execution only, and overwrite corresponding values from either a parameter set (see above) or from the suite itself.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;Thus, it is possible to execute the same suite with different parameters in one command line (see example above).&amp;lt;br&amp;gt;(this option is available with expecco vsn &amp;gt;= 2.10)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test Execution via Scripting ====&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--scriptFile &amp;amp;lt;fileName&amp;amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;read and execute a script from a file (see scripting below).&lt;br /&gt;
&lt;br /&gt;
==== Reporting ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--verdicts&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Send execution and result info in human readable format to the stderr output. (see [[#Verdicts Example|example below]].)&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--logFile &amp;lt;fileName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Used to change the name of the generated log file, where stderr is written to.&amp;lt;br&amp;gt;This is only useful if running in server mode.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--exitCode &amp;lt;n&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Defines the exit code to be used independent of the test outcome.&amp;lt;br&amp;gt;The default is 0 (zero) if all tests pass, and non-zero when they do not. However, some calling programs (make/jenkins,...) may misinterpret this exit code and treat the whole job as non-executable. Use this flag to prevent this. It is still possible to change the exitCode for a particular outcome by adding one of the following options after this option.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--exitCodeOnFail &amp;lt;n&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Defines the exit code in case any test ends with a test-failure status.&amp;lt;br&amp;gt;The default is 0 (zero), so that when you run expecco out of make, jenkins or other tools which check for the exit status, the calling program does not interpret this status as if expecco itself failed to execute. This option also changes the exitCodeOnError and exitCodeOnInconclusive values (see below), unless explicitly defined by those options.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--exitCodeOnError &amp;lt;n&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Defines the exit code in case any test ends with a test-error status.&amp;lt;br&amp;gt;The default is 0 (zero), so that when you run expecco out of make, jenkins or other tools which check for the exit status, the calling program does not interpret this status as if expecco itself failed to execute. This option also changes the exitCodeOnInconclusive values (see below), unless explicitly defined by that option.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--exitCodeOnInconclusive &amp;lt;n&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Defines the exit code in case any test ends with an inconclusive status.&amp;lt;br&amp;gt;The default is 0 (zero), so that when you run expecco out of make, jenkins or other tools which check for the exit status, the calling program does not interpret this status as if expecco itself failed to execute.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--elfReportFile &amp;lt;elfFilename&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Writes a report in expecoo&#039;s native XML logfile format. The report contains a lot of detail information and could be processed by an XSLT processor or a similar tool. It also contains enough additional information about test plans and actions so that expecco can redisplay the activity log tree from this file. The generated file can be opened directly via the command line (&amp;quot;expecco &amp;lt;file&amp;gt;.elf&amp;quot;) or by double clicking on the elf-file in the operating system&#039;s desktop.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--csvReportFile &amp;lt;csvFilename&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Writes a summary report in CSV format. Each row consists of:&amp;lt;br&amp;gt;&lt;br /&gt;
** &#039;&#039;TESTSUITE&#039;&#039; - the filename&lt;br /&gt;
** &#039;&#039;TESTPLAN&#039;&#039;  - the test plan&lt;br /&gt;
** &#039;&#039;TESTCASE&#039;&#039;  - the test case&lt;br /&gt;
** &#039;&#039;VERDICT&#039;&#039;   - the test result; one of SUCCESS, FAILED, ERROR or INCONCLUSIVE&lt;br /&gt;
** &#039;&#039;INFO&#039;&#039;      - additional info in case of failure&lt;br /&gt;
:Additional pseudo verdicts such as STARTTIME, ENDTIME etc. are written. A typical CVS output file can be found in the [[#CSV File Example|examples]].&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--textReportFile &amp;lt;textFilename&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Writes a summary report in a human readable textual format. A typical text output file can be found in the [[#Textual File Example|examples]].&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--xmlReportFile &amp;lt;xmlFilename&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Writes a report in XML format. The report contains a lot of detail information and could usually be processed by an XSLT processor or simular tool. A typical XML output file can be found in the [[#XML File Example|examples]].&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--pdfReportFile &amp;lt;pdfFilename&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Writes a summary report in pdf format.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--htmlReportFile &amp;lt;htmlFilename&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Writes a summary report in html format.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--junitReportFile &amp;lt;htmlFilename&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Writes a summary report in a junit compatible XML format. Useful, when expecco is to be started by jenkins or similar driver programs.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--polarionReportFile &amp;lt;htmlFilename&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Writes a summary report in an XML format which is especially suited for the Polarion QM tool. The structure of the generated XML is the same as with the junit format above, but a slightly different time format is used.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--reportTemplateName &amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Use the given report template (must be an element inside the test suite) for the following &amp;quot;--xxxReportFile&amp;quot; argument. If no such argument is given, the default template as defined in the suite is used.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Services ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--server&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Starts expecco in server mode. This combines the &amp;quot;&#039;&#039;--service&#039;&#039;&amp;quot;, &amp;quot;&#039;&#039;--infoService&#039;&#039;&amp;quot; and &amp;quot;&#039;&#039;--remoteControlService&#039;&#039;&amp;quot; flags. All of those services as described below are started with that single command line argument.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--service&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Starts expecco in server mode. In this mode, HTTP-SOAP and HTTP-REST requests can be used to remote-control expecco&#039;s execution; especially, to execute and monitor tests, and upload results. The most obvious use for this is for expecco to act as an execution host (test slave) for an expeccoALM or Polarion server.&amp;lt;br&amp;gt;However, because standard protocols are used, this may also be used to interface the execution engine to many other QM management or automation systems (e.g. HP Quality Centre). The interface is described below.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--infoService&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Provide an additional info service which allows for monitoring and control of an expecco server via a web browser (server mode only).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--remoteControlService&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Provide an additional service to interact with a running test. Dialog requests, single stepping, starting, pausing and stopping of tests is possible via remote REST requests. This service is used by the Android remote control app, which is available upon request (server mode only).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--port &amp;lt;portNr&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Used to change the HTTP and SOAP port numbers, when running in server mode.&amp;lt;br&amp;gt;The default is 9090 (server mode only).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--scripting &amp;lt;portNr&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Enable scripting (remote control via Telnet ascii interface) on portNr ([[#Scripting Example|see more below]]).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--allowHost &amp;lt;hostName&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Allow hostName to connect to the scripting port. Repeat for multiple hosts (see more below).&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Utility Functions ====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;--diff &amp;lt;file1&amp;gt; &amp;lt;file2&amp;gt;&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Print differences between two test suites. This can be used eg. to automatically generate log messages for a revision control system (please read the section on &amp;quot;Integration with Source Code Management System&amp;quot; below).&amp;lt;br&amp;gt;(This function is only available in release &amp;amp;ge; 2.7)&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Command Exit Status ===&lt;br /&gt;
&lt;br /&gt;
*0 - all tests passed&lt;br /&gt;
&lt;br /&gt;
*&amp;gt;0 various other errors (command line, file not found, etc.)&lt;br /&gt;
&lt;br /&gt;
*101 - at least one test failed (FAIL status). This exitCode can be overwritten by a command line argument.&lt;br /&gt;
&lt;br /&gt;
*102 - at least one test was inconcusive (INCONCLUSIVE status). This exitCode can be overwritten by a command line argument.&lt;br /&gt;
&lt;br /&gt;
*103 - at least one test lead to an error (ERROR status). This exitCode can be overwritten by a command line argument.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The diff option returns 0 if the compared suites are the same, or 200+n, (where n is the number of differences) otherwise.&lt;br /&gt;
&lt;br /&gt;
== Sample Outputs ==&lt;br /&gt;
&lt;br /&gt;
The following output files were generated by executing the test suite from the file:&lt;br /&gt;
:&amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;quot;&lt;br /&gt;
which contains a single test plan named:&lt;br /&gt;
:&amp;quot;Example Testplan&amp;quot;&lt;br /&gt;
which contains three test cases named:&lt;br /&gt;
:&amp;quot;Test1&amp;quot;&lt;br /&gt;
:&amp;quot;Test2&amp;quot;&lt;br /&gt;
:&amp;quot;Test3-Should fail&amp;quot;&lt;br /&gt;
of which the first two are supposed to PASS and the last one generates an ERROR.&lt;br /&gt;
&lt;br /&gt;
All timestamp information is written in ISO8601 format.&lt;br /&gt;
&lt;br /&gt;
Be reminded that the following reports are condensed reports, which only contain a subset of the information contained in expecco&#039;s native &amp;quot;.elf&amp;quot; file format. The &amp;quot;elf&amp;quot; file contains all of the execution, trace and data-flow information and the original suite as executed. &amp;quot;elf&amp;quot;-files can be reloaded at any time into the expecco UI and the test be reexecuted. Also, any of the other reports can be regenerated, posyibly with different report options (i.e. detail). &lt;br /&gt;
&lt;br /&gt;
Thus it is highly recommended that these &amp;quot;elf&amp;quot; files are archived after a test run, in addition to any of the condensed report files (eg. pdf or junit report).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CSV File Example (&amp;quot;&amp;lt;code&amp;gt;--csvReportFile&amp;lt;/code&amp;gt;&amp;quot; option) ===&lt;br /&gt;
&lt;br /&gt;
By default, entries are separated by &amp;quot;;&amp;quot;-characters. Additional double quotes (&amp;quot;) are used to delimit strings with embedded &amp;quot;;&amp;quot; or spaces. Any double quote within such a string is doubled.&lt;br /&gt;
CSV is a simple and very common interchange format.&lt;br /&gt;
For example, CSV files can be imported into Microsoft Word, Exel and Openoffice (and many other).&lt;br /&gt;
&lt;br /&gt;
 TESTSUITE;TESTPLAN;TESTCASE;VERDICT;INFO&lt;br /&gt;
 ;;;StartTime;2008-10-31T08:57:13.689&lt;br /&gt;
 &amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;quot;;&amp;quot;Example Testplan&amp;quot;;Test1;PASSED;  &lt;br /&gt;
 &amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;quot;;&amp;quot;Example Testplan&amp;quot;;Test2;PASSED;  &lt;br /&gt;
 &amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;quot;;&amp;quot;Example Testplan&amp;quot;;&amp;quot;Test3 - Should fail&amp;quot;;ERROR;   &lt;br /&gt;
 ;;;EndTime;2008-10-31T08:57:18.746&lt;br /&gt;
&lt;br /&gt;
=== XML File Example (&amp;quot;&amp;lt;code&amp;gt;--xmlReportFile&amp;lt;/code&amp;gt;&amp;quot; option) ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;SummaryReport&amp;gt;&lt;br /&gt;
   &amp;lt;StartTime&amp;gt;2008-10-31T08:56:49.774&amp;lt;/StartTime&amp;gt; &lt;br /&gt;
   &amp;lt;TestSuite&amp;gt;&lt;br /&gt;
     &amp;lt;File&amp;gt;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;lt;/File&amp;gt; &lt;br /&gt;
     &amp;lt;TestPlan&amp;gt;&lt;br /&gt;
       &amp;lt;Name&amp;gt;Example Testplan&amp;lt;/Name&amp;gt; &lt;br /&gt;
       &amp;lt;TestCase&amp;gt;&lt;br /&gt;
         &amp;lt;Name&amp;gt;Test 1&amp;lt;/Name&amp;gt; &lt;br /&gt;
         &amp;lt;Verdict&amp;gt;PASSED&amp;lt;/Verdict&amp;gt; &lt;br /&gt;
       &amp;lt;/TestCase&amp;gt;&lt;br /&gt;
       &amp;lt;TestCase&amp;gt;&lt;br /&gt;
         &amp;lt;Name&amp;gt;Test 2&amp;lt;/Name&amp;gt; &lt;br /&gt;
         &amp;lt;Verdict&amp;gt;PASSED&amp;lt;/Verdict&amp;gt; &lt;br /&gt;
       &amp;lt;/TestCase&amp;gt;&lt;br /&gt;
       &amp;lt;TestCase&amp;gt;&lt;br /&gt;
         &amp;lt;Name&amp;gt;Test 3 - Should fail&amp;lt;/Name&amp;gt; &lt;br /&gt;
         &amp;lt;Verdict&amp;gt;ERROR&amp;lt;/Verdict&amp;gt; &lt;br /&gt;
       &amp;lt;/TestCase&amp;gt;&lt;br /&gt;
     &amp;lt;/TestPlan&amp;gt;&lt;br /&gt;
   &amp;lt;/TestSuite&amp;gt;&lt;br /&gt;
   &amp;lt;EndTime&amp;gt;2008-10-31T08:56:55.142&amp;lt;/EndTime&amp;gt; &lt;br /&gt;
 &amp;lt;/SummaryReport&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is not to be confused with the &amp;quot;elf&amp;quot; result file format, which is also XML based, but contains a lot more detail. &lt;br /&gt;
&lt;br /&gt;
Notice also, that the junit report format (&amp;quot;&amp;lt;code&amp;gt;--junitReport&amp;lt;/code&amp;gt;&amp;quot; option) is similar in structure but uses different tags.&lt;br /&gt;
Junit reports are compatible to reports generated by Java jUnit frameworks.&lt;br /&gt;
They can thus be used to generate reports and trends in Jenkins/Hudson and other tools which understand the jUnit report format.&lt;br /&gt;
&lt;br /&gt;
=== Textual File Example (&amp;quot;&amp;lt;code&amp;gt;--textReportFile&amp;lt;/code&amp;gt;&amp;quot; option) ===&lt;br /&gt;
&lt;br /&gt;
 Test Execution Summary&lt;br /&gt;
   Start: 2008-10-31 08:56:12.751&lt;br /&gt;
   TestSuite: &amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&lt;br /&gt;
     TestPlan: Example Testplan&lt;br /&gt;
       Test 1 ....................... PASSED&lt;br /&gt;
       Test 2 ....................... PASSED&lt;br /&gt;
       Test 3 - Should fail ......... ERROR&lt;br /&gt;
   Finish: 2008-10-31 08:56:18.009&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--Orginal:&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&lt;br /&gt;
TESTSUITE;TESTPLAN;TESTCASE;VERDICT;INFO&lt;br /&gt;
;;;StartTime;2008-10-31T08:57:13.689&lt;br /&gt;
&amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;quot;;&amp;quot;Example Testplan&amp;quot;;Test1;PASSED;  &lt;br /&gt;
&amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;quot;;&amp;quot;Example Testplan&amp;quot;;Test2;PASSED;  &lt;br /&gt;
&amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;quot;;&amp;quot;Example Testplan&amp;quot;;&amp;quot;Test3 - Should fail&amp;quot;;ERROR;   &lt;br /&gt;
;;;EndTime;2008-10-31T08:57:18.746&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&amp;lt;SummaryReport&amp;gt;&lt;br /&gt;
  &amp;lt;StartTime&amp;gt;2008-10-31T08:56:49.774&amp;lt;/StartTime&amp;gt; &lt;br /&gt;
  &amp;lt;TestSuite&amp;gt;&lt;br /&gt;
    &amp;lt;File&amp;gt;C:\Programme\exept\expecco\testsuites\projects\Example.ets&amp;lt;/File&amp;gt; &lt;br /&gt;
    &amp;lt;TestPlan&amp;gt;&lt;br /&gt;
      &amp;lt;Name&amp;gt;Example Testplan&amp;lt;/Name&amp;gt; &lt;br /&gt;
      &amp;lt;TestCase&amp;gt;&lt;br /&gt;
        &amp;lt;Name&amp;gt;Test 1&amp;lt;/Name&amp;gt; &lt;br /&gt;
        &amp;lt;Verdict&amp;gt;PASSED&amp;lt;/Verdict&amp;gt; &lt;br /&gt;
      &amp;lt;/TestCase&amp;gt;&lt;br /&gt;
      &amp;lt;TestCase&amp;gt;&lt;br /&gt;
        &amp;lt;Name&amp;gt;Test 2&amp;lt;/Name&amp;gt; &lt;br /&gt;
        &amp;lt;Verdict&amp;gt;PASSED&amp;lt;/Verdict&amp;gt; &lt;br /&gt;
      &amp;lt;/TestCase&amp;gt;&lt;br /&gt;
      &amp;lt;TestCase&amp;gt;&lt;br /&gt;
        &amp;lt;Name&amp;gt;Test 3 - Should fail&amp;lt;/Name&amp;gt; &lt;br /&gt;
        &amp;lt;Verdict&amp;gt;ERROR&amp;lt;/Verdict&amp;gt; &lt;br /&gt;
      &amp;lt;/TestCase&amp;gt;&lt;br /&gt;
    &amp;lt;/TestPlan&amp;gt;&lt;br /&gt;
  &amp;lt;/TestSuite&amp;gt;&lt;br /&gt;
  &amp;lt;EndTime&amp;gt;2008-10-31T08:56:55.142&amp;lt;/EndTime&amp;gt; &lt;br /&gt;
&amp;lt;/SummaryReport&amp;gt;&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------&lt;br /&gt;
Test Execution Summary&lt;br /&gt;
  Start: 2008-10-31 08:56:12.751&lt;br /&gt;
&lt;br /&gt;
  TestSuite: &amp;quot;C:\Programme\exept\expecco\testsuites\projects\Example.ets&lt;br /&gt;
    TestPlan: Example Testplan&lt;br /&gt;
      Test 1 ....................... PASSED&lt;br /&gt;
      Test 2 ....................... PASSED&lt;br /&gt;
      Test 3 - Should fail ......... ERROR&lt;br /&gt;
&lt;br /&gt;
  Finish: 2008-10-31 08:56:18.009&lt;br /&gt;
------------------------------------------------------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Verdicts Example ===&lt;br /&gt;
&lt;br /&gt;
the &amp;quot;&amp;lt;code&amp;gt;--verdicts&amp;lt;/code&amp;gt;&amp;quot; option generates a simple trace on the standard error (to be redirected into a file):&lt;br /&gt;
&lt;br /&gt;
 C:\selftest\commandLineArgs&amp;gt; expecco --noBanner --noTray --verdicts &lt;br /&gt;
 --parameter paramesForTest.xpar --execute parameterTest.ets&amp;lt;br&amp;gt;&lt;br /&gt;
 Expecco [info]: start testSuite &amp;quot;parameterTest.ets&amp;quot;...&lt;br /&gt;
 Expecco [info]: using parameters &amp;quot;paramesForTest.xpar&amp;quot;...&lt;br /&gt;
 Expecco [info]: start testPlan &amp;quot;Test Parameters From CommandLine&amp;quot;&lt;br /&gt;
 Expecco [info]: start testCase &amp;quot;Validate Parameters&amp;quot;&lt;br /&gt;
 Expecco [info]: done testCase &amp;quot;Validate Parameters&amp;quot;; STATUS=PASSED&lt;br /&gt;
 Expecco [info]: done testPlan &amp;quot;Test Parameters From CommandLine&amp;quot;; STATUS=PASSED&lt;br /&gt;
 Expecco [info]: done testSuite &amp;quot;parameterTest.ets&amp;quot;; STATUS=PASSED&lt;br /&gt;
&lt;br /&gt;
== Integration with Quality Managament and Automation Tools ==&lt;br /&gt;
&lt;br /&gt;
=== Integration with Jenkins ===&lt;br /&gt;
&lt;br /&gt;
To have expecco tests being executed automatically by Jenkins, take the following example as a guideline. This is a real world setup, taken from our own setup within eXept.&lt;br /&gt;
&lt;br /&gt;
# Create a test job, which is triggered by a successful build (or a change in the test suite repository)&lt;br /&gt;
# Check the &amp;quot;Block Build while prerequisite Jobs are Active&amp;quot; flag&lt;br /&gt;
# Check either the &amp;quot;Trigger from Source Code Management&amp;quot; or the &amp;quot;Trigger from other Job&amp;quot; flags&lt;br /&gt;
# Check &amp;quot;Abort build if it is Stuck&amp;quot; (just to make sure, that a faulty suite does not block Jenkins)&lt;br /&gt;
# Check &amp;quot;Fail the Build if Stuck&amp;quot; and give it a reasonable elastic Time-out Strategy (we use 300% of the last 10 builds, to make sure a longer execution time due to more test cases will not be interpreted as a stuck, and an extra timeout of 30 minutes. The timeout is very generous for the expected execution time of a few minutes).&lt;br /&gt;
# Check &amp;quot;Run xvnc during Build&amp;quot; to allow for monitoring, what is going on. This is also required, if the test needs a UI.&lt;br /&gt;
# Define the &amp;quot;Build Procedure&amp;quot; as &amp;quot;Execute Shell Script&amp;quot; (Unix/Linux) or &amp;quot;Execute Batch Job&amp;quot; (Windows)&lt;br /&gt;
# Enter a build procedure similar to the ours, which is:&lt;br /&gt;
#::&amp;lt;code&amp;gt;cd exept\expecco\application&lt;br /&gt;
#::del *.junit&lt;br /&gt;
#::expecco.com --noBanner --exitOnInternalError --noTray \&lt;br /&gt;
#::::--jUnitReportFile selfTestResult.junit \&lt;br /&gt;
#::::--execute ..\projects\expecco\eXpeccoSelfTest.ets&lt;br /&gt;
#::expecco.com --noBanner --noTray \&lt;br /&gt;
#::::--jUnitReportFile CommunicationWithExpeccoNETResult.junit \&lt;br /&gt;
#::::--execute ..\projects\expecco\CommunicationWithExpeccoNET.ets&amp;lt;/code&amp;gt;&lt;br /&gt;
#:The details (especially paths and names) will of cause be different in your setup. The above uses the relative paths as it first changes the current directory to where the previous build has compiled the executable, which will of course not be the case in your setup.&lt;br /&gt;
# Define a &amp;quot;Post-build Action&amp;quot;&lt;br /&gt;
# Check &amp;quot;Publish Junit Test Results&amp;quot;&lt;br /&gt;
# Enter a path expression to declare the location of the resulting reports. Here, we used:&amp;lt;PRE&amp;gt;exept\expecco\application\*.junit&amp;lt;/PRE&amp;gt;&lt;br /&gt;
# Check the &amp;quot;Publish Test Attachments&amp;quot; flag, so the results will be presented in the Jenkins management console&lt;br /&gt;
&lt;br /&gt;
That&#039;s it! Because expecco has been told to generate jUnit compatible report files, we can use Jenkins&#039; existing jUnit support. However, the jUnit xml format does not support the full range of information which is present in the native expecco result files (especially the activity log and pin value information is not included). Therefore, it is a good idea to also generate a regular &amp;quot;.elf&amp;quot; (expecco log file) and add it to the archived build artefacts.&lt;br /&gt;
&lt;br /&gt;
=== Integration with expeccoALM ===&lt;br /&gt;
Expecco and ExpeccoALM (formerly called &amp;quot;&#039;&#039;expeccoNET&#039;&#039;&amp;quot;) have been originally designed to work together. Therefore, only a minimum setup is required:&lt;br /&gt;
# ensure that an expecco test execution slave is running on each test host (server farm, virtual machines, etc.). Depending on the operating system, this is either done by installing expecco as a service (Windows), or by adding appropriate startup actions to your &amp;quot;init.d&amp;quot; files (Unix).&lt;br /&gt;
# define the test host(s) in expeccoALM.&lt;br /&gt;
# (optionally) define the devices available and attached to the execution slave machine in expeccoALM&lt;br /&gt;
&lt;br /&gt;
ExpeccoALM will ask the expecco slaves about their operating system environment. So jobs will be automatically executed on matching CPU/OS machines. However, if tests require special resources (devices) to be attached, these must be defined and listed in expeccoALM as well. If your test has corresponding resource-requirements defined (see resources/inventory), expeccoALM will both ensure that the test will execute on the correct machine, and also reserve the resource during the execution. Also, test scheduling, if defined to be automatic, will be optimized to minimize resource usage, and to ensure that a higher number of tests can be executed in parallel.&lt;br /&gt;
&lt;br /&gt;
=== Integration into a SOA Infrastructure ===&lt;br /&gt;
&lt;br /&gt;
For this, expecco should be started on the test host(s) in so called &amp;quot;slave&amp;quot; mode.&lt;br /&gt;
In this mode, expecco awaits for execution commands via SOAP or REST, executes tests in the background and returns status information (progress) and results (reports).&lt;br /&gt;
&lt;br /&gt;
Because tests may execute for a long time (hours or even days), the execution is performed asynchonously; first, the test has to be downloaded to the slave, then execution started. The start-command returns a ticket, which is a test-run-identifier, by which the execution progress can be queried (polled) while the test is running. Finally, a &amp;quot;finished&amp;quot; status is returned, upon which the result can be aquired via another service call.&lt;br /&gt;
&lt;br /&gt;
Multiple such test slaves can be started on multiple machines, and each test slave may (if required) execute multiple tests in parallel (although this is usually limited to one, to avoid conflicts when external resources are accessed).&lt;br /&gt;
&lt;br /&gt;
To start expecco in slave mode, use the command line:&lt;br /&gt;
 expecco --service&lt;br /&gt;
&lt;br /&gt;
or, if the default port (9090) is not available, use:&lt;br /&gt;
 expecco --service --port 9090&lt;br /&gt;
&lt;br /&gt;
The service interface is described below; typically, you can talk to expecco via:&lt;br /&gt;
 http://localhost:9090/expeccoService&lt;br /&gt;
or:&lt;br /&gt;
 http://localhost:9090/expeccoService/rest&lt;br /&gt;
&lt;br /&gt;
The SOAP wsdl is returned via:&lt;br /&gt;
 http://localhost:9090/wsdl/ExpeccoSOAPService.wsdl&lt;br /&gt;
&lt;br /&gt;
and - if the inforService is also running - general status information with:&lt;br /&gt;
 http://localhost:9090/info&lt;br /&gt;
&lt;br /&gt;
=== Integration with HP Quality Center ===&lt;br /&gt;
&lt;br /&gt;
This is described in the [[ HP Quality Center Plugin ]] document.&lt;br /&gt;
&lt;br /&gt;
=== Integration with Polarion ===&lt;br /&gt;
&lt;br /&gt;
This is described in the [[ Polarion Plugin]] document.&lt;br /&gt;
&lt;br /&gt;
== Integration with Source Code Management Tools ==&lt;br /&gt;
&lt;br /&gt;
=== Background Info on what is Contained in a &amp;quot;.ets&amp;quot; File ===&lt;br /&gt;
&lt;br /&gt;
Expecco stores testsuites in a file with &#039;.ets&#039; extension (which stands for: &amp;quot;&#039;&#039;Expecco-Test-Suite&#039;&#039;&amp;quot;) and result logs in &#039;.elf&#039; files (stands for: &amp;quot;&#039;&#039;Expecco-Log-File&#039;&#039;&amp;quot;).&lt;br /&gt;
These are technically zip files - i.e. a bundle of individual files which can be extracted with the common zip command line tool (winzip under Windows systems, zip/unzip under Unix systems).&lt;br /&gt;
&lt;br /&gt;
For example, &amp;quot;&amp;lt;code&amp;gt;unzip -l foo.ets&amp;lt;/code&amp;gt;&amp;quot; lists the individual components, of which especially the block descriptions and attachments may be of interest.&lt;br /&gt;
&lt;br /&gt;
Notice, that you have to be careful when ets-files are bundled with zip manually: for various consistency checks, expecco generates a validation signature of the components and saves this as an additional file inside the .ets file.&lt;br /&gt;
This signature file must be preserved and it must be consistent with the other zip-components. In effect, this means that an ets can only be constructed from the very same components, using the very same signature file as were extracted before. Otherwise, expecco refuses to load the &amp;quot;.ets&amp;quot; file later.&lt;br /&gt;
&lt;br /&gt;
=== Version Management of &amp;quot;.ets&amp;quot; files ===&lt;br /&gt;
&lt;br /&gt;
Unless a QA system like &amp;quot;expeccoALM&amp;quot; is used, ets-files can be stored and maintained in any other source code management (SCM) system, for example, CVS, SVN, hg/Mercurial, git, Perforce etc.&lt;br /&gt;
Make sure to store the .ets as binary file, and/or disable source expansion of version tag lines (for example, &amp;quot;$Header&amp;quot; or &amp;quot;$Id&amp;quot; in CVS). Consult your particular SCM system&#039;s documentation on how this is done.&lt;br /&gt;
&lt;br /&gt;
As an alternative, it is possible to unzip the ets into individual components, store them separately, and zip them back into an ets, when a previous version is extracted from the SCM system. However, you must be careful to preserve the contents exactly as is, including the signature and other meta data, and not mix versions. I.e. all individual component files must be checkedIn/out in sync and as a group - it is not possible to update individual files from previous versions. The reason is that action blocks are referred to by their versionID, and these IDs will certainly be inconsistent, when previous versions of individual action blocks are mixed into another version&#039;s suite. &lt;br /&gt;
&lt;br /&gt;
If, for whatever reason, you must checkin individual action blocks, we highly recommend to check in BOTH the bundled ets (and use that for later test execution), AND check in the individual components, and use only those for meta actions, such as comparison, documentation or other administrative tasks.&lt;br /&gt;
&lt;br /&gt;
=== Generating Diff Lists or other Version Information ===&lt;br /&gt;
&lt;br /&gt;
Many source code management systems allow for hook-scripts to be added to checkin/checkout actions, and/or to redefine the command to be used for diff-list generation.&lt;br /&gt;
&lt;br /&gt;
For example, in the SVN system, an external diff tool can be defined. You could write a little shell or batch script, which calls expecco with the &amp;quot;&amp;lt;code&amp;gt;--diff&amp;lt;/code&amp;gt;&amp;quot; option which is described above. Thus, you would get meaningful diff output even from checked in ets-bundle files.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;&amp;lt;code&amp;gt;expecco --diff&amp;lt;/code&amp;gt;&amp;quot; option is also useful as a command line tool to get diff lists - even if your SCM system does not allow for such automatic hooks.&lt;br /&gt;
&lt;br /&gt;
== Scripting ==&lt;br /&gt;
&lt;br /&gt;
Expecco can be scripted either by reading a script from a file or remote controlled via a telnet like command-line interface.&lt;br /&gt;
This is useful to execute complex test scenarios and meta tasks, to create or manipulate test suites automatically and for self-testing expecco by using another expecco to control its GUI. &lt;br /&gt;
It can also be used to execute and automate more complex scenarios without using expeccoALM.&lt;br /&gt;
&amp;lt;br&amp;gt;Example uses are:&lt;br /&gt;
* Sequentially load and/or execute all suites found in a folder, reimport libraries, save the updated suite&lt;br /&gt;
* Construct new suites by merging/selecting tests from other suites&lt;br /&gt;
* Bulk renaming, commenting, attributing etc.&lt;br /&gt;
* Change attachments inside a number of suites&lt;br /&gt;
* Controlling an application or web interface (via a GUI plugin) and saving a sequence of screen shots&lt;br /&gt;
&lt;br /&gt;
By default, the scripting interface expects expressions in JavaScript syntax (but with a Smalltalk object model), &lt;br /&gt;
similar to the language used for elementary block definition. However, the language can be changed to Smalltalk syntax via a &amp;quot;~&amp;quot; directive.&lt;br /&gt;
&lt;br /&gt;
=== Script File Example ===&lt;br /&gt;
&lt;br /&gt;
To control expecco via a scriptfile, use the &amp;quot;&amp;lt;code&amp;gt;--scriptFile &amp;amp;lt;filename&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;quot; command line argument, where &amp;lt;filename&amp;gt; must be a file containing JavaScript expressions.&lt;br /&gt;
&lt;br /&gt;
For example, the following script file named &amp;quot;run3Suites.js&amp;quot; may contain the code:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
    // Example for an automatic expecco script.&lt;br /&gt;
    // (loads and executes a number of test suites)&lt;br /&gt;
    //&lt;br /&gt;
&lt;br /&gt;
    // to enable debugging in case of an error.&lt;br /&gt;
    // STXScriptingServer.errorDebugging(true);&lt;br /&gt;
&lt;br /&gt;
    var files = [&lt;br /&gt;
        &amp;quot;foo.ets&amp;quot;,&lt;br /&gt;
        &amp;quot;bar.ets&amp;quot;,&lt;br /&gt;
        &amp;quot;baz.ets&amp;quot;,&lt;br /&gt;
    ];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    Expecco::ExpeccoPreferences.current.automaticReimportOnLoad(true);&lt;br /&gt;
    Expecco::ExpeccoPreferences.current.checkForReimportableImportsOnLoad(true);&lt;br /&gt;
    Expecco::ExpeccoPreferences.current.checkForAnchestorOnAutomaticReimport(false);&lt;br /&gt;
    // Expecco::ExpeccoPreferences.current.libraryPath(importPathes);&lt;br /&gt;
&lt;br /&gt;
    // --------------------&lt;br /&gt;
&lt;br /&gt;
    function executeTestPlan ( aTestPlan ) {&lt;br /&gt;
       Stderr.nextPutLine(&amp;quot;executing testplan &amp;quot;+aTestPlan.name()+&amp;quot;...&amp;quot;);&lt;br /&gt;
       resultList = aTestPlan.execute();&lt;br /&gt;
       Stderr.nextPutLine(&amp;quot;done.&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
    function runSuite(suiteFile) {&lt;br /&gt;
        var loadedProject;&lt;br /&gt;
&lt;br /&gt;
        Stderr.nextPutLine(&amp;quot;loading &amp;quot;+suiteFile+&amp;quot;...&amp;quot;);&lt;br /&gt;
        expecco.loadProjectFromFile(suiteFile);&lt;br /&gt;
        loadedProject = expecco.project();&lt;br /&gt;
&lt;br /&gt;
        if (loadedProject == null) {&lt;br /&gt;
            Stderr.nextPutLine(&amp;quot;failed to load library &amp;quot;+suiteFile+&amp;quot;.&amp;quot;);&lt;br /&gt;
            Smalltalk.exit(1);&lt;br /&gt;
        } else {&lt;br /&gt;
            loadedProject.allTestPlansDo( executTestPlan );&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    files.do(runSuite);&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And can be executed with:&lt;br /&gt;
&lt;br /&gt;
    expecco --scriptFile run3Suites.js&lt;br /&gt;
&lt;br /&gt;
for windowless operation, use the &amp;quot;&amp;lt;code&amp;gt;--noWindow&amp;lt;/code&amp;gt;&amp;quot; command line argument.&lt;br /&gt;
To speed up the startup, you can turn off the loading of plugins, with a &amp;quot;&amp;lt;code&amp;gt;--noPlugins&amp;lt;/code&amp;gt;&amp;quot; argument (and possibly load any required plugins explicitly via additional plugin arguments).&lt;br /&gt;
Finally, enable debug messages with a &amp;quot;&amp;lt;code&amp;gt;--debug&amp;lt;/code&amp;gt;&amp;quot; argument.&lt;br /&gt;
Thus, the recommended options for scripting are:&lt;br /&gt;
  &lt;br /&gt;
    expecco --debug --noPlugins --noWindow --scriptFile run3Suites.js&lt;br /&gt;
&lt;br /&gt;
of course, this command line can be put into a shell (or batch) script file, and then executed with a single word command.&lt;br /&gt;
&lt;br /&gt;
=== Telnet Scripting Example ===&lt;br /&gt;
&lt;br /&gt;
The remote scripting service is enabled when a &amp;quot;&amp;lt;code&amp;gt;--scripting&amp;lt;/code&amp;gt;&amp;quot; command line argument is given.&lt;br /&gt;
By default, the service only accepts connections from the local host (for security reasons). Using the &amp;quot;&amp;lt;code&amp;gt;--allowHost&amp;lt;/code&amp;gt;&amp;quot; option, more hosts can be gained access to the scripting feature - but be aware, that this opens a potential security hole, as all of the internal functions can be accessed via the scripting system (and this includes the possibility to write files and call operating system services with the access rights of the one who started the scripting server).&lt;br /&gt;
&lt;br /&gt;
When used with a remote script connection (telnet),&lt;br /&gt;
additional connection- and execution related commands are introduced by lines starting with the &amp;quot;~&amp;quot; (tilde) escape character (similar to telnet). &lt;br /&gt;
For example, &amp;quot;~.&amp;quot; (tilde-period) is used to close the connection. &lt;br /&gt;
Press &amp;quot;~?&amp;quot; (tilde-question) for help.&lt;br /&gt;
 &lt;br /&gt;
The following is a trace of a typical scripting session (user input in bold):&lt;br /&gt;
&lt;br /&gt;
 c:\programs\expecco&amp;gt; &amp;lt;b&amp;gt;expecco --scripting 8008&amp;lt;/b&amp;gt;&lt;br /&gt;
 c:\programs\expecco&amp;gt;     ... expecco now running in the background with GUI ...&lt;br /&gt;
 ...&lt;br /&gt;
 c:\programs\expecco&amp;gt; &amp;lt;b&amp;gt;telnet localhost 8008&amp;lt;/b&amp;gt;&lt;br /&gt;
 Welcome to Expecco (Type ~? for help)&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;println(expecco);&amp;lt;/b&amp;gt;&lt;br /&gt;
 an Expecco::Browser&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;expecco.menuNewProject();&amp;lt;/b&amp;gt;&lt;br /&gt;
 ...expecco performs the new-function from its menu...&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;expecco.loadProjectFromFile(&amp;quot;C:\Users\cg\testsuites\webedition\projects\BearerTest.ets&amp;quot;);&amp;lt;/b&amp;gt;&lt;br /&gt;
 ...expecco loads the testSuite...&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;expecco.close();&amp;lt;/b&amp;gt;&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;~.&amp;lt;/b&amp;gt;&lt;br /&gt;
 Lost Connection.&lt;br /&gt;
 c:\programs\expecco&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also start a scripting session without an initial expecco browser window:&lt;br /&gt;
&lt;br /&gt;
 c:\programs\expecco&amp;gt; &amp;lt;b&amp;gt;expecco --noWindow --scripting 8008&amp;lt;/b&amp;gt;&lt;br /&gt;
 c:\programs\expecco&amp;gt;     ... expecco now running in the background without GUI ...&lt;br /&gt;
 ...&lt;br /&gt;
 c:\programs\expecco&amp;gt; &amp;lt;b&amp;gt;telnet localhost 8008&amp;lt;/b&amp;gt;&lt;br /&gt;
 Welcome to Expecco (Type ~? for help)&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;println(expecco);&amp;lt;/b&amp;gt;&lt;br /&gt;
 an Expecco::Browser&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;expecco;&amp;lt;/b&amp;gt;&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;~v+&amp;lt;/b&amp;gt; // turn result-printing on&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;expecco&amp;lt;/b&amp;gt;&lt;br /&gt;
 an Expecco::Browser&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;~v-&amp;lt;/b&amp;gt; // and off again&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;expecco.loadProjectFromFile(&amp;quot;~/SomeTest.ets&amp;quot;);&amp;lt;/b&amp;gt;&lt;br /&gt;
 ...expecco loads the testSuite...&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;var blk = expecco.project.elementWithName(&amp;quot;My Action&amp;quot;);&amp;lt;/b&amp;gt;&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;blk.name(&amp;quot;My Fun Action&amp;quot;);&amp;lt;/b&amp;gt;&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;expecco.saveProjectToFile(&amp;quot;~/ModifiedTest.ets&amp;quot;);&amp;lt;/b&amp;gt;&lt;br /&gt;
 &amp;gt; &amp;lt;b&amp;gt;expecco.close();&amp;lt;/b&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;lt;b&amp;gt;~.&amp;lt;/b&amp;gt;&lt;br /&gt;
 Lost Connection.&lt;br /&gt;
 c:\programs\expecco&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Scripting API Overview ==&lt;br /&gt;
&lt;br /&gt;
A few objects are predefined by name; among them are &amp;quot;&#039;&#039;expecco&#039;&#039;&amp;quot;, which refers to the browser itself (i.e. the UI) and &amp;quot;&#039;&#039;environment&#039;&#039;&amp;quot;, which refers to a collection of variable bindings (this is a dictionary of interpreter variables - not to be confused with a variable environment as known inside an expecco activity block).&lt;br /&gt;
&amp;lt;BR&amp;gt;New variables can be defined with a &amp;quot;&amp;lt;code&amp;gt;var &amp;amp;lt;name&amp;amp;gt;;&amp;lt;/code&amp;gt;&amp;quot; statement. For example:&lt;br /&gt;
&amp;lt;CODE&amp;gt;&amp;lt;PRE&amp;gt;&lt;br /&gt;
    var ws;&lt;br /&gt;
&lt;br /&gt;
    ws = new ExpeccoWorkspaceApplication;&lt;br /&gt;
    ws.open();&lt;br /&gt;
    ws.close();&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&amp;lt;/CODE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== expecco Object ====&lt;br /&gt;
&lt;br /&gt;
The variable named &amp;quot;&#039;&#039;expecco&#039;&#039;&amp;quot; refers to the opened GUI-object, which represents the expecco application itself. &lt;br /&gt;
&lt;br /&gt;
===== Expecco Functions =====&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;project()&#039;&#039;&#039;&amp;lt;br&amp;gt;the current project&lt;br /&gt;
*&#039;&#039;&#039;currentApplication()&#039;&#039;&#039;&amp;lt;br&amp;gt;the current page (initially, there is only one)&lt;br /&gt;
*&#039;&#039;&#039;currentTreeApplication()&#039;&#039;&#039;&amp;lt;br&amp;gt;the current tree sub-application&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;selectModelItem( anItem )&#039;&#039;&#039;&amp;lt;br&amp;gt;select an item and open an editor for it&lt;br /&gt;
*&#039;&#039;&#039;selectedModelItems()&#039;&#039;&#039;&amp;lt;br&amp;gt;returns a collection of selected items&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
===== Menu Functions =====&lt;br /&gt;
These execute the underlying menu functions (as if clicked by the user).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;menuNewProject()&#039;&#039;&#039;&amp;lt;br&amp;gt;creates a new testSuite&lt;br /&gt;
*&#039;&#039;&#039;menuOpen()&#039;&#039;&#039;&amp;lt;br&amp;gt;opens a dialog requesting a testSuite&lt;br /&gt;
*&#039;&#039;&#039;menuExit()&#039;&#039;&#039;&amp;lt;br&amp;gt;closes the expecco application&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;loadProjectFromFile(fileNameString)&#039;&#039;&#039;&amp;lt;br&amp;gt;load a testSuite&lt;br /&gt;
*&#039;&#039;&#039;saveProjectToFile(fileNameString)&#039;&#039;&#039;&amp;lt;br&amp;gt;save the testSuite&lt;br /&gt;
*&#039;&#039;&#039;selectTestPlanWithName(testPlaneNameString)&#039;&#039;&#039;&amp;lt;br&amp;gt;select a testplan item by name&lt;br /&gt;
*&#039;&#039;&#039;selectTestPlanWithFunctionalId(uuid)&#039;&#039;&#039;&amp;lt;br&amp;gt;select a testplan item by uuid&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;testSuite()&#039;&#039;&#039;&amp;lt;br&amp;gt;retrieves the testSuite object (see below)&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
===== Test Suite (Project) Functions =====&lt;br /&gt;
the project as returned by the above &amp;quot;project()&amp;quot; function provides access to its elements:&lt;br /&gt;
&amp;lt;br&amp;gt;(see also [[ Expecco API#Test Suite Project Functions]])&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;authorName()&#039;&#039;&#039;&amp;lt;br&amp;gt;get the author name string&lt;br /&gt;
*&#039;&#039;&#039;authorName(aString)&#039;&#039;&#039;&amp;lt;br&amp;gt;set the author name string&lt;br /&gt;
*&#039;&#039;&#039;versionString()&#039;&#039;&#039;&amp;lt;br&amp;gt;get the version string&lt;br /&gt;
*&#039;&#039;&#039;versionString(aString)&#039;&#039;&#039;&amp;lt;br&amp;gt;set the version string&lt;br /&gt;
*&#039;&#039;&#039;projectsWorkingDirectory()&#039;&#039;&#039;&amp;lt;br&amp;gt;the directory, where attachments etc. are found&lt;br /&gt;
*&#039;&#039;&#039;ensureEnvironment()&#039;&#039;&#039;&amp;lt;br&amp;gt;an instantiated environment (concrete values). See below.&lt;br /&gt;
*&#039;&#039;&#039;elementWithName( nameString )&#039;&#039;&#039;&amp;lt;br&amp;gt;returns a matching element or null if not found&lt;br /&gt;
*&#039;&#039;&#039;elementWithId( aUUID )&#039;&#039;&#039;&amp;lt;br&amp;gt;returns that element or null if not present. (create the UUID with &amp;quot;&amp;lt;stringConstant&amp;gt;.asUUID&amp;quot; )&lt;br /&gt;
*&#039;&#039;&#039;elementWithFunctionalId( aUUID )&#039;&#039;&#039;&amp;lt;br&amp;gt;returns that element or null if not present&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
==== Environment Object ====&lt;br /&gt;
&lt;br /&gt;
Environment objects are used to store key-value bindings for expecco variables. Environments form a hierarchy, where values are searched for in an environment&#039;s parent environment, if not present. This hierarchy follows the containing compound activity chain up to the project (= test suite) environment.&lt;br /&gt;
Additional temporary environments are kept by the executor and the browser, to keep temporary values for a single execution&#039;s or a single session&#039;s lifetime.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;at(key)&#039;&#039;&#039;&amp;lt;br&amp;gt;retrieves a value, given the name of the entry. Raises and error if no variable exists by that name.&lt;br /&gt;
*&#039;&#039;&#039;at_ifAbsent(key, default)&#039;&#039;&#039;&amp;lt;br&amp;gt;like above, but returns default if no variable exists by that name (instead of raising an error).&lt;br /&gt;
*&#039;&#039;&#039;includesKey(key)&#039;&#039;&#039;&amp;lt;br&amp;gt;true if a variable by that name exists, false otherwise.&lt;br /&gt;
*&#039;&#039;&#039;at_put(key, value)&#039;&#039;&#039;&amp;lt;br&amp;gt;store value as variable named key. Raises an error, in an attempt to change a readOnly variable&lt;br /&gt;
*&#039;&#039;&#039;environmentDescription()&#039;&#039;&#039;&amp;lt;br&amp;gt;returns the environment&#039;s description. This describes types, default values and read/write attributes per entry.&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
==== EnvironmentDescription Object ====&lt;br /&gt;
&lt;br /&gt;
This is a collection of entries which describe variables of an environment. It does only hold the description, not the bindings themself; i.e. it contains the information required to instantiate an environment. EnvironmentDescriptions inherit from OrderedCollection and therefore entries are accessed via &amp;quot;at:&amp;quot; using a numeric index from 1 to the environmentDescription&#039;s size.&lt;br /&gt;
&lt;br /&gt;
Entries (as per variable) provide the following protocol:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;name()&#039;&#039;&#039;&amp;lt;br&amp;gt;the name of the variable&lt;br /&gt;
*&#039;&#039;&#039;isReadOnly()&#039;&#039;&#039;&amp;lt;br&amp;gt;true if readonly&lt;br /&gt;
*&#039;&#039;&#039;defaultValue()&#039;&#039;&#039;&amp;lt;br&amp;gt;the initial value, assigned when the environment is created&lt;br /&gt;
*&#039;&#039;&#039;datatype()&#039;&#039;&#039;&amp;lt;br&amp;gt;the type of the variable&lt;br /&gt;
*&#039;&#039;&#039;comment()&#039;&#039;&#039;&amp;lt;br&amp;gt;description&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
== Remote Controlling and Monitoring Expecco ==&lt;br /&gt;
&lt;br /&gt;
Expecco itself can be automated by various mechanisms:&lt;br /&gt;
&lt;br /&gt;
* via command line arguments (described in [[ #Command Line | &amp;quot;Command Line&amp;quot;]] above)&lt;br /&gt;
&lt;br /&gt;
* via script files (see [[ #Script File Example | &amp;quot;Script File Example&amp;quot;]] above)&lt;br /&gt;
&lt;br /&gt;
* via the telnet interface (see [[ #Telnet Scripting Example | &amp;quot;Telnet Scripting Example&amp;quot;]] above)&lt;br /&gt;
&lt;br /&gt;
* via standard RPC mechanisms, such as SOAP or REST.&lt;br /&gt;
&lt;br /&gt;
Especially the RPC mechanisms are useful to integrate expecco into the company test infrastructure.&lt;br /&gt;
Such interfaces are meant for programmatic control of an expecco slave from quality management, application life cycle and other scheduling tools.&lt;br /&gt;
Our own companion product, ExpeccoALM and third party tools, such as Polarion use these service interfaces.&lt;br /&gt;
&lt;br /&gt;
Notice, that for integration into a Jenkins infrastructure, command line arguments or scripts may be a more cost efective means to control automated expecco testruns.&lt;br /&gt;
&lt;br /&gt;
=== Expecco as a Slave Node in a Test Lab ===&lt;br /&gt;
&lt;br /&gt;
The service interfaces are useful to control unmonitored slave machines in the network, among which expecco test execution jobs are scheduled by another program. ExpeccoALM and other quality management tools use these to initiate test runs in a test server farm. &lt;br /&gt;
For this, the basic operations &amp;quot;download of a suite&amp;quot;, &amp;quot;execute a suite&amp;quot; and &amp;quot;requesting execution results&amp;quot; are available as service calls.&lt;br /&gt;
&lt;br /&gt;
Both SOAP and REST services are available, if expecco is started with the &amp;quot;&#039;&#039;--server&#039;&#039;&amp;quot; argument. &lt;br /&gt;
An optional &amp;quot;&#039;&#039;--port&#039;&#039;&amp;quot; argument allows for the HTTP port to be changed from the default (9090) on which expecco is listening.&lt;br /&gt;
&lt;br /&gt;
For debugging and testing, the service can be also be started from the interactive UI, via expecco&#039;s main menu (in the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Web-Services&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Start / Stop&#039;&#039;&amp;quot; menu items).&lt;br /&gt;
&lt;br /&gt;
These services use HTTP requests as transport layer.&lt;br /&gt;
&lt;br /&gt;
==== Expecco SOAP Service Interface ====&lt;br /&gt;
&lt;br /&gt;
This accepts SOAP requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
A partial WSDL spec can be aqcuired from the running service via &amp;quot;&amp;lt;code&amp;gt;host:9090/wsdl/ExpeccoSOAPService.wsdl&amp;lt;/code&amp;gt;&amp;quot; (partial, because it is currently not does not contain complete type information).&lt;br /&gt;
&lt;br /&gt;
The service entries are:&lt;br /&gt;
&lt;br /&gt;
===== Loading and Executing a Suite =====&lt;br /&gt;
&lt;br /&gt;
The execute request is the main service entry. It passes the suite and also optional parameters.&lt;br /&gt;
&lt;br /&gt;
The test suite can be bade available to expecco either by passing it with the request (as base64 CDATA), or by passing a URL from which expecco can fetch the suite iteslf.&lt;br /&gt;
&lt;br /&gt;
The execute call contains the following fields:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;message name=&amp;quot;expecco_executeProject_v5_Request&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;id&amp;quot; type=&amp;quot;UUID&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;testSuiteId&amp;quot; type=&amp;quot;UUID&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;dataSource&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;dataSourceUri&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;environment&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;testplans&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;resources&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;optionalParameters&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and responds with:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_executeProject_v5_Response&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;result&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This call starts execution, and immediately returns a response, which consists of an identifier.&lt;br /&gt;
This identifier can later be used to ask expecco about the execution status. As a test may take a long time to finish,&lt;br /&gt;
it is useful to poll via status requests from time to time, to see if the execution has finished and to get progress status. &lt;br /&gt;
&lt;br /&gt;
The parameters are:&lt;br /&gt;
&lt;br /&gt;
* id - mandatory; a ticket ID; this should be a UUID-string, to avoid possible conflicts&lt;br /&gt;
* testSuiteId - mandatory; the UUID of the suite to execute. See below for details about download optimizations&lt;br /&gt;
* dataSource - optional; if present, this should contain the whole ets-file&#039;s contents as a Base64 encoded CDATA string&lt;br /&gt;
* dataSourceUri - optional; if present, this should be the URI from which expecco shall fetch the suite. See below for details&lt;br /&gt;
* environment - optional; top-level environment variable values. This can be used to provide alternative initial values for variables in the top level variable environment (the &amp;quot;Project-Environment&amp;quot;)&lt;br /&gt;
* testplans - optional; a list of UUIDs of testplans to execute. If not present, all top-level testplans are executed&lt;br /&gt;
* resources - optional; a list of resources to be used by the test (see expeccoALM resource description)&lt;br /&gt;
* optionalParameters - optional; an array containing additional parameters as key-value elements.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;optionalParameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
A list of key-value elements (i.e. must have an even number of elements, of the form [k1 v1 k2 v2 ... kN vN] ).&lt;br /&gt;
Each key is an xsd:string, each value&#039;s type depends on the key, but all of them are currently also strings.&lt;br /&gt;
The list of supported parameters is open for future extension of the interface. Currently, the following are recognized:&lt;br /&gt;
* [ &amp;quot;generateLog&amp;quot; xsd:boolean ] - the boolean arg must be &amp;quot;true&amp;quot; or &amp;quot;false&amp;quot;&lt;br /&gt;
* [ &amp;quot;generatePDFReport&amp;quot; xsd:boolean ] - boolean arg, must be either &amp;quot;true&amp;quot; or &amp;quot;false&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;testplans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
this allows selective execution of individual test plans and also individual test cases (from within a test plan) from the suite.&lt;br /&gt;
If not present, all test plans as present in the suite are executed.&lt;br /&gt;
If present, the testPlans parameter must be an xsdarray of pairs (i.e. each array element is again an xsdarray with 2 elements).&lt;br /&gt;
Each top level element describes one testplan to be executed. The first element of each being the testplan&#039;s UUID, the second another array, listing the testcases by UUID.&lt;br /&gt;
For example, if the suite contains three testplans, named &amp;quot;a&amp;quot;, &amp;quot;b&amp;quot; and &amp;quot;c&amp;quot;, with plan &amp;quot;a&amp;quot; having id-a and &amp;quot;b&amp;quot; having id-b as UUID.&lt;br /&gt;
A testPlans argument might look like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ &lt;br /&gt;
    [ id-a ]&lt;br /&gt;
    [ id-b [  id-tcb-1 id-tcb-2 ] ]&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and specify that testplan &amp;quot;a&amp;quot; should be executed fully (i.e. all test cases), and only the testcases tcb-1 and tcb-2 are to be executed from testplan &amp;quot;b&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;environment&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
-- to be described --&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;resources&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
-- to be described --&lt;br /&gt;
&lt;br /&gt;
The reply consists of the ticket-id, which has to be passed in further status requests.&lt;br /&gt;
&lt;br /&gt;
===== Loading Only =====&lt;br /&gt;
&lt;br /&gt;
It is also possible, to download a suite without execution, via the &amp;quot;download&amp;quot; request:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_downloadProject_Request&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;testSuiteId&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;dataSourceBase64&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;dataSourceUri&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;optionalParameters&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_downloadProject_Response&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;result&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Download Optimization =====&lt;br /&gt;
&lt;br /&gt;
Expecco remembers downloaded suites in a temporary folder, to avoid repeated transfers of possibly huge test suites.&lt;br /&gt;
If a URI is passed (but no base64 encoded data), expecco checks if the suite is already present on the test host,&lt;br /&gt;
and will not fetch it again, if already present. If not present, expecco will fetch the suite via a HTTP request from the URI.&lt;br /&gt;
&lt;br /&gt;
If no URI is passed (i.e. both data and dataURI fields are empty), expecco will either respond with an error reply, if not present,&lt;br /&gt;
or with an ok response, if already present.&lt;br /&gt;
&lt;br /&gt;
Thus, if you have to pass the suite as data (i.e. there is no file service available, from which expecco could fetch the suite),&lt;br /&gt;
it is recommended to first check if a suite is already present (by sending a download request without data) and check for an error return. If no error is reported, the suite is already there and no further download action is required. If there is an error response,&lt;br /&gt;
the client should send the suite with another download request, this time with a non-empty data field.&lt;br /&gt;
&lt;br /&gt;
After any successfull download (either via download, or via execute request), the suite can be executed by an execute request without data.&lt;br /&gt;
&lt;br /&gt;
===== Execution by Suite File Name =====&lt;br /&gt;
&lt;br /&gt;
An alternative to downloading suites is to execute suites which are already present on the execution slave. For this, expecco should be started with a &amp;quot;--suiteDirectory&amp;quot; option, which specifies the folder name, where common test suites are located.&lt;br /&gt;
The executeTestSuiteFile-request is used to execute one of the suites in that directory.&lt;br /&gt;
&lt;br /&gt;
The call contains the following fields:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;message name=&amp;quot;expecco_executeTestSuiteFile_Request&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;id&amp;quot; type=&amp;quot;UUID&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;fileName&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;environment&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;testplans&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;resources&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;optionalParameters&amp;quot; type=&amp;quot;xsd:arrayType&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If successful, a ticketID is returned (same as above execute-request).&lt;br /&gt;
&lt;br /&gt;
===== Status Request =====&lt;br /&gt;
&lt;br /&gt;
This query returns status information about an ongoing execution. Its single parameter field must contain a ticketId as described in the above execute request.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_getExecutionInfo_Request&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;ticketId&amp;quot; type=&amp;quot;UUID&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_getExecutionInfo_Response&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;result&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A client may have to send multiple &amp;quot;getExecutionInfo&amp;quot; requests, until a &amp;quot;finished&amp;quot; status is returned.&lt;br /&gt;
Expecco will keep the generated reports and log files in a temporary folder, until fetched via a getResult request.&lt;br /&gt;
This allows for both expecco and the client to be turned off and restarted, without loosing any status information.&lt;br /&gt;
&lt;br /&gt;
===== Result Request =====&lt;br /&gt;
&lt;br /&gt;
Once finished, reports and log files should be fetched from expecco.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_getResult_Request&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;ticketId&amp;quot; type=&amp;quot;UUID&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;removeResultBoolean&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_getResult_Response&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;result&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the &amp;quot;getResult&amp;quot; request, corrsponding files are automatically removed from the temporary folder by expecco.&lt;br /&gt;
&lt;br /&gt;
===== Terminate/Abort Request =====&lt;br /&gt;
&lt;br /&gt;
Use this, to abort and terminate an ongoing test execution.&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_killExecution_Request&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;ticketId&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_killExecution_Response&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;result&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Remove Ticket Request =====&lt;br /&gt;
&lt;br /&gt;
Use this, to tell expecco, that no further interest exists in a ticket.&lt;br /&gt;
If the test is still running, it is aborted. If it is about to be started, it will not be.&lt;br /&gt;
Any temporary files which might have already been created due to this execution are removed.&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_killExecution_Request&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;ticketId&amp;quot; type=&amp;quot;UUID&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_killExecution_Response&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;result&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Ping =====&lt;br /&gt;
&lt;br /&gt;
This request answers with information about the host, architecture, disk usage and other status about the machine on which expecco is running. Also, a list of available plugins on the target machine is returned. Of course, it is also useful to see if the expecco service is ready and the communication works as expected.&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;ping_Request&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;ping_Response&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;result&amp;quot; type=&amp;quot;xsd:array&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Cleanup of Old Result/Log Files =====&lt;br /&gt;
&lt;br /&gt;
This request can be used to remove all temporary files, especially leftover report- and log files. &lt;br /&gt;
This should be used, if a client has crashed, and lost track of &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_cleanupTempFiles_Request&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;message name=&amp;quot;expecco_cleanupTempFiles_Response&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part name=&amp;quot;result&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Example Wire Protocol Trace =====&lt;br /&gt;
&lt;br /&gt;
Client asks expecco to execute a suite.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;-- HTTP Request to Expecco --&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
POST / HTTP/1.1 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
User-Agent: Smalltalk/X 6.2.5.0 &lt;br /&gt;
Host: 127.0.0.1:9090 &lt;br /&gt;
Content-Length: 8925 &lt;br /&gt;
Content-Type: text/xml; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
SOAPAction: &amp;quot;&amp;quot; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;env:Envelope &lt;br /&gt;
   xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
   xmlns:env=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; &lt;br /&gt;
   xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
   xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
   env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;env:Body env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;m:expecco_executeProject_v5 xmlns:m=&amp;quot;http://www.mars.dti.ne.jp/~umejava/smalltalk/soapOpera/rpc/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;optionalParameters xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
        xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
        xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
        enc:arrayType=&amp;quot;xsd:anyType[6]&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;generateReport&amp;lt;/item&amp;gt;&lt;br /&gt;
    &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;true&amp;lt;/item&amp;gt;&lt;br /&gt;
    &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;generateLog&amp;lt;/item&amp;gt;&lt;br /&gt;
    &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;true&amp;lt;/item&amp;gt;&lt;br /&gt;
    &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;runAllTestcasesIfEmptyTestcaseList&amp;lt;/item&amp;gt;&lt;br /&gt;
    &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;true&amp;lt;/item&amp;gt;&lt;br /&gt;
   &amp;lt;/optionalParameters&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;testSuiteId xsi:type=&amp;quot;UUID&amp;quot;&amp;gt;228168f0-747b-11df-a41b-00ff7b08316c&amp;lt;/testSuiteId&amp;gt;&lt;br /&gt;
   &amp;lt;testplans &lt;br /&gt;
        xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
        xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
        xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
        enc:arrayType=&amp;quot;xsd:arrayType[1]&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;item &lt;br /&gt;
            xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
            xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
            xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
            env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
            enc:arrayType=&amp;quot;xsd:anyType[2]&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;item &lt;br /&gt;
                env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
                xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;f71c4700-7477-11df-a41b-00ff7b08316c&lt;br /&gt;
            &amp;lt;/item&amp;gt;&lt;br /&gt;
            &amp;lt;item &lt;br /&gt;
                xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
                xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
                xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
                env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
                enc:arrayType=&amp;quot;xsd:anyType[0]&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;/item&amp;gt;&lt;br /&gt;
   &amp;lt;/testplans&amp;gt;&lt;br /&gt;
   &amp;lt;id xsi:type=&amp;quot;UUID&amp;quot;&amp;gt;200d93e1-a258-11e4-b9eb-c48508c91d3c&amp;lt;/id&amp;gt;&lt;br /&gt;
   &amp;lt;dataSource xsi:null=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;dataSourceUri xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;http://127.0.0.1:8662/expeccoALM/tentativeObjects/a84b2d96-d133-47db-9fc2-17208b490bfe.a&lt;br /&gt;
   &amp;lt;/dataSourceUri&amp;gt;&lt;br /&gt;
   &amp;lt;environment &lt;br /&gt;
        xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
        xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
        xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
        enc:arrayType=&amp;quot;xsd:anyType[22]&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_Host__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;sr-laptop&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_LoginUserName__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;admin&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_FullUserName__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;.&amp;amp;#32;&amp;amp;#42;admin&amp;amp;#42;&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_TestHost__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;127.0.0.1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_Definition_UUID__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;e5c9cb30-a253-11e4-9f24-c48508c91d3c&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_Definition_ID__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;d4&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_Definition_Name__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Test&amp;amp;#32;For&amp;amp;#32;Resources&amp;amp;#32;and&amp;amp;#32;Skills&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_Definition_Summary__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_Run_UUID__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;200d93e1-a258-11e4-b9eb-c48508c91d3c&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_Run_ID__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;r14&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;__expeccoNET_TestSuite_VersionNumber__&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;1&amp;lt;/item&amp;gt;&lt;br /&gt;
   &amp;lt;/environment&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;resources &lt;br /&gt;
       xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; &lt;br /&gt;
       xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; &lt;br /&gt;
       xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
       enc:arrayType=&amp;quot;xsd:anyType[28]&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Resource&amp;amp;#32;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:integer&amp;quot;&amp;gt;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Resource&amp;amp;#32;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Skill1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;attribute1-1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Integer&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;0&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Resource&amp;amp;#32;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:integer&amp;quot;&amp;gt;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Resource&amp;amp;#32;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Skill2&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;attribute2-1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Integer&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;0&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Resource&amp;amp;#32;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:integer&amp;quot;&amp;gt;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Resource&amp;amp;#32;1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Skill2&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;attribute2-2&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Float&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;0.0&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Resource&amp;amp;#32;2&amp;amp;#32;eeee&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:integer&amp;quot;&amp;gt;2&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Resource&amp;amp;#32;2&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Skill1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;attribute1-1&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Integer&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;0&amp;lt;/item&amp;gt;&lt;br /&gt;
   &amp;lt;/resources&amp;gt;&lt;br /&gt;
  &amp;lt;/m:expecco_executeProject_v5&amp;gt;&lt;br /&gt;
 &amp;lt;/env:Body&amp;gt;&lt;br /&gt;
&amp;lt;/env:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;gt;-- response from Expecco&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HTTP/1.1 200 OK &lt;br /&gt;
Content-Type: text/xml &lt;br /&gt;
Content-Length: 649 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;env:Envelope xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:env=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;env:Body env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;m:expecco_executeProject_v5Response xmlns:m=&amp;quot;http://www.mars.dti.ne.jp/~umejava/smalltalk/soapOpera/rpc/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;result xsi:type=&amp;quot;UUID&amp;quot;&amp;gt;200d93e1-a258-11e4-b9eb-c48508c91d3c&amp;lt;/result&amp;gt;&lt;br /&gt;
  &amp;lt;/m:expecco_executeProject_v5Response&amp;gt;&lt;br /&gt;
 &amp;lt;/env:Body&amp;gt;&lt;br /&gt;
&amp;lt;/env:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Client asks expecco for execution state&lt;br /&gt;
&lt;br /&gt;
&amp;lt;-- HTTP Request to expecco&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
POST / HTTP/1.1 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
User-Agent: Smalltalk/X 6.2.5.0 &lt;br /&gt;
Host: 127.0.0.1:9090 &lt;br /&gt;
Content-Length: 635 &lt;br /&gt;
Content-Type: text/xml; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
SOAPAction: &amp;quot;&amp;quot; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;env:Envelope xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:env=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;env:Body env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;m:expecco_getExecutionInfo xmlns:m=&amp;quot;http://www.mars.dti.ne.jp/~umejava/smalltalk/soapOpera/rpc/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;ticketId xsi:type=&amp;quot;UUID&amp;quot;&amp;gt;200d93e1-a258-11e4-b9eb-c48508c91d3c&amp;lt;/ticketId&amp;gt;&lt;br /&gt;
  &amp;lt;/m:expecco_getExecutionInfo&amp;gt;&lt;br /&gt;
 &amp;lt;/env:Body&amp;gt;&lt;br /&gt;
&amp;lt;/env:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;gt;-- response from Expecco (while still executing)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HTTP/1.1 200 OK &lt;br /&gt;
Content-Type: text/xml &lt;br /&gt;
Content-Length: 2579 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;env:Envelope xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:env=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;env:Body env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;m:expecco_getExecutionInfoResponse xmlns:m=&amp;quot;http://www.mars.dti.ne.jp/~umejava/smalltalk/soapOpera/rpc/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;result&amp;gt;&lt;br /&gt;
    &amp;lt;executionResultState xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;executingTestSuite&amp;lt;/executionResultState&amp;gt;&lt;br /&gt;
    &amp;lt;currentActivity xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;executing&amp;amp;#32;Neuer&amp;amp;#32;Testplan&amp;lt;/currentActivity&amp;gt;&lt;br /&gt;
    &amp;lt;pdfReportFileURL xsi:null=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;summaryResult&amp;gt;&lt;br /&gt;
     &amp;lt;summaryTestplanExecutionResults xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; enc:arrayType=&amp;quot;xsd:anyType[1]&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;summaryTestPlanItems xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; enc:arrayType=&amp;quot;xsd:anyType[1]&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;detailString xsi:null=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
         &amp;lt;resultActivityState xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Successful&amp;lt;/resultActivityState&amp;gt;&lt;br /&gt;
         &amp;lt;testplanItemName xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Neue&amp;amp;#32;Aktion&amp;lt;/testplanItemName&amp;gt;&lt;br /&gt;
         &amp;lt;expeccoClass xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Expecco::SummaryTestPlanItemExecutionResult&amp;lt;/expeccoClass&amp;gt;&lt;br /&gt;
        &amp;lt;/item&amp;gt;&lt;br /&gt;
       &amp;lt;/summaryTestPlanItems&amp;gt;&lt;br /&gt;
       &amp;lt;testPlanId xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;22623ef0-757d-11df-a41b-00ff7b08316c&amp;lt;/testPlanId&amp;gt;&lt;br /&gt;
       &amp;lt;expeccoClass xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Expecco::SummaryTestPlanExecutionResult&amp;lt;/expeccoClass&amp;gt;&lt;br /&gt;
       &amp;lt;testPlanName xsi:null=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;/summaryTestplanExecutionResults&amp;gt;&lt;br /&gt;
     &amp;lt;testSuiteName xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Test&amp;amp;#32;For&amp;amp;#32;Resources&amp;amp;#32;and&amp;amp;#32;Skills&amp;lt;/testSuiteName&amp;gt;&lt;br /&gt;
     &amp;lt;testSuiteId xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;228168f0-747b-11df-a41b-00ff7b08316c&amp;lt;/testSuiteId&amp;gt;&lt;br /&gt;
     &amp;lt;expeccoClass xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Expecco::SummaryTestSuiteExecutionResult&amp;lt;/expeccoClass&amp;gt;&lt;br /&gt;
    &amp;lt;/summaryResult&amp;gt;&lt;br /&gt;
    &amp;lt;logFileURL xsi:null=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;expeccoClass xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Expecco::SoapExecutionResult::SummaryEncoding&amp;lt;/expeccoClass&amp;gt;&lt;br /&gt;
    &amp;lt;executionProgress xsi:type=&amp;quot;xsd:integer&amp;quot;&amp;gt;0&amp;lt;/executionProgress&amp;gt;&lt;br /&gt;
   &amp;lt;/result&amp;gt;&lt;br /&gt;
  &amp;lt;/m:expecco_getExecutionInfoResponse&amp;gt;&lt;br /&gt;
 &amp;lt;/env:Body&amp;gt;&lt;br /&gt;
&amp;lt;/env:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;gt;-- response from Expecco (after execution)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
HTTP/1.1 200 OK &lt;br /&gt;
Content-Type: text/xml &lt;br /&gt;
Content-Length: 2781 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
.....................&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;env:Envelope xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:env=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;env:Body env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;m:expecco_getExecutionInfoResponse xmlns:m=&amp;quot;http://www.mars.dti.ne.jp/~umejava/smalltalk/soapOpera/rpc/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;result&amp;gt;&lt;br /&gt;
    &amp;lt;executionResultState xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;finished&amp;lt;/executionResultState&amp;gt;&lt;br /&gt;
    &amp;lt;currentActivity xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;executing&amp;amp;#32;Neuer&amp;amp;#32;Testplan&amp;lt;/currentActivity&amp;gt;&lt;br /&gt;
    &amp;lt;pdfReportFileURL xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;http://127.0.0.1:9090/expeccoResultFiles/ad8011e1-a25c-11e4-b9eb-c48508c91d3c.pdf&amp;lt;/pdfReportFileURL&amp;gt;&lt;br /&gt;
    &amp;lt;summaryResult&amp;gt;&lt;br /&gt;
     &amp;lt;summaryTestplanExecutionResults xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; enc:arrayType=&amp;quot;xsd:anyType[1]&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;summaryTestPlanItems xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; enc:arrayType=&amp;quot;xsd:anyType[1]&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;item env:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;detailString xsi:null=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
         &amp;lt;resultActivityState xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Successful&amp;lt;/resultActivityState&amp;gt;&lt;br /&gt;
         &amp;lt;testplanItemName xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Neue&amp;amp;#32;Aktion&amp;lt;/testplanItemName&amp;gt;&lt;br /&gt;
         &amp;lt;expeccoClass xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Expecco::SummaryTestPlanItemExecutionResult&amp;lt;/expeccoClass&amp;gt;&lt;br /&gt;
        &amp;lt;/item&amp;gt;&lt;br /&gt;
       &amp;lt;/summaryTestPlanItems&amp;gt;&lt;br /&gt;
       &amp;lt;testPlanId xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;22623ef0-757d-11df-a41b-00ff7b08316c&amp;lt;/testPlanId&amp;gt;&lt;br /&gt;
       &amp;lt;expeccoClass xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Expecco::SummaryTestPlanExecutionResult&amp;lt;/expeccoClass&amp;gt;&lt;br /&gt;
       &amp;lt;testPlanName xsi:null=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;/summaryTestplanExecutionResults&amp;gt;&lt;br /&gt;
     &amp;lt;testSuiteName xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Test&amp;amp;#32;For&amp;amp;#32;Resources&amp;amp;#32;and&amp;amp;#32;Skills&amp;lt;/testSuiteName&amp;gt;&lt;br /&gt;
     &amp;lt;testSuiteId xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;228168f0-747b-11df-a41b-00ff7b08316c&amp;lt;/testSuiteId&amp;gt;&lt;br /&gt;
     &amp;lt;expeccoClass xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Expecco::SummaryTestSuiteExecutionResult&amp;lt;/expeccoClass&amp;gt;&lt;br /&gt;
    &amp;lt;/summaryResult&amp;gt;&lt;br /&gt;
    &amp;lt;logFileURL xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;http://127.0.0.1:9090/expeccoResultFiles/ad8011e1-a25c-11e4-b9eb-c48508c91d3c.elf&amp;lt;/logFileURL&amp;gt;&lt;br /&gt;
    &amp;lt;expeccoClass xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Expecco::SoapExecutionResult::SummaryEncoding&amp;lt;/expeccoClass&amp;gt;&lt;br /&gt;
    &amp;lt;executionProgress xsi:type=&amp;quot;xsd:integer&amp;quot;&amp;gt;100&amp;lt;/executionProgress&amp;gt;&lt;br /&gt;
   &amp;lt;/result&amp;gt;&lt;br /&gt;
  &amp;lt;/m:expecco_getExecutionInfoResponse&amp;gt;&lt;br /&gt;
 &amp;lt;/env:Body&amp;gt;&lt;br /&gt;
&amp;lt;/env:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Client fetches the report and log files from expecco:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;-- HTTP Request to expecco (fetch logfile)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
GET /expeccoResultFiles/ad8011e1-a25c-11e4-b9eb-c48508c91d3c.elf HTTP/1.1 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
User-Agent: Mozilla/3.0N &lt;br /&gt;
Host: 127.0.0.1:9090 &lt;br /&gt;
Accept-Encoding: chunked &lt;br /&gt;
Accept-Language: en,* &lt;br /&gt;
Accept-Charset: iso-8859-1,*,utf-8 &lt;br /&gt;
Accept: */* &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;gt;-- HTTP response from expecco &lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
HTTP/1.1 200 OK &lt;br /&gt;
Content-Type: application/x-expecco-logfile &lt;br /&gt;
Content-Length: 12690 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
Cache-Control: max-age=86400 &lt;br /&gt;
Last-modified: Thu, 22 Jan 2015 17:32:50 GMT &lt;br /&gt;
&lt;br /&gt;
... a lot of elf-file data ...&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;-- HTTP Request to expecco (fetch pdf report)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
GET /expeccoResultFiles/ad8011e1-a25c-11e4-b9eb-c48508c91d3c.pdf HTTP/1.1 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
User-Agent: Mozilla/3.0N &lt;br /&gt;
Host: 127.0.0.1:9090 &lt;br /&gt;
Accept-Encoding: chunked &lt;br /&gt;
Accept-Language: en,* &lt;br /&gt;
Accept-Charset: iso-8859-1,*,utf-8 &lt;br /&gt;
Accept: */* &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;gt;-- HTTP response from expecco&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
HTTP/1.1 200 OK &lt;br /&gt;
Content-Type: application/pdf &lt;br /&gt;
Content-Length: 29768 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
Cache-Control: max-age=86400 &lt;br /&gt;
Last-modified: Thu, 22 Jan 2015 17:32:51 GMT &lt;br /&gt;
&lt;br /&gt;
... a lot of pdf data ...&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Client releases ticket (so expecco can remove the temporary data)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;-- HTTP Request to expecco&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
POST / HTTP/1.1 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
User-Agent: Smalltalk/X 6.2.5.0 &lt;br /&gt;
Host: 127.0.0.1:9090 &lt;br /&gt;
Content-Length: 627 &lt;br /&gt;
Content-Type: text/xml; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
SOAPAction: &amp;quot;&amp;quot; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;env:Envelope xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:env=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;env:Body env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;m:expecco_removeTicket xmlns:m=&amp;quot;http://www.mars.dti.ne.jp/~umejava/smalltalk/soapOpera/rpc/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;ticketId xsi:type=&amp;quot;UUID&amp;quot;&amp;gt;ad8011e1-a25c-11e4-b9eb-c48508c91d3c&amp;lt;/ticketId&amp;gt;&lt;br /&gt;
  &amp;lt;/m:expecco_removeTicket&amp;gt;&lt;br /&gt;
 &amp;lt;/env:Body&amp;gt;&lt;br /&gt;
&amp;lt;/env:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;gt;-- HTTP response from expecco&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
HTTP/1.1 200 OK &lt;br /&gt;
Content-Type: text/xml &lt;br /&gt;
Content-Length: 614 &lt;br /&gt;
Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
.....................&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;env:Envelope xmlns:enc=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot; xmlns:env=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;env:Body env:encodingStyle=&amp;quot;http://www.expecco.net/soap/expecco/v1/&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;m:expecco_removeTicketResponse xmlns:m=&amp;quot;http://www.mars.dti.ne.jp/~umejava/smalltalk/soapOpera/rpc/&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;result xsi:type=&amp;quot;xsd:boolean&amp;quot;&amp;gt;true&amp;lt;/result&amp;gt;&lt;br /&gt;
  &amp;lt;/m:expecco_removeTicketResponse&amp;gt;&lt;br /&gt;
 &amp;lt;/env:Body&amp;gt;&lt;br /&gt;
&amp;lt;/env:Envelope&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
===== Example Session Using &amp;quot;&amp;lt;code&amp;gt;wget&amp;lt;/code&amp;gt;&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
Using &amp;quot;wget&amp;quot; with SOAP is possible, but a little complicated, because correct SOAP requests have to be constructed, and ticket-numbers be extracted from responses. It is much easier with the REST service.&lt;br /&gt;
&lt;br /&gt;
See below for a description.&lt;br /&gt;
&lt;br /&gt;
==== Expecco REST Service Interface ====&lt;br /&gt;
&lt;br /&gt;
This accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The REST service supports the same set of operations as the SOAP service described above, but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are all HTTP-GET requests, possibly with attached JSON encoded argument data. &lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
See details [[Starting_expecco_via_Comand_Line/rest/en | &amp;quot;expecco rest service interface&amp;quot;]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== ProtocolInfo Request &amp;quot;/expeccoService/rest/protocolInfo&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;; currently always &amp;quot;GET&amp;quot;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        &amp;quot;URLPath&amp;quot; : &amp;quot;expeccoService/rest&amp;quot; ,&lt;br /&gt;
        &amp;quot;Service&amp;quot; : &amp;quot;ExpeccoRestService&amp;quot;, &lt;br /&gt;
        &amp;quot;Version&amp;quot; : 1 ,&lt;br /&gt;
        &amp;quot;Protocol&amp;quot; : &lt;br /&gt;
            [&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;execute&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;start execution; return ticketID.&amp;quot; ,&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;download&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;start execution; return ticketID.&amp;quot; ,&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;executeTestSuiteFile&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;execute suite file; return ticketID.&amp;quot; ,&lt;br /&gt;
                },    &lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;getExecutionInfo&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(ID:String)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot; ,&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;killExecution&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(ID:String)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;removeTicket&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(ID:String)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                { &lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;cleanupTempFiles&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;ping&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;test reachability and return some status info.&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;protocolInfo&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot;, &lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
===== Execute Request &amp;quot;/expeccoService/rest/execute&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface above, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
===== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
===== Execute File Request &amp;quot;/expeccoService/rest/executeTestSuiteFile&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteFileName - name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
The file must be present/reachable by the expecco slave.&lt;br /&gt;
It may be either an absolute pathname (typically on a shared network drive) or&lt;br /&gt;
a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument.&lt;br /&gt;
&lt;br /&gt;
===== GetExecutionInfo Request &amp;quot;/expeccoService/rest/getExecutionInfo&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
===== KillExecution Request &amp;quot;/expeccoService/rest/killExecution&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
===== RemoveTicket Request &amp;quot;/expeccoService/rest/removeTicket&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
===== Cleanup Request &amp;quot;/expeccoService/rest/cleanupTempFiles&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
===== Ping Request &amp;quot;/expeccoService/rest/ping&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
===== Example Wire Protocol Trace =====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Example Session Using &amp;quot;&amp;lt;code&amp;gt;wget&amp;lt;/code&amp;gt;&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
Using &amp;quot;wget&amp;quot; with SOAP is possible, but a little complicated, because correct SOAP requests have to be constructed, and ticket-numbers be extracted from responses. It is much easier with the REST service.&lt;br /&gt;
&lt;br /&gt;
Assuming, you have a folder containing 3 suites &amp;quot;suiteA.ets&amp;quot;, &amp;quot;suiteB.ets&amp;quot; and &amp;quot;suiteC.ets&amp;quot;, and you want to send them to a running expecco slave via REST, here is how to do it:&lt;br /&gt;
&lt;br /&gt;
1) to check if the expecco slave is up and running, send it a&lt;br /&gt;
&lt;br /&gt;
=== Expecco Remote Control REST Service Interface ===&lt;br /&gt;
&lt;br /&gt;
A secondary REST service is available to interact with a running test.&lt;br /&gt;
This service is used by the &amp;quot;expecco remote control App&amp;quot;, which is available for Android devices (tablets and cell phones).&lt;br /&gt;
 &lt;br /&gt;
This accepts REST requests, via the URL &amp;quot;/remote&amp;quot;. I.e. the default URL is &amp;quot;host:9090/remote&amp;quot;.&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &amp;quot;host:9090/remote/protocolInfo&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
When this service is active, the standard Dialog requests (input boxes, with &amp;quot;OK&amp;quot;/&amp;quot;Cancel&amp;quot; buttons) will also be presented on the remote controlling app, and can be answered either on the PC-screen OR on a remote android device.&lt;br /&gt;
An obvious application of this is when the test system (hardware) needs manual interaction and you have to leave the workplace for this. Here, it is very convenient to be able to answer questions like &amp;quot;Insert Cable X and press OK to proceed&amp;quot; from a mobile device. Avoiding the need to walk back to the workplace to click on the &amp;quot;OK&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
=== Expecco Short Status Information Service ===&lt;br /&gt;
&lt;br /&gt;
This is a very simple HTTP service, which delivers a single page with a status overview.&lt;br /&gt;
This service is started when the &amp;quot;&amp;lt;code&amp;gt;--infoService&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;--server&amp;lt;/code&amp;gt;&amp;quot; command line arguments are present.&lt;br /&gt;
 &lt;br /&gt;
This accepts HTTP requests, via the URL &amp;quot;/info&amp;quot;. &lt;br /&gt;
I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/info&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The main use of this service is to quickly check the status of a testslave from a remote webbrowser,&lt;br /&gt;
without a need for a more complicated SOAP or REST service client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Back to [[Online_Documentation#Topic:_Execution | Online Documentation]]&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8473</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8473"/>
		<updated>2017-04-02T12:36:36Z</updated>

		<summary type="html">&lt;p&gt;Ab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the expecco 2.11 implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;:2,&lt;br /&gt;
    &amp;quot;URLPath&amp;quot;:&amp;quot;expeccoService/rest&amp;quot;,&lt;br /&gt;
    &amp;quot;Protocol&amp;quot;:[&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;cleanupTempFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;execute&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Array, TestPlanIDs:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFile&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Array, TestPlanIDs:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFileWithTestplanNames&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Array, TestPlanNames:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;expeccoExit&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;Exit the expecco application.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getExecutionInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getListOfTestSuiteFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get a list of known test suites which can be executed via executeTestSuiteFile.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Array&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;killExecution&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;loadSuite&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;load a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, SuitePathString:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;ping&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;test reachability and return some status info.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;removeTicket&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;waitForExecutionResult&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String; ReportFiles:Array,)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;protocolInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Service&amp;quot;:&amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Test Execution ====&lt;br /&gt;
===== Execution by Suite File Name Request =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/executeTestSuiteFileWithTestplanNames&amp;quot;&lt;br /&gt;
&lt;br /&gt;
With this request you can execute suites which are already present on the execution slave. For this, expecco should be started with a &amp;quot;--suiteDirectory&amp;quot; option, which specifies the folder name, where common test suites are located.&lt;br /&gt;
&lt;br /&gt;
If successful, a ticketID (the given job id) is returned. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job/ticket id&lt;br /&gt;
* SuiteFileName - mandatory; name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional&lt;br /&gt;
* TestPlans - optional&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional&lt;br /&gt;
&lt;br /&gt;
ID:&amp;lt;br&amp;gt;  &lt;br /&gt;
The ID is an unique identifier which can be used later to retrieve the execution state, results and execution logs. The ID have to be passed as JSON String.&lt;br /&gt;
&lt;br /&gt;
SuiteFileName:&amp;lt;br&amp;gt; &lt;br /&gt;
The testsuite file must be present/reachable by the expecco slave. It may be either an absolute pathname (typically on a shared network drive) or a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument. The SuiteFileName have to be passed as JSON String.&lt;br /&gt;
&lt;br /&gt;
Environment:&amp;lt;br&amp;gt;  &lt;br /&gt;
The suite environment can be setup/modified with this argument. The environment have to be passed as JSON Array with a list of environment key value pairs. First value of a pair is the environment key second the value.&lt;br /&gt;
&lt;br /&gt;
TestPlans:&amp;lt;br&amp;gt;  &lt;br /&gt;
A JSON Array with a list of testplan names. The testplans will be executed in the order defined in the array. If no testplan is given, all testplans included in the suite will be executed.&lt;br /&gt;
&lt;br /&gt;
Resources:&amp;lt;br&amp;gt;  &lt;br /&gt;
Within this argument you can pass resource descriptions for the execution.&lt;br /&gt;
&lt;br /&gt;
Parameters:&amp;lt;br&amp;gt;  &lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSON Argument Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ID&amp;quot;:&amp;quot;Testrun-4713&amp;quot;, &lt;br /&gt;
    &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:\\tmp\\DemoTest2.ets&amp;quot;,&lt;br /&gt;
    &amp;quot;Environment&amp;quot;:[&lt;br /&gt;
        &amp;quot;TestDelay1&amp;quot; &amp;quot;60&amp;quot;        &lt;br /&gt;
        &amp;quot;InfoString&amp;quot; &amp;quot;This is an example&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;TestPlans&amp;quot;:[&lt;br /&gt;
        &amp;quot;DefaultTestplan&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;Resources&amp;quot;:[], &lt;br /&gt;
    &amp;quot;Parameters&amp;quot;:[&lt;br /&gt;
        &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; &lt;br /&gt;
        &amp;quot;generatePDFReport&amp;quot; &amp;quot;true&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Execute Request =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/execute&amp;quot;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Execution Status Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getExecutionInfo&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This query returns status information about an ongoing or finished execution. Its single parameter field must contain a ticketId as described in the execute request. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
==== Wait for test execution finished Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/waitForExecutionResult&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request wait until the execution with the given job/ticket id is finished. After that it returns the same information as the request getExecutionInfo. With this request no polling on client side is necessary. On the other hand if the client poll the execution state with getExecutionInfo it is possible to fetch information about the progress of the execution from the response. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Terminate/Abort Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/killExecution&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to abort and terminate an ongoing test execution. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Remove Ticket Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/removeTicket&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to tell expecco, that no further interest exists in a ticket. If the test is still running, it is aborted. If it is about to be started, it will not be. Any temporary files which might have already been created due to this execution are removed. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Get List of available Testsuites Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getListOfTestSuiteFiles&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This query returns a list of available Testsuites for execution. The suites will be searched in the directory passed at startup with the --suiteDirectory argument.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Cleanup of Old Result/Log Files ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/cleanupTempFiles&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request can be used to remove all temporary files, especially leftover report- and log files. This should be used, if a client has crashed, and lost track of &lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ping Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/ping&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request answers with information about the host, architecture, disk usage and other status about the machine on which expecco is running. Also, a list of available plugins on the target machine is returned. Of course, it is also useful to see if the expecco service is ready and the communication works as expected. &lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Download Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/download&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
==== Exit expecco Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/expeccoExit&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Send back a response and exit expecco.&lt;br /&gt;
&lt;br /&gt;
No argument, no return&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
This is a small perl example. It starts a test execution on the expecco server and wait until execution is finished. In case of successful HTPP Response (200) the result is printed. &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8472</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8472"/>
		<updated>2017-04-01T16:53:42Z</updated>

		<summary type="html">&lt;p&gt;Ab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;:2,&lt;br /&gt;
    &amp;quot;URLPath&amp;quot;:&amp;quot;expeccoService/rest&amp;quot;,&lt;br /&gt;
    &amp;quot;Protocol&amp;quot;:[&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;cleanupTempFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;execute&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Array, TestPlanIDs:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFile&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Array, TestPlanIDs:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFileWithTestplanNames&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Array, TestPlanNames:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;expeccoExit&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;Exit the expecco application.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getExecutionInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getListOfTestSuiteFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get a list of known test suites which can be executed via executeTestSuiteFile.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Array&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;killExecution&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;loadSuite&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;load a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, SuitePathString:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;ping&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;test reachability and return some status info.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;removeTicket&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;waitForExecutionResult&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String; ReportFiles:Array,)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;protocolInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Service&amp;quot;:&amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Test Execution ====&lt;br /&gt;
===== Execution by Suite File Name Request =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/executeTestSuiteFileWithTestplanNames&amp;quot;&lt;br /&gt;
&lt;br /&gt;
With this request you can execute suites which are already present on the execution slave. For this, expecco should be started with a &amp;quot;--suiteDirectory&amp;quot; option, which specifies the folder name, where common test suites are located.&lt;br /&gt;
&lt;br /&gt;
If successful, a ticketID (the given job id) is returned. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job/ticket id&lt;br /&gt;
* SuiteFileName - mandatory; name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional&lt;br /&gt;
* TestPlans - optional&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional&lt;br /&gt;
&lt;br /&gt;
ID:&amp;lt;br&amp;gt;  &lt;br /&gt;
The ID is an unique identifier which can be used later to retrieve the execution state, results and execution logs. The ID have to be passed as JSON String.&lt;br /&gt;
&lt;br /&gt;
SuiteFileName:&amp;lt;br&amp;gt; &lt;br /&gt;
The testsuite file must be present/reachable by the expecco slave. It may be either an absolute pathname (typically on a shared network drive) or a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument. The SuiteFileName have to be passed as JSON String.&lt;br /&gt;
&lt;br /&gt;
Environment:&amp;lt;br&amp;gt;  &lt;br /&gt;
The suite environment can be setup/modified with this argument. The environment have to be passed as JSON Array with a list of environment key value pairs. First value of a pair is the environment key second the value.&lt;br /&gt;
&lt;br /&gt;
TestPlans:&amp;lt;br&amp;gt;  &lt;br /&gt;
A JSON Array with a list of testplan names. The testplans will be executed in the order defined in the array. If no testplan is given, all testplans included in the suite will be executed.&lt;br /&gt;
&lt;br /&gt;
Resources:&amp;lt;br&amp;gt;  &lt;br /&gt;
Within this argument you can pass resource descriptions for the execution.&lt;br /&gt;
&lt;br /&gt;
Parameters:&amp;lt;br&amp;gt;  &lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSON Argument Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ID&amp;quot;:&amp;quot;Testrun-4713&amp;quot;, &lt;br /&gt;
    &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:\\tmp\\DemoTest2.ets&amp;quot;,&lt;br /&gt;
    &amp;quot;Environment&amp;quot;:[&lt;br /&gt;
        &amp;quot;TestDelay1&amp;quot; &amp;quot;60&amp;quot;        &lt;br /&gt;
        &amp;quot;InfoString&amp;quot; &amp;quot;This is an example&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;TestPlans&amp;quot;:[&lt;br /&gt;
        &amp;quot;DefaultTestplan&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;Resources&amp;quot;:[], &lt;br /&gt;
    &amp;quot;Parameters&amp;quot;:[&lt;br /&gt;
        &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; &lt;br /&gt;
        &amp;quot;generatePDFReport&amp;quot; &amp;quot;true&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Execute Request =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/execute&amp;quot;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Execution Status Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getExecutionInfo&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This query returns status information about an ongoing or finished execution. Its single parameter field must contain a ticketId as described in the execute request. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
==== Wait for test execution finished Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/waitForExecutionResult&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request wait until the execution with the given job/ticket id is finished. After that it returns the same information as the request getExecutionInfo. With this request no polling on client side is necessary. On the other hand if the client poll the execution state with getExecutionInfo it is possible to fetch information about the progress of the execution from the response. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Terminate/Abort Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/killExecution&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to abort and terminate an ongoing test execution. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Remove Ticket Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/removeTicket&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to tell expecco, that no further interest exists in a ticket. If the test is still running, it is aborted. If it is about to be started, it will not be. Any temporary files which might have already been created due to this execution are removed. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Get List of available Testsuites Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getListOfTestSuiteFiles&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This query returns a list of available Testsuites for execution. The suites will be searched in the directory passed at startup with the --suiteDirectory argument.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Cleanup of Old Result/Log Files ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/cleanupTempFiles&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request can be used to remove all temporary files, especially leftover report- and log files. This should be used, if a client has crashed, and lost track of &lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ping Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/ping&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request answers with information about the host, architecture, disk usage and other status about the machine on which expecco is running. Also, a list of available plugins on the target machine is returned. Of course, it is also useful to see if the expecco service is ready and the communication works as expected. &lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Download Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/download&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
==== Exit expecco Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/expeccoExit&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Send back a response and exit expecco.&lt;br /&gt;
&lt;br /&gt;
No argument, no return&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
This is a small perl example. It starts a test execution on the expecco server and wait until execution is finished. In case of successful HTPP Response (200) the result is printed. &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8471</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8471"/>
		<updated>2017-04-01T16:52:40Z</updated>

		<summary type="html">&lt;p&gt;Ab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;:2,&lt;br /&gt;
    &amp;quot;URLPath&amp;quot;:&amp;quot;expeccoService/rest&amp;quot;,&lt;br /&gt;
    &amp;quot;Protocol&amp;quot;:[&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;cleanupTempFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;execute&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Array, TestPlanIDs:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFile&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Array, TestPlanIDs:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFileWithTestplanNames&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Array, TestPlanNames:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;expeccoExit&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;Exit the expecco application.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getExecutionInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getListOfTestSuiteFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get a list of known test suites which can be executed via executeTestSuiteFile.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Array&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;killExecution&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;loadSuite&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;load a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, SuitePathString:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;ping&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;test reachability and return some status info.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;removeTicket&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;waitForExecutionResult&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String; ReportFiles:Array,)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;protocolInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Service&amp;quot;:&amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Test Execution ====&lt;br /&gt;
===== Execution by Suite File Name Request =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/executeTestSuiteFileWithTestplanNames&amp;quot;&lt;br /&gt;
&lt;br /&gt;
With this request you can execute suites which are already present on the execution slave. For this, expecco should be started with a &amp;quot;--suiteDirectory&amp;quot; option, which specifies the folder name, where common test suites are located.&lt;br /&gt;
&lt;br /&gt;
If successful, a ticketID (the given job id) is returned. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job/ticket id&lt;br /&gt;
* SuiteFileName - mandatory; name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional&lt;br /&gt;
* TestPlans - optional&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional&lt;br /&gt;
&lt;br /&gt;
ID:&amp;lt;br&amp;gt;  &lt;br /&gt;
The ID is an unique identifier which can be used later to retrieve the execution state, results and execution logs. The ID have to be passed as JSON String.&lt;br /&gt;
&lt;br /&gt;
SuiteFileName:&amp;lt;br&amp;gt; &lt;br /&gt;
The testsuite file must be present/reachable by the expecco slave. It may be either an absolute pathname (typically on a shared network drive) or a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument. The SuiteFileName have to be passed as JSON String.&lt;br /&gt;
&lt;br /&gt;
Environment:&amp;lt;br&amp;gt;  &lt;br /&gt;
The suite environment can be setup/modified with this argument. The environment have to be passed as JSON Array with a list of environment key value pairs. First value of a pair is the environment key second the value.&lt;br /&gt;
&lt;br /&gt;
TestPlans:&amp;lt;br&amp;gt;  &lt;br /&gt;
A JSON Array with a list of testplan names. The testplans will be executed in the order defined in the array. If no testplan is given, all testplans included in the suite will be executed.&lt;br /&gt;
&lt;br /&gt;
Resources:&amp;lt;br&amp;gt;  &lt;br /&gt;
Within this argument you can pass resource descriptions for the execution.&lt;br /&gt;
&lt;br /&gt;
Parameters:&amp;lt;br&amp;gt;  &lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSON Argument Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ID&amp;quot;:&amp;quot;Testrun-4713&amp;quot;, &lt;br /&gt;
    &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:\\tmp\\DemoTest2.ets&amp;quot;,&lt;br /&gt;
    &amp;quot;Environment&amp;quot;:[&lt;br /&gt;
        &amp;quot;TestDelay1&amp;quot; &amp;quot;60&amp;quot;        &lt;br /&gt;
        &amp;quot;InfoString&amp;quot; &amp;quot;This is an example&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;TestPlans&amp;quot;:[&lt;br /&gt;
        &amp;quot;DefaultTestplan&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;Resources&amp;quot;:[], &lt;br /&gt;
    &amp;quot;Parameters&amp;quot;:[&lt;br /&gt;
        &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; &lt;br /&gt;
        &amp;quot;generatePDFReport&amp;quot; &amp;quot;true&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Execute Request =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/execute&amp;quot;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Execution Status Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getExecutionInfo&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This query returns status information about an ongoing or finished execution. Its single parameter field must contain a ticketId as described in the execute request. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
==== Wait for test execution finished Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/waitForExecutionResult&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request wait until the execution with the given job/ticket id is finished. After that it returns the same information as the request getExecutionInfo. With this request no polling on client side is necessary. On the other hand if the client poll the execution state with getExecutionInfo it is possible to fetch information about the progress of the execution from the response. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Terminate/Abort Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/killExecution&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to abort and terminate an ongoing test execution. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Remove Ticket Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/removeTicket&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to tell expecco, that no further interest exists in a ticket. If the test is still running, it is aborted. If it is about to be started, it will not be. Any temporary files which might have already been created due to this execution are removed. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Get List of available Testsuites Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getListOfTestSuiteFiles&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This query returns a list of available Testsuites for execution. The suites will be searched in the directory passed at startup with the --suiteDirectory argument.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Cleanup of Old Result/Log Files ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/cleanupTempFiles&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request can be used to remove all temporary files, especially leftover report- and log files. This should be used, if a client has crashed, and lost track of &lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ping Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/ping&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request answers with information about the host, architecture, disk usage and other status about the machine on which expecco is running. Also, a list of available plugins on the target machine is returned. Of course, it is also useful to see if the expecco service is ready and the communication works as expected. &lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Download Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/download&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
==== expecco exit Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/expeccoExit&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Send back a response and exit expecco.&lt;br /&gt;
&lt;br /&gt;
No argument, no return&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
This is a small perl example. It starts a test execution on the expecco server and wait until execution is finished. In case of successful HTPP Response (200) the result is printed. &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8415</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8415"/>
		<updated>2017-03-13T08:36:36Z</updated>

		<summary type="html">&lt;p&gt;Ab: /* Status Request */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;:2,&lt;br /&gt;
    &amp;quot;URLPath&amp;quot;:&amp;quot;expeccoService/rest&amp;quot;,&lt;br /&gt;
    &amp;quot;Protocol&amp;quot;:[&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;cleanupTempFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;execute&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFile&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFileWithTestplanNames&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getExecutionInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getListOfTestSuiteFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get a list of known test suites which can be executed via executeTestSuiteFile.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Array&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;killExecution&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;loadSuite&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;load a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, SuitePathString:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;ping&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;test reachability and return some status info.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;removeTicket&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;waitForExecutionResult&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String; ReportFiles:Array,)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;protocolInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Service&amp;quot;:&amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Test Execution ====&lt;br /&gt;
===== Execution by Suite File Name Request =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/executeTestSuiteFileWithTestplanNames&amp;quot;&lt;br /&gt;
&lt;br /&gt;
With this request you can execute suites which are already present on the execution slave. For this, expecco should be started with a &amp;quot;--suiteDirectory&amp;quot; option, which specifies the folder name, where common test suites are located.&lt;br /&gt;
&lt;br /&gt;
If successful, a ticketID (the given job id) is returned. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job/ticket id&lt;br /&gt;
* SuiteFileName - mandatory; name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional&lt;br /&gt;
* TestPlans - optional&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional&lt;br /&gt;
&lt;br /&gt;
ID:&amp;lt;br&amp;gt;  &lt;br /&gt;
The ID is an unique identifier which can be used later to retrieve the execution state, results and execution logs. The ID have to be passed as JSON String.&lt;br /&gt;
&lt;br /&gt;
SuiteFileName:&amp;lt;br&amp;gt; &lt;br /&gt;
The testsuite file must be present/reachable by the expecco slave. It may be either an absolute pathname (typically on a shared network drive) or a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument. The SuiteFileName have to be passed as JSON String.&lt;br /&gt;
&lt;br /&gt;
Environment:&amp;lt;br&amp;gt;  &lt;br /&gt;
The suite environment can be setup/modified with this argument. The environment have to be passed as JSON Array with a list of environment key value pairs. First value of a pair is the environment key second the value.&lt;br /&gt;
&lt;br /&gt;
TestPlans:&amp;lt;br&amp;gt;  &lt;br /&gt;
A JSON Array with a list of testplan names. The testplans will be executed in the order defined in the array. If no testplan is given, all testplans included in the suite will be executed.&lt;br /&gt;
&lt;br /&gt;
Resources:&amp;lt;br&amp;gt;  &lt;br /&gt;
Within this argument you can pass resource descriptions for the execution.&lt;br /&gt;
&lt;br /&gt;
Parameters:&amp;lt;br&amp;gt;  &lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSON Argument Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ID&amp;quot;:&amp;quot;Testrun-4713&amp;quot;, &lt;br /&gt;
    &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:\\tmp\\DemoTest2.ets&amp;quot;,&lt;br /&gt;
    &amp;quot;Environment&amp;quot;:[&lt;br /&gt;
        &amp;quot;TestDelay1&amp;quot; &amp;quot;60&amp;quot;        &lt;br /&gt;
        &amp;quot;InfoString&amp;quot; &amp;quot;This is an example&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;TestPlans&amp;quot;:[&lt;br /&gt;
        &amp;quot;DefaultTestplan&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;Resources&amp;quot;:[], &lt;br /&gt;
    &amp;quot;Parameters&amp;quot;:[&lt;br /&gt;
        &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; &lt;br /&gt;
        &amp;quot;generatePDFReport&amp;quot; &amp;quot;true&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Execute Request =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/execute&amp;quot;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Execution Status Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getExecutionInfo&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This query returns status information about an ongoing or finished execution. Its single parameter field must contain a ticketId as described in the execute request. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
==== Wait for test execution finished Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/waitForExecutionResult&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request wait until the execution with the given job/ticket id is finished. After that it returns the same information as the request getExecutionInfo. With this request no polling on client side is necessary. On the other hand if the client poll the execution state with getExecutionInfo it is possible to fetch information about the progress of the execution from the response. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Terminate/Abort Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/killExecution&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to abort and terminate an ongoing test execution. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Remove Ticket Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/removeTicket&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to tell expecco, that no further interest exists in a ticket. If the test is still running, it is aborted. If it is about to be started, it will not be. Any temporary files which might have already been created due to this execution are removed. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Get List of available Testsuites Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getListOfTestSuiteFiles&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This query returns a list of available Testsuites for execution. The suites will be searched in the directory passed at startup with the --suiteDirectory argument.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Cleanup of Old Result/Log Files ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/cleanupTempFiles&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request can be used to remove all temporary files, especially leftover report- and log files. This should be used, if a client has crashed, and lost track of &lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ping Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/ping&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request answers with information about the host, architecture, disk usage and other status about the machine on which expecco is running. Also, a list of available plugins on the target machine is returned. Of course, it is also useful to see if the expecco service is ready and the communication works as expected. &lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Download Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/download&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
This is a small perl example. It starts a test execution on the expecco server and wait until execution is finished. In case of successful HTPP Response (200) the result is printed. &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8414</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8414"/>
		<updated>2017-03-13T08:36:11Z</updated>

		<summary type="html">&lt;p&gt;Ab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;:2,&lt;br /&gt;
    &amp;quot;URLPath&amp;quot;:&amp;quot;expeccoService/rest&amp;quot;,&lt;br /&gt;
    &amp;quot;Protocol&amp;quot;:[&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;cleanupTempFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;execute&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFile&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFileWithTestplanNames&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getExecutionInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getListOfTestSuiteFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get a list of known test suites which can be executed via executeTestSuiteFile.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Array&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;killExecution&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;loadSuite&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;load a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, SuitePathString:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;ping&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;test reachability and return some status info.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;removeTicket&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;waitForExecutionResult&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String; ReportFiles:Array,)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;protocolInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Service&amp;quot;:&amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Test Execution ====&lt;br /&gt;
===== Execution by Suite File Name Request =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/executeTestSuiteFileWithTestplanNames&amp;quot;&lt;br /&gt;
&lt;br /&gt;
With this request you can execute suites which are already present on the execution slave. For this, expecco should be started with a &amp;quot;--suiteDirectory&amp;quot; option, which specifies the folder name, where common test suites are located.&lt;br /&gt;
&lt;br /&gt;
If successful, a ticketID (the given job id) is returned. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job/ticket id&lt;br /&gt;
* SuiteFileName - mandatory; name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional&lt;br /&gt;
* TestPlans - optional&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional&lt;br /&gt;
&lt;br /&gt;
ID:&amp;lt;br&amp;gt;  &lt;br /&gt;
The ID is an unique identifier which can be used later to retrieve the execution state, results and execution logs. The ID have to be passed as JSON String.&lt;br /&gt;
&lt;br /&gt;
SuiteFileName:&amp;lt;br&amp;gt; &lt;br /&gt;
The testsuite file must be present/reachable by the expecco slave. It may be either an absolute pathname (typically on a shared network drive) or a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument. The SuiteFileName have to be passed as JSON String.&lt;br /&gt;
&lt;br /&gt;
Environment:&amp;lt;br&amp;gt;  &lt;br /&gt;
The suite environment can be setup/modified with this argument. The environment have to be passed as JSON Array with a list of environment key value pairs. First value of a pair is the environment key second the value.&lt;br /&gt;
&lt;br /&gt;
TestPlans:&amp;lt;br&amp;gt;  &lt;br /&gt;
A JSON Array with a list of testplan names. The testplans will be executed in the order defined in the array. If no testplan is given, all testplans included in the suite will be executed.&lt;br /&gt;
&lt;br /&gt;
Resources:&amp;lt;br&amp;gt;  &lt;br /&gt;
Within this argument you can pass resource descriptions for the execution.&lt;br /&gt;
&lt;br /&gt;
Parameters:&amp;lt;br&amp;gt;  &lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSON Argument Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ID&amp;quot;:&amp;quot;Testrun-4713&amp;quot;, &lt;br /&gt;
    &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:\\tmp\\DemoTest2.ets&amp;quot;,&lt;br /&gt;
    &amp;quot;Environment&amp;quot;:[&lt;br /&gt;
        &amp;quot;TestDelay1&amp;quot; &amp;quot;60&amp;quot;        &lt;br /&gt;
        &amp;quot;InfoString&amp;quot; &amp;quot;This is an example&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;TestPlans&amp;quot;:[&lt;br /&gt;
        &amp;quot;DefaultTestplan&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;Resources&amp;quot;:[], &lt;br /&gt;
    &amp;quot;Parameters&amp;quot;:[&lt;br /&gt;
        &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; &lt;br /&gt;
        &amp;quot;generatePDFReport&amp;quot; &amp;quot;true&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Execute Request =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/execute&amp;quot;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Status Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getExecutionInfo&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This query returns status information about an ongoing or finished execution. Its single parameter field must contain a ticketId as described in the execute request. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
==== Wait for test execution finished Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/waitForExecutionResult&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request wait until the execution with the given job/ticket id is finished. After that it returns the same information as the request getExecutionInfo. With this request no polling on client side is necessary. On the other hand if the client poll the execution state with getExecutionInfo it is possible to fetch information about the progress of the execution from the response. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Terminate/Abort Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/killExecution&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to abort and terminate an ongoing test execution. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Remove Ticket Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/removeTicket&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to tell expecco, that no further interest exists in a ticket. If the test is still running, it is aborted. If it is about to be started, it will not be. Any temporary files which might have already been created due to this execution are removed. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Get List of available Testsuites Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getListOfTestSuiteFiles&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This query returns a list of available Testsuites for execution. The suites will be searched in the directory passed at startup with the --suiteDirectory argument.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Cleanup of Old Result/Log Files ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/cleanupTempFiles&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request can be used to remove all temporary files, especially leftover report- and log files. This should be used, if a client has crashed, and lost track of &lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ping Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/ping&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request answers with information about the host, architecture, disk usage and other status about the machine on which expecco is running. Also, a list of available plugins on the target machine is returned. Of course, it is also useful to see if the expecco service is ready and the communication works as expected. &lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Download Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/download&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
This is a small perl example. It starts a test execution on the expecco server and wait until execution is finished. In case of successful HTPP Response (200) the result is printed. &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8413</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8413"/>
		<updated>2017-03-13T08:21:36Z</updated>

		<summary type="html">&lt;p&gt;Ab: /* Execution by Suite File Name Request */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;:2,&lt;br /&gt;
    &amp;quot;URLPath&amp;quot;:&amp;quot;expeccoService/rest&amp;quot;,&lt;br /&gt;
    &amp;quot;Protocol&amp;quot;:[&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;cleanupTempFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;execute&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFile&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFileWithTestplanNames&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getExecutionInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getListOfTestSuiteFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get a list of known test suites which can be executed via executeTestSuiteFile.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Array&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;killExecution&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;loadSuite&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;load a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, SuitePathString:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;ping&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;test reachability and return some status info.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;removeTicket&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;waitForExecutionResult&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String; ReportFiles:Array,)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;protocolInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Service&amp;quot;:&amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Test Execution ====&lt;br /&gt;
===== Execution by Suite File Name Request =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/executeTestSuiteFileWithTestplanNames&amp;quot;&lt;br /&gt;
&lt;br /&gt;
With this request you can execute suites which are already present on the execution slave. For this, expecco should be started with a &amp;quot;--suiteDirectory&amp;quot; option, which specifies the folder name, where common test suites are located.&lt;br /&gt;
&lt;br /&gt;
If successful, a ticketID (the given job id) is returned. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job/ticket id&lt;br /&gt;
* SuiteFileName - mandatory; name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional&lt;br /&gt;
* TestPlans - optional&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional&lt;br /&gt;
&lt;br /&gt;
ID:&amp;lt;br&amp;gt;  &lt;br /&gt;
The ID is an unique identifier which can be used later to retrieve the execution state, results and execution logs. The ID have to be passed as JSON String.&lt;br /&gt;
&lt;br /&gt;
SuiteFileName:&amp;lt;br&amp;gt; &lt;br /&gt;
The testsuite file must be present/reachable by the expecco slave. It may be either an absolute pathname (typically on a shared network drive) or a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument. The SuiteFileName have to be passed as JSON String.&lt;br /&gt;
&lt;br /&gt;
Environment:&amp;lt;br&amp;gt;  &lt;br /&gt;
The suite environment can be setup/modified with this argument. The environment have to be passed as JSON Array with a list of environment key value pairs. First value of a pair is the environment key second the value.&lt;br /&gt;
&lt;br /&gt;
TestPlans:&amp;lt;br&amp;gt;  &lt;br /&gt;
A JSON Array with a list of testplan names. The testplans will be executed in the order defined in the array. If no testplan is given, all testplans included in the suite will be executed.&lt;br /&gt;
&lt;br /&gt;
Resources:&amp;lt;br&amp;gt;  &lt;br /&gt;
Within this argument you can pass resource descriptions for the execution.&lt;br /&gt;
&lt;br /&gt;
Parameters:&amp;lt;br&amp;gt;  &lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSON Argument Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ID&amp;quot;:&amp;quot;Testrun-4713&amp;quot;, &lt;br /&gt;
    &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:\\tmp\\DemoTest2.ets&amp;quot;,&lt;br /&gt;
    &amp;quot;Environment&amp;quot;:[&lt;br /&gt;
        &amp;quot;TestDelay1&amp;quot; &amp;quot;60&amp;quot;        &lt;br /&gt;
        &amp;quot;InfoString&amp;quot; &amp;quot;This is an example&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;TestPlans&amp;quot;:[&lt;br /&gt;
        &amp;quot;DefaultTestplan&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;Resources&amp;quot;:[], &lt;br /&gt;
    &amp;quot;Parameters&amp;quot;:[&lt;br /&gt;
        &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; &lt;br /&gt;
        &amp;quot;generatePDFReport&amp;quot; &amp;quot;true&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Execute Request =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/execute&amp;quot;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Status Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getExecutionInfo&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This query returns status information about an ongoing execution. Its single parameter field must contain a ticketId as described in the execute request. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Terminate/Abort Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/killExecution&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to abort and terminate an ongoing test execution. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Remove Ticket Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/removeTicket&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to tell expecco, that no further interest exists in a ticket. If the test is still running, it is aborted. If it is about to be started, it will not be. Any temporary files which might have already been created due to this execution are removed. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
==== Get List of available Testsuites Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getListOfTestSuiteFiles&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This query returns a list of available Testsuites for execution. The suites will be searched in the directory passed at startup with the --suiteDirectory argument.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Cleanup of Old Result/Log Files ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/cleanupTempFiles&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request can be used to remove all temporary files, especially leftover report- and log files. This should be used, if a client has crashed, and lost track of &lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ping Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/ping&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request answers with information about the host, architecture, disk usage and other status about the machine on which expecco is running. Also, a list of available plugins on the target machine is returned. Of course, it is also useful to see if the expecco service is ready and the communication works as expected. &lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8412</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8412"/>
		<updated>2017-03-13T08:20:26Z</updated>

		<summary type="html">&lt;p&gt;Ab: /* Execution by Suite File Name Request */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;:2,&lt;br /&gt;
    &amp;quot;URLPath&amp;quot;:&amp;quot;expeccoService/rest&amp;quot;,&lt;br /&gt;
    &amp;quot;Protocol&amp;quot;:[&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;cleanupTempFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;execute&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFile&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFileWithTestplanNames&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getExecutionInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getListOfTestSuiteFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get a list of known test suites which can be executed via executeTestSuiteFile.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Array&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;killExecution&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;loadSuite&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;load a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, SuitePathString:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;ping&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;test reachability and return some status info.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;removeTicket&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;waitForExecutionResult&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String; ReportFiles:Array,)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;protocolInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Service&amp;quot;:&amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Test Execution ====&lt;br /&gt;
===== Execution by Suite File Name Request =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/executeTestSuiteFileWithTestplanNames&amp;quot;&lt;br /&gt;
&lt;br /&gt;
With this request you can execute suites which are already present on the execution slave. For this, expecco should be started with a &amp;quot;--suiteDirectory&amp;quot; option, which specifies the folder name, where common test suites are located.&lt;br /&gt;
&lt;br /&gt;
If successful, a ticketID (the given job id) is returned. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job/ticket id&lt;br /&gt;
* SuiteFileName - mandatory; name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional&lt;br /&gt;
* TestPlans - optional&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional&lt;br /&gt;
&lt;br /&gt;
ID: &lt;br /&gt;
The ID is an unique identifier which can be used later to retrieve the execution state, results and execution logs. The ID have to be passed as JSON String.&lt;br /&gt;
&lt;br /&gt;
SuiteFileName:&amp;lt;br&amp;gt; &lt;br /&gt;
The testsuite file must be present/reachable by the expecco slave. It may be either an absolute pathname (typically on a shared network drive) or a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument. The SuiteFileName have to be passed as JSON String.&lt;br /&gt;
&lt;br /&gt;
Environment: &lt;br /&gt;
The suite environment can be setup/modified with this argument. The environment have to be passed as JSON Array with a list of environment key value pairs. First value of a pair is the environment key second the value.&lt;br /&gt;
&lt;br /&gt;
TestPlans: &lt;br /&gt;
A JSON Array with a list of testplan names. The testplans will be executed in the order defined in the array. If no testplan is given, all testplans found in the suite will be executed.&lt;br /&gt;
&lt;br /&gt;
Resources: &lt;br /&gt;
Within this argument you can pass resource descriptions for the execution.&lt;br /&gt;
&lt;br /&gt;
Parameters: &lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSON Argument Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ID&amp;quot;:&amp;quot;Testrun-4713&amp;quot;, &lt;br /&gt;
    &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:\\tmp\\DemoTest2.ets&amp;quot;,&lt;br /&gt;
    &amp;quot;Environment&amp;quot;:[&lt;br /&gt;
        &amp;quot;TestDelay1&amp;quot; &amp;quot;60&amp;quot;        &lt;br /&gt;
        &amp;quot;InfoString&amp;quot; &amp;quot;This is an example&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;TestPlans&amp;quot;:[&lt;br /&gt;
        &amp;quot;DefaultTestplan&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;Resources&amp;quot;:[], &lt;br /&gt;
    &amp;quot;Parameters&amp;quot;:[&lt;br /&gt;
        &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; &lt;br /&gt;
        &amp;quot;generatePDFReport&amp;quot; &amp;quot;true&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Execute Request =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/execute&amp;quot;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Status Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getExecutionInfo&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This query returns status information about an ongoing execution. Its single parameter field must contain a ticketId as described in the execute request. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Terminate/Abort Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/killExecution&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to abort and terminate an ongoing test execution. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Remove Ticket Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/removeTicket&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to tell expecco, that no further interest exists in a ticket. If the test is still running, it is aborted. If it is about to be started, it will not be. Any temporary files which might have already been created due to this execution are removed. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
==== Get List of available Testsuites Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getListOfTestSuiteFiles&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This query returns a list of available Testsuites for execution. The suites will be searched in the directory passed at startup with the --suiteDirectory argument.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Cleanup of Old Result/Log Files ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/cleanupTempFiles&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request can be used to remove all temporary files, especially leftover report- and log files. This should be used, if a client has crashed, and lost track of &lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ping Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/ping&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request answers with information about the host, architecture, disk usage and other status about the machine on which expecco is running. Also, a list of available plugins on the target machine is returned. Of course, it is also useful to see if the expecco service is ready and the communication works as expected. &lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8411</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8411"/>
		<updated>2017-03-13T08:18:55Z</updated>

		<summary type="html">&lt;p&gt;Ab: /* Execution by Suite File Name Request */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;:2,&lt;br /&gt;
    &amp;quot;URLPath&amp;quot;:&amp;quot;expeccoService/rest&amp;quot;,&lt;br /&gt;
    &amp;quot;Protocol&amp;quot;:[&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;cleanupTempFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;execute&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFile&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFileWithTestplanNames&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getExecutionInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getListOfTestSuiteFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get a list of known test suites which can be executed via executeTestSuiteFile.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Array&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;killExecution&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;loadSuite&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;load a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, SuitePathString:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;ping&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;test reachability and return some status info.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;removeTicket&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;waitForExecutionResult&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String; ReportFiles:Array,)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;protocolInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Service&amp;quot;:&amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Test Execution ====&lt;br /&gt;
===== Execution by Suite File Name Request =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/executeTestSuiteFileWithTestplanNames&amp;quot;&lt;br /&gt;
&lt;br /&gt;
With this request you can execute suites which are already present on the execution slave. For this, expecco should be started with a &amp;quot;--suiteDirectory&amp;quot; option, which specifies the folder name, where common test suites are located.&lt;br /&gt;
&lt;br /&gt;
If successful, a ticketID (the given job id) is returned. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job/ticket id&lt;br /&gt;
* SuiteFileName - mandatory; name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional&lt;br /&gt;
* TestPlans - optional&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional&lt;br /&gt;
&lt;br /&gt;
ID: &lt;br /&gt;
The ID is an unique identifier which can be used later to retrieve the execution state, results and execution logs. The ID have to be passed as JSON String.&lt;br /&gt;
&lt;br /&gt;
SuiteFileName: &lt;br /&gt;
The testsuite file must be present/reachable by the expecco slave. It may be either an absolute pathname (typically on a shared network drive) or a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument. The SuiteFileName have to be passed as JSON String.&lt;br /&gt;
&lt;br /&gt;
Environment: &lt;br /&gt;
The suite environment can be setup/modified with this argument. The environment have to be passed as JSON Array with a list of environment key value pairs. First value of a pair is the environment key second the value.&lt;br /&gt;
&lt;br /&gt;
Testplans: &lt;br /&gt;
A JSON Array with a list of testplan names. The testplans will be executed in the order defined in the array. If no testplan is given, all testplans found in the suite will be executed.&lt;br /&gt;
&lt;br /&gt;
Resources: &lt;br /&gt;
Within this argument you can pass resource descriptions for the execution.&lt;br /&gt;
&lt;br /&gt;
Parameters: &lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
 * &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
 * &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSON Argument Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ID&amp;quot;:&amp;quot;Testrun-4713&amp;quot;, &lt;br /&gt;
    &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:\\tmp\\DemoTest2.ets&amp;quot;,&lt;br /&gt;
    &amp;quot;Environment&amp;quot;:[&lt;br /&gt;
        &amp;quot;TestDelay1&amp;quot; &amp;quot;60&amp;quot;        &lt;br /&gt;
        &amp;quot;InfoString&amp;quot; &amp;quot;This is an example&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;TestPlans&amp;quot;:[&lt;br /&gt;
        &amp;quot;DefaultTestplan&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;Resources&amp;quot;:[], &lt;br /&gt;
    &amp;quot;Parameters&amp;quot;:[&lt;br /&gt;
        &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; &lt;br /&gt;
        &amp;quot;generatePDFReport&amp;quot; &amp;quot;true&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Execute Request =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/execute&amp;quot;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Status Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getExecutionInfo&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This query returns status information about an ongoing execution. Its single parameter field must contain a ticketId as described in the execute request. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Terminate/Abort Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/killExecution&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to abort and terminate an ongoing test execution. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Remove Ticket Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/removeTicket&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to tell expecco, that no further interest exists in a ticket. If the test is still running, it is aborted. If it is about to be started, it will not be. Any temporary files which might have already been created due to this execution are removed. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
==== Get List of available Testsuites Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getListOfTestSuiteFiles&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This query returns a list of available Testsuites for execution. The suites will be searched in the directory passed at startup with the --suiteDirectory argument.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Cleanup of Old Result/Log Files ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/cleanupTempFiles&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request can be used to remove all temporary files, especially leftover report- and log files. This should be used, if a client has crashed, and lost track of &lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ping Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/ping&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request answers with information about the host, architecture, disk usage and other status about the machine on which expecco is running. Also, a list of available plugins on the target machine is returned. Of course, it is also useful to see if the expecco service is ready and the communication works as expected. &lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8410</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8410"/>
		<updated>2017-03-13T08:16:24Z</updated>

		<summary type="html">&lt;p&gt;Ab: /* Execution by Suite File Name Request */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;:2,&lt;br /&gt;
    &amp;quot;URLPath&amp;quot;:&amp;quot;expeccoService/rest&amp;quot;,&lt;br /&gt;
    &amp;quot;Protocol&amp;quot;:[&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;cleanupTempFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;execute&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFile&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFileWithTestplanNames&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getExecutionInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getListOfTestSuiteFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get a list of known test suites which can be executed via executeTestSuiteFile.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Array&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;killExecution&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;loadSuite&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;load a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, SuitePathString:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;ping&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;test reachability and return some status info.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;removeTicket&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;waitForExecutionResult&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String; ReportFiles:Array,)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;protocolInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Service&amp;quot;:&amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Test Execution ====&lt;br /&gt;
===== Execution by Suite File Name Request =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/executeTestSuiteFileWithTestplanNames&amp;quot;&lt;br /&gt;
&lt;br /&gt;
With this request you can execute suites which are already present on the execution slave. For this, expecco should be started with a &amp;quot;--suiteDirectory&amp;quot; option, which specifies the folder name, where common test suites are located.&lt;br /&gt;
&lt;br /&gt;
If successful, a ticketID (the given job id) is returned. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job/ticket id&lt;br /&gt;
* SuiteFileName - mandatory; name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional&lt;br /&gt;
* TestPlans - optional&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional&lt;br /&gt;
&lt;br /&gt;
ID: The ID is an unique identifier which can be used later to retrieve the execution state, results and execution logs. The ID have to be passed as JSON String.&lt;br /&gt;
&lt;br /&gt;
SuiteFileName: The testsuite file must be present/reachable by the expecco slave. It may be either an absolute pathname (typically on a shared network drive) or a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument. The SuiteFileName have to be passed as JSON String.&lt;br /&gt;
Environment: The suite environment can be setup/modified with this argument. The environment have to be passed as JSON Array with a list of environment key value pairs. First value of a pair is the environment key second the value.&lt;br /&gt;
Testplans: A JSON Array with a list of testplan names. The testplans will be executed in the order defined in the array. If no testplan is given, all testplans found in the suite will be executed.&lt;br /&gt;
Resources: Within this argument you can pass resource descriptions for the execution.&lt;br /&gt;
Parameters: If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
** &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
** &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element &lt;br /&gt;
&lt;br /&gt;
JSON Argument Example:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ID&amp;quot;:&amp;quot;Testrun-4713&amp;quot;, &lt;br /&gt;
    &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:\\tmp\\DemoTest2.ets&amp;quot;,&lt;br /&gt;
    &amp;quot;Environment&amp;quot;:[&lt;br /&gt;
        &amp;quot;TestDelay1&amp;quot; &amp;quot;60&amp;quot;        &lt;br /&gt;
        &amp;quot;InfoString&amp;quot; &amp;quot;This is an example&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;TestPlans&amp;quot;:[&lt;br /&gt;
        &amp;quot;DefaultTestplan&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;Resources&amp;quot;:[], &lt;br /&gt;
    &amp;quot;Parameters&amp;quot;:[&lt;br /&gt;
        &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; &lt;br /&gt;
        &amp;quot;generatePDFReport&amp;quot; &amp;quot;true&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Execute Request =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/execute&amp;quot;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Status Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getExecutionInfo&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This query returns status information about an ongoing execution. Its single parameter field must contain a ticketId as described in the execute request. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Terminate/Abort Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/killExecution&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to abort and terminate an ongoing test execution. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Remove Ticket Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/removeTicket&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to tell expecco, that no further interest exists in a ticket. If the test is still running, it is aborted. If it is about to be started, it will not be. Any temporary files which might have already been created due to this execution are removed. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
==== Get List of available Testsuites Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getListOfTestSuiteFiles&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This query returns a list of available Testsuites for execution. The suites will be searched in the directory passed at startup with the --suiteDirectory argument.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Cleanup of Old Result/Log Files ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/cleanupTempFiles&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request can be used to remove all temporary files, especially leftover report- and log files. This should be used, if a client has crashed, and lost track of &lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ping Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/ping&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request answers with information about the host, architecture, disk usage and other status about the machine on which expecco is running. Also, a list of available plugins on the target machine is returned. Of course, it is also useful to see if the expecco service is ready and the communication works as expected. &lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8409</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8409"/>
		<updated>2017-03-13T08:14:52Z</updated>

		<summary type="html">&lt;p&gt;Ab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;:2,&lt;br /&gt;
    &amp;quot;URLPath&amp;quot;:&amp;quot;expeccoService/rest&amp;quot;,&lt;br /&gt;
    &amp;quot;Protocol&amp;quot;:[&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;cleanupTempFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;execute&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFile&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFileWithTestplanNames&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getExecutionInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getListOfTestSuiteFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get a list of known test suites which can be executed via executeTestSuiteFile.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Array&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;killExecution&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;loadSuite&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;load a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, SuitePathString:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;ping&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;test reachability and return some status info.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;removeTicket&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;waitForExecutionResult&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String; ReportFiles:Array,)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;protocolInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Service&amp;quot;:&amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Test Execution ====&lt;br /&gt;
===== Execution by Suite File Name Request =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/executeTestSuiteFileWithTestplanNames&amp;quot;&lt;br /&gt;
&lt;br /&gt;
With this request you can execute suites which are already present on the execution slave. For this, expecco should be started with a &amp;quot;--suiteDirectory&amp;quot; option, which specifies the folder name, where common test suites are located.&lt;br /&gt;
&lt;br /&gt;
If successful, a ticketID (the given job id) is returned. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job/ticket id&lt;br /&gt;
* SuiteFileName - mandatory; name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional&lt;br /&gt;
* TestPlans - optional&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional&lt;br /&gt;
&lt;br /&gt;
* ID: The ID is an unique identifier which can be used later to retrieve the execution state, results and execution logs. The ID have to be passed as JSON String.&lt;br /&gt;
* SuiteFileName: The testsuite file must be present/reachable by the expecco slave. It may be either an absolute pathname (typically on a shared network drive) or a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument. The SuiteFileName have to be passed as JSON String.&lt;br /&gt;
* Environment: The suite environment can be setup/modified with this argument. The environment have to be passed as JSON Array with a list of environment key value pairs. First value of a pair is the environment key second the value.&lt;br /&gt;
* Testplans: A JSON Array with a list of testplan names. The testplans will be executed in the order defined in the array. If no testplan is given, all testplans found in the suite will be executed.&lt;br /&gt;
* Resources: Within this argument you can pass resource descriptions for the execution.&lt;br /&gt;
* Parameters: If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
** &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
** &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element &lt;br /&gt;
&lt;br /&gt;
JSON Argument Example:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ID&amp;quot;:&amp;quot;Testrun-4713&amp;quot;, &lt;br /&gt;
    &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:\\tmp\\DemoTest2.ets&amp;quot;,&lt;br /&gt;
    &amp;quot;Environment&amp;quot;:[&lt;br /&gt;
        &amp;quot;TestDelay1&amp;quot; &amp;quot;60&amp;quot;        &lt;br /&gt;
        &amp;quot;InfoString&amp;quot; &amp;quot;This is an example&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;TestPlans&amp;quot;:[&lt;br /&gt;
        &amp;quot;DefaultTestplan&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;Resources&amp;quot;:[], &lt;br /&gt;
    &amp;quot;Parameters&amp;quot;:[&lt;br /&gt;
        &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; &lt;br /&gt;
        &amp;quot;generatePDFReport&amp;quot; &amp;quot;true&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Execute Request =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/execute&amp;quot;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Status Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getExecutionInfo&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This query returns status information about an ongoing execution. Its single parameter field must contain a ticketId as described in the execute request. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Terminate/Abort Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/killExecution&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to abort and terminate an ongoing test execution. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Remove Ticket Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/removeTicket&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to tell expecco, that no further interest exists in a ticket. If the test is still running, it is aborted. If it is about to be started, it will not be. Any temporary files which might have already been created due to this execution are removed. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
==== Get List of available Testsuites Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getListOfTestSuiteFiles&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This query returns a list of available Testsuites for execution. The suites will be searched in the directory passed at startup with the --suiteDirectory argument.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Cleanup of Old Result/Log Files ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/cleanupTempFiles&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request can be used to remove all temporary files, especially leftover report- and log files. This should be used, if a client has crashed, and lost track of &lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Ping Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/ping&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request answers with information about the host, architecture, disk usage and other status about the machine on which expecco is running. Also, a list of available plugins on the target machine is returned. Of course, it is also useful to see if the expecco service is ready and the communication works as expected. &lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8408</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8408"/>
		<updated>2017-03-13T05:56:44Z</updated>

		<summary type="html">&lt;p&gt;Ab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;:2,&lt;br /&gt;
    &amp;quot;URLPath&amp;quot;:&amp;quot;expeccoService/rest&amp;quot;,&lt;br /&gt;
    &amp;quot;Protocol&amp;quot;:[&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;cleanupTempFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;execute&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFile&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFileWithTestplanNames&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getExecutionInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getListOfTestSuiteFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get a list of known test suites which can be executed via executeTestSuiteFile.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Array&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;killExecution&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;loadSuite&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;load a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, SuitePathString:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;ping&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;test reachability and return some status info.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;removeTicket&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;waitForExecutionResult&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String; ReportFiles:Array,)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;protocolInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Service&amp;quot;:&amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Test Execution ====&lt;br /&gt;
===== Execution by Suite File Name Request =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/executeTestSuiteFileWithTestplanNames&amp;quot;&lt;br /&gt;
&lt;br /&gt;
With this request you can execute suites which are already present on the execution slave. For this, expecco should be started with a &amp;quot;--suiteDirectory&amp;quot; option, which specifies the folder name, where common test suites are located.&lt;br /&gt;
&lt;br /&gt;
If successful, a ticketID (the given job id) is returned. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteFileName - name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional&lt;br /&gt;
* TestPlans - optional&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional&lt;br /&gt;
&lt;br /&gt;
The ID is an unique identifier which can be used later to retrieve the execution state, results and execution logs. &lt;br /&gt;
The ets file must be present/reachable by the expecco slave. It may be either an absolute pathname (typically on a shared network drive) or a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ID&amp;quot;:&amp;quot;Testrun-4713&amp;quot;, &lt;br /&gt;
    &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:\\tmp\\DemoTest2.ets&amp;quot;,&lt;br /&gt;
    &amp;quot;Environment&amp;quot;:[&lt;br /&gt;
        &amp;quot;TestDelay1&amp;quot; &amp;quot;60&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;TestPlans&amp;quot;:[&lt;br /&gt;
        &amp;quot;DefaultTestplan&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;Resources&amp;quot;:[], &lt;br /&gt;
    &amp;quot;Parameters&amp;quot;:[&lt;br /&gt;
        &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; &lt;br /&gt;
        &amp;quot;generatePDFReport&amp;quot; &amp;quot;true&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Execute Request =====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/execute&amp;quot;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Status Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getExecutionInfo&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This query returns status information about an ongoing execution. Its single parameter field must contain a ticketId as described in the execute request. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
==== Terminate/Abort Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/killExecution&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to abort and terminate an ongoing test execution. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
==== Remove Ticket Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/removeTicket&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to tell expecco, that no further interest exists in a ticket. If the test is still running, it is aborted. If it is about to be started, it will not be. Any temporary files which might have already been created due to this execution are removed. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
==== Cleanup of Old Result/Log Files ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/cleanupTempFiles&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request can be used to remove all temporary files, especially leftover report- and log files. This should be used, if a client has crashed, and lost track of &lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
==== Ping Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/ping&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request answers with information about the host, architecture, disk usage and other status about the machine on which expecco is running. Also, a list of available plugins on the target machine is returned. Of course, it is also useful to see if the expecco service is ready and the communication works as expected. &lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8407</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8407"/>
		<updated>2017-03-13T05:46:02Z</updated>

		<summary type="html">&lt;p&gt;Ab: /* GetExecutionInfo Request */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;:2,&lt;br /&gt;
    &amp;quot;URLPath&amp;quot;:&amp;quot;expeccoService/rest&amp;quot;,&lt;br /&gt;
    &amp;quot;Protocol&amp;quot;:[&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;cleanupTempFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;execute&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFile&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFileWithTestplanNames&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getExecutionInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getListOfTestSuiteFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get a list of known test suites which can be executed via executeTestSuiteFile.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Array&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;killExecution&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;loadSuite&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;load a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, SuitePathString:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;ping&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;test reachability and return some status info.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;removeTicket&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;waitForExecutionResult&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String; ReportFiles:Array,)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;protocolInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Service&amp;quot;:&amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Execution by Suite File Name Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/executeTestSuiteFileWithTestplanNames&amp;quot;&lt;br /&gt;
&lt;br /&gt;
With this request you can execute suites which are already present on the execution slave. For this, expecco should be started with a &amp;quot;--suiteDirectory&amp;quot; option, which specifies the folder name, where common test suites are located.&lt;br /&gt;
&lt;br /&gt;
If successful, a ticketID is returned (same as above execute-request). &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteFileName - name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional&lt;br /&gt;
* TestPlans - optional&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional&lt;br /&gt;
&lt;br /&gt;
The ID is an unique identifier which can be used later to retrieve the execution state, results and execution logs. &lt;br /&gt;
The ets file must be present/reachable by the expecco slave. It may be either an absolute pathname (typically on a shared network drive) or a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ID&amp;quot;:&amp;quot;Testrun-4713&amp;quot;, &lt;br /&gt;
    &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:\\tmp\\DemoTest2.ets&amp;quot;,&lt;br /&gt;
    &amp;quot;Environment&amp;quot;:[&lt;br /&gt;
        &amp;quot;TestDelay1&amp;quot; &amp;quot;60&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;TestPlans&amp;quot;:[&lt;br /&gt;
        &amp;quot;DefaultTestplan&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;Resources&amp;quot;:[], &lt;br /&gt;
    &amp;quot;Parameters&amp;quot;:[&lt;br /&gt;
        &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; &lt;br /&gt;
        &amp;quot;generatePDFReport&amp;quot; &amp;quot;true&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Status Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getExecutionInfo&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This query returns status information about an ongoing execution. Its single parameter field must contain a ticketId as described in the execute request. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
==== Terminate/Abort Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/killExecution&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to abort and terminate an ongoing test execution. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
==== Remove Ticket Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/removeTicket&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to tell expecco, that no further interest exists in a ticket. If the test is still running, it is aborted. If it is about to be started, it will not be. Any temporary files which might have already been created due to this execution are removed. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
==== Cleanup of Old Result/Log Files ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/cleanupTempFiles&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request can be used to remove all temporary files, especially leftover report- and log files. This should be used, if a client has crashed, and lost track of &lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
==== Ping Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/ping&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request answers with information about the host, architecture, disk usage and other status about the machine on which expecco is running. Also, a list of available plugins on the target machine is returned. Of course, it is also useful to see if the expecco service is ready and the communication works as expected. &lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
==== Execute Request &amp;quot;/expeccoService/rest/execute&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface above, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
==== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8406</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8406"/>
		<updated>2017-03-13T05:44:18Z</updated>

		<summary type="html">&lt;p&gt;Ab: /* ExecuteTestSuiteFileWithTestplanNames Request */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;:2,&lt;br /&gt;
    &amp;quot;URLPath&amp;quot;:&amp;quot;expeccoService/rest&amp;quot;,&lt;br /&gt;
    &amp;quot;Protocol&amp;quot;:[&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;cleanupTempFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;execute&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFile&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFileWithTestplanNames&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getExecutionInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getListOfTestSuiteFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get a list of known test suites which can be executed via executeTestSuiteFile.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Array&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;killExecution&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;loadSuite&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;load a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, SuitePathString:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;ping&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;test reachability and return some status info.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;removeTicket&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;waitForExecutionResult&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String; ReportFiles:Array,)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;protocolInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Service&amp;quot;:&amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Execution by Suite File Name Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/executeTestSuiteFileWithTestplanNames&amp;quot;&lt;br /&gt;
&lt;br /&gt;
With this request you can execute suites which are already present on the execution slave. For this, expecco should be started with a &amp;quot;--suiteDirectory&amp;quot; option, which specifies the folder name, where common test suites are located.&lt;br /&gt;
&lt;br /&gt;
If successful, a ticketID is returned (same as above execute-request). &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteFileName - name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional&lt;br /&gt;
* TestPlans - optional&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional&lt;br /&gt;
&lt;br /&gt;
The ID is an unique identifier which can be used later to retrieve the execution state, results and execution logs. &lt;br /&gt;
The ets file must be present/reachable by the expecco slave. It may be either an absolute pathname (typically on a shared network drive) or a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ID&amp;quot;:&amp;quot;Testrun-4713&amp;quot;, &lt;br /&gt;
    &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:\\tmp\\DemoTest2.ets&amp;quot;,&lt;br /&gt;
    &amp;quot;Environment&amp;quot;:[&lt;br /&gt;
        &amp;quot;TestDelay1&amp;quot; &amp;quot;60&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;TestPlans&amp;quot;:[&lt;br /&gt;
        &amp;quot;DefaultTestplan&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;Resources&amp;quot;:[], &lt;br /&gt;
    &amp;quot;Parameters&amp;quot;:[&lt;br /&gt;
        &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; &lt;br /&gt;
        &amp;quot;generatePDFReport&amp;quot; &amp;quot;true&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GetExecutionInfo Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getExecutionInfo&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== Terminate/Abort Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/killExecution&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to abort and terminate an ongoing test execution. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
==== Remove Ticket Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/removeTicket&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to tell expecco, that no further interest exists in a ticket. If the test is still running, it is aborted. If it is about to be started, it will not be. Any temporary files which might have already been created due to this execution are removed. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
==== Cleanup of Old Result/Log Files ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/cleanupTempFiles&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request can be used to remove all temporary files, especially leftover report- and log files. This should be used, if a client has crashed, and lost track of &lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
==== Ping Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/ping&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request answers with information about the host, architecture, disk usage and other status about the machine on which expecco is running. Also, a list of available plugins on the target machine is returned. Of course, it is also useful to see if the expecco service is ready and the communication works as expected. &lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
==== Execute Request &amp;quot;/expeccoService/rest/execute&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface above, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
==== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8405</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8405"/>
		<updated>2017-03-13T05:38:40Z</updated>

		<summary type="html">&lt;p&gt;Ab: /* CleanupTempFiles Request */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;:2,&lt;br /&gt;
    &amp;quot;URLPath&amp;quot;:&amp;quot;expeccoService/rest&amp;quot;,&lt;br /&gt;
    &amp;quot;Protocol&amp;quot;:[&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;cleanupTempFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;execute&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFile&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFileWithTestplanNames&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getExecutionInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getListOfTestSuiteFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get a list of known test suites which can be executed via executeTestSuiteFile.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Array&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;killExecution&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;loadSuite&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;load a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, SuitePathString:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;ping&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;test reachability and return some status info.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;removeTicket&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;waitForExecutionResult&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String; ReportFiles:Array,)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;protocolInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Service&amp;quot;:&amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== ExecuteTestSuiteFileWithTestplanNames Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/executeTestSuiteFileWithTestplanNames&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Load the testsuite and execute the testplans.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteFileName - name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional&lt;br /&gt;
* TestPlans - optional&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional&lt;br /&gt;
&lt;br /&gt;
The ID is an unique identifier which can be used later to retrieve the execution state, results and execution logs. &lt;br /&gt;
The ets file must be present/reachable by the expecco slave. It may be either an absolute pathname (typically on a shared network drive) or a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ID&amp;quot;:&amp;quot;Testrun-4713&amp;quot;, &lt;br /&gt;
    &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:\\tmp\\DemoTest2.ets&amp;quot;,&lt;br /&gt;
    &amp;quot;Environment&amp;quot;:[&lt;br /&gt;
        &amp;quot;TestDelay1&amp;quot; &amp;quot;60&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;TestPlans&amp;quot;:[&lt;br /&gt;
        &amp;quot;DefaultTestplan&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;Resources&amp;quot;:[], &lt;br /&gt;
    &amp;quot;Parameters&amp;quot;:[&lt;br /&gt;
        &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; &lt;br /&gt;
        &amp;quot;generatePDFReport&amp;quot; &amp;quot;true&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GetExecutionInfo Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getExecutionInfo&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== Terminate/Abort Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/killExecution&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to abort and terminate an ongoing test execution. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
==== Remove Ticket Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/removeTicket&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to tell expecco, that no further interest exists in a ticket. If the test is still running, it is aborted. If it is about to be started, it will not be. Any temporary files which might have already been created due to this execution are removed. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
==== Cleanup of Old Result/Log Files ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/cleanupTempFiles&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request can be used to remove all temporary files, especially leftover report- and log files. This should be used, if a client has crashed, and lost track of &lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
==== Ping Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/ping&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request answers with information about the host, architecture, disk usage and other status about the machine on which expecco is running. Also, a list of available plugins on the target machine is returned. Of course, it is also useful to see if the expecco service is ready and the communication works as expected. &lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
==== Execute Request &amp;quot;/expeccoService/rest/execute&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface above, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
==== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8404</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8404"/>
		<updated>2017-03-13T05:37:26Z</updated>

		<summary type="html">&lt;p&gt;Ab: /* CleanupTempFiles Request */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;:2,&lt;br /&gt;
    &amp;quot;URLPath&amp;quot;:&amp;quot;expeccoService/rest&amp;quot;,&lt;br /&gt;
    &amp;quot;Protocol&amp;quot;:[&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;cleanupTempFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;execute&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFile&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFileWithTestplanNames&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getExecutionInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getListOfTestSuiteFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get a list of known test suites which can be executed via executeTestSuiteFile.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Array&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;killExecution&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;loadSuite&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;load a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, SuitePathString:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;ping&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;test reachability and return some status info.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;removeTicket&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;waitForExecutionResult&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String; ReportFiles:Array,)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;protocolInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Service&amp;quot;:&amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== ExecuteTestSuiteFileWithTestplanNames Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/executeTestSuiteFileWithTestplanNames&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Load the testsuite and execute the testplans.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteFileName - name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional&lt;br /&gt;
* TestPlans - optional&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional&lt;br /&gt;
&lt;br /&gt;
The ID is an unique identifier which can be used later to retrieve the execution state, results and execution logs. &lt;br /&gt;
The ets file must be present/reachable by the expecco slave. It may be either an absolute pathname (typically on a shared network drive) or a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ID&amp;quot;:&amp;quot;Testrun-4713&amp;quot;, &lt;br /&gt;
    &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:\\tmp\\DemoTest2.ets&amp;quot;,&lt;br /&gt;
    &amp;quot;Environment&amp;quot;:[&lt;br /&gt;
        &amp;quot;TestDelay1&amp;quot; &amp;quot;60&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;TestPlans&amp;quot;:[&lt;br /&gt;
        &amp;quot;DefaultTestplan&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;Resources&amp;quot;:[], &lt;br /&gt;
    &amp;quot;Parameters&amp;quot;:[&lt;br /&gt;
        &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; &lt;br /&gt;
        &amp;quot;generatePDFReport&amp;quot; &amp;quot;true&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GetExecutionInfo Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getExecutionInfo&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== Terminate/Abort Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/killExecution&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to abort and terminate an ongoing test execution. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
==== Remove Ticket Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/removeTicket&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to tell expecco, that no further interest exists in a ticket. If the test is still running, it is aborted. If it is about to be started, it will not be. Any temporary files which might have already been created due to this execution are removed. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
==== CleanupTempFiles Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/cleanupTempFiles&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Cleanup of Old Result/Log Files&lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
==== Ping Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/ping&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request answers with information about the host, architecture, disk usage and other status about the machine on which expecco is running. Also, a list of available plugins on the target machine is returned. Of course, it is also useful to see if the expecco service is ready and the communication works as expected. &lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
==== Execute Request &amp;quot;/expeccoService/rest/execute&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface above, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
==== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8403</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8403"/>
		<updated>2017-03-13T05:36:24Z</updated>

		<summary type="html">&lt;p&gt;Ab: /* Ping Request */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;:2,&lt;br /&gt;
    &amp;quot;URLPath&amp;quot;:&amp;quot;expeccoService/rest&amp;quot;,&lt;br /&gt;
    &amp;quot;Protocol&amp;quot;:[&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;cleanupTempFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;execute&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFile&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFileWithTestplanNames&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getExecutionInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getListOfTestSuiteFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get a list of known test suites which can be executed via executeTestSuiteFile.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Array&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;killExecution&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;loadSuite&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;load a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, SuitePathString:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;ping&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;test reachability and return some status info.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;removeTicket&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;waitForExecutionResult&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String; ReportFiles:Array,)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;protocolInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Service&amp;quot;:&amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== ExecuteTestSuiteFileWithTestplanNames Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/executeTestSuiteFileWithTestplanNames&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Load the testsuite and execute the testplans.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteFileName - name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional&lt;br /&gt;
* TestPlans - optional&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional&lt;br /&gt;
&lt;br /&gt;
The ID is an unique identifier which can be used later to retrieve the execution state, results and execution logs. &lt;br /&gt;
The ets file must be present/reachable by the expecco slave. It may be either an absolute pathname (typically on a shared network drive) or a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ID&amp;quot;:&amp;quot;Testrun-4713&amp;quot;, &lt;br /&gt;
    &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:\\tmp\\DemoTest2.ets&amp;quot;,&lt;br /&gt;
    &amp;quot;Environment&amp;quot;:[&lt;br /&gt;
        &amp;quot;TestDelay1&amp;quot; &amp;quot;60&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;TestPlans&amp;quot;:[&lt;br /&gt;
        &amp;quot;DefaultTestplan&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;Resources&amp;quot;:[], &lt;br /&gt;
    &amp;quot;Parameters&amp;quot;:[&lt;br /&gt;
        &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; &lt;br /&gt;
        &amp;quot;generatePDFReport&amp;quot; &amp;quot;true&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GetExecutionInfo Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getExecutionInfo&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== Terminate/Abort Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/killExecution&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to abort and terminate an ongoing test execution. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
==== Remove Ticket Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/removeTicket&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to tell expecco, that no further interest exists in a ticket. If the test is still running, it is aborted. If it is about to be started, it will not be. Any temporary files which might have already been created due to this execution are removed. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
==== CleanupTempFiles Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/cleanupTempFiles&amp;quot; &lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
==== Ping Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/ping&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This request answers with information about the host, architecture, disk usage and other status about the machine on which expecco is running. Also, a list of available plugins on the target machine is returned. Of course, it is also useful to see if the expecco service is ready and the communication works as expected. &lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
==== Execute Request &amp;quot;/expeccoService/rest/execute&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface above, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
==== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8402</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8402"/>
		<updated>2017-03-13T05:35:25Z</updated>

		<summary type="html">&lt;p&gt;Ab: /* RemoveTicket Request */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;:2,&lt;br /&gt;
    &amp;quot;URLPath&amp;quot;:&amp;quot;expeccoService/rest&amp;quot;,&lt;br /&gt;
    &amp;quot;Protocol&amp;quot;:[&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;cleanupTempFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;execute&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFile&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFileWithTestplanNames&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getExecutionInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getListOfTestSuiteFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get a list of known test suites which can be executed via executeTestSuiteFile.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Array&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;killExecution&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;loadSuite&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;load a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, SuitePathString:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;ping&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;test reachability and return some status info.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;removeTicket&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;waitForExecutionResult&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String; ReportFiles:Array,)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;protocolInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Service&amp;quot;:&amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== ExecuteTestSuiteFileWithTestplanNames Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/executeTestSuiteFileWithTestplanNames&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Load the testsuite and execute the testplans.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteFileName - name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional&lt;br /&gt;
* TestPlans - optional&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional&lt;br /&gt;
&lt;br /&gt;
The ID is an unique identifier which can be used later to retrieve the execution state, results and execution logs. &lt;br /&gt;
The ets file must be present/reachable by the expecco slave. It may be either an absolute pathname (typically on a shared network drive) or a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ID&amp;quot;:&amp;quot;Testrun-4713&amp;quot;, &lt;br /&gt;
    &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:\\tmp\\DemoTest2.ets&amp;quot;,&lt;br /&gt;
    &amp;quot;Environment&amp;quot;:[&lt;br /&gt;
        &amp;quot;TestDelay1&amp;quot; &amp;quot;60&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;TestPlans&amp;quot;:[&lt;br /&gt;
        &amp;quot;DefaultTestplan&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;Resources&amp;quot;:[], &lt;br /&gt;
    &amp;quot;Parameters&amp;quot;:[&lt;br /&gt;
        &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; &lt;br /&gt;
        &amp;quot;generatePDFReport&amp;quot; &amp;quot;true&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GetExecutionInfo Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getExecutionInfo&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== Terminate/Abort Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/killExecution&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to abort and terminate an ongoing test execution. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
==== Remove Ticket Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/removeTicket&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to tell expecco, that no further interest exists in a ticket. If the test is still running, it is aborted. If it is about to be started, it will not be. Any temporary files which might have already been created due to this execution are removed. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
==== CleanupTempFiles Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/cleanupTempFiles&amp;quot; &lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
==== Ping Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/ping&amp;quot; &lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
==== Execute Request &amp;quot;/expeccoService/rest/execute&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface above, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
==== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8401</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8401"/>
		<updated>2017-03-13T05:34:47Z</updated>

		<summary type="html">&lt;p&gt;Ab: /* KillExecution Request */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;:2,&lt;br /&gt;
    &amp;quot;URLPath&amp;quot;:&amp;quot;expeccoService/rest&amp;quot;,&lt;br /&gt;
    &amp;quot;Protocol&amp;quot;:[&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;cleanupTempFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;execute&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFile&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFileWithTestplanNames&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getExecutionInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getListOfTestSuiteFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get a list of known test suites which can be executed via executeTestSuiteFile.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Array&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;killExecution&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;loadSuite&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;load a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, SuitePathString:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;ping&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;test reachability and return some status info.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;removeTicket&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;waitForExecutionResult&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String; ReportFiles:Array,)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;protocolInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Service&amp;quot;:&amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== ExecuteTestSuiteFileWithTestplanNames Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/executeTestSuiteFileWithTestplanNames&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Load the testsuite and execute the testplans.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteFileName - name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional&lt;br /&gt;
* TestPlans - optional&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional&lt;br /&gt;
&lt;br /&gt;
The ID is an unique identifier which can be used later to retrieve the execution state, results and execution logs. &lt;br /&gt;
The ets file must be present/reachable by the expecco slave. It may be either an absolute pathname (typically on a shared network drive) or a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ID&amp;quot;:&amp;quot;Testrun-4713&amp;quot;, &lt;br /&gt;
    &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:\\tmp\\DemoTest2.ets&amp;quot;,&lt;br /&gt;
    &amp;quot;Environment&amp;quot;:[&lt;br /&gt;
        &amp;quot;TestDelay1&amp;quot; &amp;quot;60&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;TestPlans&amp;quot;:[&lt;br /&gt;
        &amp;quot;DefaultTestplan&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;Resources&amp;quot;:[], &lt;br /&gt;
    &amp;quot;Parameters&amp;quot;:[&lt;br /&gt;
        &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; &lt;br /&gt;
        &amp;quot;generatePDFReport&amp;quot; &amp;quot;true&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GetExecutionInfo Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getExecutionInfo&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== Terminate/Abort Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/killExecution&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to abort and terminate an ongoing test execution. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
==== RemoveTicket Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/removeTicket&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to tell expecco, that no further interest exists in a ticket. If the test is still running, it is aborted. If it is about to be started, it will not be. Any temporary files which might have already been created due to this execution are removed. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
==== CleanupTempFiles Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/cleanupTempFiles&amp;quot; &lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
==== Ping Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/ping&amp;quot; &lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
==== Execute Request &amp;quot;/expeccoService/rest/execute&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface above, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
==== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8400</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8400"/>
		<updated>2017-03-13T05:33:20Z</updated>

		<summary type="html">&lt;p&gt;Ab: /* RemoveTicket Request */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;:2,&lt;br /&gt;
    &amp;quot;URLPath&amp;quot;:&amp;quot;expeccoService/rest&amp;quot;,&lt;br /&gt;
    &amp;quot;Protocol&amp;quot;:[&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;cleanupTempFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;execute&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFile&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFileWithTestplanNames&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getExecutionInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getListOfTestSuiteFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get a list of known test suites which can be executed via executeTestSuiteFile.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Array&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;killExecution&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;loadSuite&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;load a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, SuitePathString:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;ping&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;test reachability and return some status info.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;removeTicket&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;waitForExecutionResult&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String; ReportFiles:Array,)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;protocolInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Service&amp;quot;:&amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== ExecuteTestSuiteFileWithTestplanNames Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/executeTestSuiteFileWithTestplanNames&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Load the testsuite and execute the testplans.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteFileName - name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional&lt;br /&gt;
* TestPlans - optional&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional&lt;br /&gt;
&lt;br /&gt;
The ID is an unique identifier which can be used later to retrieve the execution state, results and execution logs. &lt;br /&gt;
The ets file must be present/reachable by the expecco slave. It may be either an absolute pathname (typically on a shared network drive) or a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ID&amp;quot;:&amp;quot;Testrun-4713&amp;quot;, &lt;br /&gt;
    &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:\\tmp\\DemoTest2.ets&amp;quot;,&lt;br /&gt;
    &amp;quot;Environment&amp;quot;:[&lt;br /&gt;
        &amp;quot;TestDelay1&amp;quot; &amp;quot;60&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;TestPlans&amp;quot;:[&lt;br /&gt;
        &amp;quot;DefaultTestplan&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;Resources&amp;quot;:[], &lt;br /&gt;
    &amp;quot;Parameters&amp;quot;:[&lt;br /&gt;
        &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; &lt;br /&gt;
        &amp;quot;generatePDFReport&amp;quot; &amp;quot;true&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GetExecutionInfo Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getExecutionInfo&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== KillExecution Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/killExecution&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== RemoveTicket Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/removeTicket&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Use this, to tell expecco, that no further interest exists in a ticket. If the test is still running, it is aborted. If it is about to be started, it will not be. Any temporary files which might have already been created due to this execution are removed. &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
==== CleanupTempFiles Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/cleanupTempFiles&amp;quot; &lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
==== Ping Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/ping&amp;quot; &lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
==== Execute Request &amp;quot;/expeccoService/rest/execute&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface above, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
==== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8399</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8399"/>
		<updated>2017-03-12T20:58:07Z</updated>

		<summary type="html">&lt;p&gt;Ab: /* Ping Request &amp;quot;/expeccoService/rest/ping&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;:2,&lt;br /&gt;
    &amp;quot;URLPath&amp;quot;:&amp;quot;expeccoService/rest&amp;quot;,&lt;br /&gt;
    &amp;quot;Protocol&amp;quot;:[&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;cleanupTempFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;execute&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFile&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFileWithTestplanNames&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getExecutionInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getListOfTestSuiteFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get a list of known test suites which can be executed via executeTestSuiteFile.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Array&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;killExecution&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;loadSuite&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;load a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, SuitePathString:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;ping&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;test reachability and return some status info.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;removeTicket&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;waitForExecutionResult&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String; ReportFiles:Array,)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;protocolInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Service&amp;quot;:&amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== ExecuteTestSuiteFileWithTestplanNames Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/executeTestSuiteFileWithTestplanNames&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Load the testsuite and execute the testplans.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteFileName - name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional&lt;br /&gt;
* TestPlans - optional&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional&lt;br /&gt;
&lt;br /&gt;
The ID is an unique identifier which can be used later to retrieve the execution state, results and execution logs. &lt;br /&gt;
The ets file must be present/reachable by the expecco slave. It may be either an absolute pathname (typically on a shared network drive) or a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ID&amp;quot;:&amp;quot;Testrun-4713&amp;quot;, &lt;br /&gt;
    &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:\\tmp\\DemoTest2.ets&amp;quot;,&lt;br /&gt;
    &amp;quot;Environment&amp;quot;:[&lt;br /&gt;
        &amp;quot;TestDelay1&amp;quot; &amp;quot;60&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;TestPlans&amp;quot;:[&lt;br /&gt;
        &amp;quot;DefaultTestplan&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;Resources&amp;quot;:[], &lt;br /&gt;
    &amp;quot;Parameters&amp;quot;:[&lt;br /&gt;
        &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; &lt;br /&gt;
        &amp;quot;generatePDFReport&amp;quot; &amp;quot;true&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GetExecutionInfo Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getExecutionInfo&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== KillExecution Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/killExecution&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== RemoveTicket Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/removeTicket&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== CleanupTempFiles Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/cleanupTempFiles&amp;quot; &lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
==== Ping Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/ping&amp;quot; &lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
==== Execute Request &amp;quot;/expeccoService/rest/execute&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface above, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
==== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8398</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8398"/>
		<updated>2017-03-12T20:57:24Z</updated>

		<summary type="html">&lt;p&gt;Ab: /* Cleanup Request &amp;quot;/expeccoService/rest/cleanupTempFiles&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;:2,&lt;br /&gt;
    &amp;quot;URLPath&amp;quot;:&amp;quot;expeccoService/rest&amp;quot;,&lt;br /&gt;
    &amp;quot;Protocol&amp;quot;:[&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;cleanupTempFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;execute&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFile&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFileWithTestplanNames&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getExecutionInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getListOfTestSuiteFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get a list of known test suites which can be executed via executeTestSuiteFile.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Array&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;killExecution&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;loadSuite&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;load a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, SuitePathString:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;ping&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;test reachability and return some status info.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;removeTicket&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;waitForExecutionResult&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String; ReportFiles:Array,)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;protocolInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Service&amp;quot;:&amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== ExecuteTestSuiteFileWithTestplanNames Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/executeTestSuiteFileWithTestplanNames&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Load the testsuite and execute the testplans.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteFileName - name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional&lt;br /&gt;
* TestPlans - optional&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional&lt;br /&gt;
&lt;br /&gt;
The ID is an unique identifier which can be used later to retrieve the execution state, results and execution logs. &lt;br /&gt;
The ets file must be present/reachable by the expecco slave. It may be either an absolute pathname (typically on a shared network drive) or a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ID&amp;quot;:&amp;quot;Testrun-4713&amp;quot;, &lt;br /&gt;
    &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:\\tmp\\DemoTest2.ets&amp;quot;,&lt;br /&gt;
    &amp;quot;Environment&amp;quot;:[&lt;br /&gt;
        &amp;quot;TestDelay1&amp;quot; &amp;quot;60&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;TestPlans&amp;quot;:[&lt;br /&gt;
        &amp;quot;DefaultTestplan&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;Resources&amp;quot;:[], &lt;br /&gt;
    &amp;quot;Parameters&amp;quot;:[&lt;br /&gt;
        &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; &lt;br /&gt;
        &amp;quot;generatePDFReport&amp;quot; &amp;quot;true&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GetExecutionInfo Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getExecutionInfo&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== KillExecution Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/killExecution&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== RemoveTicket Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/removeTicket&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== CleanupTempFiles Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/cleanupTempFiles&amp;quot; &lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
==== Ping Request &amp;quot;/expeccoService/rest/ping&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
==== Execute Request &amp;quot;/expeccoService/rest/execute&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface above, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
==== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8397</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8397"/>
		<updated>2017-03-12T20:56:25Z</updated>

		<summary type="html">&lt;p&gt;Ab: /* RemoveTicket Request &amp;quot;/expeccoService/rest/removeTicket&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;:2,&lt;br /&gt;
    &amp;quot;URLPath&amp;quot;:&amp;quot;expeccoService/rest&amp;quot;,&lt;br /&gt;
    &amp;quot;Protocol&amp;quot;:[&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;cleanupTempFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;execute&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFile&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFileWithTestplanNames&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getExecutionInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getListOfTestSuiteFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get a list of known test suites which can be executed via executeTestSuiteFile.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Array&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;killExecution&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;loadSuite&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;load a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, SuitePathString:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;ping&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;test reachability and return some status info.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;removeTicket&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;waitForExecutionResult&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String; ReportFiles:Array,)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;protocolInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Service&amp;quot;:&amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== ExecuteTestSuiteFileWithTestplanNames Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/executeTestSuiteFileWithTestplanNames&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Load the testsuite and execute the testplans.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteFileName - name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional&lt;br /&gt;
* TestPlans - optional&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional&lt;br /&gt;
&lt;br /&gt;
The ID is an unique identifier which can be used later to retrieve the execution state, results and execution logs. &lt;br /&gt;
The ets file must be present/reachable by the expecco slave. It may be either an absolute pathname (typically on a shared network drive) or a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ID&amp;quot;:&amp;quot;Testrun-4713&amp;quot;, &lt;br /&gt;
    &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:\\tmp\\DemoTest2.ets&amp;quot;,&lt;br /&gt;
    &amp;quot;Environment&amp;quot;:[&lt;br /&gt;
        &amp;quot;TestDelay1&amp;quot; &amp;quot;60&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;TestPlans&amp;quot;:[&lt;br /&gt;
        &amp;quot;DefaultTestplan&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;Resources&amp;quot;:[], &lt;br /&gt;
    &amp;quot;Parameters&amp;quot;:[&lt;br /&gt;
        &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; &lt;br /&gt;
        &amp;quot;generatePDFReport&amp;quot; &amp;quot;true&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GetExecutionInfo Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getExecutionInfo&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== KillExecution Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/killExecution&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== RemoveTicket Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/removeTicket&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== Cleanup Request &amp;quot;/expeccoService/rest/cleanupTempFiles&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
==== Ping Request &amp;quot;/expeccoService/rest/ping&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
==== Execute Request &amp;quot;/expeccoService/rest/execute&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface above, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
==== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8396</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8396"/>
		<updated>2017-03-12T20:55:42Z</updated>

		<summary type="html">&lt;p&gt;Ab: /* KillExecution Request &amp;quot;/expeccoService/rest/killExecution&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;:2,&lt;br /&gt;
    &amp;quot;URLPath&amp;quot;:&amp;quot;expeccoService/rest&amp;quot;,&lt;br /&gt;
    &amp;quot;Protocol&amp;quot;:[&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;cleanupTempFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;execute&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFile&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFileWithTestplanNames&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getExecutionInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getListOfTestSuiteFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get a list of known test suites which can be executed via executeTestSuiteFile.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Array&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;killExecution&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;loadSuite&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;load a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, SuitePathString:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;ping&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;test reachability and return some status info.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;removeTicket&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;waitForExecutionResult&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String; ReportFiles:Array,)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;protocolInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Service&amp;quot;:&amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== ExecuteTestSuiteFileWithTestplanNames Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/executeTestSuiteFileWithTestplanNames&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Load the testsuite and execute the testplans.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteFileName - name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional&lt;br /&gt;
* TestPlans - optional&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional&lt;br /&gt;
&lt;br /&gt;
The ID is an unique identifier which can be used later to retrieve the execution state, results and execution logs. &lt;br /&gt;
The ets file must be present/reachable by the expecco slave. It may be either an absolute pathname (typically on a shared network drive) or a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ID&amp;quot;:&amp;quot;Testrun-4713&amp;quot;, &lt;br /&gt;
    &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:\\tmp\\DemoTest2.ets&amp;quot;,&lt;br /&gt;
    &amp;quot;Environment&amp;quot;:[&lt;br /&gt;
        &amp;quot;TestDelay1&amp;quot; &amp;quot;60&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;TestPlans&amp;quot;:[&lt;br /&gt;
        &amp;quot;DefaultTestplan&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;Resources&amp;quot;:[], &lt;br /&gt;
    &amp;quot;Parameters&amp;quot;:[&lt;br /&gt;
        &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; &lt;br /&gt;
        &amp;quot;generatePDFReport&amp;quot; &amp;quot;true&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GetExecutionInfo Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getExecutionInfo&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== KillExecution Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/killExecution&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== RemoveTicket Request &amp;quot;/expeccoService/rest/removeTicket&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== Cleanup Request &amp;quot;/expeccoService/rest/cleanupTempFiles&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
==== Ping Request &amp;quot;/expeccoService/rest/ping&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
==== Execute Request &amp;quot;/expeccoService/rest/execute&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface above, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
==== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8395</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8395"/>
		<updated>2017-03-12T20:55:06Z</updated>

		<summary type="html">&lt;p&gt;Ab: /* GetExecutionInfo Request &amp;quot;/expeccoService/rest/getExecutionInfo&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;:2,&lt;br /&gt;
    &amp;quot;URLPath&amp;quot;:&amp;quot;expeccoService/rest&amp;quot;,&lt;br /&gt;
    &amp;quot;Protocol&amp;quot;:[&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;cleanupTempFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;execute&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFile&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFileWithTestplanNames&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getExecutionInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getListOfTestSuiteFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get a list of known test suites which can be executed via executeTestSuiteFile.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Array&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;killExecution&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;loadSuite&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;load a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, SuitePathString:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;ping&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;test reachability and return some status info.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;removeTicket&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;waitForExecutionResult&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String; ReportFiles:Array,)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;protocolInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Service&amp;quot;:&amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== ExecuteTestSuiteFileWithTestplanNames Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/executeTestSuiteFileWithTestplanNames&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Load the testsuite and execute the testplans.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteFileName - name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional&lt;br /&gt;
* TestPlans - optional&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional&lt;br /&gt;
&lt;br /&gt;
The ID is an unique identifier which can be used later to retrieve the execution state, results and execution logs. &lt;br /&gt;
The ets file must be present/reachable by the expecco slave. It may be either an absolute pathname (typically on a shared network drive) or a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ID&amp;quot;:&amp;quot;Testrun-4713&amp;quot;, &lt;br /&gt;
    &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:\\tmp\\DemoTest2.ets&amp;quot;,&lt;br /&gt;
    &amp;quot;Environment&amp;quot;:[&lt;br /&gt;
        &amp;quot;TestDelay1&amp;quot; &amp;quot;60&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;TestPlans&amp;quot;:[&lt;br /&gt;
        &amp;quot;DefaultTestplan&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;Resources&amp;quot;:[], &lt;br /&gt;
    &amp;quot;Parameters&amp;quot;:[&lt;br /&gt;
        &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; &lt;br /&gt;
        &amp;quot;generatePDFReport&amp;quot; &amp;quot;true&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GetExecutionInfo Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/getExecutionInfo&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== KillExecution Request &amp;quot;/expeccoService/rest/killExecution&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== RemoveTicket Request &amp;quot;/expeccoService/rest/removeTicket&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== Cleanup Request &amp;quot;/expeccoService/rest/cleanupTempFiles&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
==== Ping Request &amp;quot;/expeccoService/rest/ping&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
==== Execute Request &amp;quot;/expeccoService/rest/execute&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface above, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
==== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8394</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8394"/>
		<updated>2017-03-12T20:53:42Z</updated>

		<summary type="html">&lt;p&gt;Ab: /* executeTestSuiteFileWithTestplanNames Request */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;:2,&lt;br /&gt;
    &amp;quot;URLPath&amp;quot;:&amp;quot;expeccoService/rest&amp;quot;,&lt;br /&gt;
    &amp;quot;Protocol&amp;quot;:[&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;cleanupTempFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;execute&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFile&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFileWithTestplanNames&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getExecutionInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getListOfTestSuiteFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get a list of known test suites which can be executed via executeTestSuiteFile.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Array&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;killExecution&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;loadSuite&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;load a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, SuitePathString:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;ping&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;test reachability and return some status info.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;removeTicket&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;waitForExecutionResult&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String; ReportFiles:Array,)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;protocolInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Service&amp;quot;:&amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== ExecuteTestSuiteFileWithTestplanNames Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/executeTestSuiteFileWithTestplanNames&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Load the testsuite and execute the testplans.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteFileName - name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional&lt;br /&gt;
* TestPlans - optional&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional&lt;br /&gt;
&lt;br /&gt;
The ID is an unique identifier which can be used later to retrieve the execution state, results and execution logs. &lt;br /&gt;
The ets file must be present/reachable by the expecco slave. It may be either an absolute pathname (typically on a shared network drive) or a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ID&amp;quot;:&amp;quot;Testrun-4713&amp;quot;, &lt;br /&gt;
    &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:\\tmp\\DemoTest2.ets&amp;quot;,&lt;br /&gt;
    &amp;quot;Environment&amp;quot;:[&lt;br /&gt;
        &amp;quot;TestDelay1&amp;quot; &amp;quot;60&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;TestPlans&amp;quot;:[&lt;br /&gt;
        &amp;quot;DefaultTestplan&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;Resources&amp;quot;:[], &lt;br /&gt;
    &amp;quot;Parameters&amp;quot;:[&lt;br /&gt;
        &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; &lt;br /&gt;
        &amp;quot;generatePDFReport&amp;quot; &amp;quot;true&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GetExecutionInfo Request &amp;quot;/expeccoService/rest/getExecutionInfo&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== KillExecution Request &amp;quot;/expeccoService/rest/killExecution&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== RemoveTicket Request &amp;quot;/expeccoService/rest/removeTicket&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== Cleanup Request &amp;quot;/expeccoService/rest/cleanupTempFiles&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
==== Ping Request &amp;quot;/expeccoService/rest/ping&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
==== Execute Request &amp;quot;/expeccoService/rest/execute&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface above, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
==== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8393</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8393"/>
		<updated>2017-03-12T20:53:04Z</updated>

		<summary type="html">&lt;p&gt;Ab: /* Execute Test Suite File */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;:2,&lt;br /&gt;
    &amp;quot;URLPath&amp;quot;:&amp;quot;expeccoService/rest&amp;quot;,&lt;br /&gt;
    &amp;quot;Protocol&amp;quot;:[&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;cleanupTempFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;execute&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFile&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFileWithTestplanNames&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getExecutionInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getListOfTestSuiteFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get a list of known test suites which can be executed via executeTestSuiteFile.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Array&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;killExecution&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;loadSuite&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;load a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, SuitePathString:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;ping&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;test reachability and return some status info.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;removeTicket&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;waitForExecutionResult&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String; ReportFiles:Array,)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;protocolInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Service&amp;quot;:&amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== executeTestSuiteFileWithTestplanNames Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/executeTestSuiteFileWithTestplanNames&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Load the testsuite and execute the testplans.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteFileName - name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional&lt;br /&gt;
* TestPlans - optional&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional&lt;br /&gt;
&lt;br /&gt;
The ID is an unique identifier which can be used later to retrieve the execution state, results and execution logs. &lt;br /&gt;
The ets file must be present/reachable by the expecco slave. It may be either an absolute pathname (typically on a shared network drive) or a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ID&amp;quot;:&amp;quot;Testrun-4713&amp;quot;, &lt;br /&gt;
    &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:\\tmp\\DemoTest2.ets&amp;quot;,&lt;br /&gt;
    &amp;quot;Environment&amp;quot;:[&lt;br /&gt;
        &amp;quot;TestDelay1&amp;quot; &amp;quot;60&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;TestPlans&amp;quot;:[&lt;br /&gt;
        &amp;quot;DefaultTestplan&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;Resources&amp;quot;:[], &lt;br /&gt;
    &amp;quot;Parameters&amp;quot;:[&lt;br /&gt;
        &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; &lt;br /&gt;
        &amp;quot;generatePDFReport&amp;quot; &amp;quot;true&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GetExecutionInfo Request &amp;quot;/expeccoService/rest/getExecutionInfo&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== KillExecution Request &amp;quot;/expeccoService/rest/killExecution&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== RemoveTicket Request &amp;quot;/expeccoService/rest/removeTicket&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== Cleanup Request &amp;quot;/expeccoService/rest/cleanupTempFiles&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
==== Ping Request &amp;quot;/expeccoService/rest/ping&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
==== Execute Request &amp;quot;/expeccoService/rest/execute&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface above, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
==== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8392</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8392"/>
		<updated>2017-03-12T20:50:30Z</updated>

		<summary type="html">&lt;p&gt;Ab: /* Execute File Request &amp;quot;/expeccoService/rest/executeTestSuiteFile&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;:2,&lt;br /&gt;
    &amp;quot;URLPath&amp;quot;:&amp;quot;expeccoService/rest&amp;quot;,&lt;br /&gt;
    &amp;quot;Protocol&amp;quot;:[&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;cleanupTempFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;execute&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFile&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFileWithTestplanNames&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getExecutionInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getListOfTestSuiteFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get a list of known test suites which can be executed via executeTestSuiteFile.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Array&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;killExecution&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;loadSuite&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;load a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, SuitePathString:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;ping&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;test reachability and return some status info.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;removeTicket&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;waitForExecutionResult&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String; ReportFiles:Array,)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;protocolInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Service&amp;quot;:&amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Execute Test Suite File ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/executeTestSuiteFile&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Load the testsuite and execute the testplans.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteFileName - name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional&lt;br /&gt;
* TestPlans - optional&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional&lt;br /&gt;
&lt;br /&gt;
The ID is an unique identifier which can be used later to retrieve the execution state, results and execution logs. &lt;br /&gt;
The ets file must be present/reachable by the expecco slave. It may be either an absolute pathname (typically on a shared network drive) or a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ID&amp;quot;:&amp;quot;Testrun-4713&amp;quot;, &lt;br /&gt;
    &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:\\tmp\\DemoTest2.ets&amp;quot;,&lt;br /&gt;
    &amp;quot;Environment&amp;quot;:[&lt;br /&gt;
        &amp;quot;TestDelay1&amp;quot; &amp;quot;60&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;TestPlans&amp;quot;:[&lt;br /&gt;
        &amp;quot;DefaultTestplan&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;Resources&amp;quot;:[], &lt;br /&gt;
    &amp;quot;Parameters&amp;quot;:[&lt;br /&gt;
        &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; &lt;br /&gt;
        &amp;quot;generatePDFReport&amp;quot; &amp;quot;true&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GetExecutionInfo Request &amp;quot;/expeccoService/rest/getExecutionInfo&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== KillExecution Request &amp;quot;/expeccoService/rest/killExecution&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== RemoveTicket Request &amp;quot;/expeccoService/rest/removeTicket&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== Cleanup Request &amp;quot;/expeccoService/rest/cleanupTempFiles&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
==== Ping Request &amp;quot;/expeccoService/rest/ping&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
==== Execute Request &amp;quot;/expeccoService/rest/execute&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface above, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
==== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8391</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8391"/>
		<updated>2017-03-12T20:45:13Z</updated>

		<summary type="html">&lt;p&gt;Ab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;:2,&lt;br /&gt;
    &amp;quot;URLPath&amp;quot;:&amp;quot;expeccoService/rest&amp;quot;,&lt;br /&gt;
    &amp;quot;Protocol&amp;quot;:[&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;cleanupTempFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;execute&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFile&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFileWithTestplanNames&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getExecutionInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getListOfTestSuiteFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get a list of known test suites which can be executed via executeTestSuiteFile.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Array&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;killExecution&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;loadSuite&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;load a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, SuitePathString:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;ping&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;test reachability and return some status info.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;removeTicket&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;waitForExecutionResult&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String; ReportFiles:Array,)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;protocolInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Service&amp;quot;:&amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Execute File Request &amp;quot;/expeccoService/rest/executeTestSuiteFile&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteFileName - name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
The ID is an unique identifier which can be used later to retrieve the execution state, results and execution logs. &lt;br /&gt;
The ets file must be present/reachable by the expecco slave. It may be either an absolute pathname (typically on a shared network drive) or a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ID&amp;quot;:&amp;quot;Testrun-4713&amp;quot;, &lt;br /&gt;
    &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:\\tmp\\DemoTest2.ets&amp;quot;,&lt;br /&gt;
    &amp;quot;Environment&amp;quot;:[&lt;br /&gt;
        &amp;quot;TestDelay1&amp;quot; &amp;quot;60&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;TestPlans&amp;quot;:[&lt;br /&gt;
        &amp;quot;DefaultTestplan&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;Resources&amp;quot;:[], &lt;br /&gt;
    &amp;quot;Parameters&amp;quot;:[&lt;br /&gt;
        &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; &lt;br /&gt;
        &amp;quot;generatePDFReport&amp;quot; &amp;quot;true&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GetExecutionInfo Request &amp;quot;/expeccoService/rest/getExecutionInfo&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== KillExecution Request &amp;quot;/expeccoService/rest/killExecution&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== RemoveTicket Request &amp;quot;/expeccoService/rest/removeTicket&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== Cleanup Request &amp;quot;/expeccoService/rest/cleanupTempFiles&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
==== Ping Request &amp;quot;/expeccoService/rest/ping&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
==== Execute Request &amp;quot;/expeccoService/rest/execute&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface above, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
==== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8390</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8390"/>
		<updated>2017-03-12T20:37:03Z</updated>

		<summary type="html">&lt;p&gt;Ab: /* Execute File Request &amp;quot;/expeccoService/rest/executeTestSuiteFile&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;:2,&lt;br /&gt;
    &amp;quot;URLPath&amp;quot;:&amp;quot;expeccoService/rest&amp;quot;,&lt;br /&gt;
    &amp;quot;Protocol&amp;quot;:[&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;cleanupTempFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;execute&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFile&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFileWithTestplanNames&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getExecutionInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getListOfTestSuiteFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get a list of known test suites which can be executed via executeTestSuiteFile.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Array&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;killExecution&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;loadSuite&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;load a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, SuitePathString:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;ping&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;test reachability and return some status info.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;removeTicket&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;waitForExecutionResult&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String; ReportFiles:Array,)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;protocolInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Service&amp;quot;:&amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Execute Request &amp;quot;/expeccoService/rest/execute&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface above, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
==== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== Execute File Request &amp;quot;/expeccoService/rest/executeTestSuiteFile&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteFileName - name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
The ID is an unique identifier which can be used later to retrieve the execution state, results and execution logs. &lt;br /&gt;
The ets file must be present/reachable by the expecco slave. It may be either an absolute pathname (typically on a shared network drive) or a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;ID&amp;quot;:&amp;quot;Testrun-4713&amp;quot;, &lt;br /&gt;
    &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:\\tmp\\DemoTest2.ets&amp;quot;,&lt;br /&gt;
    &amp;quot;Environment&amp;quot;:[&lt;br /&gt;
        &amp;quot;TestDelay1&amp;quot; &amp;quot;60&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;TestPlans&amp;quot;:[&lt;br /&gt;
        &amp;quot;DefaultTestplan&amp;quot;&lt;br /&gt;
    ], &lt;br /&gt;
    &amp;quot;Resources&amp;quot;:[], &lt;br /&gt;
    &amp;quot;Parameters&amp;quot;:[&lt;br /&gt;
        &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; &lt;br /&gt;
        &amp;quot;generatePDFReport&amp;quot; &amp;quot;true&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GetExecutionInfo Request &amp;quot;/expeccoService/rest/getExecutionInfo&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== KillExecution Request &amp;quot;/expeccoService/rest/killExecution&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== RemoveTicket Request &amp;quot;/expeccoService/rest/removeTicket&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== Cleanup Request &amp;quot;/expeccoService/rest/cleanupTempFiles&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
==== Ping Request &amp;quot;/expeccoService/rest/ping&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8389</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8389"/>
		<updated>2017-03-12T20:21:32Z</updated>

		<summary type="html">&lt;p&gt;Ab: /* ProtocolInfo Request */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;host:9090/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;:2,&lt;br /&gt;
    &amp;quot;URLPath&amp;quot;:&amp;quot;expeccoService/rest&amp;quot;,&lt;br /&gt;
    &amp;quot;Protocol&amp;quot;:[&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;cleanupTempFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;execute&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFile&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFileWithTestplanNames&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getExecutionInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getListOfTestSuiteFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get a list of known test suites which can be executed via executeTestSuiteFile.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Array&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;killExecution&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;loadSuite&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;load a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, SuitePathString:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;ping&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;test reachability and return some status info.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;removeTicket&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;waitForExecutionResult&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String; ReportFiles:Array,)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;protocolInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Service&amp;quot;:&amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Execute Request &amp;quot;/expeccoService/rest/execute&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface above, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
==== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== Execute File Request &amp;quot;/expeccoService/rest/executeTestSuiteFile&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteFileName - name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
The file must be present/reachable by the expecco slave.&lt;br /&gt;
It may be either an absolute pathname (typically on a shared network drive) or&lt;br /&gt;
a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument.&lt;br /&gt;
&lt;br /&gt;
==== GetExecutionInfo Request &amp;quot;/expeccoService/rest/getExecutionInfo&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== KillExecution Request &amp;quot;/expeccoService/rest/killExecution&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== RemoveTicket Request &amp;quot;/expeccoService/rest/removeTicket&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== Cleanup Request &amp;quot;/expeccoService/rest/cleanupTempFiles&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
==== Ping Request &amp;quot;/expeccoService/rest/ping&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8388</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8388"/>
		<updated>2017-03-12T20:18:51Z</updated>

		<summary type="html">&lt;p&gt;Ab: /* ProtocolInfo Request */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;host:9090/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;:2,&lt;br /&gt;
    &amp;quot;URLPath&amp;quot;:&amp;quot;expeccoService/rest&amp;quot;,&lt;br /&gt;
    &amp;quot;Protocol&amp;quot;:[&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;cleanupTempFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;execute&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFile&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFileWithTestplanNames&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getExecutionInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;getListOfTestSuiteFiles&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get a list of known test suites which can be executed via executeTestSuiteFile.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Array&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;killExecution&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;loadSuite&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;load a suite.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, SuitePathString:String, Parameters:Array),&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;ping&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;test reachability and return some status info.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;removeTicket&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;waitForExecutionResult&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
            &amp;quot;Argument&amp;quot;:&amp;quot;(ID:String; ReportFiles:Array,)&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Name&amp;quot;:&amp;quot;protocolInfo&amp;quot;,&lt;br /&gt;
            &amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;Service&amp;quot;:&amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Execute Request &amp;quot;/expeccoService/rest/execute&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface above, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
==== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== Execute File Request &amp;quot;/expeccoService/rest/executeTestSuiteFile&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteFileName - name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
The file must be present/reachable by the expecco slave.&lt;br /&gt;
It may be either an absolute pathname (typically on a shared network drive) or&lt;br /&gt;
a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument.&lt;br /&gt;
&lt;br /&gt;
==== GetExecutionInfo Request &amp;quot;/expeccoService/rest/getExecutionInfo&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== KillExecution Request &amp;quot;/expeccoService/rest/killExecution&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== RemoveTicket Request &amp;quot;/expeccoService/rest/removeTicket&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== Cleanup Request &amp;quot;/expeccoService/rest/cleanupTempFiles&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
==== Ping Request &amp;quot;/expeccoService/rest/ping&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8387</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8387"/>
		<updated>2017-03-12T20:09:47Z</updated>

		<summary type="html">&lt;p&gt;Ab: /* ProtocolInfo Request */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;host:9090/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;Version&amp;quot;:2,&lt;br /&gt;
	&amp;quot;URLPath&amp;quot;:&amp;quot;expeccoService/rest&amp;quot;,&lt;br /&gt;
	&amp;quot;Protocol&amp;quot;:[&lt;br /&gt;
		{&lt;br /&gt;
		&amp;quot;Name&amp;quot;:&amp;quot;cleanupTempFiles&amp;quot;,&lt;br /&gt;
		&amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
		&amp;quot;Comment&amp;quot;:&amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
		&amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
		&amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
		&amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
		&amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
		&amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
		&amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
		&amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
		&amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
		&amp;quot;Name&amp;quot;:&amp;quot;execute&amp;quot;,&lt;br /&gt;
		&amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
		&amp;quot;Comment&amp;quot;:&amp;quot;start execution; return ticketID.&amp;quot;,&lt;br /&gt;
		&amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
		&amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
		&amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFile&amp;quot;,&lt;br /&gt;
		&amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
		&amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
		&amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
		&amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
		&amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFileWithTestplanNames&amp;quot;,&lt;br /&gt;
		&amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
		&amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
		&amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
		&amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
		&amp;quot;Name&amp;quot;:&amp;quot;getExecutionInfo&amp;quot;,&lt;br /&gt;
		&amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
		&amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
		&amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
		&amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
		&amp;quot;Name&amp;quot;:&amp;quot;getListOfTestSuiteFiles&amp;quot;,&lt;br /&gt;
		&amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
		&amp;quot;Comment&amp;quot;:&amp;quot;get a list of known test suites which can be executed via executeTestSuiteFile.&amp;quot;,&lt;br /&gt;
		&amp;quot;Return&amp;quot;:&amp;quot;Array&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
		&amp;quot;Name&amp;quot;:&amp;quot;killExecution&amp;quot;,&lt;br /&gt;
		&amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
		&amp;quot;Comment&amp;quot;:&amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
		&amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
		&amp;quot;Name&amp;quot;:&amp;quot;loadSuite&amp;quot;,&lt;br /&gt;
		&amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
		&amp;quot;Comment&amp;quot;:&amp;quot;load a suite.&amp;quot;,&lt;br /&gt;
		&amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, SuitePathString:String, Parameters:Array),&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
		&amp;quot;Name&amp;quot;:&amp;quot;ping&amp;quot;,&lt;br /&gt;
		&amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
		&amp;quot;Comment&amp;quot;:&amp;quot;test reachability and return some status info.&amp;quot;,&lt;br /&gt;
		&amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
		&amp;quot;Name&amp;quot;:&amp;quot;removeTicket&amp;quot;,&lt;br /&gt;
		&amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
		&amp;quot;Comment&amp;quot;:&amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;,&lt;br /&gt;
		&amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
		&amp;quot;Name&amp;quot;:&amp;quot;waitForExecutionResult&amp;quot;,&lt;br /&gt;
		&amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
		&amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
		&amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
		&amp;quot;Argument&amp;quot;:&amp;quot;(ID:String; ReportFiles:Array,)&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
		&amp;quot;Name&amp;quot;:&amp;quot;protocolInfo&amp;quot;,&lt;br /&gt;
		&amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
		&amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	],&lt;br /&gt;
	&amp;quot;Service&amp;quot;:&amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Execute Request &amp;quot;/expeccoService/rest/execute&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface above, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
==== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== Execute File Request &amp;quot;/expeccoService/rest/executeTestSuiteFile&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteFileName - name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
The file must be present/reachable by the expecco slave.&lt;br /&gt;
It may be either an absolute pathname (typically on a shared network drive) or&lt;br /&gt;
a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument.&lt;br /&gt;
&lt;br /&gt;
==== GetExecutionInfo Request &amp;quot;/expeccoService/rest/getExecutionInfo&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== KillExecution Request &amp;quot;/expeccoService/rest/killExecution&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== RemoveTicket Request &amp;quot;/expeccoService/rest/removeTicket&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== Cleanup Request &amp;quot;/expeccoService/rest/cleanupTempFiles&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
==== Ping Request &amp;quot;/expeccoService/rest/ping&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8386</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8386"/>
		<updated>2017-03-12T20:08:11Z</updated>

		<summary type="html">&lt;p&gt;Ab: /* ProtocolInfo Request */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;host:9090/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;Version&amp;quot;:2,&lt;br /&gt;
	&amp;quot;URLPath&amp;quot;:&amp;quot;expeccoService/rest&amp;quot;,&lt;br /&gt;
	&amp;quot;Protocol&amp;quot;:[&lt;br /&gt;
		{&lt;br /&gt;
		&amp;quot;Name&amp;quot;:&amp;quot;cleanupTempFiles&amp;quot;,&lt;br /&gt;
		&amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
		&amp;quot;Comment&amp;quot;:&amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
		&amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
		&amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
		&amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
		&amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
		&amp;quot;Name&amp;quot;:&amp;quot;download&amp;quot;,&lt;br /&gt;
		&amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
		&amp;quot;Comment&amp;quot;:&amp;quot;download a suite.&amp;quot;,&lt;br /&gt;
		&amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array),&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
		&amp;quot;Name&amp;quot;:&amp;quot;execute&amp;quot;,&lt;br /&gt;
		&amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
		&amp;quot;Comment&amp;quot;:&amp;quot;start execution; return ticketID.&amp;quot;,&lt;br /&gt;
		&amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
		&amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
		&amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFile&amp;quot;,&lt;br /&gt;
		&amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
		&amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
		&amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
		&amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
		&amp;quot;Name&amp;quot;:&amp;quot;executeTestSuiteFileWithTestplanNames&amp;quot;,&lt;br /&gt;
		&amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
		&amp;quot;Comment&amp;quot;:&amp;quot;start execution of a well known suite; return ticketID.&amp;quot;,&lt;br /&gt;
		&amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
		&amp;quot;Argument&amp;quot;:&amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
		&amp;quot;Name&amp;quot;:&amp;quot;getExecutionInfo&amp;quot;,&lt;br /&gt;
		&amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
		&amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
		&amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
		&amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
		&amp;quot;Name&amp;quot;:&amp;quot;getListOfTestSuiteFiles&amp;quot;,&lt;br /&gt;
		&amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
		&amp;quot;Comment&amp;quot;:&amp;quot;get a list of known test suites which can be executed via executeTestSuiteFile.&amp;quot;,&lt;br /&gt;
		&amp;quot;Return&amp;quot;:&amp;quot;Array&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
		&amp;quot;Name&amp;quot;:&amp;quot;killExecution&amp;quot;,&lt;br /&gt;
		&amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
		&amp;quot;Comment&amp;quot;:&amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
		&amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
		&amp;quot;Name&amp;quot;:&amp;quot;loadSuite&amp;quot;,&lt;br /&gt;
		&amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
		&amp;quot;Comment&amp;quot;:&amp;quot;load a suite.&amp;quot;,&lt;br /&gt;
		&amp;quot;Argument&amp;quot;:&amp;quot;(SuiteID:String, SuitePathString:String, Parameters:Array),&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
		&amp;quot;Name&amp;quot;:&amp;quot;ping&amp;quot;,&lt;br /&gt;
		&amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
		&amp;quot;Comment&amp;quot;:&amp;quot;test reachability and return some status info.&amp;quot;,&lt;br /&gt;
		&amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
		&amp;quot;Name&amp;quot;:&amp;quot;removeTicket&amp;quot;,&lt;br /&gt;
		&amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
		&amp;quot;Comment&amp;quot;:&amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;,&lt;br /&gt;
		&amp;quot;Argument&amp;quot;:&amp;quot;(ID:String)&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
		&amp;quot;Name&amp;quot;:&amp;quot;waitForExecutionResult&amp;quot;,&lt;br /&gt;
		&amp;quot;Request&amp;quot;:&amp;quot;PUT&amp;quot;,&lt;br /&gt;
		&amp;quot;Comment&amp;quot;:&amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot;,&lt;br /&gt;
		&amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;,&lt;br /&gt;
		&amp;quot;Argument&amp;quot;:&amp;quot;(ID:String; ReportFiles:Array,)&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
		&amp;quot;Name&amp;quot;:&amp;quot;protocolInfo&amp;quot;,&lt;br /&gt;
		&amp;quot;Request&amp;quot;:&amp;quot;GET&amp;quot;,&lt;br /&gt;
		&amp;quot;Return&amp;quot;:&amp;quot;Dictionary&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	],&lt;br /&gt;
	&amp;quot;Service&amp;quot;:&amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==== Execute Request &amp;quot;/expeccoService/rest/execute&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface above, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
==== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== Execute File Request &amp;quot;/expeccoService/rest/executeTestSuiteFile&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteFileName - name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
The file must be present/reachable by the expecco slave.&lt;br /&gt;
It may be either an absolute pathname (typically on a shared network drive) or&lt;br /&gt;
a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument.&lt;br /&gt;
&lt;br /&gt;
==== GetExecutionInfo Request &amp;quot;/expeccoService/rest/getExecutionInfo&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== KillExecution Request &amp;quot;/expeccoService/rest/killExecution&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== RemoveTicket Request &amp;quot;/expeccoService/rest/removeTicket&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== Cleanup Request &amp;quot;/expeccoService/rest/cleanupTempFiles&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
==== Ping Request &amp;quot;/expeccoService/rest/ping&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8385</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8385"/>
		<updated>2017-03-12T11:30:02Z</updated>

		<summary type="html">&lt;p&gt;Ab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request  ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;/expeccoService/rest/protocolInfo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;; currently always &amp;quot;GET&amp;quot;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        &amp;quot;URLPath&amp;quot; : &amp;quot;expeccoService/rest&amp;quot; ,&lt;br /&gt;
        &amp;quot;Service&amp;quot; : &amp;quot;ExpeccoRestService&amp;quot;, &lt;br /&gt;
        &amp;quot;Version&amp;quot; : 1 ,&lt;br /&gt;
        &amp;quot;Protocol&amp;quot; : &lt;br /&gt;
            [&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;execute&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;start execution; return ticketID.&amp;quot; ,&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;download&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;start execution; return ticketID.&amp;quot; ,&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;executeTestSuiteFile&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;execute suite file; return ticketID.&amp;quot; ,&lt;br /&gt;
                },    &lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;getExecutionInfo&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(ID:String)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot; ,&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;killExecution&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(ID:String)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;removeTicket&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(ID:String)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                { &lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;cleanupTempFiles&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;ping&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;test reachability and return some status info.&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;protocolInfo&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot;, &lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
==== Execute Request &amp;quot;/expeccoService/rest/execute&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface above, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
==== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== Execute File Request &amp;quot;/expeccoService/rest/executeTestSuiteFile&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteFileName - name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
The file must be present/reachable by the expecco slave.&lt;br /&gt;
It may be either an absolute pathname (typically on a shared network drive) or&lt;br /&gt;
a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument.&lt;br /&gt;
&lt;br /&gt;
==== GetExecutionInfo Request &amp;quot;/expeccoService/rest/getExecutionInfo&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== KillExecution Request &amp;quot;/expeccoService/rest/killExecution&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== RemoveTicket Request &amp;quot;/expeccoService/rest/removeTicket&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
==== Cleanup Request &amp;quot;/expeccoService/rest/cleanupTempFiles&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
==== Ping Request &amp;quot;/expeccoService/rest/ping&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Example Requests / Responses ====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
==== Perl Client ====&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
use REST::Client;&lt;br /&gt;
use JSON;&lt;br /&gt;
# Data::Dumper makes it easy to see what the JSON returned actually looks like &lt;br /&gt;
# when converted into Perl data structures.&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
use MIME::Base64;&lt;br /&gt;
&lt;br /&gt;
my $username = &#039;admin&#039;;&lt;br /&gt;
my $password = &#039;admin&#039;;&lt;br /&gt;
my $headers = {Accept =&amp;gt; &#039;application/json&#039;, Authorization =&amp;gt; &#039;Basic &#039; . encode_base64($username . &#039;:&#039; . $password)};&lt;br /&gt;
my $client = REST::Client-&amp;gt;new();&lt;br /&gt;
$client-&amp;gt;setHost(&#039;http://127.0.0.1:9090&#039;);&lt;br /&gt;
&lt;br /&gt;
#parameter for start test Request&lt;br /&gt;
my $startTestURL = &#039;/expeccoService/rest/executeTestSuiteFileWithTestplanNames&#039;;&lt;br /&gt;
my $startTestJSONArguments = &#039;{ &amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;SuiteFileName&amp;quot;:&amp;quot;E:/exept/tmp/SimpleBridgeTest.ets&amp;quot; &amp;quot;TestPlans&amp;quot;:[ &amp;quot;Demo Testplan&amp;quot; ] &amp;quot;Parameters&amp;quot;:[ &amp;quot;generateLog&amp;quot; &amp;quot;true&amp;quot; ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
#parameter for wait for test end and generate results Request&lt;br /&gt;
my $waitTestEndAndCreateResultURL = &#039;/expeccoService/rest/waitForExecutionResult&#039;;&lt;br /&gt;
my $waitTestEndAndCreateResultJSONArguments = &#039;{&amp;quot;ID&amp;quot;:&amp;quot;expeccoRemoteExec&amp;quot; &amp;quot;ReportFiles&amp;quot;:[ {&amp;quot;JUnit_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.junit&amp;quot;} {&amp;quot;PDF_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.pdf&amp;quot;} {&amp;quot;TEXT_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.txt&amp;quot;} {&amp;quot;HTML_ReportFile&amp;quot;:&amp;quot;E:/tmp/logs/SimpleBridgeTestResult.html&amp;quot;} ]}&#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $startTestURL, $startTestJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test started ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;request(&#039;PUT&#039;, $waitTestEndAndCreateResultURL, $waitTestEndAndCreateResultJSONArguments, $headers);&lt;br /&gt;
if( $client-&amp;gt;responseCode() eq &#039;200&#039; ){&lt;br /&gt;
     print &amp;quot;\n=== Test execution and result generation finished ===\n&amp;quot;;&lt;br /&gt;
     #my $response = from_json($client-&amp;gt;responseContent());&lt;br /&gt;
	 #print Dumper($response);&lt;br /&gt;
} else {&lt;br /&gt;
	print Dumper($client-&amp;gt;responseContent());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8384</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8384"/>
		<updated>2017-03-12T11:22:53Z</updated>

		<summary type="html">&lt;p&gt;Ab: /* Start expecco with REST Server enabled */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request &amp;quot;/expeccoService/rest/protocolInfo&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;; currently always &amp;quot;GET&amp;quot;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        &amp;quot;URLPath&amp;quot; : &amp;quot;expeccoService/rest&amp;quot; ,&lt;br /&gt;
        &amp;quot;Service&amp;quot; : &amp;quot;ExpeccoRestService&amp;quot;, &lt;br /&gt;
        &amp;quot;Version&amp;quot; : 1 ,&lt;br /&gt;
        &amp;quot;Protocol&amp;quot; : &lt;br /&gt;
            [&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;execute&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;start execution; return ticketID.&amp;quot; ,&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;download&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;start execution; return ticketID.&amp;quot; ,&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;executeTestSuiteFile&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;execute suite file; return ticketID.&amp;quot; ,&lt;br /&gt;
                },    &lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;getExecutionInfo&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(ID:String)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot; ,&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;killExecution&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(ID:String)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;removeTicket&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(ID:String)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                { &lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;cleanupTempFiles&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;ping&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;test reachability and return some status info.&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;protocolInfo&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot;, &lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
===== Execute Request &amp;quot;/expeccoService/rest/execute&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface above, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
===== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
===== Execute File Request &amp;quot;/expeccoService/rest/executeTestSuiteFile&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteFileName - name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
The file must be present/reachable by the expecco slave.&lt;br /&gt;
It may be either an absolute pathname (typically on a shared network drive) or&lt;br /&gt;
a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument.&lt;br /&gt;
&lt;br /&gt;
===== GetExecutionInfo Request &amp;quot;/expeccoService/rest/getExecutionInfo&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
===== KillExecution Request &amp;quot;/expeccoService/rest/killExecution&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
===== RemoveTicket Request &amp;quot;/expeccoService/rest/removeTicket&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
===== Cleanup Request &amp;quot;/expeccoService/rest/cleanupTempFiles&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
===== Ping Request &amp;quot;/expeccoService/rest/ping&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
===== Example Wire Protocol Trace =====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8383</id>
		<title>Starting expecco via Command Line/rest/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Starting_expecco_via_Command_Line/rest/en&amp;diff=8383"/>
		<updated>2017-03-12T10:23:04Z</updated>

		<summary type="html">&lt;p&gt;Ab: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco REST Service Interface ==&lt;br /&gt;
&lt;br /&gt;
If enabled, expecco accepts REST requests, via the URL &amp;quot;&amp;lt;code&amp;gt;/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;. I.e. the default URL is &amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Start expecco with REST Server enabled ===&lt;br /&gt;
&lt;br /&gt;
The service can be started using the command line arguments -- server or --service. Please refer to the detailed description of [[Starting_expecco_via_Command_Line/en#Command_Line_Options|the command line arguments]] for more details. Otherwise it is possible to start the service within the expecco IDE. In the Main Menu you will find the menu entries &amp;quot;Extras/Webservices/Test Execution Client For expeccoALM (SOAP)&amp;quot; Start... and Stop. The menu entry &amp;quot;Start&amp;quot; opens a dialog where you can choose the port number should be used by the server. If you choose start the SOAP and REST Services will be started. With the menu entry &amp;quot;Stop&amp;quot; the server will be stopped.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
The expecco REST service supports nearly the same set of operations as the [[Starting_expecco_via_Command_Line/en#Expecco_SOAP_Service_Interface|expecco SOAP service]], but uses a much more lightweight approach in its parameter encoding. It is both easier to implement on the client side, and also faster than SOAP, due to the minimal encoding/decoding overhead.&lt;br /&gt;
Expecco REST calls are HTTP-GET or HTTP-PUT requests, possibly with attached JSON encoded argument data. For requests with response data, the data are also JSON encoded. The http response code on success is 200.&lt;br /&gt;
&lt;br /&gt;
The operation is determined by the URI: the last component is the operation name to be executed. &lt;br /&gt;
&lt;br /&gt;
A description of the supported REST calls can be aqcuired from the running service via &lt;br /&gt;
&amp;quot;&amp;lt;code&amp;gt;host:9090/expeccoService/rest/protocolInfo&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== API Functions ===&lt;br /&gt;
&lt;br /&gt;
A very useful REST-entry is the &amp;quot;&amp;lt;code&amp;gt;protocolInfo&amp;lt;/code&amp;gt;&amp;quot; request, which returns a description of all supported REST call entries:&lt;br /&gt;
&lt;br /&gt;
==== ProtocolInfo Request &amp;quot;/expeccoService/rest/protocolInfo&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
All REST services from eXept products support the protocolInfo request (see also expeccoALM-Rest service).&lt;br /&gt;
It allows for a client to dynamically adapt to newer versions.&lt;br /&gt;
&lt;br /&gt;
The Response is a JSON dictionary with the following fields:&lt;br /&gt;
* &amp;quot;Protocol&amp;quot; - an array containing one entry per supported call entry (see below).&lt;br /&gt;
* &amp;quot;URLPath&amp;quot; - the URL of the service (just a confirmation, as you would not have a response at hand without it)&lt;br /&gt;
* &amp;quot;Service&amp;quot; - the name of the service (class name in Smalltalk) currently always &amp;quot;ExpeccoRestService&amp;quot;&lt;br /&gt;
* &amp;quot;Version&amp;quot; - a protocol version number; currently 1&lt;br /&gt;
&lt;br /&gt;
the elements of the protocol array are objects with the following fields:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Name&amp;quot; - the name of the rest call entry&lt;br /&gt;
* &amp;quot;Request&amp;quot; - the type of HTTP request, one of &amp;quot;GET&amp;quot;,&amp;quot;PUT&amp;quot; or &amp;quot;DELETE&amp;quot;; currently always &amp;quot;GET&amp;quot;&lt;br /&gt;
* &amp;quot;Comment&amp;quot; - a comment describing the operation&lt;br /&gt;
* &amp;quot;Argument&amp;quot; - a short description of the argument; if not present, argument is required; can be one of &amp;quot;Dictionary&amp;quot;, &amp;quot;String&amp;quot; or any other of the basic JSON data types.&lt;br /&gt;
* &amp;quot;Return&amp;quot; - the type of return data. Same possible values as the argument description.&lt;br /&gt;
&lt;br /&gt;
For example, the current expecco implementation returns the following JSON object:&lt;br /&gt;
&lt;br /&gt;
    { &lt;br /&gt;
        &amp;quot;URLPath&amp;quot; : &amp;quot;expeccoService/rest&amp;quot; ,&lt;br /&gt;
        &amp;quot;Service&amp;quot; : &amp;quot;ExpeccoRestService&amp;quot;, &lt;br /&gt;
        &amp;quot;Version&amp;quot; : 1 ,&lt;br /&gt;
        &amp;quot;Protocol&amp;quot; : &lt;br /&gt;
            [&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;execute&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(ID:String, SuiteID:String, Suite:String, SuiteURI:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;start execution; return ticketID.&amp;quot; ,&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;download&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(SuiteID:String, Suite:String, SuiteURI:String, Parameters:Array)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;start execution; return ticketID.&amp;quot; ,&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;executeTestSuiteFile&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(ID:String, SuiteFileName:String, Environment:Dictionary, TestPlans:Array, Resources:Array, Parameters:Array)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;execute suite file; return ticketID.&amp;quot; ,&lt;br /&gt;
                },    &lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;getExecutionInfo&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(ID:String)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;get execution status of an execute job; argument is ticketID.&amp;quot; ,&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;killExecution&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(ID:String)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;kill execution of an execute job; argument is ticketID.&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;removeTicket&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Argument&amp;quot; : &amp;quot;(ID:String)&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;give up execution of an execute job; if required, kill the job. argument is ticketID.&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                { &lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;cleanupTempFiles&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;remove leftover temporary files.&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;ping&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Comment&amp;quot; : &amp;quot;test reachability and return some status info.&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                },&lt;br /&gt;
                {&lt;br /&gt;
                    &amp;quot;Name&amp;quot; : &amp;quot;protocolInfo&amp;quot; ,&lt;br /&gt;
                    &amp;quot;Request&amp;quot; : &amp;quot;GET&amp;quot;, &lt;br /&gt;
                    &amp;quot;Return&amp;quot; : &amp;quot;Dictionary&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
            ]&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
===== Execute Request &amp;quot;/expeccoService/rest/execute&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteID - mandatory; the UUID of the test suite&lt;br /&gt;
* Suite - optional; suite data file (ets file) in base64 encoding&lt;br /&gt;
* SuiteURI - optional; the URL where expecco could fetch the suite&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
As described in the SOAP interface above, expecco caches downloaded suites in a temporary cache folder.&lt;br /&gt;
Therefore, the SuiteID field must be present and contain the test suite&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
The .ets file can be either passed down as data (in the Suite field), or expecco can be ordered to fetch the suite via&lt;br /&gt;
http from the given SuiteURI. If Suite is empty or missing, expecco tries to fetch the .ets file via the SuiteURI.&lt;br /&gt;
If both fields are empty, expecco will run the test if and only if the suite is already present in its cach folder.&lt;br /&gt;
Thus, you can optimize execute requests, by either always provide a SuiteURI (instead of the suite data),&lt;br /&gt;
or - if the client cannot provide the suite via HTTP, but has to send it as data - by first sending an execute request&lt;br /&gt;
with only the suiteID, but neither suite-data, nor suite-URI. In this case, an error will be reported by expecco if&lt;br /&gt;
it has the suite not already in its cache, and the client should send another execute request, this time with valid suite data.&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;Parameters&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;Parameters&amp;quot; field is present, it must be a JSON array containing alternating key-value elements.&lt;br /&gt;
Currently supported keys are:&lt;br /&gt;
* &amp;quot;generateLog&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
* &amp;quot;generatePDFReport&amp;quot; - JSON boolean as corresponding value element&lt;br /&gt;
&lt;br /&gt;
The optional &amp;quot;TestPlans&amp;quot; field:&lt;br /&gt;
&lt;br /&gt;
If the &amp;quot;TestPlans&amp;quot; field is present, it must be a JSON array containing JSON arrays as elements.&lt;br /&gt;
Each entry must consist of a 1 or 2 element JSON array. The first being the UUID of the testplan, the optional second element &lt;br /&gt;
must be (if present) another JSON array giving the list of test-case UUID to execute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As described above, the returned object contains the job ID, which is used to refer to this execution job in further&lt;br /&gt;
getExecutionInfo or terminateExecution requests (see below).&lt;br /&gt;
&lt;br /&gt;
===== Download Request &amp;quot;/expeccoService/rest/download&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
This is similar to the suite transmission scheme described in the execute request. However, the suite is not executed.&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* SuiteID - mandatory String; the suite&#039;s ID&lt;br /&gt;
* Suite - optional String; base64 encoded .ets file&lt;br /&gt;
* SuiteURI - optional String; the URI from which expecco can fetch the suite&lt;br /&gt;
* Parameters - optional Array. For future expansion&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
===== Execute File Request &amp;quot;/expeccoService/rest/executeTestSuiteFile&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
The details are the same as in the above SOAP variant.&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
* SuiteFileName - name of the testSuite file (ets file)&lt;br /&gt;
* Environment - optional;&lt;br /&gt;
* TestPlans - optional;&lt;br /&gt;
* Resources - optional&lt;br /&gt;
* Parameters - optional;&lt;br /&gt;
&lt;br /&gt;
The file must be present/reachable by the expecco slave.&lt;br /&gt;
It may be either an absolute pathname (typically on a shared network drive) or&lt;br /&gt;
a relative filename. If a relative file name is given, it will be searched in the folder specified with the &amp;quot;&#039;&#039;--suiteDirectory&#039;&#039;&amp;quot; command line argument.&lt;br /&gt;
&lt;br /&gt;
===== GetExecutionInfo Request &amp;quot;/expeccoService/rest/getExecutionInfo&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields:&lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
===== KillExecution Request &amp;quot;/expeccoService/rest/killExecution&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
===== RemoveTicket Request &amp;quot;/expeccoService/rest/removeTicket&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
The argument is a JSON object with the following fields: &lt;br /&gt;
* ID - mandatory; job id&lt;br /&gt;
&lt;br /&gt;
The operation is the same as described in the previous SOAP section.&lt;br /&gt;
&lt;br /&gt;
===== Cleanup Request &amp;quot;/expeccoService/rest/cleanupTempFiles&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
No argument. no return value.&lt;br /&gt;
&lt;br /&gt;
===== Ping Request &amp;quot;/expeccoService/rest/ping&amp;quot; =====&lt;br /&gt;
&lt;br /&gt;
No argument. Returns an object containing status information.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
===== Example Wire Protocol Trace =====&lt;br /&gt;
&lt;br /&gt;
Wire protocol of sending a Ping request (&amp;quot;/expecco/rest/ping&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
Request to expecco:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/ping HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;hello&amp;quot;:&amp;quot;exeptn.bh.exept.de&amp;quot;,&lt;br /&gt;
    &amp;quot;restInterfaceVersion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;node&amp;quot;:&amp;quot;fancy&amp;quot;,&lt;br /&gt;
    &amp;quot;osType&amp;quot;:&amp;quot;osx&amp;quot;,&lt;br /&gt;
    &amp;quot;cpuType&amp;quot;:&amp;quot;x86_64&amp;quot;,&lt;br /&gt;
    &amp;quot;osRelease&amp;quot;:&amp;quot;10.8.0&amp;quot;,&lt;br /&gt;
    &amp;quot;architecture&amp;quot;:&amp;quot;Darwin&amp;quot;,&lt;br /&gt;
    &amp;quot;system&amp;quot;:&amp;quot;Darwin&amp;quot;&lt;br /&gt;
    &amp;quot;numberOfCPUs&amp;quot;:4,&lt;br /&gt;
    &amp;quot;numberOfRunningTests&amp;quot;:0,&lt;br /&gt;
    &amp;quot;suiteDirectories&amp;quot;:[&amp;quot;/Users/cg/work/exept/expecco/projects&amp;quot;],&lt;br /&gt;
    &amp;quot;knownTestSuites&amp;quot;:[&amp;quot;test1.ets&amp;quot;,&amp;quot;test2.ets&amp;quot;],&lt;br /&gt;
    &amp;quot;expeccoRelease&amp;quot;:&amp;quot;2.7.0.0&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;pluginNames&amp;quot;:[&amp;quot;SwiftMessages&amp;quot;,&amp;quot;WSDL Import Support&amp;quot;,&amp;quot;XMI Import Support&amp;quot;,&amp;quot;RemoteAccess&amp;quot;,&lt;br /&gt;
                  &amp;quot;SAP  Plugin&amp;quot;,&amp;quot;DotNET Bridge&amp;quot;,&amp;quot;SWT GUI Test Plugin&amp;quot;,&amp;quot;JavaFX GUI Test Plugin&amp;quot;,&amp;quot;VNC Client&amp;quot;,&lt;br /&gt;
                  &amp;quot;Android GUI Testing Plugin&amp;quot;,&amp;quot;SNMP Plugin&amp;quot;,&amp;quot;Windows Automation Plugin&amp;quot;,&amp;quot;Manual Test Import 2&amp;quot;,&lt;br /&gt;
                  &amp;quot;Windows Forms Plugin&amp;quot;,&amp;quot;Java Browser&amp;quot;,&amp;quot;Visual Basic Scripting&amp;quot;,&amp;quot;Swing GUI Test Plugin&amp;quot;,&amp;quot;Java Import&amp;quot;,&lt;br /&gt;
                  &amp;quot;Java Bridge&amp;quot;,&amp;quot;QtTesting&amp;quot;,&amp;quot;C Header File Parser (DLL Call Generator)&amp;quot;,&amp;quot;Java Debugger&amp;quot;,&lt;br /&gt;
                  &amp;quot;Common Java GUI Test Plugin&amp;quot;,&amp;quot;JIRA Interface&amp;quot;,&amp;quot;SmallSensePlugin&amp;quot;,&amp;quot;DocuPrintPlugin&amp;quot;,&amp;quot;Webtest (Selenium)&amp;quot;,&lt;br /&gt;
                  &amp;quot;Gembird Power Manager Control&amp;quot;,&amp;quot;GUI Testing Plugin Platform&amp;quot;,&amp;quot;EDI-Edifact&amp;quot;],&lt;br /&gt;
    &amp;quot;plugins&amp;quot;[...],&lt;br /&gt;
    &amp;quot;expeccoPluginID:DLLCallGeneratorPlugin&amp;quot;:&amp;quot;e79207a0-0c23-11df-8eaf-00ff7b08316c 1 1.24&amp;quot;,&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;quot;expeccoPluginID:VBScriptPlugin&amp;quot;:&amp;quot;09a8d100-eb01-11e3-9aba-6067202bc199 1 1.25&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (without suite-info, to check if the suite is already loaded):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (empty, because suite is not present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download request to expecco (with suite-info, to ensure suite is present):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/download HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0  &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (non-empty, because suite is now present on the expecco client machine):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execute request to expecco (with suite-info). The suite info is not required, if the above download was done before.&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/execute HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteID&amp;quot;:&amp;quot;09a8d1FF-ebF1-12AB-9aba-98ab016389f0&amp;quot;,&lt;br /&gt;
   &amp;quot;Suite&amp;quot;:&amp;quot;... base64 encoded .ets suite file ...&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get progress and status information about a running test:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/getStatusInfo HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Response (returns the execution&#039;s job ID):&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 HTTP/1.1 200 OK &lt;br /&gt;
 Content-Type: application/json; charset=&amp;quot;utf-8&amp;quot; &lt;br /&gt;
 Content-Length: 4111 &lt;br /&gt;
 Connection: Keep-Alive &lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f5&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative execute-by-filename request (the suite-file must be present on the slave already):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
 GET /expeccoService/rest/executeTestSuiteFile HTTP/1.1 &lt;br /&gt;
 Host: localhost:9123 &lt;br /&gt;
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0 &lt;br /&gt;
 Accept: application/json &lt;br /&gt;
 Accept-Language: en-US,en;q=0.5 &lt;br /&gt;
 Accept-Encoding: gzip, deflate &lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;ID&amp;quot;:&amp;quot;09ab0149-1234-9876-4583-1259a5e301f6&amp;quot;,&lt;br /&gt;
   &amp;quot;SuiteFileName&amp;quot;:&amp;quot;c:\sharedSuites\test.ets&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ab</name></author>
	</entry>
</feed>