2017-06-08 61 views
0

我想檢查表名是否存在於數據庫中,它引發了我的架構不存在。我嘗試從表中獲取值,它是以下是我正在嘗試的代碼。如何使用Robot Framework檢查數據庫中是否存在表

***Settings*** 
    Library DatabaseLibrary 
    Library Collections 

    ***Testcases*** 
    Connect to Vertica and Check if table exist 
     Connect To Database Using Custom Params  vertica_python database='pmdb',user='dbadmin', password='warehouse', host='10.166.12.242', port=5433 
     Table Must Exist  DCA_ITOC_RESOURCE_D 
     #${tableName} Query select table_name from tables where table_schema='OBR' AND table_name='DCA_ITOC_RESOURCE_D' 
     #List Should Contain Value ${tableName} DCA_ITOC_RESOURCE_D 

測試結果

[email protected]:/var/robot-tests# pybot database-tests.robot 
============================================================================== 
Database-Tests                 
============================================================================== 
Connect to Vertica and Check if table exist       | FAIL | 
MissingSchema: Severity: ERROR, Message: Schema "information_schema" does not exist, Sqlstate: 3F000, Routine: RangeVarGetObjid, File: /scratch_a/release/svrtar1291/vbuild/vertica/Catalog/Namespace.cpp, Line: 288, SQL: u"SELECT * FROM information_schema.tables WHERE table_name='DCA_ITOC_RESOURCE_D'" 
------------------------------------------------------------------------------ 
Database-Tests              | FAIL | 
1 critical test, 0 passed, 1 failed 
1 test total, 0 passed, 1 failed 
============================================================================== 
Output: /var/robot-tests/output.xml 
Log:  /var/robot-tests/log.html 
Report: /var/robot-tests/report.html 

回答

0

這databaselibrary模塊中添加Vertica的查詢在assertion.py後爲我工作

def table_must_exist(self, tableName, sansTran=False): 
     """ 
     Check if the table given exists in the database. Set optional input `sansTran` to True to run command without an 
     explicit transaction commit or rollback. 

     For example, given we have a table `person` in a database 

     When you do the following: 
     | Table Must Exist | person | 

     Then you will get the following: 
     | Table Must Exist | person | # PASS | 
     | Table Must Exist | first_name | # FAIL | 

     Using optional `sansTran` to run command without an explicit transaction commit or rollback: 
     | Table Must Exist | person | True | 
     """ 
     logger.info('Executing : Table Must Exist | %s ' % tableName) 
     if self.db_api_module_name in ["cx_Oracle"]: 
      selectStatement = ("SELECT * FROM all_objects WHERE object_type IN ('TABLE','VIEW') AND owner = SYS_CONTEXT('USERENV', 'SESSION_USER') AND object_name = UPPER('%s')" % tableName) 
     elif self.db_api_module_name in ["sqlite3"]: 
      selectStatement = ("SELECT name FROM sqlite_master WHERE type='table' AND name='%s' COLLATE NOCASE" % tableName) 
     elif self.db_api_module_name in ["ibm_db", "ibm_db_dbi"]: 
      selectStatement = ("SELECT name FROM SYSIBM.SYSTABLES WHERE type='T' AND name=UPPER('%s')" % tableName) 
     else: 
      selectStatement = ("SELECT * FROM v_catalog.columns WHERE table_schema='OBR' AND table_name='%s'" % tableName) 
     #else: 
     # selectStatement = ("SELECT * FROM information_schema.tables WHERE table_name='%s'" % tableName) 
     num_rows = self.row_count(selectStatement, sansTran) 
     if num_rows == 0: 
      raise AssertionError("Table '%s' does not exist in the db" % tableName) 
相關問題