python实现hive自动化测试

本程序主要实现hive权限测试。系统中有管理员用户single和测试用户test。在路径/home/test/下,将用例和预期结果写在xml文件中。

        执 行过程:kinit single用户,beeline -u -e登录并执行对test用户对应角色回收和赋予权限的语句;kinit test用户,beeline -u -e去执行测试语句并保存执行结果到tmp文件中;在tmp文件中查找预期关键字,得出该测试pass还是fail的结果,统计测试结果。

#!/usr/bin/python  #coding:utf-8  #by cvv54    import sys  import os  import re    try:      import xml.etree.cElementTree as ET  except ImportError:      import xml.etree.ElementTree as ET    try:      tree = ET.parse("/home/test/case/usecase.xml")      #root = ET.fromstring(country_string)      root = tree.getroot()  except Exception,e:      print "Error:cannot parse file:usecase.xml."      sys.exit(1)  print root.tag,"---",root.attrib  for child in root:      print child.tag,"---",child.attrib    passed=0  failed=0        for case in root.findall('case'):      pre = case.find('pre').text      perform = case.find('perform').text      expect = case.find('expect').text.strip('n')      id = case.get("id")        print "key words are :"          print expect        for each in pre.split(';'):  #        print each          if not each.strip()=='':              command = each.strip('n')              os.environ['command']=str(command)              print command                        os.system("kdestroy")              os.system("kinit -kt /etc/security/keytabs/single.keytab single")              os.system('beeline -u "jdbc:hive2://gateway.xxx.xxx:10000/;principal=single" -e "$command;" &>>log')        for each in perform.split(';'):  #        print each          if not each.strip()=='':              command = each.strip('n')              os.environ['command']=str(command)              print command                        os.system("kdestroy")              os.system("kinit -kt /etc/security/keytabs/test.keytab test")              os.system('beeline -u "jdbc:hive2://gateway.xxx.xxx:10000/;principal=single" -e "$command;" &>tmp')           f=open('tmp')      flag=0      for line in f:  #        print "line is :"  #        print line          match=re.findall(expect,line)          if match != []:              passed+=1              flag=1                if flag == 0:          failed+=1                      print(id)            os.system("cat tmp>>log")      os.system("rm -f tmp")    print "passed:"  print passed  print "failed:"  print failed    os.system('mv log `date "+%Y-%m-%d~%H-%M-%S"`')

我的xml是这样写的:

<?xml version="1.0" encoding="utf-8"?>    <test>        <case id="001" name="SHOW TABLES">    <pre>    REVOKE ALL ON SERVER server1 FROM ROLE test_role; GRANT ALL ON URI TO ROLE test_role;    </pre>    <perform>    SHOW TABLES;    </perform>    <expect>    tab_name    </expect>    </case>        <case id="002" name="SHOW TABLES">    <pre>    REVOKE ALL ON SERVER server1 FROM ROLE test_role;     </pre>    <perform>    SHOW TABLES;    </perform>    <expect>    FAILED: SemanticException No valid privileges    </expect>    </case>        <case id="003" name="SHOW CREATE TABLE" privilege="SELECT">    <pre>    CREATE TABLE IF NOT EXISTS test_table1  (id INT,name STRING,salary FLOAT,street STRING,city STRING,state STRING,zip INT) PARTITIONED BY (address STRING) row format delimited fields terminated by ' ';    REVOKE ALL ON SERVER server1 FROM ROLE test_role;GRANT SELECT ON TABLE test_table1 TO ROLE test_role;    </pre>    <perform>    SHOW CREATE TABLE test_table1;    </perform>    <expect>    createtab_stmt     </expect>    </case>        <case id="004" name="SHOW CREATE TABLE" privilege="INSERT">    <pre>    REVOKE ALL ON SERVER server1 FROM ROLE test_role;GRANT INSERT ON TABLE test_table1 TO ROLE test_role;    </pre>    <perform>    SHOW CREATE TABLE test_table1;    </perform>    <expect>    createtab_stmt     </expect>    </case>        <case id="005" name="SHOW CREATE TABLE" >    <pre>    REVOKE ALL ON SERVER server1 FROM ROLE test_role;    </pre>    <perform>    SHOW CREATE TABLE test_table1;    </perform>    <expect>    FAILED: SemanticException No valid privileges    </expect>    </case>        </test>