美文网首页
Jmeter使用Python语言读取表格

Jmeter使用Python语言读取表格

作者: Kingtester | 来源:发表于2020-05-20 18:24 被阅读0次

最近有一个需要做一个自动化,其中就需要读取表格的数据,亲们都知道Jmeter读取表格最常见的方式是使用CSV
文件,但是,CSV的使用范畴有限,必须数据规整,假如表格有合并的,CSV文件就会出现这样的情况:
如图所示:
我们的表格是这样的:


image.png

我们把他另存为csv格式:


image.png
而且,重点来了,对于多个sheet的表格搞不来csv,还需要把表格分割出来,fuck!
只能说Jmeter的CSV组件还有很大的进步空间啊,那我们怎么办呢???
image.png
这个时候我们就需要使用bearshell来处理表格了
BUT

语言功底很差,怎么办?
来,我教你!
目前处理表格最简单的应该是python了!上一篇我们讲了Jmter导包,我们可以导入xlrd。
下边是我编写的一哥处理表格的python,很简单,注释的也很详细。



#               修改这里勘察表文件名称
path = u'02 勘察表_AC202019018040_临沂市鑫鑫机动车检测有限公司_王超_20201108_李刚_曾怀志.xlsx'       

                                 #   1,下载勘察需求表到本机的D:\zenghz_zhuanyong\excell\路径下,
                                 #   2,请在这里输入勘察表的全称,包含后缀,
                                 #   3,需要在引号内
          

###########   !!! 验证码识别错误导致失败请重新执行!!!            ##########






















































############导包,打开文件###########别动##############################
import sys
sys.path.append('C:\Python27\Lib')
sys.path.append('C:\Python27\Lib\site-packages')
reload(sys)
sys.setdefaultencoding('utf-8')
import xlrd







if u'曾怀志' in path:
    createname = u'曾怀志' 
if u'骆文豪' in path:
    createname = u'骆文豪' 
if u'万安' in path:
    createname = u'万安' 
if u'刘宇浩' in path:
    createname = u'刘宇浩'
if u'黄鹏杰' in path:
    createname = u'黄鹏杰' 




























uname = u'曾怀志'                
pwd = u'88888888'      

vars.put('uname',uname)
vars.put('pwd',pwd)
vars.put('createname',createname)
vars.put('path',path)



# 打开Excel文件读取数据



workbook = xlrd.open_workbook('D:\\zenghz_zhuanyong\\excell\\' + path)

###############################################获取第一页的检测站基本信息####################################################################
# 根据sheet索引或者名称获取sheet内容
#Data_sheet_0 = workbook.sheet_by_index(0); 
#Data_sheet_0 = workbook.sheet_by_name('检测站基本信息')
#Data_sheet_0 =workbook.sheets()[0];
Data_sheet_0 = workbook.sheets()[0];
#检测站名称
jczmc=Data_sheet_0.cell(0, 2)
vars.put('jczmc_python',jczmc.value)
#检测站地址
jczdz=Data_sheet_0.cell(1, 2)
vars.put('jczdz_python',u'勘察表地址不详')
if jczdz.value != u'':  
    vars.put('jczdz_python',jczdz.value)
#电话
vars.put('jczdh_python',u'18888888888')
jczdh=Data_sheet_0.cell(2, 2)
###这里拿到的结果会自动变为浮点数,尾部加了.0   所以要转化成int类型,但是固定电话中带-,不能转化,所以要判断。
#if jczdh.value.find('-') != -1 or jczdh.value is NULL:  #如果是固定电话
#    vars.put('jczdh_python',jczdh.value)
if jczdh.value !='':  #如果不是固定电话,转换成int类型
    if  '-' not in  str(jczdh.value):
        vars.put('jczdh_python',str(int(jczdh.value)))  
    if  '-'  in  str(jczdh.value) : 
        vars.put('jczdh_python',jczdh.value)         

#车牌前缀
cpqz=Data_sheet_0.cell(3, 2)
vars.put('cpqz_python',cpqz.value)
#检测站类别,这里经常会有‘安检,综检,环检’这样的,我们需要显示为‘综安环’
jczlb=Data_sheet_0.cell(4, 2)
vars.put('jczlb_python',jczlb.value.replace("、","").replace(",","").replace(" ","").replace("/","").replace(",","").replace("检",""))
#授权签字人
sqqzr=Data_sheet_0.cell(5, 2)
vars.put('sqqzr_python',sqqzr.value)
#省
sheng=Data_sheet_0.cell(6, 2)
if u'广西' in sheng.value:
    sheng.value = u'广西壮族自治区'
    print(sheng.value)
if u'内蒙' in sheng.value:
    sheng.value = u'内蒙古自治区'
if u'宁夏' in sheng.value:
    sheng.value = u'宁夏回族自治区'
if u'新疆' in sheng.value:
    sheng.value = u'新疆维吾尔自治区'
if u'西藏' in sheng.value:
    sheng.value = u'西藏自治区'
vars.put('sheng',sheng.value)
#市
shi=Data_sheet_0.cell(7, 2)
vars.put('shi',shi.value)




table = workbook.sheet_by_index(1)
name = table.name
#这个sheet的总行数
rowNum = table.nrows
print(rowNum)
print('*********************************')
#这个sheet的总列数
colNum = table.ncols
#table.row_values(第几行)           #可以获取整行的数据
#table.row_values(第几行)[第几列]   #可以获取具体的那一列的数据
#print("这个表总共有%s行"%rowNum,"%s列"%colNum)
#读取每一行的数据并进行处理
lines=[]
xiangmus=[]
for i in range(0,rowNum):           #遍历每一行
    if table.row_values(i)[4] !='' and table.row_values(i)[4] !=u'检测项目' :          #对列4判断   # u就可以转义中文
        
        xiangmus.append(table.row_values(i)[4])       #将第5列的值插入到这个数组中,其实就是检测项目的数组
        
        lines.append(table.row_values(i)[1])         #将第2列的值插入到这个数组中,其实就是线名称的数组
    

line=[]                                #这个数组里面是不重复的检测线
lx=len(lines)                          #项目的数量
print(lx)
for i in lines:                        #去重
    if  i not in line:
        line.append(i)      
line_xs=str(len(line))
#print(type(line_xs))                         ###这个站检测线的数量 
vars.put('line_xs_python',line_xs)
#vars.put('line_python',line_xs)
#print(u"这个站有%s"%line)
#将有几条线传给Jmeter

#list.count(A)   可以统计出A数据在数组line出现的次数


line_list=[]                           #检测线的数组
gongweiNum=[]                          #检测线对应的工位数
HH = 1  
for i in line:
#   print(u"%s有%s个工位"%(i,lines.count(i)))
    print(i)
    print(type(i))
    a=str(lines.count(i))              #int类型转换为str,这里的a就是指检测项目同一个检测线出现了几次,出现了几次就代表这个线有几个工位
#   print(type(a))
#   vars.put('gongweiNum_python' + str(i+1),a)              #必须要把按转换为str,int类型会报错               发现这种赋值不行,只能取到最后一次i对应的值,

                                       #检测线下有几个工位
    line_list.append(i)
    gongweiNum.append(a)               #[2,3,5]
G = 1                                           #定义一个变量G,G表示第几条线
for i in gongweiNum:
    print(i)
    print(type(i))
    vars.put('gongweiNum_python_' + str(G),i)   #@@#这里每条线下有几个工位的值传给Jmeter
    G = G + 1
#pringt(type(line_list))

#   print(type(a))                     #检查类型
#vars.put('linemc_python',line_list)        


#现在使用的方式是提前写好线的变量和检测项目的变量
for i in range(0,int(line_xs)):               #有几条线就遍历几次,然后把每条线下有几个工位赋值为变量
    i=int(i)
    print(i)
#   b='gongwei' +str(i)
#   print(b)
#   print(u'hahaha'+ gongweiNum[i])
    vars.put('gongwei' +str(i+1),gongweiNum[i])   #这个是对应项目的数量
    
    j = gongweiNum[i]
    j=int(j)
    bb=xiangmus[0:j]
    A=1
    for n in bb:   ########遍历每条线的数组,把每个项目拿出来交给变量
        print(n)
        print(type(n))
        vars.put('xiangmu'  + str(i+1) + str(A),n.replace("、","").replace(",","").replace(" ","").replace("/","").replace(",",""))
        A = A + 1
    del xiangmus[0:j]
#           d = str(i+1)
            #vars.put('xiangmu' +d + str(A),n)
#           print(u"第%s次执行"%i)
            #print(str(i+1))

HH = 1
for i in line:
    vars.put('linename_' + str(HH),i)
    HH = HH + 1
        
#################################################################
############################################对工位参数进行读取##########################
chesu_bkxh = []       #车速板卡型号
chesu_sfgc = []       #车速是否过车

zhouz_bkxh = []       #轴重板卡型号
zhouz_sfgc = []       #轴重是否过车

guntzd_sfecyb = []     #滚筒是否二次仪表
guntzd_ttlx = []       #滚筒台体类型
guntzd_czfs = []       #滚筒称重方式

jingt_sblx = []            ##底检设备类型

dadeng_sfecyb = []              #大灯是否二次仪表
dadeng_sbxh = []                #大灯型号
dadeng_kaow = []                #大灯靠位
dadeng_chuizpsfpj = []          #大灯垂直偏是否评价

cehua_sfecyb = []               #侧滑是否二次仪表
cehua_sfsgd = []                #侧滑是双光电
shengji_sblx = []               #声级设备类型

pingban_ttlx = []               #平板设备类型


zbzl_sblx = []                   #整备质量设备类型


for i in range(0,int(rowNum)):           #遍历每一行
    ###车速
    #车速板卡型号
    if  u'二次' in str(table.row_values(i)[6]):  
        chesu_bkxh.append(u'安车三代二次仪表')
    if  u'511' in str(table.row_values(i)[6]):  
        chesu_bkxh.append(u'安车编码器')
    if  u'812' in str(table.row_values(i)[6]):  
        chesu_bkxh.append(u'数字量车速台')

        #车速参数:项目完成后过车
    if str(table.row_values(i)[7]) ==  u'判断过车':       
        chesu_sfgc.append(u'1')      
    if str(table.row_values(i)[7]) ==  u'不判断过车':       
        chesu_sfgc.append(u'0')   

     #轴重(单独轮重称重用)              #设备类型
    if str(table.row_values(i)[9]) == u'二次仪表':       
        zhouz_bkxh.append(u'安车三代二次仪表')     
    if str(table.row_values(i)[9]) != u'二次仪表' and (str(table.row_values(i)[9]) == u'不判断过车' or str(table.row_values(i)[9]) == u'判断过车') :   
        zhouz_bkxh.append(u'模拟量台体')      

    if  str(table.row_values(i)[11]) == u'是' and (table.row_values(i)[12] ==u'普通滚筒' or  table.row_values(i)[12] ==u'加载台'):       
        guntzd_sfecyb.append(u'安车三代仪表')        #制动台设备类型  
    if  str(table.row_values(i)[11]) != u'是' and (table.row_values(i)[12] ==u'普通滚筒' or  table.row_values(i)[12] ==u'加载台'):       
        guntzd_sfecyb.append(u'模拟量台体') 
         
    if u'轴重制动分离台'  in str(table.row_values(i)[13]):        
        guntzd_ttlx.append(u'轴重制动分离台')  
    if u'轴重制动复合台'  in str(table.row_values(i)[13]):        #台体类型
        guntzd_ttlx.append(u'轴重制动复合台')  

    if table.row_values(i)[12] ==u'普通滚筒' or  table.row_values(i)[12] ==u'加载台':       
        guntzd_czfs.append(table.row_values(i)[14])   
        #过车式(后台模拟量轴重)
        #先称重定位式
        #驻车式称重(轴重制动轮换)
        #后称重
        #驻车式(温州江兴串口轴重)
        #不称重
        #过车式称重(轴重制动轮换)
        #先称重过车式(模拟量轴重有提示)      str()
    
     #底检设备类型
    if table.row_values(i)[16] !='' and str(table.row_values(i)[16]) != u'底检设备类型':
        if u'UDP' or u'udp' not in str(table.row_values(i)[16]):  # or u'udp' not in str(table.row_values(i)[16]))  :      
            jingt_sblx.append(table.row_values(i)[16])
        else:
            jingt_sblx.append(u'UDP广播接收端')
#   if table.row_values(i)[16] !='' and str(table.row_values(i)[16]) != u'底检设备类型' and u'UDP' in str(table.row_values(i)[16]) :       
#       jingt_sblx.append(u'UDP广播接收端')
        
#   if table.row_values(i)[16] !='' and str(table.row_values(i)[16]) != u'底检设备类型' and u'udp' in str(table.row_values(i)[16]) :        
#       jingt_sblx.append(u'UDP广播接收端')
        
        if  u'人工手动输入' in str(table.row_values(i)[16]):
            jingt_sblx.append(u'人工手动输入(21861-2014)')    
    

    
        
    #大灯 
    if table.row_values(i)[18] !='' and str(table.row_values(i)[18]) != u'大灯' and str(table.row_values(i)[18])  != u'型号' :       
        dadeng_sbxh.append(table.row_values(i)[18]) 

    if u'左靠位' in str( table.row_values(i)[19]):       
        dadeng_kaow.append('1') 
    if u'右靠位' in str( table.row_values(i)[19]):       
        dadeng_kaow.append('0') 
        
    if  u'垂直偏计入总评' in str(table.row_values(i)[20]):       
        dadeng_chuizpsfpj.append('3') 
    if  u'垂直偏不计入总评' in str(table.row_values(i)[20]):       
        dadeng_chuizpsfpj.append('0')


    #侧滑
    if  str(table.row_values(i)[21]) == u'是' and (table.row_values(i)[22] == u'否' or table.row_values(i)[22] == u'是'):        
        cehua_sfecyb.append(u'安车三代二次仪表')
    if  table.row_values(i)[21] != '是' and (table.row_values(i)[22] == u'否' or table.row_values(i)[22] == u'是'):        
        cehua_sfecyb.append(u'模拟量') 

    if str(table.row_values(i)[22]) == u'是' and table.row_values(i)[23] != '':         #侧滑是否双光电   #是否是单个光电控制设备 
        cehua_sfsgd.append(u'0')
    if str(table.row_values(i)[22]) == u'否' and table.row_values(i)[23] != '':        
        cehua_sfsgd.append(u'1') 

    #声级
    if table.row_values(i)[25] !='' and str(table.row_values(i)[25]) != u'声级设备' and   str(table.row_values(i)[25]) != u'类型' :       
        shengji_sblx.append(table.row_values(i)[25])

    
    
        
    #整备质量
    if table.row_values(i)[31] !='' and str(table.row_values(i)[31]) !=u'整备质量设备类型' and  u'DS3'  in str(table.row_values(i)[31]): 
        zbzl_sblx.append(u'XK3190-DS3读库')

    if table.row_values(i)[31] !='' and  str(table.row_values(i)[31]) !=u'整备质量设备类型' and  u'DS10'  in str(table.row_values(i)[31]): 
        zbzl_sblx.append(u'XK3190-DS10')  

    if table.row_values(i)[31] !='' and  str(table.row_values(i)[31]) !=u'整备质量设备类型' and  u'多轴轮重台'  in str(table.row_values(i)[31]): 
        zbzl_sblx.append(u'多轴轮重台')  
    if table.row_values(i)[31] !='' and  str(table.row_values(i)[31]) !=u'整备质量设备类型' : 
        zbzl_sblx.append(u'多轴轮重台') 
    
    #判断是否有外廓前后
    if  str(table.row_values(i)[30]) !=u'设备类型' and table.row_values(i)[30]!=u'' :
        if u'是' in str(table.row_values(i)[29]) :
            vars.put('wkqh' ,u'有外廓先后之分')  
        
    
    #平板
        
    if u'平板台' in str(table.row_values(i)[12])  :
        if u'是' in str(table.row_values(i)[11]) :
            pingban_ttlx.append(u'安车三代二次仪表')  
        else:
            pingban_ttlx.append(u'模拟量台体')


#####################################################################
A = 1
for i in chesu_bkxh:
    
    vars.put("chesu_bkxh"+ str(A),i)
    A = A + 1

B = 1
for i in chesu_sfgc:
    vars.put("chesu_sfgc"+ str(B),i)
    B = B + 1
C = 1
for i in zhouz_bkxh:
    vars.put("zhouz_bkxh"+ str(C),i)
    C = C + 1
D = 1
for i in zhouz_sfgc:
    
    vars.put("zhouz_sfgc"+ str(D),i)
    D = D + 1
E = 1
for i in guntzd_sfecyb:
    #print(i)
    vars.put("guntzd_sfecyb"+ str(E),i)
    E = E + 1

F = 1
for i in guntzd_ttlx:
    #print(i)
    vars.put("guntzd_ttlx"+ str(F),i)
    F = F + 1
G = 1
for i in guntzd_czfs:
    #print(i)
    vars.put("guntzd_czfs"+ str(G),i)
    G = G + 1
H = 1
for i in jingt_sblx:
    #print(i)
    vars.put("jingt_sblx"+ str(H),i)
    H = H + 1
I = 1
for i in dadeng_sfecyb:
    #print(i)
    vars.put("dadeng_sfecyb"+ str(I),i)
    I = I + 1

J = 1
for i in dadeng_sbxh:
    #print(i)
    vars.put("dadeng_sbxh"+ str(J),i)
    J = J + 1
K = 1
for i in dadeng_kaow:
    #print(i)
    vars.put("dadeng_kaow"+ str(K),i)
    K = K + 1
L = 1
for i in dadeng_chuizpsfpj:
    #print(i)
    vars.put("dadeng_chuizpsfpj"+ str(L),i)
    L = L + 1
M = 1
for i in cehua_sfecyb:
    #print(i)
    vars.put("cehua_sfecyb"+ str(M),i)
    M = M + 1

N = 1
for i in cehua_sfsgd:
    
    vars.put("cehua_sfsgd"+ str(N),i)
    N = N + 1
O = 1
for i in shengji_sblx:
    #print(i)
    vars.put("shengji_sblx"+ str(O),i)
    O = O + 1
    

Q = 1
for i in zbzl_sblx:
    #print(i)
    vars.put("zbzl_sblx"+ str(Q),i)
    Q = Q + 1


R = 1
for i in pingban_ttlx:
    #print(i)
    vars.put("pingban_ttlx"+ str(R),i)
    R = R + 1



####################################读取第3页的环保检测线内容###################################        
#1,先搞清楚有几条线,直接使用环保批量添加
table2 = workbook.sheet_by_index(2)
#读取第2行的数据并进行处理
HBlines=[]             #将环保线都装进来
xiangmus=[]
#这个sheet的总行数
#rowNum = table.nrows
#这个sheet的总列数
colNum = table2.ncols

for i in range(1,colNum):           #遍历每一行
    if table2.row_values(1)[i] !='':          #对列4判断   # u就可以转义中文
        HBlines.append(table2.row_values(1)[i])         #将第2列的值插入到这个数组中,其实就是线名称的数组
#       xiangmus.append(table.row_values(i)[4])       #将第5列的值插入到这个数组中,其实就是检测项目的数组
qyx = 0
cyx = 0
qchhx = 0
for i in    HBlines:
    print(i)
    if i==u'汽油':
        qyx = qyx + 1
    if i == u'柴油':
        cyx = cyx + 1
    if i == u'汽柴混合':
        qchhx = qchhx + 1
vars.put('qyx',str(qyx))
vars.put('cyx',str(cyx))
vars.put('qchhx',str(qchhx))


...

相关文章

网友评论

      本文标题:Jmeter使用Python语言读取表格

      本文链接:https://www.haomeiwen.com/subject/zqgnohtx.html