千家信息网

shell实现hive自动化测试

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本程序主要实现hive权限测试。系统中有管理员用户single和测试用户test。在路径/home/test/下,将用例的预置条件写在input文件夹内,每个用例对应一个input文件,命名为x-y~
千家信息网最后更新 2026年11月02日shell实现hive自动化测试

本程序主要实现hive权限测试。系统中有管理员用户single和测试用户test。在路径/home/test/下,将用例的预置条件写在input文件夹内,每个用例对应一个input文件,命名为x-y~z.q(其中xyz都是数字);将用例需要执行的语句放在case文件夹内,命名为case_x.q;将预期结果写入expect文件夹,命名为expect_x;执行结果输出到output文件夹中,命名为x-y~z.q

执行过程:kinit single用户,beeline -u -f登录并执行input文件中对test用户对应角色回收和赋予权限的语句;kinit test用户,beeline -u -f去执行case文件夹中的测试语句并保存执行结果到output文件夹中;根据expect中是否有文件及该测试为正向或逆向测试,和output内容作比较,得出该测试pass还是fail的结果,统计测试结果。

该程序能够实现hive的权限自动化测试,但每个用例对应一个input文件、一个case文件、一个expect文件、一个output文件,太过繁杂,不好用。下一篇出python优化版本。


#!/bin/bash#by cvv54        #rename existed log.txt#    if [ -f "/home/test/log/log.txt" ] ;then #        mv /home/test/log/log.txt /home/test/log/`date "+%Y-%m-%d~%H-%M-%S"`#    fi    #To create log file    date>>/home/test/log/`date "+%Y-%m-%d~%H-%M-%S"`    log=`ls /home/test/log/ -rt |tail -1`        pass=0;    fail=0;    block=0;    #To traversal files in input folderfor i in /home/test/input/*.q do    #To login system with user single to grant proper privileges to user test    #$i here is name of input file,it looks like this: /path/to/file/x-y~z.q    #(x:case number;y:item number;z:can be 1 or 2,means Positive testing or Negative Testing;end with .q:sql file)    kdestroy     kinit -kt /etc/security/keytabs/single.keytab single    beeline -u "jdbc:hive2://gateway.xxx.xxx:10000/;principal=single" -f $i &>>/home/test/log/$log#${var%%-*}#该命令的作用是去掉变量var从右边算起的最后一个'-'字符及其右边的内容,返回从右边算起的最后一个'/'(不含该字符)的左边的内容。#${var##*/}#该命令的作用是去掉变量var从左边算起的最后一个'/'字符及其左边的内容,返回从左边算起的最后一个'/'(不含该字符)的右边的内容。    #To drop path,only filename left    j=${i##*/}    #only for debug    echo "j=$j"        #To get last number in filename to distinguish  Positive testing from Negative Testing    k=${i##*~}    #only for debug    echo "k=$k"    #get case number    m=${j%%-*}    #only for debug    echo "m=$m"        #To login system with user test to execute query statement    #filename in folder case looks like this: case_x.q(x is varable)    #filename in folder output will be named like output_x-y~z.q(it is not a sql file...)    kdestroy    kinit -kt /etc/security/keytabs/test.keytab test    beeline -u "jdbc:hive2://gateway.xxx.xxx:10000/;principal=single" -f /home/test/case/case_$m.q  &>>/home/test/output/output_$j         #To check results    #filename in folder expect looks like this: expect_x(x is varable)    if [ $k = "1.q" ];then        if [ -f "/home/test/expect/expect_$m" ];then            eval $(/bin/grep ok /home/test/expect/expect_$m)            eval $(/bin/grep nok /home/test/expect/expect_$m)            if [ -n "`grep -w $ok /home/test/output/output_$j`"];then                echo "$i pass">>/home/test/log/result.txt                ((pass++))            elif [ -n "`grep -w $nok /home/test/output/output_$j`"];then                echo "$i failed">>/home/test/log/result.txt                ((fail++))            else                 echo "$i block">>/home/test/log/result.txt                ((block++))            fi        elif [ -n "`grep -w "seconds" /home/test/output/output_$j`" ];then            echo "$i pass">>/home/test/log/result.txt            ((pass++))        elif [ -n "`grep -w "FAILED: SemanticException No valid privileges" /home/test/output/output_$j`" ];then            echo "$i failed">>/home/test/log/result.txt            ((fail++))        else            echo "$i block">>/home/test/log/result.txt            ((block++))        fi    else         if [ -f "/home/test/expect/expect_$m" ];then            eval $(/bin/grep ok /home/test/expect/expect_$m)            eval $(/bin/grep nok /home/test/expect/expect_$m)            if [ -n "`grep -w $nok /home/test/output/output_$j`" ];then                echo "$i pass">>/home/test/log/result.txt                ((pass++))            elif [ -n "`grep -w $ok /home/test/output/output_$j`" ];then                echo "$i failed">>/home/test/log/result.txt                ((fail++))            else                 echo "$i block">>/home/test/log/result.txt                ((block++))            fi        elif [ -n "`grep -w "seconds" /home/test/output/output_$j`" ];then            echo "$i failed">>/home/test/log/result.txt            ((fail++))        elif [ -n "`grep -w "FAILED: SemanticException No valid privileges" /home/test/output/output_$j`" ];then            echo "$i pass">>/home/test/log/result.txt            ((pass++))                else            echo "$i block">>/home/test/log/result.txt            ((block++))        fi    fi    doneecho `date` >>/home/test/log/result.txtecho "$pass passed" >>/home/test/log/result.txtecho "$fail failed">>/home/test/log/result.txtecho "$block blocked">>/home/test/log/result.txt#rename log.txt with current timecat /home/test/log/result.txt >> /home/test/log/$logrm -f /home/test/log/result.txt
文件 测试 文件夹 内容 用户 结果 右边 字符 权限 语句 作用 变量 命令 程序 自动化 繁杂 不好 数字 条件 版本 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技产业 美国互联网保险保险科技 涨乐互联网科技 互联网科技有限公司图片 重庆互联网络科技 互联网科技网站 科技互联网创业计划书 银川新华互联网科技学校地址 互联网汽车科技小镇 昊天互联网科技有限公司 哈尔滨屹滨互联网科技有限公司 坤平互联网科技 互联网保险科技创业 河南住房之家互联网科技 滨湖区互联网智能科技产品有哪些 伍佰万互联网科技怎么赚钱 半导体行业属于互联网高科技类吗 宁波跨境商互联网科技有限公司 互联网时代科技型公司的机会 互联网领先科技成果宣传视频 云电互联网科技 猫创互联网科技 农村开互联网科技讲堂 顶级互联网科技成果有哪些 科技赋能视角下互联网保险发展 西安左小互联网科技有限公司 张家口科技产业互联网平台 银川新华互联网科技学校原画 安徽九吞吴互联网科技有限公司 科技美学互联网 艺术
0