本程序主要实现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>
转载于:https://blog.51cto.com/2723554/1786974