Action模块
封装接口request方法,根据传入的参数调用不同的请求方法,因为项目特色,我们公司的接口都是get和post方法,所以仅仅封装了get和post方法:
import requests import json from Util.Log import * import traceback def api_request(method,baseurl,header,auth,body,test_case_name): """Action关键字,通过method确认使用get还是post方法,baseurl为请求路径,header为空请求头,auth为授权登录信息,body为当请求方法为post的时候请求data信息""" # global response default_header = {'Content-Type':'application/json'} # 如果没有提供请求头信息,则使用默认请求头信息 if not header: header = default_header # 如果有头信息,因为excel里面读出来的都是字符串,需要将头信息转换为字典 #get请求 if method.lower() =="get": try: if isinstance(body, dict): info("-"*80) info("请求接口操作是:%s"%test_case_name) info("请求的接口地址是:%s" % baseurl) info("请求的数据是:%s" % body) r = requests.get(baseurl, params=body,headers=header,auth=auth) info("请求返回状态码:%s"%r.status_code) else: # r = requests.get(baseurl + str(body),headers=header,auth=auth) r = requests.get(baseurl,headers=header,auth=auth) info("-"*80) info("请求接口操作是:%s"%test_case_name) info("请求的接口地址是:%s" % baseurl) info("请求的数据是:%s" % body) info("请求返回状态码:%s"%r.status_code) return r except Exception as e: # print("进入Exception") info("get 方法请求发生异常:请求的 url 是 %s,请求的内容是%s\n发生的异常信息如下:%s" % (baseurl, body, traceback.format_exc())) r = None return r #post请求 elif method.lower()=="post": try: if isinstance(body, dict): info("-"*80) info("请求接口操作是:%s"%test_case_name) info("请求的接口地址是:%s" % baseurl) info("请求的数据是:%s" % json.dumps(body)) r = requests.post(baseurl,headers = header,data=json.dumps(body),auth=auth) info("请求返回状态码:%s"% r.status_code) else: raise ValueError except ValueError as e: info("post 方法请求发生异常:请求的 url 是 %s,请求的内容是%s\n发生的异常信息如下:%s" % (baseurl, body, "请求参数不是字典类型")) r = None except Exception as e: info("post 方法请求发生异常:请求的 url 是 %s,请求的内容是%s\n发生的异常信息如下:%s" % (baseurl, body, traceback.format_exc())) r = None return r
详解:
因为项目特点,post方法的'Content-Type'是'application/json',所以我在封装的请求方法里面封装了默认header.同时加入了写log的代码便于以后的bug追溯。
Request方法接收6个参数,分别是
- Method:请求方法名字,
- Baseurl:请求url
- header:请求头
- auth:验证信息
- body:请求body
- test_case_name:请求接口名称,主要是用与写日志记录接口名称
根据传入的请求method选择进行get或者post请求,如果是get方法则提供请求url,请求header,请求授权;如果是post方法则提供请求url,请求头,请求体,请求授权;
在请求之前进行数据的处理,包括如果没有提供请求头的话使用默认请求头,转换请求体为json格式等处理。
在进行请求的操作的时候进行日志记录,记录格式为:
2019-10-11 11:20:57 Log.py[line:30] INFO --------------------------------------------------------------------------------
2019-10-11 11:20:57 Log.py[line:30] INFO 请求接口操作是:*******
2019-10-11 11:20:57 Log.py[line:30] INFO 请求的接口地址是:http://*********************************
2019-10-11 11:20:57 Log.py[line:30] INFO 请求的数据是:*********