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


分享到:


相關文章: