Jmeter使用Python語言讀取表格

最近有一個需要做一個自動化,其中就需要讀取表格的數據,親們都知道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))


...
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。