思路
获取测试数据-调用接口集方法(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")))
跟着亭子青年学习接口测试