Python+request 分模块存放接口,多接口共用参数URLheaders的抽离,添加日志打印等《三》

Posted syw20170419

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python+request 分模块存放接口,多接口共用参数URLheaders的抽离,添加日志打印等《三》相关的知识,希望对你有一定的参考价值。

主要介绍内容如下:

  1、分模块存放接口

  2、多接口共用参数URL、headers的抽离为配置文件

  3、添加日志打印

  4、一个py文件运行所有所测的接口

 

如上介绍内容的作用:

  1、分模块存放接口:方便多人协作,对模块接口的分开存放,方便后期新增模块接口的录入,也方便接口出现报错后,定位模块

  2、多接口共用参数URL、headers的抽离为配置文件:

    (1)URL:单独进行配置文件中的修改,主要是方便后期接口域名出现变化,方便更改,示例,本次URL前缀为:https://127.0.0.1,下次开发更改为:https://127.0.0.2,如果不对此URL的前缀做单独的处理,则出现此情况需要单独对所有的接口进行URL前缀的修改,若实现了全局配置,则出现此类问题,更改一处则所以的接口均会共用此url的前缀。

    (2)headers:将headers抽离的作用也是与URL相同,此处需要单独抽出共用的headers中的参数即可。

  3、添加日志打印:只要是为了方便查看自己对测试结果的打印和新增的提示语的查看

  4、一个py文件运行所有所测的接口:统一管理所有接口,方便接口的运行与后期的调试,若不运行某个接口则直接进行注释即可。

 

文件的结构介绍如下:

  技术图片

详细的每个py文件中的代码写法:

1、logs.py中的写法,主要是log的打印

# coding=UTF-8
‘‘‘
date:2017/6/12
@author: SYW
用途:控制台log的打印形式修改,并且在module中调用
‘‘‘
import logging
import os

Log_FileName = os.getcwd()[:-4] +Run_logs      #获取到当前文件的目录,并检查是否有logs文件夹,如果不存在则自动新建logs文件
if not os.path.exists(Log_FileName):
    os.makedirs(Log_FileName)


# logging.basicConfig(level=logging.NOTSET,     #旧的log打印形式
#                 format=‘%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s‘,
#                 datefmt=‘%Y-%m-%d %X‘,
#                 filename=Log_FileName,
#                 filemode=‘w‘)

‘‘‘以下修改log的打印方式-----SYW‘‘‘
logging.basicConfig(level=logging.NOTSET,
                format=[%(asctime)s] [line:%(lineno)d] [%(levelname)s] %(message)s,
                datefmt=%Y-%m-%d %X,
                #filename=Log_FileName+ r"\\log.txt",
                filename=Log_FileName+ r"/log.txt",
                filemode=w)

console = logging.StreamHandler()
#console.setLevel(logging.INFO)   #显示等级为INFO,则自动过滤掉了系统debug提示
console.setLevel(logging.DEBUG)
formatter = logging.Formatter([%(asctime)s] [line:%(lineno)d] [%(levelname)s]: %(message)s)
console.setFormatter(formatter)
logging.getLogger(‘‘).addHandler(console)

#logging.info("jaskdfjkajfkdl")   #运行写法示例

2、host_header.yaml 此配置文件中的编写

#请求接口的url的域名
host: https://dev1app.goodiber.com/v2/

#请求接口的请求头中的共用参数
headers:
  "version": "2.3.0"
  "version-id": "235"
  "os": "ios"
  "sign": "123456"
  "is-test": "1"

3、login.py,主要是登录接口,会返回token和uuid,供后期接口使用。

#!/usr/bin/env python
# coding=UTF-8
import requests
from Common import gol
from Common.logs import logging
import yaml,sys,os

# 导入yaml中的host
reload(sys)
sys.setdefaultencoding("utf-8")

root_path = os.getcwd()
with open(root_path + "/Configuration/host_header.yaml", rb) as f:
    data = yaml.load(f)
host = data["host"]

class login:

    gol._init()

    def __init__(self):
        self.log = logging

    def test_login(self):
        url = host+"user/login"   #接口

        data = {
            "mobile": "12606666333",
            "password": "33a7d3da476a32ac237b3f603a1be62fad00299e0d4b5a8db8d913104edec629"
        }
        headers = {
            "version": "2.3.0",
            "version-id": "235",
            "device-id": "8BAFD18C-61E3-4BAF-8AB1-0BC16E567633",
            "time": "1557728866628",
            "channel-id": "001",
            "os": "ios",
            "Accept-Language": "zh-tw",
            "device-name": "iPhoneX",
            "User-Agent": "iBer/235 CFNetwork/976 Darwin/18.2.0",
            #注:一定不能加content-type,否则报签名错误
            # Content-Type: multipart/form-data; boundary=vHsPJ5s6grMzpmWoZxd3T3o6.LcUWBvUUu0gDNubaf05Ve7kv6bAkH3s_rr0AEc2D6AbEh
            "sign": "a81b4379f504f330e83792ce2015e629"
        }

        r = requests.post(url=url, data=data, headers=headers, verify=False)
        uuid = str(r.json()["data"]["uuid"])
        gol.set_value("uuid", uuid)
        token = str(r.json()["data"]["token"])
        gol.set_value("token", token)
        version = "2.2.1"
        version_id = "232"

        self.log.info("登录成功,如下是reponse返回的内容")
        self.log.info(r.text)

4、create_todo.py文件,承接登录后的操作,说明,因为其他的接口headers中使用到的token和uuid均来自login,因此不能讲token和uuid加入到headers的配置文件中,具体的用法详见如下:

#!/usr/bin/env python
# coding=UTF-8
import requests
from Common import gol
import yaml,sys,os
from Common.logs import logging

# 导入yaml中的host
reload(sys)
sys.setdefaultencoding("utf-8")

with open(os.getcwd() + "/Configuration/host_header.yaml", rb) as f:
    data = yaml.load(f)
host = data["host"]   #获取到url
header = data["headers"]  #获取到host

class todo:

    def __init__(self):
        self.log = logging

    def test_create_todo(self):
        url = host+"todo/create"
        data = {
            "name": "1239",
            "todo_remind_type": "0",
            "cate_uuid": "86799e50d9890ade579c4ac88059a5ff",
            "all_day": "1",
            "todo_start": "2019-05-13",
            "todo_end": "",
            "type": "0",
            "repeat_tyep": "0",
            "c_user_uuid": ""
        }
        headers = header
        headers.update(uuid=gol.get_value("uuid"),token=gol.get_value("token"))
        r = requests.post(url=url, data=data, headers=headers, verify=False)
        self.log.info("创建待办成功,如下是reponse返回的内容")
        self.log.info(r.json())

5、run_test.py,所有接口的集合。每次运行即可,点击此文件即可,不需要运行哪个接口则直接注释掉。

#!/usr/bin/env python
# coding=UTF-8

import unittest
from Module.login.login import login
from Module.Todo.Create_todo import todo
from Module.Todo.Todo_report import share_report


class run(unittest.TestCase):
    def test_01_login(self):
        a = login()
        a.test_login()

    def test_02_Create_todo(self):
        self.todo = todo()
        self.todo.test_create_todo()

    def test_03_Todo_report(self):
        self.todoreport = share_report()
        self.todoreport.get_share_code()

if __name__ == "__main__":
   unittest.main()

 

以上是关于Python+request 分模块存放接口,多接口共用参数URLheaders的抽离,添加日志打印等《三》的主要内容,如果未能解决你的问题,请参考以下文章

python自动化接口自动化:2.接口测试requests模块

python接口自动化测试-request模块

Python接口自动化-requests模块之post请求

Python接口测试-使用requests模块发送GET请求

python接口测试中—Requests模块的使用

Python接口测试,Requests模块讲解:GETPOSTCookiesSession等