• 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>u8ba1u5212u5f00u59cbu65e5u671fuff1a2019-08-16uff0cu8ba1u5212u7ed3u675fu65e5u671fuff1a 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: u9a8cu8bc1u4e24u8fb9u666fu7269u4e3au8302u5bc6u6811u6728(u8dddu79bbu9053u8def5u7c73,u524du540eu6811u95f4u9694u4e3a5u7c73x3u7c73,u6811u7684u9ad8u5ea620u7c73)u7684u76f4u7ebfu9053u8defe2eu6d41u7a0bu901au8fc7', '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: u9a8cu8bc1u4e24u8fb9u666fu7269u4e3au8302u5bc6u6811u6728(u8dddu79bbu9053u8def5u7c73,u524du540eu6811u95f4u9694u4e3a5u7c73x3u7c73,u6811u7684u9ad8u5ea620u7c73)u7684u76f4u7ebfu9053u8defe2eu6d41u7a0bu901au8fc7', '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'])
  • 相关阅读:
    线程
    实数四则运算表达式的计算,C++ 实现
    [Compiling Principles] LEX基本功能的实现
    2010年ImagineCup,我们共同走过
    [WPF] Felix 的线程学习笔记(一)——从Win32的消息循环说起
    [WPF] Felix 的线程学习笔记(二)——从WPF入手,实现简单的多线程
    [ASP] asp 中的ajax使用
    银行家算法C++实现
    [ASP.NET] 事件与委托的处理
    小郁闷
  • 原文地址:https://www.cnblogs.com/ting152/p/12580580.html
Copyright © 2020-2023  润新知