jenkins+robotframework接口自動化實戰一

現在大多數軟件公司都要求會接口自動化,然後花了一段時間研究了一下,選擇的是robotframework,簡稱rf,這個工具還蠻好用的,如果對這個工具還不太熟悉的朋友可以先行百度下,簡單易上手,已經幫我們封裝了很多關鍵字,可以直接調用,當然了也可以自己封裝關鍵字,當我們將接口case全部寫好後,我們就通過jenkins來執行我們的接口自動化case,我們先來準備接口自動化case,最後再來配置jenkins;

我分享的接口自動化,主要思路就是excel裡面的每個sheet頁寫每個接口可能會傳入的參數,rf讀取excel數據,這樣就給人一種像我們平時寫功能測試的感覺一樣,給大家先看下我的整體:


jenkins+robotframework接口自動化實戰一


jenkins+robotframework接口自動化實戰一


再單獨列舉一個接口,比如登錄接口:

一般登錄,輸入用戶名/密碼,可能場景就會有:


jenkins+robotframework接口自動化實戰一

我這些場景都寫在excel裡面,是不是和功能case很像啊。

然後看看rf裡面,循環讀取excel裡面的數據


jenkins+robotframework接口自動化實戰一


好了 ,大概思路就是這樣,其他一些細節,在每個接口當中給大家再做解釋。

我目前還是用的python2.7。安裝rf的話,網上還是有很多教程的,也蠻容易安裝的,這裡我也不做贅述了,如果有需要,大家也可以私信我,我這邊有可以一鍵安裝rf的包,

首先給大家說一下如何用python讀取excel裡面的值。

<code>data_center.py,內容如下

#-*- coding: utf8 -*-
import os, sys
import csv
import xdrlib
import xlrd
import json
import natsort
from operator import itemgetter
from xlutils.copy import copy
import datetime
import time
import hashlib
import re

class data_center:

def __init__(self):
#default File path:
self.data_dir = os.getenv('G_DATACENTER', 'E:\\\\PROJECT\\\\')
#print self.data_dir

#Current Log Path:
self.curr_dir = os.getenv('G_CURRENTLOG', 'E:\\\\PROJECT\\\\')
#print self.curr_dir

def _is_number(self,value):
try:
float(value)
return True
except ValueError:
pass
try:
import unicodedata
unicodedata.numeric(value)
return True
except(TypeError,ValueError):
pass


def _keep_integer_type_from_excel(self,value):
if self._is_number(value) and type(value) != unicode and value%1 ==0:
return str(int(value))
else:

return value
print value

def Read_Data_From_Excel(self,filename,sheetnum,path=None):
if path == None:
filename = os.path.join(self.data_dir,filename)
#Default File path
else:
filename = os.path.join(path,filename)
try:
data = xlrd.open_workbook(filename)
#print data
table = data.sheets()[sheetnum]
#print table

nrows = table.nrows
#print nrows
ncols = table.ncols
#print ncols

listAll=[]
for row in range(1,nrows):
alist=[]
for col in range(1,ncols):
val = table.cell(row,col).value
#print val
#Solve issue that get integer data from Excel file would be auto-changed to float type.
alist.append(self._keep_integer_type_from_excel(val))
listAll.append(alist)
print listAll
return listAll
except Exception,e:
print str(e)

def Write_Data_Into_Excel(self,filename,sheetnum,rowIndex,lineIndex,content,path=None):
if path == None:
filename = os.path.join(self.data_dir,filename)
#Default File path
else:
filename = os.path.join(path,filename)
try:
data = xlrd.open_workbook(filename,'w')
#print data
wb=copy(data)
wb.get_sheet(int(sheetnum)).write(int(rowIndex),int(lineIndex),content)
wb.save(filename)
print 'write file ok'
except Exception,e:
print str(e)

def cmp_dict(self,src_data,dst_data):
pattern = r'\\d{4}[-/]\\d{2}[-/]\\d{2}[\\s\\S]\\d{1,2}:\\d{1,2}:\\d{1,2}'
pattern2= r'\\d{4}[-/]\\d{2}[-/]\\d{2}'
src_data=re.sub(pattern,"", src_data)
dst_data=re.sub(pattern,"", dst_data)
src_data=re.sub(pattern2,"", src_data)
dst_data=re.sub(pattern2,"", dst_data)
assert type(src_data) == type(dst_data),"type: '{}' != '{}'".format(type(src_data), type(dst_data))
if isinstance(src_data,dict):
for key in src_data:
assert dst_data.has_key(key)
cmp_dict(src_data[key],dst_data[key])
elif isinstance(src_data,list):
for src_list, dst_list in zip(sorted(src_data), sorted(dst_data)):
cmp_dict(src_list, dst_list)
else:
assert src_data == dst_data,"value '{}' != '{}'".format(src_data, dst_data)

def generation_timestamp(self):
TimeTuple=time.localtime(time.time()) #獲取當前的時間返回一個時間元組
fmt='%Y%m%d%H%M%S' #格式化時間
test=time.strftime(fmt,TimeTuple) #把傳入的元組按照格式,輸出字符串
return test

def MD5_encryption(self,key,timestamp):
value=key+timestamp
m = hashlib.md5()
m.update(value)
psw = m.hexdigest()
return psw/<code>

self.data_dir = os.getenv('G_DATACENTER', 'E:\\\\PROJECT\\\\')和self.curr_dir = os.getenv('G_CURRENTLOG', 'E:\\\\PROJECT\\\\')主要是讀取excel文件的位置。我的excel都是放在E:\\PROJECT目錄下


jenkins+robotframework接口自動化實戰一

主要是包含了對excel的讀和寫,讀取excel是沒有讀取首行和首列。封裝的代碼上傳到了網盤了

這樣讀取excel的操作就準備好了,有了數據,下一階段就可以用rf編寫接口自動化了。

附:安裝xlrd、xlutils和natsort三個庫

分別在cmd控制檯輸入以下命令:

cd C:\\Python27\\Scripts

pip install xlrd

pip install xlutils

pip install natsort


分享到:


相關文章: