03_demo_对requests关键字post\assert二次封装【API】
#!/usr/bin/env python3 #-*- coding: utf-8 -*- "对requests的关键字post\assert进行二次封装" __author__ = 'Vera' import configparser import json import yaml from api_keyword_03.requests_Key_rePackage import requests_Key_rePackage #组装参数 #从config/config.ini 文件读取hostURL ''' [DEFAULT] host_url=https://www.baidu.com ''' conf=configparser.ConfigParser() conf.read('../02_config/config.ini') host=conf.get('DEFAULT','host_url') #从data/login00.yaml 文件读取接口path、请求参数、请求header ''' path: /byLogin data: loginAccount: 81881207 password: 1207 headers: content-type: application/json clienttype: ANDROID appcode: APP timezone: UTC+8 language: en_US version: 1.2.7 ''' file=open('../02_data/login00.yaml','r') dataFromFile=yaml.load(file,yaml.FullLoader) print('从login00.yaml 测试数据文件读取的数据类型是:',type(dataFromFile)) urlTarget=host+dataFromFile['path'] parameter=json.dumps(dataFromFile['data']) header=dataFromFile['headers'] #模拟post请求 #调用封装后的post关键字 ''' #二次封装post的关键字 import requests class requests_Key_rePackage: #定义post方法: def post(self,url,headers=None,data=None,**kwargs): return requests.post(url=url,headers=headers,data=data) ''' key=requests_Key_rePackage() res=key.post(url=urlTarget,data=parameter,headers=header) #提取响应报文的数据 res_json=json.loads(res.text) expect01=res_json['message'] print('预期返回是success,实际返回结果:',expect01) #断言校验 #调用封装后的assert关键字 ''' #定义asset方法: def asset(self,strExpec=None,strResp=None): assert strExpec == strResp, '校验失败,期望结果是'+strExpec ''' key.assertRe("SUCCESS",expect01) ''' --------------------- 需要了解一下 configparser 这个模块、yaml这个模块的使用 json.dump() \json.load()方法的使用 --------------------- ''' ''' 去掉多余注释,简洁很多 conf=configparser.ConfigParser() conf.read('../02_config/config.ini') host=conf.get('DEFAULT','host_url') file=open('../02_data/login00.yaml','r') dataFromFile=yaml.load(file,yaml.FullLoader) urlTarget=host+dataFromFile['path'] parameter=json.dumps(dataFromFile['data']) header=dataFromFile['headers'] key=requests_Key_rePackage() res=key.post(url=urlTarget,data=parameter,headers=header) res_json=json.loads(res.text) expect01=res_json['message'] key.assertRe("SUCCESS",expect01) '''

频繁调用request库下的get 和post------>进行公共提取

#二次封装request库get\post的关键字, import requests class keyDemo: #定义get请求方法 #请求可能没有参数,或没有header,因此给1个默认值做场景的兼容 def get(self,url,headers=None,param=None): return requests.get(url=url,headers=headers,params=param) #定义post请求方法 def post(self,url,headers=None,param=None): return requests.post(url=url, headers=headers, data=param)
# 导入已经封装后的post、get方法,直接使用 from api_keyword.keyDemo import keyDemo import json #怎样导入模块: 先找到package包,再到对应模块(即py文件),最后导入class名 kd = keyDemo() host='https://sit-api.fuse.com.vn' path_login01='/test/tenants/byLogin' param={"loginAccount":"84818812393","password":"8123099"} data=json.dumps(param) headers={"content-type":"application/json","clienttype":"ANDROID","appcode":"IDP_FUSE_PRO","timezone":"UTC+8","language":"en_US","version":"1.2.7","accept-encoding":"gzip","charset":"utf-8","fusetoken":""} #模拟发送请求 res=kd.post(url=host+path_login01,headers=headers,param=data) print(res.text)
提取host地址,放在config.ini文件
# 导入已经封装后的post、get方法,直接使用 from api_keyword.keyDemo import keyDemo import json import configparser conf=configparser.ConfigParser() conf.read('../config/config.ini') print(conf.get('DEFAULT','url')) #怎样导入模块: 先找到package包,再到对应模块(即py文件),最后导入class名 kd = keyDemo() ''' 将host地址提取,放在config.ini文件,常用写法如下 ''' path_login01='/test/tenants/byLogin' url=conf.get('DEFAULT','url')+path_login01 param={"loginAccount":"84818812393","password":"8123099"} data=json.dumps(param) headers={"content-type":"application/json","clienttype":"ANDROID","appcode":"IDP_FUSE_PRO","timezone":"UTC+8","language":"en_US","version":"1.2.7","accept-encoding":"gzip","charset":"utf-8","fusetoken":""} #模拟发送请求 res=kd.post(url=url,headers=headers,param=data) print(res.text)
config.ini文件
[DEFAULT]
url=https://127.0.0.1
data测试数据、接口path、接口header,放在yaml文件
'''获取测试数据文件的内容'''
file =open('../data/login.yaml','r')
data=yaml.load(file,yaml.FullLoader)
print(type(data))
''' 读取结果是字典类型'''
yaml文件
path: /test/tenants/byLogin data: loginAccount: 86812393 password: 12393 headers: content-type: application/json clienttype: ANDROID appcode: IDP_PRO timezone: UTC+8 language: en_US version: 1.2.7
最终封装后,代码简化效果如下:
url=conf.get('DEFAULT','url')+data['path']
param=json.dumps(data['data'])
header=data['headers']
kd = keyDemo()
res = kd.post(url=url,headers=header,param=param)
from api_keyword.keyDemo import keyDemo import json import configparser import yaml '''实例化需要的内容 host''' conf=configparser.ConfigParser() conf.read('../config/config.ini') print(conf.get('DEFAULT','url')) '''创建data''' file =open('../data/login.yaml','r') data=yaml.load(file,yaml.FullLoader) print(type(data)) '''测试数据 path header data''' url=conf.get('DEFAULT','url')+data['path'] param=json.dumps(data['data']) header=data['headers'] '''执行测试''' kd = keyDemo() res = kd.post(url=url,headers=header,param=param) print(res.text)
工程目录结果如下:
-----------------------------------------Have a good day!---------------------------------------------------------------------------------------------------


浙公网安备 33010602011771号