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)

 工程目录结果如下:

 

posted @ 2022-02-11 17:34  幸福在今天  阅读(138)  评论(0)    收藏  举报