示例#1
0
class TestMRFC:
    """
    This test cases cover selected functions from the MRFC function group.
    """

    def setup_method(self, test_method):
        self.conn = Connection(**params)
        assert self.conn.alive

    def test_info(self):
        connection_info = self.conn.get_connection_attributes()
        assert connection_info["isoLanguage"] == u"EN"

    def teardown_method(self, test_method):
        self.conn.close()
        assert not self.conn.alive

    """
    @unittest.skip("not remote-enabled")
    def test_ABAP4_CALL_TRANSACTION_VB(self):
        # ABAP4_CALL_TRANSACTION_VB
        pass

    @unittest.skip("not remote-enabled")
    def test_IS_VERIRUN_ACTIVE(self):
        # IS_VERIRUN_ACTIVE Determine Whether a Verification Run is Active
        pass

    @unittest.skip("not supported yet (trfc)")
    def test_RFC_CALL_TRANSACTION_USING(self):
        # RFC_CALL_TRANSACTION_USING Verification Program for Execution of RFCs via CALL TRANSACTION USING
        pass

    # ToDo: Class based exceptions
    def test_RFC_CLASS_BASED_EXCP(self):
        # RFC_CLASS_BASED_EXCP RFC mit klassenbasierten Exceptions
        pass

    # TODO: How to test?
    @unittest.skip("not supported yet")
    def test_RFC_PING_AND_WAIT(self):
       # RFC_PING_AND_WAIT Aufruf und Warten
        pass
    """

    """
示例#2
0
class R3rfcconn(object):
    def __init__(self, r3user, r3pwd, r3ashost, r3sysnr, r3client):
        self.conn = Connection(user=r3user,
                               passwd=r3pwd,
                               ashost=r3ashost,
                               sysnr=r3sysnr,
                               client=r3client)

    def get_connection_attributes(self):
        return self.conn.get_connection_attributes()

    def get_function_description(self, func_name):
        return self.conn.get_function_description(func_name)

    def get_table_data(
            self,
            tablename: str,
            offset: int = 0,
            limit: int = 0,
            options: List = [],
            fields: List = [],
    ):
        read_table_fm = 'RFC_READ_TABLE'
        kwparam = {}
        kwparam['QUERY_TABLE'] = tablename
        kwparam['ROWSKIPS'] = offset
        kwparam['ROWCOUNT'] = limit
        kwparam['OPTIONS'] = options
        kwparam['FIELDS'] = fields
        result = self.conn.call(read_table_fm, **kwparam)
        return result

    def get_rfc_data(self, fm: str, **kwparam: dict):
        result = self.conn.call(fm, **kwparam)
        # return json.dumps(result, cls=JsonCustomEncoder)
        return result

    def get_server_wp_list(self, servername):
        '''
        get workprocess list and info by servername
        :param servername: s4ides1_DM0_00
        :return: 
        '''
        kwparam = {}
        kwparam['SRVNAME'] = servername
        kwparam['WITH_CPU'] = b'00'
        kwparam['WITH_MTX_INFO'] = 0
        kwparam['MAX_ELEMS'] = 0
        return self.get_rfc_data('TH_WPINFO', **kwparam)['WPLIST']

    def get_user_list(self):
        '''
        get SID overall wp info
        :return: 
        '''
        kwparam = {}
        return self.get_rfc_data('TH_USER_LIST', **kwparam)['USRLIST']

    def get_bkjob_status_count(self):
        '''
        tables: TBTCP,TBTCO and TBTCS, views: V_OP
        get per 15s by promethues define scrawl
        The statuses have the following meanings:

            Scheduled: not yet been released to run. P
            Released: released to run. S
            Ready: start date and time have come: awaiting execution.
            Active: currently running. R
            After a system failure, can indicate that a job was interrupted by the failure and must be manually restarted.
            
            Finished: successfully completed. F
            Aborted: not successfully completed. A
            
        :param servername: 
        :return: 
        '''

        job_finish = self.get_table_data(
            'V_OP',
            options=[
                f"STATUS EQ 'F' AND ENDDATE EQ '{date.today()}' AND ENDTIME GT '{(datetime.now()-timedelta(seconds=15)).strftime('%H%M%S')}'"
            ],
            fields=[
                'JOBNAME', 'STRTDATE', 'STRTTIME', 'ENDDATE', 'ENDTIME',
                'PRDMINS', 'PRDHOURS', 'STATUS'
            ])
        job_running = self.get_table_data('V_OP',
                                          options=[f"STATUS EQ 'R'"],
                                          fields=[
                                              'JOBNAME', 'STRTDATE',
                                              'STRTTIME', 'ENDDATE', 'ENDTIME',
                                              'PRDMINS', 'PRDHOURS', 'STATUS'
                                          ])
        job_cancel = self.get_table_data(
            'V_OP',
            options=[
                f"STATUS EQ 'A' AND ENDDATE EQ '{date.today()}' AND ENDTIME GT '{(datetime.now()-timedelta(seconds=15)).strftime('%H%M%S')}'"
            ],
            fields=[
                'JOBNAME', 'STRTDATE', 'STRTTIME', 'ENDDATE', 'ENDTIME',
                'PRDMINS', 'PRDHOURS', 'STATUS'
            ])
        return {
            "finish": len(job_finish['DATA']),
            "running": len(job_running['DATA']),
            "cancel": len(job_cancel['DATA'])
        }

    def get_dump_list(self):
        # date.today() - timedelta(1), DATE_TO = date.today(), TIME_FROM = '000000', TIME_TO = '235959')
        kwparam = {}
        kwparam['DATE_FROM'] = date.today()
        kwparam['TIME_FROM'] = b'000000'
        kwparam['DATE_TO'] = date.today()
        kwparam['TIME_TO'] = b'235959'
        try:
            return self.get_rfc_data('/SDF/GET_DUMP_LOG',
                                     **kwparam)['ET_E2E_LOG']
        except:
            return []

    def get_rfcresource_list(self, servername):
        '''
        need confirm
        :param servername: 
        :return: 
        '''
        kwparam = {}
        return self.get_rfc_data('RFC_SERVER_GROUP_RESOURCES', **kwparam)

    def get_transport_list(self):
        tablename = 'E070'
        return self.get_table_data(tablename)

    def get_st02_data(self):
        kwparam = {}
        st02data = self.get_rfc_data('SAPTUNE_GET_SUMMARY_STATISTIC')
        del st02data['TABLE_QUALITIES']
        del st02data['TABLE_STATISTIC']
        del st02data['TABLE_STATISTIC_64']
        del st02data['CURSOR_CACHE_INFO']
        del st02data['MODE_MEMORY_HISTORY']
        del st02data['INTERNAL_EXTERNAL_MODES_MEMORY']
        del st02data['BUFFER_STATISTIC_64']
        st02data_json = json.dumps(st02data, cls=DecimalEncoder)
        return json.loads(st02data_json)

    def get_st03_data_summary(self):
        kwparam = {}
        kwparam['READ_START_DATE'] = date.today()
        kwparam['READ_END_DATE'] = date.today()
        kwparam['READ_START_TIME'] = (datetime.now() -
                                      timedelta(seconds=60)).strftime('%H%M%S')
        kwparam['READ_END_TIME'] = (datetime.now() -
                                    timedelta(seconds=0)).strftime('%H%M%S')
        st03datadetail = self.get_rfc_data('SAPWL_SNAPSHOT_FROM_REMOTE_SYS',
                                           **kwparam)
        st03datadetail_json = json.dumps(st03datadetail['SUMMARY'],
                                         cls=DecimalEncoder)
        return json.loads(st03datadetail_json)

    def close(self):
        self.conn.close()