Skip to content

Commit

Permalink
[qatl] added method named 'tl.reportTCResult'
Browse files Browse the repository at this point in the history
  • Loading branch information
crypto netzulo committed Mar 20, 2018
1 parent 60a8686 commit eb1c0c8
Show file tree
Hide file tree
Showing 7 changed files with 234 additions and 8 deletions.
6 changes: 6 additions & 0 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,12 @@ Usage ( *XMLRPC* )
* **XMLRPC**: *call to method named* '*tl.getTestCaseIDByName*'
* **Description** : get test case filtered by name

**api_tcase_report**
+++++++++++++++++++++++

* **XMLRPC**: *call to method named* '*tl.reportTCResult*'
* **Description** : reports a result for a single test case

**api_user_exist**
+++++++++++++++++++++++

Expand Down
15 changes: 14 additions & 1 deletion qatestlink/configs/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,20 @@
"about": "Testlink API Version: 1.0 initially written by Asiel Brumfield\n with contributions by TestLink development Team",
"say_hello": "Hello!",
"ping": "Hello!",
"repeat": "hey"
"repeat": "hey",
"tc_report": {
"external_id": "qalab-1",
"tplan_id": 2,
"build_id": 1,
"platform_id": 1,
"status": {
"passed": "p",
"failed": "f",
"no_executed": "n",
"blocked": "b"
},
"message": "Success!"
}
}
}
}
10 changes: 8 additions & 2 deletions qatestlink/core/models/tl_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,15 @@ def _load(self):
name = self.convert_name(res_property['name'])
value = res_property['value']
if name in self._properties_int:
setattr(self, name, int(value['string']))
if value.get('string'):
setattr(self, name, int(value['string']))
else:
setattr(self, name, int(value['int']))
elif name in self._properties_bool:
setattr(self, name, bool(value['string']))
if value.get('string'):
setattr(self, name, bool(value['string']))
else:
setattr(self, name, bool(value['boolean']))
else:
if value.get('string', None):
setattr(self, name, value['string'])
Expand Down
33 changes: 33 additions & 0 deletions qatestlink/core/models/tl_reports.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,3 +104,36 @@ def __repr__(self):
'ReportBase: totals:dict={}'
"""
return "RTPlanTotals: by_tester:dict={}".format(self.totals)


class RTCase(ReportBase):
"""TODO: doc class"""

status = None
operation = None
overwrite = None
message = None

def __init__(self, properties, properties_int=None, properties_bool=None,
load=True):
"""TODO: doc method"""
super(RTCase, self).__init__(
properties,
properties_int=['id'],
properties_bool=['status', 'overwrite']
)

def __repr__(self):
"""Show basic properties for this object
Returns:
str -- format text with values for
'ReportBase: totals:dict={}'
"""
return ("RTCase: id={}, status:bool={}, operation={},"
"overwrite={}, message={}").format(
self.id,
self.status,
self.operation,
self.overwrite,
self.message)
38 changes: 38 additions & 0 deletions qatestlink/core/testlink_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from qatestlink.core.models.tl_models import TProject
from qatestlink.core.models.tl_models import TSuite
from qatestlink.core.models.tl_reports import RTPlanTotals
from qatestlink.core.models.tl_reports import RTCase
from qatestlink.core.utils import settings as settings_func
from qatestlink.core.xmls.xmlrpc_manager import XMLRPCManager

Expand Down Expand Up @@ -427,6 +428,43 @@ def api_tcase_by_name(self, tcase_name, dev_key=None):
'array')['data']['value']['struct']['member']
return TCase(properties)

def api_tcase_report(self, **kwargs):
"""Reports a result for a single test case
Keyword Arguments:
tcase_id {[type]} -- [description] (default: {None})
external_id {[type]} -- [description] (default: {None})
tplan_id {[type]} -- [description] (default: {None})
status {[type]} -- [description] (default: {None})
build_id {[type]} -- [description] (default: {None})
build_name {[type]} -- [description] (default: {None})
notes {[type]} -- [description] (default: {None})
duration {[type]} -- [description] (default: {None})
guess {[type]} -- [description] (default: {None})
bug_id {[type]} -- [description] (default: {None})
platform_id {[type]} -- [description] (default: {None})
platform_name {[type]} -- [description] (default: {None})
custom_fields {[type]} -- [description] (default: {None})
overwrite {[type]} -- [description] (default: {None})
user_name {[type]} -- [description] (default: {None})
timestamp {[type]} -- [description] (default: {None})
dev_key {[type]} -- [description] (default: {None})
Returns:
[type] -- [description]
"""

if not kwargs.get('dev_key'):
kwargs['dev_key'] = self._settings.get('dev_key')
req_data = self._xml_manager.req_tcase_report(**kwargs)
res = self._conn.post(self._xml_manager.headers, req_data)
res_dict = self._xml_manager.parse_response(res)
res_param = res_dict.get(
'methodResponse')['params']['param']['value']
properties = res_param.get(
'array')['data']['value']['struct']['member']
return RTCase(properties)

def api_user_exist(self, user_name, dev_key=None):
"""Call to method named 'tl.doesUserExist' for testlink XMLRPC
Expand Down
113 changes: 113 additions & 0 deletions qatestlink/core/xmls/xmlrpc_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -625,6 +625,119 @@ def req_tcase_by_name(self, dev_key, tcase_name):
self.req_dict, custom_root='methodCall', attr_type=False)
return xml

def req_tcase_report(self, **kwargs):
"""Reports a result for a single test case
Keyword Arguments:
tcase_id {[type]} -- [description] (default: {None})
external_id {[type]} -- [description] (default: {None})
tplan_id {[type]} -- [description] (default: {None})
status {[type]} -- [description] (default: {None})
build_id {[type]} -- [description] (default: {None})
build_name {[type]} -- [description] (default: {None})
notes {[type]} -- [description] (default: {None})
duration {[type]} -- [description] (default: {None})
guess {[type]} -- [description] (default: {None})
bug_id {[type]} -- [description] (default: {None})
platform_id {[type]} -- [description] (default: {None})
platform_name {[type]} -- [description] (default: {None})
custom_fields {[type]} -- [description] (default: {None})
overwrite {[type]} -- [description] (default: {None})
user_name {[type]} -- [description] (default: {None})
timestamp {[type]} -- [description] (default: {None})
dev_key {[type]} -- [description] (default: {None})
Returns:
[type] -- [description]
"""
if kwargs.get("tcase_id") and kwargs.get("external_id"):
raise Exception(
("Can't call XMLRPC without both params,"
"choose one of : [tcase_id, external_id]"))
if not kwargs.get("tcase_id") and not kwargs.get("external_id"):
raise Exception(
("Can't call XMLRPC without any params,"
"choose one of : [tcase_id, external_id]"))
if not kwargs.get("tplan_id"):
raise Exception(
"Can't call XMLRPC without any param 'tplan_id' ]")
if not kwargs.get("status"):
raise Exception(
"Can't call XMLRPC without any param 'status' ]")
if not kwargs.get("build_id"):
raise Exception(
"Can't call XMLRPC without any param 'build_id' ]")
if not kwargs.get("platform_id"):
raise Exception(
"Can't call XMLRPC without any param 'platform_id' ]")
self.req_dict.update({
"methodName": RouteType.TCASE_REPORT_RESULT.value
})
data = {
"params": {
"struct": {
"member": [
{"name": "devKey", "value": kwargs.get("dev_key")}
]
}
}
}
if kwargs.get("tcase_id"):
data['params']['struct']['member'].append(
{"name": "testcaseid", "value": int(kwargs.get("tcase_id"))})
if kwargs.get("external_id"):
data['params']['struct']['member'].append(
{"name": "testcaseexternalid", "value": str(
kwargs.get("external_id"))})
if kwargs.get("tplan_id"):
data['params']['struct']['member'].append(
{"name": "testplanid", "value": str(kwargs.get("tplan_id"))})
if kwargs.get("status"):
data['params']['struct']['member'].append(
{"name": "status", "value": str(kwargs.get("status"))})
if kwargs.get("build_id"):
data['params']['struct']['member'].append(
{"name": "buildid", "value": int(kwargs.get("build_id"))})
if kwargs.get("build_name"):
data['params']['struct']['member'].append(
{"name": "buildname", "value": str(kwargs.get("build_name"))})
if kwargs.get("notes"):
data['params']['struct']['member'].append(
{"name": "notes", "value": str(kwargs.get("notes"))})
if kwargs.get("duration"):
data['params']['struct']['member'].append(
{"name": "execduration", "value": int(kwargs.get("duration"))})
if kwargs.get("guess"):
data['params']['struct']['member'].append(
{"name": "guess", "value": int(kwargs.get("guess"))})
if kwargs.get("bug_id"):
data['params']['struct']['member'].append(
{"name": "bugid", "value": int(kwargs.get("bug_id"))})
if kwargs.get("platform_id"):
data['params']['struct']['member'].append(
{"name": "platformid", "value": int(kwargs.get("platform_id"))})
if kwargs.get("platform_name"):
data['params']['struct']['member'].append(
{"name": "platformname", "value": str(kwargs.get("platform_name"))})
if kwargs.get("custom_fields"):
# noqa : param real name 'customfields'
# noqa : array of member>(name+value>type)
raise NotImplementedError("Open an issue at Github")
if kwargs.get("overwrite"):
data['params']['struct']['member'].append(
{"name": "overwrite", "value": bool(
kwargs.get("overwrite"))})
if kwargs.get("user_name"):
data['params']['struct']['member'].append(
{"name": "user", "value": str(kwargs.get("user_name"))})
if kwargs.get("timestamp"):
data['params']['struct']['member'].append(
{"name": "timestamp", "value": str(kwargs.get("timestamp"))})
self.req_dict.update(data)
xml = dicttoxml(
self.req_dict, custom_root='methodCall', attr_type=False)
return xml

def req_user_exist(self, dev_key, user_name):
"""String xml object ready to use on API call
Expand Down
27 changes: 22 additions & 5 deletions tests/unitaries/suite_002_methods.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
from qatestlink.core.models.tl_models import TProject
from qatestlink.core.models.tl_models import TSuite
from qatestlink.core.models.tl_reports import RTPlanTotals
from qatestlink.core.models.tl_reports import RTCase
from qatestlink.core.testlink_manager import TLManager
from qatestlink.core.utils import settings

Expand Down Expand Up @@ -203,35 +204,51 @@ def test_016_method_tcase_byname(self):
tcase.name, DATA['tcase_name'])

@skipIf(SKIP, SKIP_MESSAGE)
def test_017_method_user_exist(self):
def test_017_method_tcase_report(self):
"""TODO: doc method"""
report = self.testlink_manager.api_tcase_report(
external_id=DATA['tc_report']['external_id'],
tplan_id=DATA['tc_report']['tplan_id'],
build_id=DATA['tc_report']['build_id'],
platform_id=DATA['tc_report']['platform_id'],
status=DATA['tc_report']['status']['blocked']
)
self.assertIsInstance(report, RTCase)
self.assertTrue(report.status)
self.assertEquals(
report.message, DATA['tc_report']['message'])


@skipIf(SKIP, SKIP_MESSAGE)
def test_018_method_user_exist(self):
"""TODO: doc method"""
is_user = self.testlink_manager.api_user_exist(
DATA['user_name'])
self.assertTrue(is_user)

@skipIf(SKIP, SKIP_MESSAGE)
def test_018_method_about(self):
def test_019_method_about(self):
"""TODO: doc method"""
about = self.testlink_manager.api_about()
self.assertIsInstance(about, str)
self.assertEquals(about, DATA['about'])

@skipIf(SKIP, SKIP_MESSAGE)
def test_019_method_say_hello(self):
def test_020_method_say_hello(self):
"""TODO: doc method"""
say_hello = self.testlink_manager.api_say_hello()
self.assertIsInstance(say_hello, str)
self.assertEquals(say_hello, DATA['say_hello'])

@skipIf(SKIP, SKIP_MESSAGE)
def test_020_method_ping(self):
def test_021_method_ping(self):
"""TODO: doc method"""
ping = self.testlink_manager.api_ping()
self.assertIsInstance(ping, str)
self.assertEquals(ping, DATA['ping'])

@skipIf(SKIP, SKIP_MESSAGE)
def test_021_method_repeat(self):
def test_022_method_repeat(self):
"""TODO: doc method"""
repeat = self.testlink_manager.api_repeat(DATA['repeat'])
self.assertIsInstance(repeat, str)
Expand Down

0 comments on commit eb1c0c8

Please sign in to comment.