python实现hive自动化测试

发布时间:2019-09-08 09:13:06编辑:auto阅读(1452)

    本程序主要实现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>


关键字

上一篇: python之sys模块

下一篇: Python fromkeys()的'b