python学习2:利用python实现简单的接口测试

一、目的 

尝试利用python实现简单的web接口测试,其中接口的相关信息保存在excel文件中。

二、约定的接口信息格式

接口信息利用excel文件保存,其格式信息如下

接口名称接口标识接口地址请求方法必传参数可选参数
登录接口logininterfacev1/web/message/view/unreadPOST测试1=参数1
测试2=参数2
测试3=参数3
 

三、主要类和方法

1.接口信息数据类

主要功能:打开存有接口信息的excel文件并读取数据,进行简单的数据处理

#接口信息数据类
class InterfaceData(object):
    #类初始化
    def __init__(self,filename):
        if os.path.exists(filename):
            self.filename=filename
        else:
            print("未找到文件%s,请检查文件名称是否正确!"%filename)

    def open_file(self):
        interfaceExcel=xlrd.open_workbook(self.filename)
        print(interfaceExcel)

    # 参数数据获取
    def params_fetch(self,name,paramsStr):
        paramsList=paramsStr.split('\n')
        print(paramsList)
        paramsNum=len(paramsList)
        paramsDict={}
        for i in range(paramsNum):
            temp=paramsList[i]
            param=temp.split('=')
            if len(param)==2:
                paramsDict[param[0]]=param[1]
            else:
                raise Exception("%s接口中参数格式有误"%name)
        print(paramsDict)
        return paramsDict

    #excel数据处理
    def data_fetch(self):
        interfaceExcel = xlrd.open_workbook(self.filename)
        #table=interfaceExcel.sheets()[0]
        table=interfaceExcel.sheet_by_index(0)
        rowNum=table.nrows
        colNum=table.ncols
        interfaceDict={}                         #接口字典
        try:
            if rowNum <= 1:
                print("文件中未找到有效数据")
            else:
                print("文件中获取到%d条数据"%(rowNum-1))
                for i in range(rowNum-1):
                    if i == 0:
                        sheetHead=table.row_values(0)
                        print(sheetHead)
                    else:
                        temp={}
                        for j in range(colNum):
                            temp[sheetHead[j]]=table.row_values(i)[j]
                        print(temp)
                        interfaceDict[temp["接口名称"]]=temp
            print(interfaceDict)
        except:
            print("出现未知错误,请重新处理数据")
        return interfaceDict

 2.登录类,获取token或其他参数

对于web网站,身份验证可能需要token值,因此在做接口测试前,需要执行登录接口,获取token值方便后续测试 

#登录类,获取token和jtoken
class Login(object):
    #基本公共参数
    basicArg = {
        'xxx': xxx,
        'xxx': 'xxx'
    }
    #基本请求头参数
    headers = {
        'Connection': 'keep-alive',
        'Content-Type': 'application/x-www-form-urlencoded',
        'Content-Length': '321',
        'Host': 'xx.xx.xx.xx:8086',
        'User-Agent': 'Apache-HttpClient/4.5.2 (Java/1.8.0_171)'
    }

    #类初始化
    def __init__(self,ip,port,account,password):
        #数据赋值
        self.ip = ip
        self.port = port
        self.account = account
        self.password=password

    #获取token
    def get_token(self):
        #登录接口地址
        loginPath='xxxx'
        if self.port==None:
            loginUrl='http://%s/%s'%(self.ip,loginPath)
        else:
            #url='http://'+self.ip+':'+self.port+'/'+self.data['接口地址']
            loginUrl="http://%s:%d/%s"%(self.ip,self.port,loginPath)
        print(loginUrl)
        loginParams=copy.deepcopy(Login.basicArg)
        loginParams['account']=self.account
        loginParams['password'] = self.password
        print(loginParams)
        print(Login.basicArg)

        loginData = requests.post(loginUrl, data=loginParams)
        if '"code":0' not in loginData.text:
            print("登录失败,正在重新登录")
            loginData = requests.post(loginUrl, data=loginParams)
        print(loginData.text)

        loginJson=json.loads(loginData.text)
        print(loginJson["data"]["userAuth"]["token"])
        return loginJson["data"]["userAuth"]["token"],loginJson["data"]["jtoken"]


    def common_arg(self,token,jtoken):
        commonHeaders=copy.deepcopy(Login.headers)
        commonParams=copy.deepcopy(Login.basicArg)
        commonHeaders["jtoken"]=jtoken
        commonParams["token"]=token
        return commonHeaders,commonParams

 3.接口执行与数据分析类

class WebRequest(object):
    #类初始化
    def __init__(self,ip,data,port=None):
        self.ip=ip
        self.port=port
        self.data=data
        #self.basicData=basicData
        #self.basicHeaders=basicHeaders

    #请求地址url拼接
    def url_joint(self):
        if self.port==None:
            url='http://%s/%s'%(self.ip,self.data['接口地址'])
        else:
            #url='http://'+self.ip+':'+self.port+'/'+self.data['接口地址']
            url="http://%s:%d/%s"%(self.ip,self.port,self.data['接口地址'])
        return url

    #post请求,返回响应数据
    def interface_post(self,url,data,headers):
        postData=requests.post(url,data,headers=headers)
        postText=postData.text
        return postText

    #get请求,返回响应数据
    def interface_get(self,url,data,headers):
        getData=requests.get(url,data,headers=headers)
        getText=getData.text
        return getText

class DataAnalyze(object):
    def __init__(self,jsonData):
        self.jsonData=jsonData

    def data_analyze(self):
        if self.jsonData["code"]==0 and self.jsonData["msg"]=='操作成功':
            print("接口调用成功!")

未完待续~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值