在完成了日志类封装之后,那我们就要对测试基类进行实现,在其中对一些请求再次封装,在项目下新建一个Common文件夹,在文件夹下新建Base_test.py文件,项目结构如下。

具体怎么封装还是要看被测接口需要什么,只能提供一个大致思路,我项目能用的封装,你项目并不一定能用

首先是get请求,第一个肯定是url,实际项目api接口都需要请求字段,那肯定要params参数,基本需要使用请求头来告诉接口是哪个用户做的操作,那就需要headers参数。可能还需要下载文件,那需要files参数。需要把请求的内容,返回的状态,响应内容的日志打印出来,如果请求失败,需要打印错误日志。

请求的接口url也是要打印出来的,等到配置文件的时候再讲。基本代码如下。

import unittest
import requests
from Logs.log import log1
class webrequests(unittest.TestCase): def get(self,url,params=None,headers=None,files=None):
'''封装get方法,return响应码和响应内容'''
try:
r = requests.get(url,params = params,headers = headers,files=files)
log1.info("请求的内容:%s" % params)
status_code = r.status_code # 获取返回的状态码
log1.info("获取返回的状态码:%d" % status_code)
response_json = r.json() # 响应内容,json类型转化成python数据类型
log1.info("响应内容:%s" % response_json)
return status_code,response_json # 返回响应码,响应内容
except BaseException as e:
log1.error("请求失败!",exc_info=1)

来测试一下封装的get请求,使用之前文章中查询天气的get请求接口

from Common.Base_test import webrequests
url = 'https://www.sojson.com/open/api/weather/json.shtml'
payloda = {'city':'上海'}
s = webrequests()
s.get(url,payloda)

可以看到结果正确

因为项目接口响应内容基本都是json格式,所以在请求封装中,直接做了数据转换。

接下来是post请求,post请求有时候需要提交json格式的数据,有时候不需要,那这就要封装两个方法,剩下的跟get差不多

一般post请求上传文件都不会是带json格式的数据

代码如下。

    def post(self, url, data=None, headers=None,files=None):
'''封装post请求,return响应码和响应内容'''
try:
r = requests.post(url, data=data, headers=headers,files=files)
log1.info("请求的内容:%s" % data)
status_code = r.status_code # 获取返回的状态码
log1.info("获取返回的状态码:%d" % status_code)
response_json = r.json() # 响应内容,json类型转化成python数据类型
log1.info("响应内容:%s" % response_json)
return status_code,response_json # 返回响应码,响应内容
except BaseException as e:
log1.error("请求失败!",exc_info=1) def post_json(self,url,data=None,headers=None):
'''封装post方法,并用json格式传值,return响应码和响应内容'''
try:
data = json.dumps(data).encode('utf-8') # python数据类型转化为json数据类型
r = requests.post(url, data=data, headers=headers)
log1.info("请求的内容:%s" % data)
status_code = r.status_code # 获取返回的状态码
log1.info("获取返回的状态码:%d" % status_code)
response = r.json() # 响应内容,json类型转化成python数据类型
log1.info("响应内容:%s" % response)
return status_code,response # 返回响应码,响应内容
except BaseException as e:
log1.error("请求失败!",exc_info=1)

需要impost json

因为找不到好的post接口做测试,所以就不试了

有时候很多响应内容中某个字段会是一个嵌套字典,而我们需要和某个字段进行断言,那我们可以封装一个这样的方法,遍历字典,通过传入的键。返回嵌套字典中的对应的值

 def getdict(self,dict1,obj,default=None):
''' 遍历嵌套字典,得到想要的value
dict1所需遍历的字典
obj 所需value的键'''
for k,v in dict1.items():
if k == obj:
return v
else:
if type(v) is dict:#如果是字典
re = self.getdict(v,obj,default) # 递归
if re is not default:
return re

那现在来测试一下是否能拿到自己想要的值,通过封装的getdict(),获取在嵌套三层字典中failAction的值

from Common.Base_test import webrequests
response = {'errno': 0, 'msg': 'success', 'result': {'id': '5b4dc7111c0ab20001c3c481', 'cname': '测试001', 'desc': '测试机器人', 'type': 0, 'settings': {'failAction': ['偶母鸡啊', '我不告诉你']}, 'lastView': '2018-07-17T18:38:09.250849551+08:00', 'nickname': '小可爱', 'age': 0, 'gender': 'male', 'hometown': '北京', 'speciality': '打游戏'}}
s = webrequests()
failAction = s.getdict(response,'failAction')
print(failAction)

可以看到打印的值是正确的

还可以封装一些比如json格式美化显示的方法,可以让日志打印的json更加美观可视化。有兴趣的可以自己去实现下

补充:如果使用https请求时,可以使用verify = false参数来跳过SLL证书认证,发布到生产的代码都应该加上timeout参数,防止请求无响应,程序一直等待响应卡着不继续往下执行。

python3+requests库框架设计03-请求重新封装的更多相关文章

  1. python3+requests库框架设计01-自动化测试框架需要什么?

    什么是自动化测试框架 关于自动化测试框架的定义有很多,在我大致理解下就是把能实现不同功能的软件组合在一起,实现特定的目的,这就是一个简单的自动化测试框架. 接口自动化测试框架核心无非是选择 一个用来编 ...

  2. python3+requests库框架设计08-发送邮件

    使用python3的email模块和smtplib模块可以实现发送邮件的动能.email模块用来生成email,smtplib模块用来发送邮件,接下来看如何在生成测试报告之后,并将报告放在邮件附件中并 ...

  3. python3+requests库框架设计04-配置文件

    python3配置文件的增删改查等操作可以使用内置的ConfigParser模块,可以自行百度学习,也可以看Python3学习笔记27-ConfigParser模块 配置文件一般存放着环境信息,比如u ...

  4. python3+requests库框架设计06-测试脚本

    在项目下新建TestCase文件夹,然后新建.py文件在文件中写关于接口具体的测试脚本,一般我喜欢按照模块来分,一个模块一个.py文件,建议以test开头命名文件 把配置文件改成这样 url:http ...

  5. python3+requests库框架设计05-unittest单元测试框架

    unittest单元测试框架,主要由四部分组成:测试固件.测试用例.测试套件.测试执行器 测试固件(test fixture) 测试固件有两部分,执行测试前的准备部分setUp(),测试执行完后的清扫 ...

  6. python3+requests库框架设计02-封装日志类

    首先我们先来实现日志的功能,日志可以使用python3自带logging模块,不会的可以百度一下相关文章,也可以看我另外一篇文章Python3学习笔记24-logging模块 在封装日志类前,我们需要 ...

  7. python3+requests库框架设计07-生成测试报告

    使用HTMLTestRunner可以生成测试报告.HTMLTestRunner是unittest模块下的一个拓展,原生的生成报告样式比较丑,GitHub上有大佬优化过后的版本:GitHub地址.下载之 ...

  8. 【STM32H7教程】第12章 STM32H7的HAL库框架设计学习

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第12章       STM32H7的HAL库框架设计学 ...

  9. python3 requests库学习笔记(MOOC网)

    奏:HTTP协议对资源的操作 方法说明:GET 请求获取URL位置的资源HEAD 请求获取URL位置资源的响应消息报告,即获得该资源的头部信息POST 请求向URL位置的资源后附加新的数据PUT 请求 ...

随机推荐

  1. synchronized 和lock的区别

    synchronized 是什么时候释放? 1.获取锁的线程执行完代码2.线程执行出现异常 synchronized 的缺陷? 1.Lock类可以主动释放锁.2.synchronized 是被动. R ...

  2. angular,vue,react的基本语法—双向数据绑定、条件渲染、列表渲染、angular小案例

    基本语法: 1.双向数据绑定 vue 指令:v-model="msg" react constructor(){ this.state{ msg:"双向数据绑定" ...

  3. ubuntu 配置minicom 进行串口开发

    sudo apt-get install minicom        sudo minicom -s        Serial port setup        Save  setup as d ...

  4. POJ - 2096 Collecting Bugs(概率dp)

    https://vjudge.net/problem/POJ-2096 题意 一个软件有s个子系统,会产生n种bug.某人一天发现一个bug,这个bug属于某种bug,发生在某个子系统中.求找到所有的 ...

  5. 致备战noip2018的勇士

    戒骄戒躁,自律当先.稳扎稳打,颗粒归仓.目标高远,落实当下.无惧将来,无畏过往.愿你们承担一份荣耀,愿你们书写一段辉煌.——致备战noip2018的你们 ——退役学姐致gryz备战中的勇士 ——lpy ...

  6. svn Edge访问规则配置

    权限的配置方法: 首先在用户页面定义用户,然后在版本库页面,手工填写访问规则. 以下面的配置为例(实际配置中应删除“//”及其后的注释): [groups]               //定义用户组 ...

  7. 29. SpringBoot Redis 非注解

    1. 引入依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spr ...

  8. 使用 JS 实现图片左右跑马灯

    Ø  前言 之前写了一篇使用 JS 实现文字上下跑马灯,现在乘热打铁在把图片左右跑马灯一起贴出来,不多说直接看代码. 1.   首先定义 css 样式 <style type="tex ...

  9. 20155324 2016-2017-2 《Java程序设计》第3周学习总结

    20155324 2016-2017-2 <Java程序设计>第3周学习总结 教材学习内容总结 定义类 要产生对象必须先定义类,类是对象的设计图,对象是类的实例.类定义时使用class关键 ...

  10. DWT在栅格数据嵌入不可见水印的应用

    1.1.1 嵌入水印 有意义的文字->二值图像->二值序列->置乱.加密->二值水印信息. 读取栅格数据,并进行M*M的分块处理,M为偶数.设分块区域,尺寸为偶数,满足DWT的 ...