python请求http接口_02-python发送http请求 py+requests

思路

获取测试数据-调用接口集方法(get/post方法)-具体处理-返回结果

这里要用到四个文件"config.py","optool.py","mylogging.py","http_requests.py"

(1) config.py: 配置文件,存放项目需要的配置信息,方便统一管理,ex:接口url信息

(2) optool.py: 封装一些简单函数

(3) mylogging.py:代码中每次使用logging的时候都需要设置输出格式信息,索性把它封装起来,让整个系统公用一个logging实例

(4) http_requests:对requests库进行封装,封装之后只提供一个方法给外部调用,这个方法在会根据你指定的发送请求的方式(get、post)来执行代码,那么在访问http接口的时候,不论是get/post协议,无论带什么参数,都直接调用这一个方法,简单方便

代码实现

#config.py

#__author__='yy'#

#coding:utf-8

#domin用于替换接口地址中测试环境下的ip

import time

domain='192.168.0.200:12307'

environ_test={'base_url':'http://192.168.0.200:12308','timeout':20}

environ_product={'base_url':'http://192.168.0.200:12307','timeout':20}

#optool.py

#-*- coding:utf-8 -*-

#__author__='yy'

from Config import environ_test

import json

#拼接url

def join_url(endpoint):

'''

拼接url

:param endpoint:

:return:

'''

return "/".join([environ_test.get("base_url"),endpoint])

#格式化json,返回字符串对象

def better_show_json(json_str):

#将json对象转换为字符串并格式化

return json.dumps(json_str,indent=4)

if __name__ == "__main__":

pass

#-*- coding:utf-8 -*-

#__author__='yy'

import logging

#对logging进行封装再用

class Myloggging:

'''

logging的初始化操作,以类封装的形式进行

'''

def __init__(self):

filename = "app.log" #日志文件地址

self.logger = logging.getLogger(__name__)#定义对应程序模块名name,默认root

self.logger.setLevel(logging.INFO)#必须设置,这里如果不显示设置,默认顾虑掉warning之前所有级别信息

sh = logging.StreamHandler()#日志输出到屏幕控制台

sh.setLevel(logging.ERROR)#设置日志等级

fh = logging.FileHandler(filename=filename)#向filename输出日志信息

fh.setLevel(logging.INFO)#设置日志等级

#设置格式对象

formatter = logging.Formatter("%(asctime)s %(filename)s[line:%(lineno)d]%(levelname)s - %(message)s")#定义日志输出格式

#设置handler的格式对象

sh.setFormatter(formatter)

fh.setFormatter(formatter)

#将handler增加到logger中

self.logger.addHandler(sh)

self.logger.addHandler(fh)

#日志操作对象logger,这里设置为单例,则凡是需要使用logging对象的地方都共用这个logger,节省内存

mylogger = Myloggging().logger

if __name__ == "__main__":

mylogger.debug("debug")

mylogger.info("info")

mylogger.warning("warning")

mylogger.error("error")

mylogger.critical("critical")

#-*- coding:utf-8 -*-

#__author__='yy'

'''

requests库再封装

根据入参method发送请求,返回结果

'''

import requests

from mylogging import mylogger

from optool import *

class Rqhttp:

#get请求,私有方法

def __get(self,url,params=None,**kwargs):

'''

根据传入的数据进行get请求调用

:param url: url地址

:param params: get参数

:param kwargs: 其他参数

:return: 返回一个dict类型数据

(1)200:请求正常,返回json格式数据

格式:result = {"resultCode":200,"message":"请求成功,返回json格式的数据","content":responce.json()}

(2)201:请求正常,返回string类型的数据

格式:result = {"resultCode":201,"message":"请求成功,返回string格式数据","content": responce.text }

(3)300: response的status code 不等于200,content为空字符串

格式:result = {"resultCode":300, "message":"接口请求状态吗错误-非200","content":""}

(4)400:请求过程中出现异常,content为空字符串

格式: result = {"resultCode":400,"message":"接口请求过程出现异常","content":""}

'''

try:

responce = requests.get(url,params,timeout=environ_test.get("timeout"),**kwargs)

if responce.status_code==200:

if"application.json" in responce.headers.get("Content-Type"):

result = {"resultCode":200,"message":"请求成功,返回JSON格式的数据","content":responce.json()}

else:

result = {"resultCode":201,"message":"请求成功,返回string格式数据","content":responce.text}

#responce.text:根据接口返回的信息,会自动将原始数据转换成字符串类型的数据,格式根据headers里面来转的

else:

result = {"resultCode":300,"message":"接口请求状态码错误-非200","content":""}

except BaseException as e:

mylogger.info("[http_requests_get_info] -url=%s,**kwargs=%s"%(url,params,kwargs))#打印出get请求参数信息

mylogger.exception(e)

result={"resultCode":400,"message":"请求接口过程出现异常","content":""}

finally:

return result

#post 方法,私有方法

def __post(self,url,data=None,json=None,**kwargs):

try:

responce = requests.post(url,data=data,json=json,timeout=environ_test.get("timeout"),**kwargs)

if responce.status_code==200:

if "application/json" in responce.headers.get("Content-Type"):

result = {"resultCode":200,"message":"请求成功,返回json格式的数据","content":responce.json()}

else:

result = {"resultCode":201,"message":"请求成功,返回string格式的数据","content":responce.text}

else:

result = {"resultCode":300,"message":"接口请求状态吗错误-非200","content":""}

except BaseException as e:

mylogger.info("[http_request_post_info] - url = %s,params=%s,json=%s,kwargs=%s]"%(url,data,json,kwargs))#打印出post请求参数信息

mylogger.exception(e)

result={"resultCode":400,"message":"接口请求过程出现异常","content":""}

finally:

return result

#发送http请求,根据你传入的method参数决定执行get还是post请求

def send_request(self,url,method='get',params=None,data=None,json=None,**kwargs):

try:

if method=="post":

result = self.__post(url=url,data=data,json=json,**kwargs)

elif method=="get":

result = self.__get(url=url,params=params,**kwargs)

else:

result={"resultCode":301,"message":"传入参数值错误","content":""}

except BaseException as e:

result = {"resultCode":400,"message":"接口请求过程出现异常","content":""}

mylogger.info("def send_request(self,url=%s,method=%s,params=%s,data=%s,json=%s,**%s)"%(url,method,params,data,json,kwargs))

mylogger.exception(e)

return result

#发送http请求

if __name__ == "__main__":

myhttp = Rqhttp()#实例化封装类

new_url = join_url("TaskList/GetTaskList")#构造接口url地址

'''

#请求不带参数get方法

result01 = myhttp.send_request(new_url,method="get")

print(better_show_json(result01.get("content")))

print(result01)

print(result01.get("resultCode"))

print(result01.get("message"))

'''

'''

#请求带参数的get方法

params = {"u":"admin","p":"asd123456"}

result02 = myhttp.send_request(new_url,method="get",params=params)

print(result02)

print(result02.get("resultCode"))

print(result02.get("message"))

print(btter_show_json(result02.get("content")))

'''

#请求不带参数的post方法

result03 = myhttp.send_request(new_url,method="post")

print(result03.get("resultCode"))

print(better_show_json(result03.get("content")))

跟着亭子青年学习接口测试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值