<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.meego.com/skins/common/feed.css?270"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.meego.com/index.php?title=Special:Contributions/Jokylanp&amp;feed=atom&amp;limit=50&amp;target=Jokylanp&amp;year=&amp;month=</id>
		<title>MeeGo wiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.meego.com/index.php?title=Special:Contributions/Jokylanp&amp;feed=atom&amp;limit=50&amp;target=Jokylanp&amp;year=&amp;month="/>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Special:Contributions/Jokylanp"/>
		<updated>2013-05-19T23:34:32Z</updated>
		<subtitle>From MeeGo wiki</subtitle>
		<generator>MediaWiki 1.16.2</generator>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/Testrunner-lite</id>
		<title>Quality/QA-tools/Testrunner-lite</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/Testrunner-lite"/>
				<updated>2011-06-06T11:17:46Z</updated>
		
		<summary type="html">&lt;p&gt;Jokylanp: /* Usage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Testrunner-lite =&lt;br /&gt;
&lt;br /&gt;
Testrunner-lite is a lightweight tool for test execution, which reads [[Quality/QA-tools/Test plan|Test Plan XML]] files as input, and produces [http://gitorious.org/qa-tools/test-definition/blobs/master/src/data/testdefinition-results.xsd a common-format] test result file which can be published at [http://qa-reports.meego.com/ qa-reports.meego.com]. With testrunner-lite, you can&lt;br /&gt;
* Execute automatic, semi-automatic and manual test cases&lt;br /&gt;
* Execute tests locally or in host-based mode by yourself or as a part of test automation system&lt;br /&gt;
* Use [[Quality/QA-tools/Testrunner-lite#Filtering options|filters]] to select the test cases to be executed&lt;br /&gt;
* Validate the used test plan file automatically&lt;br /&gt;
&lt;br /&gt;
See our demo videos at Youtube:&lt;br /&gt;
* [http://www.youtube.com/watch?v=VKc5WWRLFgo Demo of new libssh2 feature in version 1.5.0]&lt;br /&gt;
* [http://www.youtube.com/watch?v=iYzxKU96xEg Proof of concept of parallel execution (not released yet)]&lt;br /&gt;
* [http://www.youtube.com/watch?v=TZhHDPUeHIw Demo of version 1.3.17]&lt;br /&gt;
* [http://www.youtube.com/watch?v=A0V94xZ_VwI Demo of version 1.3.11]&lt;br /&gt;
* [http://www.youtube.com/watch?v=OSF8tyUxI8U Demo of version 1.3.10]&lt;br /&gt;
* [http://www.youtube.com/user/meegoqatools MeeGo QA tools Youtube channel]&lt;br /&gt;
&lt;br /&gt;
There is also a graphical user interface version of the tool called [[Quality/QA-tools/Testrunner|Testrunner]] available.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Testrunner-lite can be installed on MeeGo Netbook UX, Ubuntu 10.04 (and newer) and Fedora 13 by doing the following:&lt;br /&gt;
# [[Quality/QA-tools/How to set up repositories|Set up the repository]]&lt;br /&gt;
# Install testrunner-lite&lt;br /&gt;
&lt;br /&gt;
MeeGo Netbook 1.1:&lt;br /&gt;
&lt;br /&gt;
 sudo zypper install testrunner-lite&lt;br /&gt;
&lt;br /&gt;
Ubuntu:&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install testrunner-lite&lt;br /&gt;
&lt;br /&gt;
Fedora 13:&lt;br /&gt;
&lt;br /&gt;
 # yum install testrunner-lite&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
The program is executed from command line&lt;br /&gt;
&lt;br /&gt;
 /usr/bin/testrunner-lite [options]&lt;br /&gt;
 Options&lt;br /&gt;
 &lt;br /&gt;
 -h, --help	&lt;br /&gt;
  Show this help message and exit.&lt;br /&gt;
 &lt;br /&gt;
 -V, --version&lt;br /&gt;
  Display version and exit.&lt;br /&gt;
 &lt;br /&gt;
 -f FILE, --file=FILE&lt;br /&gt;
  Input file with test definitions in XML (required).&lt;br /&gt;
 &lt;br /&gt;
 -o FILE, --output=FILE&lt;br /&gt;
  Output file for test results (required).&lt;br /&gt;
 &lt;br /&gt;
 -r FORMAT, --format=FORMAT&lt;br /&gt;
  Output file format. FORMAT can be xml or text. Default: xml&lt;br /&gt;
 &lt;br /&gt;
 -e ENVIRONMENT, --environment=ENVIRONMENT&lt;br /&gt;
  Target test environment. Default: hardware&lt;br /&gt;
 &lt;br /&gt;
 -v, -vv, --verbose[={INFO|DEBUG}]&lt;br /&gt;
  Enable verbosity mode; -v and --verbose=INFO are equivalent outputting INFO, ERROR and WARNING messages.&lt;br /&gt;
  Similarly -vv and --verbose=DEBUG are equivalent, outputting also debug messages. Default behaviour is silent mode.&lt;br /&gt;
 &lt;br /&gt;
 -L, --logger=URL&lt;br /&gt;
  Remote HTTP logger for log messages. Log messages are sent to given URL in a HTTP POST message.&lt;br /&gt;
  URL format is [http://]host[:port][/path/], where host may be a hostname or an IPv4 address.&lt;br /&gt;
 &lt;br /&gt;
 -a, --automatic&lt;br /&gt;
  Enable only automatic tests to be executed.&lt;br /&gt;
 &lt;br /&gt;
 -m, --manual&lt;br /&gt;
  Enable only manual tests to be executed.&lt;br /&gt;
 &lt;br /&gt;
 -l FILTER, --filter=FILTER&lt;br /&gt;
  Filtering option to select tests (not) to be executed. E.g. '-testcase=bad_test -type=unknown' first disables&lt;br /&gt;
  test case named as bad_test. Next, all tests with type unknown are disabled. The remaining tests will be&lt;br /&gt;
  executed. (Currently supported filter type are: testset,testcase,requirement,feature and type)&lt;br /&gt;
 &lt;br /&gt;
 -c, --ci&lt;br /&gt;
  Disable validation of test definition against schema.&lt;br /&gt;
 &lt;br /&gt;
 -s, --semantic&lt;br /&gt;
  Enable validation of test definition against stricter (semantics) schema.&lt;br /&gt;
 &lt;br /&gt;
 -A, --validate-only&lt;br /&gt;
  Do only input xml validation, do not execute tests.&lt;br /&gt;
 &lt;br /&gt;
 -H, --no-hwinfo&lt;br /&gt;
  Skip hwinfo obtaining.&lt;br /&gt;
 &lt;br /&gt;
 -P, --print-step-output&lt;br /&gt;
  Output standard streams from programs started in steps&lt;br /&gt;
 &lt;br /&gt;
 -S, --syslog&lt;br /&gt;
  Write log messages also to syslog.&lt;br /&gt;
 &lt;br /&gt;
 -M, --disable-measurement-verdict&lt;br /&gt;
  Do not fail cases based on measurement data&lt;br /&gt;
 &lt;br /&gt;
 --measure-power&lt;br /&gt;
  Perform current measurement with hat_ctrl tool during execution of test cases&lt;br /&gt;
 &lt;br /&gt;
 -u URL, --vcs-url=URL&lt;br /&gt;
  Causes testrunner-lite to write the given VCS URL to results.&lt;br /&gt;
 &lt;br /&gt;
 -U URL, --package-url=URL&lt;br /&gt;
  Causes testrunner-lite to write the given package URL to results.&lt;br /&gt;
 &lt;br /&gt;
 --logid=ID&lt;br /&gt;
  User defined identifier for HTTP log messages.&lt;br /&gt;
 &lt;br /&gt;
 -d PATH, --rich-core-dumps=PATH&lt;br /&gt;
  Save rich-core dumps. PATH is the location, where rich-core dumps are produced in the device. Creates UUID mappings between executed&lt;br /&gt;
  test cases and generated rich-core dumps. This makes possible to link each rich-cores and test cases in test reporting&lt;br /&gt;
  NOTE: This feature requires working sp-rich-core package to be installed in the Device Under Test.&lt;br /&gt;
 &lt;br /&gt;
 Test commands are executed locally by default.  Alternatively, one&lt;br /&gt;
 of the following executors can be used:&lt;br /&gt;
 &lt;br /&gt;
 Chroot Execution:&lt;br /&gt;
 -C PATH, --chroot=PATH&lt;br /&gt;
  Run tests inside a chroot environment. Note that this doesn't change the root of the testrunner itself,&lt;br /&gt;
  only the tests will have the new root folder set.&lt;br /&gt;
 &lt;br /&gt;
 Host-based SSH Execution:&lt;br /&gt;
 -t [USER@]ADDRESS[:PORT], --target=[USER@]ADDRESS[:PORT]&lt;br /&gt;
  Enable host-based testing. If given, commands are executed from test control PC (host) side. ADDRESS is the ipv4 address&lt;br /&gt;
  of the system under test. Behind the scenes, host-based testing uses the external execution described below with SSH&lt;br /&gt;
  and SCP.&lt;br /&gt;
 &lt;br /&gt;
 -R[ACTION], --resume[=ACTION]&lt;br /&gt;
  Resume testrun when ssh connection failure occurs.&lt;br /&gt;
  The possible ACTIONs after resume are:&lt;br /&gt;
  '''exit'''      Exit after current test set&lt;br /&gt;
  '''continue'''  Continue normally to the next test set&lt;br /&gt;
  The default action is 'exit'.&lt;br /&gt;
 &lt;br /&gt;
 -i [USER@]ADDRESS[:PORT], --hwinfo-target=[USER@]ADDRESS[:PORT]&lt;br /&gt;
  Obtain hwinfo remotely. Hwinfo is usually obtained locally or in case of host-based testing from target address. This option&lt;br /&gt;
  overrides target address when hwinfo is obtained. Usage is similar to -t option.&lt;br /&gt;
 &lt;br /&gt;
 -k KEY, --ssh-key=KEY&lt;br /&gt;
  path to SSH private key file&lt;br /&gt;
 &lt;br /&gt;
 Libssh2 Execution:&lt;br /&gt;
 -n [USER@]ADDRESS, --libssh2=[USER@]ADDRESS&lt;br /&gt;
  Run host based testing with native ssh (libssh2) EXPERIMENTAL&lt;br /&gt;
 &lt;br /&gt;
 External Execution:&lt;br /&gt;
 -E EXECUTOR, --executor=EXECUTOR&lt;br /&gt;
  Use an external command to execute test commands on the system under test. The external command must accept a test&lt;br /&gt;
  command as a single additional argument and exit with the status of the test command. For example, an external executor&lt;br /&gt;
  that uses SSH to execute test commands could be &amp;quot;/usr/bin/ssh user@target&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
 -G GETTER, --getter=GETTER&lt;br /&gt;
  Use an external command to get files from the system under test. The external getter should contain &amp;lt;FILE&amp;gt; and &amp;lt;DEST&amp;gt;&lt;br /&gt;
  (with the brackets) where &amp;lt;FILE&amp;gt; will be replaced with the path to the file on the system under test and &amp;lt;DEST&amp;gt; will be&lt;br /&gt;
  replaced with the destination directory on the host. If &amp;lt;FILE&amp;gt; and &amp;lt;DEST&amp;gt; are not specified, they will be appended&lt;br /&gt;
  automatically. For example, an external getter that uses SCP to retrieve files could be &amp;quot;/usr/bin/scp target:'&amp;lt;FILE&amp;gt;' '&amp;lt;DEST&amp;gt;'&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Filtering options ===&lt;br /&gt;
&lt;br /&gt;
Filtering options allow selecting which tests are to be executed. Filtering options are given as a string. String may contain one or more filter entries. Format of each entry is 'filtername=values' where 'filtername' typically corresponds to an attribute in Test Definition XML and 'values' is a string to which the filter should match. Multiple values can be specified if separated by comma (without extra space). A value containing space must be enclosed in double quotes (&amp;quot;&amp;quot;). Current list of forbidden characters in values is as follows: Single quote ('), double quote (&amp;quot;), is-equal-to sign (=), comma (,).&lt;br /&gt;
&lt;br /&gt;
How filtering is carried out: Before processing the filter options, all tests are active by default. Filters can only deactivate tests: If filter value does not match with the value of the corresponding attribute, the test is disabled. Each filter entry is applied for all the active tests in the test package, one after another, in the given order. Filtering is always carried out at the lowest level of the &amp;quot;suite-set-case-step&amp;quot; hierarchy where the corresponding attribute can be defined. Note that some attributes may inherit the value from the upper level. Please refer to Test Definition XML for details.&lt;br /&gt;
&lt;br /&gt;
If 'filtername' is prefixed with dash (-), the filter behaviour is reversed: those tests for which the filter value does match, are disabled.&lt;br /&gt;
&lt;br /&gt;
'filtername' can be any of the following:&lt;br /&gt;
&lt;br /&gt;
    * feature&lt;br /&gt;
    * requirement&lt;br /&gt;
    * testset&lt;br /&gt;
    * type&lt;br /&gt;
    * testcase&lt;br /&gt;
&lt;br /&gt;
The following example does the following: First it disables all test cases except those with attribute type='Integration'. Next, a test case named as Bad Test is disabled. The tests left active will be executed.&lt;br /&gt;
&lt;br /&gt;
 testrunner-lite -f tests.xml -o ~/results -l 'type=Integration -testcase=&amp;quot;Bad Test&amp;quot;'&lt;br /&gt;
&lt;br /&gt;
The following example executes test cases that specify the requirement attribute with a value containing at least one of the following strings: '50001', '50002', '50003'.&lt;br /&gt;
&lt;br /&gt;
 testrunner-lite -f tests.xml -o ~/results -l 'requirement=50001,50002,50003'&lt;br /&gt;
&lt;br /&gt;
Note that each key=values is handled as a separate filter, when checking whether a test case should be filtered. The following example will filter all the test cases,&lt;br /&gt;
&lt;br /&gt;
 testrunner-lite -f tests.xml -o ~/results -l 'testset=set1 testset=set2'&lt;br /&gt;
&lt;br /&gt;
whereas the following will accept tests from test sets &amp;quot;set1&amp;quot; and &amp;quot;set2&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 testrunner-lite -f tests.xml -o ~/results -l 'testset=set1,set2'&lt;br /&gt;
&lt;br /&gt;
== Manual Test Cases ==&lt;br /&gt;
&lt;br /&gt;
It is also possible to execute manual test cases using testrunner-lite, as defined in Test Definition XML.&lt;br /&gt;
&lt;br /&gt;
In case manual test case is encountered during execution, testrunner-lite will go through the defined test steps and ask user whether the step is passed or failed. The test case will terminate at the first failure, otherwise every step defined will be executed. After the test case is done, user has the option to enter additional comments.&lt;br /&gt;
&lt;br /&gt;
Example output when running manual case:&lt;br /&gt;
&lt;br /&gt;
 [INFO] 15:15:53 Starting test case: ExampleTestCase&lt;br /&gt;
 --- Execute test step ---&lt;br /&gt;
 Description:&lt;br /&gt;
 Open calculator. Expected result: calculator opens up.&lt;br /&gt;
 &lt;br /&gt;
 Please enter the result ([P/p]ass or [F/f]ail):&lt;br /&gt;
 P&lt;br /&gt;
 &lt;br /&gt;
 --- Execute test step ---&lt;br /&gt;
 Description:&lt;br /&gt;
 Stop calculator&lt;br /&gt;
 &lt;br /&gt;
 Please enter the result ([P/p]ass or [F/f]ail):&lt;br /&gt;
 P&lt;br /&gt;
 &lt;br /&gt;
 --- Test steps executed, case is PASSED ---&lt;br /&gt;
 Please enter additional comments (ENTER to finish):&lt;br /&gt;
 Execution was slow.&lt;br /&gt;
 &lt;br /&gt;
 [INFO] 15:16:41 Finished test case. Result: PASS&lt;br /&gt;
&lt;br /&gt;
== Testrunner-lite and test case verdicts ==&lt;br /&gt;
&lt;br /&gt;
For manual cases the result is naturally set by the user. For '''automatic''' cases a result of a test case is set as follows:&lt;br /&gt;
* PASS &lt;br /&gt;
** all test steps finished with expected results&lt;br /&gt;
* FAIL &lt;br /&gt;
** test step has unexpected return value&lt;br /&gt;
** test step timed out&lt;br /&gt;
** pre-steps on the set the case belongs to have failed&lt;br /&gt;
** fail based on [[Quality/QA-tools/Test_plan#Measurement_data|measurement data]]&lt;br /&gt;
* N/A&lt;br /&gt;
** test case has state=Design in the tests.xml&lt;br /&gt;
** test case has no steps&lt;br /&gt;
&lt;br /&gt;
If a test case is filtered it doesn't get any result; meaning it is not written to results file at all.&lt;br /&gt;
&lt;br /&gt;
The goal is to align testrunner-lite functionality with what is agreed [[Quality/Glossary#Test_case_verdict|here]].&lt;br /&gt;
&lt;br /&gt;
== About process control ==&lt;br /&gt;
&lt;br /&gt;
Each test step is executed in a separate shell. Testrunner-lite spawns new process for the execution, and waits for the step to finish (or timeout). In case test step contains command that is started to background, the step returns immediately. After test case has finnished a cleanup routine is executed, where testrunner-lite tries to kill all processes that may have been left running by the test steps. Cleanup for pre-steps and post-steps is done after the post steps are executed (i.e. when test set has been executed).&lt;br /&gt;
&lt;br /&gt;
== About host based execution ==&lt;br /&gt;
&lt;br /&gt;
Testrunner-lite supports host based execution, where testrunner-lite is executed on a PC, and the test steps over ssh on hardware. This requires that key based ssh authentication is enabled between device and host.&lt;br /&gt;
&lt;br /&gt;
Remember that each single step in pre_steps, post_steps or inside testcases is executed in a separate SSH session, so you'll have to make sure that if your steps leave some processes running in the background which inherits its pipes straight from the parent shell, the SSH connection will hang until those processes are terminated (or until they close their pipes). Therefore, you should always redirect the stdout, stderr and stdin streams of your background processes, if you don't want your test steps / pre- / post steps to time out in host-based execution.&lt;br /&gt;
&lt;br /&gt;
See http://www.snailbook.com/faq/background-jobs.auto.html for more information.&lt;br /&gt;
&lt;br /&gt;
== Testrunner-lite state machine ==&lt;br /&gt;
&lt;br /&gt;
Below is a simplified picture describing the operation of testrunner-lite. The program flow can be considered to consist of three phases: initializing, executing and clean up. The execution is done set by set, so that the tool needs to maintain only one set at a time in its memory. &lt;br /&gt;
&lt;br /&gt;
[[File:testrunnerlitefsm.png]]&lt;br /&gt;
&lt;br /&gt;
xfig file:&lt;br /&gt;
[[File:testrunnerlitesm.fig]]&lt;br /&gt;
&lt;br /&gt;
== Further development ==&lt;br /&gt;
We're actively making testrunner-lite a better tool. See discussion about architecture changes and suggestions in following page:&lt;br /&gt;
[[Quality/QA-tools/Testrunner-lite/Testrunner-lite_development|Testrunner-lite development]]&lt;br /&gt;
&lt;br /&gt;
== Contact ==&lt;br /&gt;
&lt;br /&gt;
Testrunner-lite is developed by [[Quality/QA-tools | QA tools team]]. You can contact us and contribute via the following channels:&lt;br /&gt;
* [http://webchat.freenode.net/?channels=meego-qa #meego-qa IRC channel on irc.freenode.net]&lt;br /&gt;
* [http://bugs.meego.com/enter_bug.cgi?product=MeeGo%20Quality%20Assurance File new bugs or improvement ideas to Bugzilla]&lt;br /&gt;
* [http://bugs.meego.com/buglist.cgi?bug_status=NEW&amp;amp;bug_status=NEEDINFO&amp;amp;bug_status=INDEFINITION&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=ACCEPTED&amp;amp;bug_status=WAITING%20FOR%20UPSTREAM&amp;amp;bug_status=WAITING&amp;amp;bug_status=REOPENED&amp;amp;bug_status=RESOLVED&amp;amp;bug_status=RELEASED&amp;amp;bug_status=VERIFIED&amp;amp;component=testrunner-lite&amp;amp;query_format=advanced&amp;amp;order=priority%2Cbug_severity%2Cchangeddate%2Cbug_status%2Cassigned_to%2Cbug_id&amp;amp;query_based_on= Leave a comment or vote the items in our backlog]&lt;br /&gt;
* [http://lists.meego.com/listinfo/meego-qa meego-qa@lists.meego.com mailing list]&lt;br /&gt;
* [http://meego.gitorious.org/meego-quality-assurance/testrunner-lite Source codes in Gitorious]&lt;/div&gt;</summary>
		<author><name>Jokylanp</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/Test_plan</id>
		<title>Quality/QA-tools/Test plan</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/Test_plan"/>
				<updated>2010-11-09T10:56:09Z</updated>
		
		<summary type="html">&lt;p&gt;Jokylanp: Added documentation about hwiddetect and get&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Test plan overview ==&lt;br /&gt;
&lt;br /&gt;
The basic principle of test plan XML and tool support is that you can use 'any' executable for testing. &lt;br /&gt;
Test results are checked from exit codes (automated testing) or prompt (manual testing). Executed test plan XMLs produce XML results - wrapping variety of test methods in consistent format required by test automation and data processing.&lt;br /&gt;
&lt;br /&gt;
The test plan information stored in Test Definition XML files consists of:&lt;br /&gt;
&lt;br /&gt;
  1. suite, set, case: Hierarchical structure of the tests.&lt;br /&gt;
  2. feature, subfeature, requirement: Information about why the tested software has been implemented in the first place (which is why it’s being tested as well). &lt;br /&gt;
  3. type: Information about the viewpoint of the tests (which quality aspect of the software they are testing, see DevelopmentTestArea in Agile Testing Wiki).&lt;br /&gt;
  4. level: Information about which test level the tests belong - for test level.&lt;br /&gt;
  5. domain: Information about which architectural domains the tests are focused on.&lt;br /&gt;
  6. description: descriptions of the tests (what each test is, and what it is supposed to do).&lt;br /&gt;
  7. step: Execution instructions (for automated tests), which determine the actual commands to execute to run each test.&lt;br /&gt;
&lt;br /&gt;
''Note:'' that all of the above are not mandatory. Mandatory fields for executing tests are defined with test plan XML validation schema.&lt;br /&gt;
&lt;br /&gt;
== Creating Test plan ==&lt;br /&gt;
&lt;br /&gt;
There are certain mandatory things you’ll need to provide in a test definition XML.&lt;br /&gt;
&lt;br /&gt;
The structure of the XML and the possible attributes/values are defined in the Test Definition XML schema. It’s important to validate (see validation) your XML against the up-to-date schema (also shown on this page).&lt;br /&gt;
&lt;br /&gt;
Important information that you can’t get directly from the schema, about which attributes are mandatory, which values are possible, and where you should get the values from to be used in the definition, is available in the appendices section on this page.&lt;br /&gt;
&lt;br /&gt;
=== Test Cases ===&lt;br /&gt;
&lt;br /&gt;
The main thing in test plan are the test cases, which define what to execute (test steps), what to expect from the execution (expected results) and also some additional information for reporting purposes. An example test case could be:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;case name=&amp;quot;my-first-case&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Creating my very first test case&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;step&amp;gt;ls&amp;lt;/step&amp;gt;&lt;br /&gt;
    &amp;lt;step&amp;gt;uname -r&amp;lt;/step&amp;gt;&lt;br /&gt;
 &amp;lt;/case&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What did we just do? We created a simple test case named &amp;lt;code&amp;gt;my-first-test-case&amp;lt;/code&amp;gt;, which executes two steps and expects that they return the common “success return value” 0. Want to check for some other return value? Use &amp;lt;code&amp;gt;expected_result&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;step expected_result=&amp;quot;-1&amp;quot;&amp;gt;ls&amp;lt;/step&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In case you feel that some test cases are insignificant, i.e. that they shouldn’t be taken into consideration when choosing whether the test run is passed or failed, you can use insignificant-attribute (defaults to &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;, i.e. every case is considered to be significant):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;case name=&amp;quot;not-so-important-test&amp;quot; insignificant=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In addition to test execution, the “story” of the test case should also be told, and for telling this story, we have fields for test type (what quality characteristics are tested) and test level (what level of system is being exercised. The possible values for both of these are listed in the appendices. Let’s add level and type to our test case:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;case name=&amp;quot;my-first-case&amp;quot; level=&amp;quot;Product&amp;quot; type=&amp;quot;Functional&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Creating my very first test case&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;step expected_result=&amp;quot;-1&amp;quot;&amp;gt;ls&amp;lt;/step&amp;gt;&lt;br /&gt;
    &amp;lt;step&amp;gt;uname -r&amp;lt;/step&amp;gt;&lt;br /&gt;
 &amp;lt;/case&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And that’s our first test case! Not that difficult...&lt;br /&gt;
&lt;br /&gt;
=== Grouping Cases - Sets and Suites ===&lt;br /&gt;
&lt;br /&gt;
Grouping cases to sets and suites makes your life easier and more organized. A good idea is to group test cases that test the same features into same sets, and sets that test the same architectural domain under same suites. E.g.:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;suite name=&amp;quot;my-multimedia-tests&amp;quot; domain=&amp;quot;Multimedia&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;set name=&amp;quot;video-playback-tests&amp;quot; feature=&amp;quot;Video Playback&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Video&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;case ...&lt;br /&gt;
        &amp;lt;case ...&lt;br /&gt;
    &amp;lt;/set&amp;gt;&lt;br /&gt;
 &amp;lt;/suite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, sets contain test cases, and may also contain description (the same way as the cases do). More about sets in Test Definition Execution part&lt;br /&gt;
&lt;br /&gt;
 '''Note:''' There are several attributes that need to be defined on the test case, test set, or test suite level in the test definition XML.&amp;lt;br /&amp;gt; You can find more information about these attributes in the Appendices section of this page.&lt;br /&gt;
&lt;br /&gt;
=== Time outs ===&lt;br /&gt;
Test steps will time out by default after 90 seconds. You can change the default time out by adding timeout attribute to your test case. for example&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;case name=&amp;quot;my-test-case&amp;quot; timeout=&amp;quot;120&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that this the timeout is for single test step not for the whole case.&lt;br /&gt;
&lt;br /&gt;
For [pre|post]-steps the the default timeout is 180 seconds, it can also be changed:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre_steps timeout=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Putting It All Together ===&lt;br /&gt;
&lt;br /&gt;
Now that you have some knowledge on grouping and test cases in general, it is time to put it all together. Before showing an example, it is important to note that all the mentioned case attributes (e.g. level, type) are inheritable. So, if you have e.g. a set which contains only certain type of cases, you can define the type at the set-level, instead of writing it separately into each case.&lt;br /&gt;
&lt;br /&gt;
Now, the example. Let’s first add the mandatory tags, which each test definition should have:&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;
  &amp;lt;testdefinition version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/testdefinition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That’s the mandatory part; we defined that we have a XML-document, and that this particular one is test definition version 1.0. Let’s add more beef to the bones by adding one suite with couple of sets:&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;
 &amp;lt;testdefinition version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;suite name=&amp;quot;my-multimedia-tests&amp;quot; domain=&amp;quot;Multimedia&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Testing AF stuff&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;set name=&amp;quot;video-playback-tests&amp;quot; feature=&amp;quot;Video Playback&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;Video playback tests&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/set&amp;gt;&lt;br /&gt;
        &amp;lt;set name=&amp;quot;video-recording-tests&amp;quot; feature=&amp;quot;Video Recording&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;Video recording tests&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/set&amp;gt;&lt;br /&gt;
    &amp;lt;/suite&amp;gt;&lt;br /&gt;
 &amp;lt;/testdefinition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Okay, we have one suite named &amp;lt;code&amp;gt;my-multimedia-tests with two sets&amp;lt;/code&amp;gt;, testing video playback and recording features. Cases are still missing:&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;
 &amp;lt;testdefinition version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;suite name=&amp;quot;my-multimedia-tests&amp;quot; domain=&amp;quot;Multimedia&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Video playback tests&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;set name=&amp;quot;video-playback-tests&amp;quot; feature=&amp;quot;Video Playback&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;Video playback tests&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;case name=&amp;quot;playback1&amp;quot; type=&amp;quot;Functional&amp;quot; level=&amp;quot;Component&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;step&amp;gt;execute_playback_test&amp;lt;/step&amp;gt;&lt;br /&gt;
            &amp;lt;/case&amp;gt;&lt;br /&gt;
        &amp;lt;/set&amp;gt;&lt;br /&gt;
        &amp;lt;set name=&amp;quot;video-recording-tests&amp;quot; feature=&amp;quot;Video Recording&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;Video playback tests&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;case ...&lt;br /&gt;
        &amp;lt;/set&amp;gt;&lt;br /&gt;
    &amp;lt;/suite&amp;gt;&lt;br /&gt;
 &amp;lt;/testdefinition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And that’s the basic story. Next chapters cover more details about the definition, but you should now have the general understanding of the subject!&lt;br /&gt;
&lt;br /&gt;
== Controlling Environment for Execution ==&lt;br /&gt;
&lt;br /&gt;
=== Setup and Teardown ===&lt;br /&gt;
&lt;br /&gt;
In case you want to do some setup and cleaning before and after the cases are executed, sets may have pre- and post-steps in them:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;set ...&amp;gt;&lt;br /&gt;
    &amp;lt;pre_steps&amp;gt;&lt;br /&gt;
        &amp;lt;step&amp;gt;do_some_setup&amp;lt;/step&amp;gt;&lt;br /&gt;
    &amp;lt;/pre_steps&amp;gt;&lt;br /&gt;
    &amp;lt;case ...&lt;br /&gt;
    &amp;lt;post_steps&amp;gt;&lt;br /&gt;
        &amp;lt;step&amp;gt;clean_up&amp;lt;/step&amp;gt;&lt;br /&gt;
    &amp;lt;/post_steps&amp;gt;&lt;br /&gt;
 &amp;lt;/set&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to ensure that pre-step is executed properly before starting the real testing, you can use expected result also in those:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre_steps&amp;gt;&lt;br /&gt;
    &amp;lt;step expected_result=&amp;quot;1&amp;quot;&amp;gt;do_some_setup_that_may_fail&amp;lt;/step&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
:'''Warning''' When using expected result in this context, the process return value will be waited for, thus you cannot use this with daemon or background processes since they basically never return and cause execution to jam. Another thing to note is that the steps are executed in separate shells, so it is not possible to e.g. set environment variables or change directories in pre-steps as those will be lost.&lt;br /&gt;
&lt;br /&gt;
=== Filtering Based on Hardware Identifier ===&lt;br /&gt;
&lt;br /&gt;
If different tests sets for different hardware are required then hwiddetect feature can be utilised. User can define a command used to get a hardware identifier within hwiddetect tag. The hardware identifier returned by the command is matched with optional hwid attribute of a test set. If not equal, test cases in the set are skipped and are not written to the result file. A test set will never be skipped if hwid attribute has not been defined for it. You can also define multiple hwid values separated by comma for a set.&lt;br /&gt;
&lt;br /&gt;
Command defined by hwiddetect can be a shell command or a separate executable. The executable should be included in the test package. Testrunner-lite removes extra whitespace and linefeeds from the the output of the hwiddetect command so that test developer does not need to care about it.&lt;br /&gt;
&lt;br /&gt;
Example usage of hwiddetect:&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;
 &amp;lt;testdefinition version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;hwiddetect&amp;gt;/usr/bin/getmyhwid&amp;lt;/hwiddetect&amp;gt;&lt;br /&gt;
   &amp;lt;suite name=&amp;quot;suite1&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;set name=&amp;quot;test_feature_X_on_hw_bar&amp;quot; hwid=&amp;quot;bar&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;case name=&amp;quot;test_X_1&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;step&amp;gt;echo &amp;quot;hwid is bar&amp;quot;&amp;lt;/step&amp;gt;&lt;br /&gt;
     &amp;lt;/case&amp;gt;&lt;br /&gt;
     &amp;lt;/set&amp;gt;&lt;br /&gt;
     &amp;lt;set name=&amp;quot;test_feature_X_on_hw_foo&amp;quot; hwid=&amp;quot;foo&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;case name=&amp;quot;test_X_1&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;step&amp;gt;echo &amp;quot;hwid is foo&amp;quot;&amp;lt;/step&amp;gt;&lt;br /&gt;
     &amp;lt;/case&amp;gt;&lt;br /&gt;
     &amp;lt;/set&amp;gt;&lt;br /&gt;
     &amp;lt;set name=&amp;quot;test_feature_X_on_hw_foo_or_bar&amp;quot; hwid=&amp;quot;foo,bar&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;case name=&amp;quot;test_X_1&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;step&amp;gt;echo &amp;quot;hwid is foo or bar&amp;quot;&amp;lt;/step&amp;gt;&lt;br /&gt;
     &amp;lt;/case&amp;gt;&lt;br /&gt;
     &amp;lt;/set&amp;gt;&lt;br /&gt;
   &amp;lt;/suite&amp;gt;&lt;br /&gt;
 &amp;lt;/testdefinition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fetching Additional Files ===&lt;br /&gt;
&lt;br /&gt;
In addition to normal result file, you can also fetch what ever files you need with get-tag:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;set ...&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;get&amp;gt;&lt;br /&gt;
        &amp;lt;file&amp;gt;/tmp/myadditionalresult.1&amp;lt;/file&amp;gt;&lt;br /&gt;
        &amp;lt;file&amp;gt;/tmp/myadditionalresult.2&amp;lt;/file&amp;gt;&lt;br /&gt;
    &amp;lt;/get&amp;gt;&lt;br /&gt;
 &amp;lt;/set&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Manual, Automatic and Semi-automatic Test Cases ==&lt;br /&gt;
&lt;br /&gt;
If not specified by the &amp;quot;manual&amp;quot; attribute all cases are automatic. The value for the attribute is inherited from higher entity (set-&amp;gt;case-&amp;gt;step). By semi-automatic test case we mean a manual case that has some automatic parts; the idea being that only those steps that have to be manual, are. Note that this does not work the other way around, we cannot have automatic test case with manual steps (would be semantically weird thus our tools do not support it).&lt;br /&gt;
&lt;br /&gt;
The example below tries to clarify the above. The &amp;quot;example_set&amp;quot; shows a manual, automatic and semi-automatic case. The example works with testrunner-lite/testrunner-ui, give it a try: [[File:example_definition.xml]]. &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;
 &amp;lt;!--Created with testplanner version 0.1.3 --&amp;gt;&lt;br /&gt;
 &amp;lt;testdefinition version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;suite name=&amp;quot;example_suite&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;set name=&amp;quot;example_set&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;description&amp;gt;Example test set with manual, automatic and semi-automatic case.&amp;lt;/description&amp;gt;&lt;br /&gt;
     &amp;lt;case manual=&amp;quot;true&amp;quot; name=&amp;quot;manual_case&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;description&amp;gt;Manual test case with three steps inside one step tag.&amp;lt;/description&amp;gt;&lt;br /&gt;
       &amp;lt;step&amp;gt;Step 1: execute command ttt on shell.&lt;br /&gt;
             Step 2: write something into edit box.&lt;br /&gt;
             Step 3: press ok button.&lt;br /&gt;
             Expected: Text should be updated into label.&lt;br /&gt;
       &amp;lt;/step&amp;gt;&lt;br /&gt;
     &amp;lt;/case&amp;gt;&lt;br /&gt;
     &amp;lt;case timeout=&amp;quot;96&amp;quot; name=&amp;quot;automatic_case&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;description&amp;gt;Automatic test case that executes some shell commands.&amp;lt;/description&amp;gt;&lt;br /&gt;
       &amp;lt;step&amp;gt;ls /tmp&amp;lt;/step&amp;gt;&lt;br /&gt;
       &amp;lt;step expected_result=&amp;quot;2&amp;quot;&amp;gt;ls /nosuchfile&amp;lt;/step&amp;gt;&lt;br /&gt;
       &amp;lt;step&amp;gt;pwd&amp;lt;/step&amp;gt;&lt;br /&gt;
     &amp;lt;/case&amp;gt;&lt;br /&gt;
     &amp;lt;case manual=&amp;quot;true&amp;quot; name=&amp;quot;semi_automatic_case&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;description&amp;gt;A case with two automatic and two manual steps.&amp;lt;/description&amp;gt;&lt;br /&gt;
       &amp;lt;step manual=&amp;quot;false&amp;quot;&amp;gt;xcalc &amp;amp;amp;&amp;lt;/step&amp;gt;&lt;br /&gt;
       &amp;lt;step&amp;gt;Step: Type in 2 + 2 =. Expected: 4 is displayed &amp;lt;/step&amp;gt;&lt;br /&gt;
       &amp;lt;step&amp;gt;Press x² button. Expected: 16 is displayed.&amp;lt;/step&amp;gt;&lt;br /&gt;
       &amp;lt;step manual=&amp;quot;false&amp;quot;&amp;gt;killall xcalc&amp;lt;/step&amp;gt;&lt;br /&gt;
     &amp;lt;/case&amp;gt;&lt;br /&gt;
   &amp;lt;/set&amp;gt;&lt;br /&gt;
  &amp;lt;/suite&amp;gt;&lt;br /&gt;
 &amp;lt;/testdefinition&amp;gt;&lt;br /&gt;
(A real test developer / tester might come up with nicer examples, any input welcome).&lt;br /&gt;
&lt;br /&gt;
== Test Plan Execution ==&lt;br /&gt;
&lt;br /&gt;
Test definitions are run with test runner (“&amp;lt;code&amp;gt;testrunner-lite&amp;lt;/code&amp;gt;”), which reads the definition and produces a result XML file. We also provide testrunner user interface to support testing - please see [http://wiki.meego.com/Quality/QA-tools/Autotest-guide#Setting_up_test_automation_environment repositories] to install it and [http://www.youtube.com/watch?v=nileVzw52xM demo video]&lt;/div&gt;</summary>
		<author><name>Jokylanp</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools</id>
		<title>Quality/QA-tools</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools"/>
				<updated>2010-08-27T08:45:26Z</updated>
		
		<summary type="html">&lt;p&gt;Jokylanp: /* Team Members */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Quality Assurance (QA) Tools ==&lt;br /&gt;
&lt;br /&gt;
Quality Assurance tools are developed to ensure MeeGo SW quality.&lt;br /&gt;
&lt;br /&gt;
Work in progress includes open sourcing Nokia / Intel quality assurance tools and making open source test tools available for anyone interested in MeeGo software quality. &lt;br /&gt;
&lt;br /&gt;
== QA Tools ==&lt;br /&gt;
&lt;br /&gt;
 Open source tools  – available for all, available for development and contributions. Make people accountable for quality.&lt;br /&gt;
&lt;br /&gt;
QA tools team develops and maintains tools for Quality Assurance. &lt;br /&gt;
 &lt;br /&gt;
Anyone is welcome to contribute and non-member contributions will be treated&lt;br /&gt;
with same process and review as member contributions. &lt;br /&gt;
&lt;br /&gt;
Team communication is in English.&lt;br /&gt;
&lt;br /&gt;
=== Meetings ===&lt;br /&gt;
&lt;br /&gt;
Meetings will be held weekly in &amp;lt;code&amp;gt;#meego-meeting on irc.freenode.net&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Agenda for the next meeting - Tuesday 31th 2010 12:00 UTC ====&lt;br /&gt;
&lt;br /&gt;
  * Short intro for project targets and tools we work with&lt;br /&gt;
  * Status of open bugs / features at [http://bugs.meego.com/buglist.cgi?classification=MeeGo%20Platform&amp;amp;query_format=advanced&amp;amp;bug_status=NEW&amp;amp;bug_status=NEEDINFO&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING%20FOR%20UPSTREAM&amp;amp;bug_status=REOPENED&amp;amp;component=eat&amp;amp;component=min&amp;amp;component=testdefinition&amp;amp;component=testrunner-lite&amp;amp;product=Development%20Tools bugs.meego.com]&lt;br /&gt;
  * Review of released demo videos&lt;br /&gt;
  * Review of contribution guidelines&lt;br /&gt;
&lt;br /&gt;
=== Team Members ===&lt;br /&gt;
&lt;br /&gt;
The current team members are (in no particular order):&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
| Name&lt;br /&gt;
| Role&lt;br /&gt;
| Affiliation&lt;br /&gt;
| IRC nickname&lt;br /&gt;
|- &lt;br /&gt;
| Ville Ilvonen || Team lead (act.) || Nokia || vilvo&lt;br /&gt;
|-&lt;br /&gt;
| Riku Halonen || Team member || Nokia || rikhalon&lt;br /&gt;
|-&lt;br /&gt;
| Kari Sievi || Team member || Digia || -&lt;br /&gt;
|-&lt;br /&gt;
| Timo Härkönen || Team member || Digia || timoph  &lt;br /&gt;
|-&lt;br /&gt;
| Carol Rus || Team member || Digia || -  &lt;br /&gt;
|-&lt;br /&gt;
| Sami Lahtinen || Team member || Digia || slahtinen  &lt;br /&gt;
|-&lt;br /&gt;
| Raimo Gratseff || Team member || Digia || -  &lt;br /&gt;
|-&lt;br /&gt;
| Kyösti Ranto || Team member || Digia || kyranto&lt;br /&gt;
|-&lt;br /&gt;
| Arto Sinnelä || Team member || Digia || asinnela&lt;br /&gt;
|-&lt;br /&gt;
| Joonas Kylänpää || Team member || Digia || Kaadlajk&lt;br /&gt;
|-&lt;br /&gt;
| Sampo Saaristo || Team member || Sofica || -&lt;br /&gt;
|-  &lt;br /&gt;
| Ling Yu || Team member || Intel || -&lt;br /&gt;
|-&lt;br /&gt;
| Jing Wang || Team member || Intel || -&lt;br /&gt;
|-  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Our collaboration spaces are:&lt;br /&gt;
&lt;br /&gt;
* [http://lists.meego.com/listinfo/meego-dev meego-dev@meego.com mailing list], please prefix with 'QA-tools' for team related topics.&lt;br /&gt;
** Please also poke team members or Ville Ilvonen either by email or on IRC because of high traffic @ meego-dev&lt;br /&gt;
* [http://webchat.freenode.net/?channels=meego-qa-tools #meego-qa-tools IRC channel on irc.freenode.net]&lt;br /&gt;
* Gitorious team, http://gitorious.org/qa-tools (to be moved meego.gitorious.org)&lt;br /&gt;
* MeeGo OBS - devel:quality&lt;br /&gt;
* This wiki area&lt;br /&gt;
* [http://wiki.meego.com/Quality/QA-tools/ServiceOS ServiceOS]&lt;br /&gt;
&lt;br /&gt;
[[Category:QA]]&lt;/div&gt;</summary>
		<author><name>Jokylanp</name></author>	</entry>

	</feed>