前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python实现hive自动化测试

python实现hive自动化测试

作者头像
py3study
发布2020-01-07 18:13:26
7780
发布2020-01-07 18:13:26
举报
文章被收录于专栏:python3python3

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

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

代码语言:javascript
复制
#!/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是这样写的:

代码语言:javascript
复制
<?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>
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档