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个参数,分别是

  1. Method:请求方法名字,
  2. Baseurl:请求url
  3. header:请求头
  4. auth:验证信息
  5. body:请求body
  6. 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 请求的数据是:*********

02-13 17:04