本程序主要实现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>
时间: 2024-10-19 09:09:48