字符串转化成字典:

convert_to_dict.py:

import json
str1 = '{"grant_type":"client_credential","appid":"wx55614004f367f8ca","secret":"65515b46dd758dfdb09420bb7db2c67f"}'
print(type(str1))
jsondata = json.loads(str1) # 把字符串转化成字典
print(jsondata)
print( type(jsondata) )
dict1 = eval(str1)
print(dict1)
print(type(dict1))

str2 = '3+3'
c = eval(str2)
print(c)

eval函数具体参考:https://www.cnblogs.com/dream66/p/13264725.html

 ast模块的eval函数也可以把字符串转化成字典。

import json
import ast
str1 = '{"grant_type":"client_credential","appid":"wx55614004f367f8ca","secret":"65515b46dd758dfdb09420bb7db2c67f"}'
print(type(str1))
# jsondata = json.loads(str1)
# print( type(jsondata) )
# dict1 = eval(str1)
dict1 = ast.literal_eval(str1)
print(dict1)
print(type(dict1))

# str2 = '3+3'
# c = ast.literal_eval(str2)
# print(c)

封装get方法

import jsonpath
import requests
import json
from utils.config_utils import local_config
class RequestsUtils:
def __init__(self):
self.hosts = local_config.HOSTS
self.session = requests.session()
def get(self, requests_info):
url = self.hosts + requests_info['请求地址']# 取出下面字典中的请求地址。
# {'测试用例编号': 'api_case_01', '测试用例名称': '获取access_token接口测试', '用例执行': '是', '用例步骤': 'step_01', '接口名称': '获取access_token接口', '请求方式': 'get', '请求头部信息': '', '请求地址': '/cgi-bin/token', '请求参数(get)': '{"grant_type":"client_credential","appid":"wx55614004f367f8ca","secret":"65515b46dd758dfdb09420bb7db2c67f"}', '请求参数(post)': '', '取值方式': '无', '取值代码': '', '取值变量': '', '断言类型': 'body_regexp', '期望结果': '"access_token":"(.+?)"'}
response = self.session.get(url = url,
params = json.loads(requests_info['请求参数(get)']),
headers = requests_info['请求头部信息']
) #参数名 =参数值
result = {
'code':0,
'response_code':response.status_code,
'response_reason':response.reason,
'response_headers':response.headers,
'response_body':response.text
}
return result

if __name__=='__main__': # get
req_dict = {'测试用例编号': 'api_case_01', '测试用例名称': '获取access_token接口测试', '用例执行': '是', '用例步骤': 'step_01', '接口名称': '获取access_token接口', '请求方式': 'get', '请求头部信息': '', '请求地址': '/cgi-bin/token', '请求参数(get)': '{"grant_type":"client_credential","appid":"wx55614004f367f8ca","secret":"65515b46dd758dfdb09420bb7db2c67f"}', '请求参数(post)': '', '取值方式': '无', '取值代码': '', '取值变量': '', '断言类型': 'body_regexp', '期望结果': '"access_token":"(.+?)"'}
requestsUtils = RequestsUtils()
v = requestsUtils.get(req_dict)
print(v)

运行结果:

运行结果如下:

{'code': 0, 'response_code': 200, 'response_reason': 'OK', 'response_headers': {'Connection': 'keep-alive', 'Content-Type': 'application/json; encoding=utf-8', 'Date': 'Wed, 09 Dec 2020 07:32:26 GMT', 'Content-Length': '194'}, 'response_body': '{"access_token":"40_-cjwO740UNzOWgHVGaxMjPCRe425jDOAgTl2Y5_eZk84-JVVA3G457hf5jRu8CGQ7WvwkIt5IqnPwV_pUg6TRwEAquY-UQhirdKcaqKGeiVzhVYQc7iboYht6TfQqMF26jMn3gJPnlc04HNdPWAjAGAELP","expires_in":7200}'}

这里需要注意一个坑:就是config.utils里面如果少写了@property

那么运行会报如下错误:

config_utils.py

import os
import configparser
current_path =os.path.dirname(__file__)#获取config当前文件路径
config_file_path = os.path.join(current_path,'..','conf','localconfig.ini')#获取配置文件的路径

class ConfigUtils: #类封装、驼峰式命名法
def __init__(self,cfg_path=config_file_path):
self.cfg =configparser.ConfigParser()#创建一个配置文件对象
self.cfg.read(cfg_path) #创建好后去读取cfg_path

@property #这个如果不写requests.utils就获取不到,
def HOSTS(self):
hosts_value = self.cfg.get('default','hosts') #获取节和key
return hosts_value #@property的属性名这里必须有下划线,不然会报错
#
local_config = ConfigUtils() #创建对象,测试代码
if __name__=='__main__':
print(local_config.HOSTS)

封装post方法():

import requests
import json
from utils.config_utils import local_config
class RequestsUtils:
def __init__(self):
self.hosts = local_config.HOSTS
self.session = requests.session()
def get(self, requests_info):
url = self.hosts + requests_info['请求地址']# 取出下面字典中的请求地址。
# {'测试用例编号': 'api_case_01', '测试用例名称': '获取access_token接口测试', '用例执行': '是', '用例步骤': 'step_01', '接口名称': '获取access_token接口', '请求方式': 'get', '请求头部信息': '', '请求地址': '/cgi-bin/token', '请求参数(get)': '{"grant_type":"client_credential","appid":"wx55614004f367f8ca","secret":"65515b46dd758dfdb09420bb7db2c67f"}', '请求参数(post)': '', '取值方式': '无', '取值代码': '', '取值变量': '', '断言类型': 'body_regexp', '期望结果': '"access_token":"(.+?)"'}
response = self.session.get(url = url,
params = json.loads(requests_info['请求参数(get)']),
headers = requests_info['请求头部信息']
) #参数名 =参数值
result = {
'code':0,
'response_code':response.status_code,
'response_reason':response.reason,
'response_headers':response.headers,
'response_body':response.text
}
return result

def post(self, requests_info):
url = self.hosts + requests_info['请求地址']# 取出下面字典中的请求地址。
# {'测试用例编号': 'api_case_01', '测试用例名称': '获取access_token接口测试', '用例执行': '是', '用例步骤': 'step_01', '接口名称': '获取access_token接口', '请求方式': 'get', '请求头部信息': '', '请求地址': '/cgi-bin/token', '请求参数(get)': '{"grant_type":"client_credential","appid":"wx55614004f367f8ca","secret":"65515b46dd758dfdb09420bb7db2c67f"}', '请求参数(post)': '', '取值方式': '无', '取值代码': '', '取值变量': '', '断言类型': 'body_regexp', '期望结果': '"access_token":"(.+?)"'}
response = self.session.post(url = url,
#params = json.loads(requests_info['请求参数(get)']),
params= json.loads(requests_info['请求参数(post)'])
,
json = json.loads(requests_info['请求参数(post)'])
) #参数名 =参数值
response.encoding = response.apparent_encoding
result = {
'code':0,
'response_code':response.status_code,
'response_reason':response.reason,
'response_headers':response.headers,
'response_body':response.text
}
return result

def requests(self,step_info):
request_type =step_info['请求方式']
if request_type=="get":
result=self.get(step_info)
elif request_type == "post":
result =self.post(step_info)
else:
result ={'code':1,'result':'请求方式不支持'}
return result
if __name__=='__main__': # 测试封装的get()方法
req_dict = {'测试用例编号': 'api_case_01', '测试用例名称': '获取access_token接口测试', '用例执行': '是', '用例步骤': 'step_01', '接口名称': '获取access_token接口', '请求方式': 'get', '请求头部信息': '', '请求地址': '/cgi-bin/token', '请求参数(get)': '{"grant_type":"client_credential","appid":"wx55614004f367f8ca","secret":"65515b46dd758dfdb09420bb7db2c67f"}', '请求参数(post)': '', '取值方式': '无', '取值代码': '', '取值变量': '', '断言类型': 'body_regexp', '期望结果': '"access_token":"(.+?)"'}
requestsUtils = RequestsUtils()
v = requestsUtils.get(req_dict)
print(v)

if __name__ == '__main__':# 测试封装的post()方法
req_post_dict = {'测试用例编号': 'api_case_03', '测试用例名称': '删除标签接口测试', '用例执行': '是', '用例步骤': 'step_03', '接口名称': '删除标签接口', '请求方式': 'post', '请求头部信息': '', '请求地址': '/cgi-bin/tags/delete', '请求参数(get)': '{"access_token":"39_ZlzNDPma7qLWpLJ4K0ir_cSahJ_fg9aevBpGvqRp9VNjqRE6hSkBOSUFla-mFjSGKyF-YFx28sM4Ch1rJISPGVSTahZ8l_xQ9M7CnAFoqUfibusAdeOI4lHEIzB6zhXJQHN5b9as9zhcGtSbBYKeAGAEBN"}', '请求参数(post)': '{ "tag":{ "id" : 456 } }'}
requestsUtils = RequestsUtils()
v = requestsUtils.post( req_post_dict)
print( v )

requests基础封装-get/post封装的更多相关文章

  1. Java基础知识回顾之三 ----- 封装、继承和多态

    前言 在上一篇中回顾了java的修饰符和String类,这篇就来回顾下Java的三大特性:封装.继承.多态. 封装 什么是封装 在面向对象程式设计方法中,封装是指一种将抽象性函式接口的实现细节部份包装 ...

  2. # 095 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 03 封装总结 01 封装知识点总结

    095 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  3. java基础(9):类、封装

    1. 面向对象 1.1 理解什么是面向过程.面向对象 面向过程与面向对象都是我们编程中,编写程序的一种思维方式. 面向过程的程序设计方式,是遇到一件事时,思考“我该怎么做”,然后一步步实现的过程. 例 ...

  4. 【PCB】电子元件封装大全及封装常识

    电子元件封装大全及封装常识 电子元件封装大全及封装常识 一.什么叫封装封装,就是指把硅片上的电路管脚,用导线接引到外部接头处,以便与其它器件连接.封装形式是指安装半导体集成电路芯片用的外壳.它不仅起着 ...

  5. 从0开始学爬虫4之requests基础知识

    从0开始学爬虫4之requests基础知识 安装requestspip install requests get请求:可以用浏览器直接访问请求可以携带参数,但是又长度限制请求参数直接放在URL后面 P ...

  6. FFmpeg4.0笔记:本地媒体文件解码、帧格式转换、重采样、编码、封装、转封装、avio、硬解码等例子

    Github https://github.com/gongluck/FFmpeg4.0-study/blob/master/official%20example/my_example.cpp #in ...

  7. 爬虫简介、requests 基础用法、urlretrieve()

    1. 爬虫简介 2. requests 基础用法 3. urlretrieve() 1. 爬虫简介 爬虫的定义 网络爬虫(又被称为网页蜘蛛.网络机器人),是一种按照一定的规则,自动地抓取万维网信息的程 ...

  8. 孟老板 BaseAdapter封装 (一) 简单封装

    BaseAdapter封装(一) 简单封装 BaseAdapter封装(二) Header,footer BaseAdapter封装(三) 空数据占位图 BaseAdapter封装(四) PageHe ...

  9. 记录python接口自动化测试--requests使用和基本方法封装(第一目)

    之前学习了使用jmeter+ant做接口测试,并实现了接口的批量维护管理(大概500多条用例),对"接口"以及"接口测试"有了一个基础了解,最近找了一些用pyt ...

随机推荐

  1. IDEA注册码(附修改hosts文件的方法)

    推荐获取IDEA注册码的网站:http://idea.lanyus.com/ 亲测好用! 也可复制下边的注册码: K71U8DBPNE-eyJsaWNlbnNlSWQiOiJLNzFVOERCUE5F ...

  2. 设置非root账号不用sudo直接执行docker命令

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  3. Nacos源码深度解析1-服务注册初始化(客户端)

    一.初始化 NamingService naming = NamingFactory.createNamingService(properties); 二.通过反射传入properties生成Naco ...

  4. mysql-创建用户报错ERROR 1396 (HY000): Operation CREATE USER failed for 'XXXX'@'XXXX'

    创建用户: create user 'test'@'%' identified by 'test'; 显示ERROR 1396 (HY000): Operation CREATE USER faile ...

  5. 2020-2021-1 20209307《Linux内核原理与分析》第一周作业

    一.Linux基础命令操作 1.查看目录.新建文件.复制移除文件等 ls[选项] [文件或目录] -a 显示所有文件 包含隐藏文件 -l显示详细信息 -d查看目录属性 pwd显示当前目录 mkdir ...

  6. 线段树入门详解,洛谷P3372 【模板】线段树 1

    关于线段树: 本随笔参考例题      P3372 [模板]线段树 1 所谓线段树就是把一串数组拆分成一个一个线段形成的一棵树. 比如说像这样的一个数组1,2,3,4,5: 1 ~ 5 /       ...

  7. Web服务器-服务器开发-返回固定页面的HTTP服务器(3.3.1)

    @ 目录 1.注意 2.代码 关于作者 1.注意 浏览器解析的时候偶\r\n才算一个换行符 发送的str要编码,这里使用的是utf8 其他的都和上一篇没有什么区别 这里主要返回的是固定的网址 2.代码 ...

  8. Liunx运维(五)-信息显示与搜索文件命令

    文档目录: 一.uname:显示系统信息 二.hostname:显示或设置系统的主机名 三.dmesg:系统启动异常诊断 四.stat:显示文件或文件系统状态 五.du:统计磁盘空间使用情况 六.da ...

  9. Restful API 接口设计标准及规范

    Restful API 接口设计标准以及规范 RESTful概念 理解和评估以网络为基础的应用软件的架构设计,得到一个功能强.性能好.适宜通信的架构.REST指的是一组架构约束条件和原则." ...

  10. 爱普生 L4160 Serveies 网络打印机配置(问题解决)

    一.爱普生网络打印机固定IP地址 用网络打印机过程中,偶尔会出现打印机脱机的状况,大多数原因是打印机的IP地址在路由器重启过后重新分配了IP地址导致的.此时,为了减少不必要的麻烦就需要固定打印机的IP ...