python ——testlink

#!/usr/bin/env python
# encoding: utf-8
'''
TestLink API Examples

Created on Aug 13, 2019
@change: Aug 13, 2019 Hongping Wang: initialization
'''
import logging

# # pip install TestLink-API-Python-client
import testlink

class MyError(Exception):
'''
Generic exception to raise and log different fatal errors.
'''

def __init__(self, msg):
super(MyError).__init__(type(self))
self.msg = msg

def __str__(self):
return self.msg

class TestLinkOp(object):
'''
Operate Testlink by TestLink-API-Python-client
'''

def __init__(self, server_ul, dev_key, project_name='roadDB'):
'''
'''
self._server_url = server_ul
self._dev_key = dev_key
self.tl = testlink.TestlinkAPIClient(tl_url, tl_dev_key)

self._project_name = project_name
self._tl_project_info = self.get_project_info_by_name(self._project_name)
self._plan_id = None
self._project_id = self._tl_project_info['id']
self._project_prefix = self._tl_project_info['prefix']

def get_project_info_by_name(self, name):
'''
@summary: get project information by project name
'''
for project_item in self.tl.getProjects():
if project_item['name'] == name:
return project_item

return {}

def set_plan_id(self, plan_id):
'''
@summary: set plan id
'''
self._plan_id = plan_id

def _get_plan_id(self):
'''
@summary: if not set plan id, raise exception
'''
if not self._plan_id:
raise MyError('not set plan id')
return self._plan_id

def reset_project_name(self, name):
'''
@summary: reset project name
'''
self._project_name = name
self._project_id = self.tl.getProjectIDByName(self._project_name)

def create_test_plan(self, plan_name, note='CI creation', active=1, public=1):
'''
@summary: create test plan
'''
try:
return self.tl.createTestPlan(plan_name, self._project_name, note=note, active=active, public=public)
except testlink.testlinkerrors.TLResponseError as e:
if e.code == 3034:
logging.warn('%s', e.message)
else:
logging.exception('%s: %s', e.code, e.message)

return {}

def get_test_plan(self, plan_name):
'''
@summary: return like {'name': 'RDB-4.0.4.X', 'notes': u'<p>\u8ba1\u5212\u5f00\u59cb\u65e5\u671f\uff1a2019-08-16\uff0c\u8ba1\u5212\u7ed3\u675f\u65e5\u671f\uff1a 2019-08-26</p>', 'active': '1', 'is_public': '1', 'testproject_id': '262', 'id': '328'}
'''
projects = self.tl.getProjects()
for item in projects:
if item['name'] == self._project_name:
plans = self.tl.getProjectTestPlans(item['id'])
for sub_item in plans:
if sub_item['name'] == plan_name:
return sub_item

return {}

def create_test_build(self, name, buildnotes='CI creation', active=1, public_build=1):
'''
@summary: create test build
'''
return self.tl.createBuild(testplanid=self._get_plan_id(), buildname=name, buildnotes=buildnotes, active=active, open=public_build)

def get_build_by_name(self, name):
'''
@summary: get build information by build name
'''
all_build = self.tl.getBuildsForTestPlan(self._get_plan_id())
for item in all_build:
if item['name'] == name:
return item

return {}

def add_test_case_to_plan(self, case_id, testplanid, version=None):
'''
@summary: add test case to test plan
'''
testcaseexternalid = '{0}-{1}'.format(self._project_prefix, case_id)
if not version:
version = int(self.tl.getTestCase(None, testcaseexternalid=testcaseexternalid)[0]['version'])
return self.tl.addTestCaseToTestPlan(testcaseexternalid=testcaseexternalid,
testprojectid=self._project_id, testplanid=testplanid, version=version)

def get_testcase_by_name(self, name):
'''
@summary: get test case by name
'''
return self.tl.getTestCaseIDByName(name)

def get_my_tests(self, platform_id=None):
'''
@summary: return like {'300': {'5': {'tcase_id': '300', 'status': '1', 'exec_id': '0', 'tcversion_id': '301', 'exec_on_tplan': '', 'platform_id': '5', 'exec_on_build': '', 'execution_duration': '', 'tc_id': '300', 'tcversion_number': '', 'execution_type': '2', 'tcase_name': u'vtd: \u9a8c\u8bc1\u4e24\u8fb9\u666f\u7269\u4e3a\u8302\u5bc6\u6811\u6728(\u8ddd\u79bb\u9053\u8def5\u7c73,\u524d\u540e\u6811\u95f4\u9694\u4e3a5\u7c73x3\u7c73,\u6811\u7684\u9ad8\u5ea620\u7c73)\u7684\u76f4\u7ebf\u9053\u8defe2e\u6d41\u7a0b\u901a\u8fc7', 'version': '1', 'feature_id': '261', 'full_external_id': 'rdb-st-1', 'external_id': '1', 'platform_name': 'DC Ubuntu 16.04', 'execution_order': '0', 'exec_status': 'n'}}}
'''
testcases = {}
all_testcase = self.tl.getTestCasesForTestPlan(self._get_plan_id())
if platform_id:
for item in all_testcase:
testcases[all_testcase[item][platform_id]['tcase_name']] = item
else:
for item in all_testcase:
pid = all_testcase[item].keys()[0] # get first item key as platform id
testcases[all_testcase[item][pid]['tcase_name']] = item
return testcases

def get_my_testcase_id(self):
'''
@summary: return like {'300': {'5': {'tcase_id': '300', 'status': '1', 'exec_id': '0', 'tcversion_id': '301', 'exec_on_tplan': '', 'platform_id': '5', 'exec_on_build': '', 'execution_duration': '', 'tc_id': '300', 'tcversion_number': '', 'execution_type': '2', 'tcase_name': u'vtd: \u9a8c\u8bc1\u4e24\u8fb9\u666f\u7269\u4e3a\u8302\u5bc6\u6811\u6728(\u8ddd\u79bb\u9053\u8def5\u7c73,\u524d\u540e\u6811\u95f4\u9694\u4e3a5\u7c73x3\u7c73,\u6811\u7684\u9ad8\u5ea620\u7c73)\u7684\u76f4\u7ebf\u9053\u8defe2e\u6d41\u7a0b\u901a\u8fc7', 'version': '1', 'feature_id': '261', 'full_external_id': 'rdb-st-1', 'external_id': '1', 'platform_name': 'DC Ubuntu 16.04', 'execution_order': '0', 'exec_status': 'n'}}}
'''
testcase_ids = []
for item in self.tl.getTestCasesForTestPlan(self._get_plan_id()):
testcase_ids.append(item)

return testcase_ids

def set_testcase_status(self, testcase_id, test_result, build_name, platformname='DC Ubuntu 16.04', notes=''):
'''
@summary: set test case execution status
'''
tresult = ['p', 'f', 'b', 'n']
if test_result not in tresult:
logging.error('%s not in %s, testcase_id=%s', test_result, tresult, testcase_id)
return

return self.tl.reportTCResult(testcase_id, self._get_plan_id(), build_name, test_result, notes, platformname=platformname)

if __name__ == '__main__':
# set log format
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s %(funcName)s %(levelname)s [line:%(lineno)d] %(message)s',
)

tl_url = ''
tl_dev_key = ''

a = TestLinkOp(tl_url, tl_dev_key)

# # print(a.create_test_plan('RDB-4.0.5.X'))
#
# plan = a.get_test_plan('RDB-4.0.5.X')
# a.set_plan_id(plan['id'])

猜你喜欢

转载自www.cnblogs.com/ting152/p/12580580.html