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模块