python接口自动化读取json,yaml配置文件+封装requests+unittest+HTMLRunner实现全自动化
# coding=utf-8
import json
import requests
class TestApi(object):
"""
/*
@param: @session ,@cookies
the request can be divided into session request and cookie request according to user's own choice
however,url and header is must ,other parameters are given by user to make it is None or not
*/
"""
def get(self,url,param,header,cookie=None,session=None,**kwargs):
if session:
return session.request("GET",url,param,headers=header,**kwargs)
elif cookie:
return requests.get(url,params=param,headers=header,cookies=cookie,**kwargs)
"""
/*
@param: @session ,@cookies
传入的是dict类型 python object 对象
header is form data: application/x-www-urlencoded
transfer data to data directly ,finally requests's submit will be like 'aa=dd&bb=ff' formation
header is json :application/json
due to the data can be 'str','dict'and tuple and so on ,so when we choose data and
data is given by dict,we must transfer it to json str,but when is json type str ,we must must
transfer python object dict to json str with json.dumps(),
finally the request submit data format is str like:
'aa=dd&bb=ff',but when choose json the submit will become like {'a': 'cc' ,'b': 'dd'} ,
data and json cant not be used in the requests at the same time
*/
"""
def post_data(self,url,type,data,header,cookie=None,session=None,**kwargs):
if cookie:
if type is "data":
return requests.post(url,data=data,headers=header,cookies=cookie,**kwargs)
elif type is "json":
return requests.post(url,data=json.dumps(data),headers=header,cookies=cookie,**kwargs)
elif session:
if type is "data":
return session.request("POST",url,data=data,headers=header,cookies=cookie,**kwargs)
elif type is "json":
return session.request("POST",url,data=json.dumps(data),headers=header,cookies=cookie,**kwargs)
"""
/*
@:param:@json object
json的value为传入的json对象
请求header默认:ContentType: application/json
*/
"""
def post_json(self,url,header,json,cookie=None,session=None,**kwargs):
if cookie:
return requests.post(url,headers=header,json=json,cookies=cookie,**kwargs)
elif session:
return session.request("POST",url,headers=header,json=json,**kwargs)
"""
/*
@:param: @url,@data,@**kwargs
Tip: header you need to according to your api to be given in **kwargs position
*/
"""
def put(self,url,data,cookie=None,session=None,**kwargs):
if cookie:
return requests.put(url,data,cookies=cookie,**kwargs)
elif session:
return session.request("PUT",url,data,**kwargs)
"""
/*
@:param: @url,@data,@**kwargs
Tip: header you need to according to your api to given in **kwargs position
*/
"""
def delete(self,url,data,cookie=None,session=None,**kwargs):
if cookie:
return requests.delete(url,data,cookies=cookie,**kwargs)
elif session:
return session.request("DELETE",url,data,**kwargs)
# coding=utf-8
from ruamel import yaml
from API.apitest import *
"""
/*@param: python version 3.7
第一步制造配置文件yaml或者json都可以保存请求报文接口参数的:
写入方法很简单见:Jsread.py的Yml,Js类的write()方法
*/
"""
class Yml(object):
def __init__(self, yml_path):
self.yml_path = yml_path
def read(self):
with open(self.yml_path, 'r', encoding='utf-8')as f:
data = yaml.load(f,Loader=yaml.Loader)
return data
class EnvParameter(object):
def __init__(self, con_path):
defaults = {"url": None,
"header": None,
"data": None,
"method": None,
"param": None,
"type": None,
"json": None}
self.cookies = None
self.session = None
self.con_path = con_path
dict = Yml(self.con_path).read()
defaults.update(dict)
self.url = defaults["url"]
self.header = defaults["header"]
self.method = defaults["method"]
self.data = defaults["data"]
self.param = defaults["param"]
self.json = defaults["json"]
self.type = defaults["type"]
class TestSend(EnvParameter):
def __init__(self,config_path,cookie1=None,session1=None):
# EnvParameter.__init__(self,conpath=None ,url=None,method=None,header=None,type=None,data=None,param=None,json=None,cookies=None,session=None)
EnvParameter.__init__(self,config_path)
self.session=session1
self.cookie1=cookie1
# print(self.param,self.type) #测试下类继承效果
def send(self):
if self.method.upper()=="GET":
rep=TestApi().get(self.url,self.param,self.header,cookie=self.cookie1,session=self.session)
return rep
elif self.method.upper()=="POST":
rep=TestApi().post_data(self.url,self.type,self.data,self.header,cookie=self.cookie1,session=self.session1)
return rep
elif self.method.upper()=="PUT":
rep=TestApi().put(self.url,self.data,cookie=self.cookie1,session=self.session1)
return rep
elif self.method.upper()=="DELETE":
rep=TestApi().delete(self.url,self.data,cookie=self.cookie1,session=self.session1)
return rep
# if __name__ == "__main__":
# TestSend('./conf.yaml')
import unittest
import requests
from API.testyaml import *
class Interface(unittest.TestCase):
@classmethod
def setUpClass(cls):
global session
s = requests.session()
requests.get(url="http://www.baidu.com")
session =s
print("---------------开始测试所有接口--------------")
@classmethod
def tearDownClass(cls):
"""清除cookie"""
session.cookies.clear() #也可以这样写 session.cookies=None
print("---------------加载所有接口结束销毁cookie--------------")
def test_001(self):
response=TestSend('./conf.yaml',session1=session).send()
print(response.status_code)
if __name__ =="__main__":
unittest.main()
详情也可以见我的csdn地址
---------------------
作者:流浪的python
来源:CSDN
原文:https://blog.csdn.net/chen498858336/article/details/86619178
版权声明:本文为博主原创文章,转载请附上博文链接!
python接口自动化读取json,yaml配置文件+封装requests+unittest+HTMLRunner实现全自动化的更多相关文章
- MOOC(7)- case依赖、读取json配置文件进行多个接口请求-读取json封装成类(13)
把读取json数据的函数封装成类 # -*- coding: utf-8 -*- # @Time : 2020/2/12 16:44 # @File : do_json_13.py # @Author ...
- python接口测试之读取配置文件
1.python使用自带的configparser模块用来读取配置文件,配置文件可以为.conf或.ini结尾 在使用前需要先安装该模块,使用pip安装即可 2.新建一个名为a.conf的配置文件 a ...
- python写的读取json配置文件
配置文件默认为conf.json 使用函数set完成追回配置项. 使用load或取配置项. 代码如下: #!/usr/bin/env python3 # -*- coding: utf-8 -*- ' ...
- Python Configparser模块读取、写入配置文件
写代码中需要用到读取配置,最近在写python,记录一下. 如下,假设有这样的配置. [db] db_host=127.0.0.1 db_port=3306 db_user=root db_pass= ...
- QuantLib 金融计算——自己动手封装 Python 接口(1)
目录 QuantLib 金融计算--自己动手封装 Python 接口(1) 概述 QuantLib 如何封装 Python 接口? 自己封装 Python 接口 封装 Array 和 Matrix 类 ...
- QuantLib 金融计算——自己动手封装 Python 接口(2)
目录 QuantLib 金融计算--自己动手封装 Python 接口(2) 概述 如何封装一项复杂功能? 寻找最小功能集合的策略 实践 估计期限结构参数 修改官方接口文件 下一步的计划 QuantLi ...
- 当向后台插入或读取JSON数据遇见回车时
今天在项目中发现.当插入或读取JSON数据时遇见回车符.返回JSON数据格式时会报错(firebug里体现为乱码),百度了一下发现JSON不支持字符串里存在回车! 解决的方法: 在向接口插入带json ...
- python - 接口自动化测试 - ReadConfig - 读取配置文件封装
# -*- coding:utf-8 -*- ''' @project: ApiAutoTest @author: Jimmy @file: read_config.py @ide: PyCharm ...
- 接口自动化 基于python实现的http+json协议接口自动化测试框架源码(实用改进版)
基于python实现的http+json协议接口自动化测试框架(实用改进版) by:授客 QQ:1033553122 欢迎加入软件性能测试交流QQ群:7156436 目录 1. ...
随机推荐
- groovy动态类型--能力式设计
动态类型 动态类型中的类型是在运行时推断的,方法及其参数也是在运行时检查的. 能力式设计 被称作鸭子模式:他有这么一个观点:如果它走路像鸭子,叫起来也像鸭子,那么他就是一只鸭子. 契约式设计 相当于J ...
- sql语句中as的意思是什么?
as 一般用在两个地方,一个是query的时候,用来重新指定返回的column(列) 名字如:一个table 有个column叫 id, 我们的query是select id from table1. ...
- BZOJ3529: [Sdoi2014]数表(莫比乌斯反演 树状数组)
题意 题目链接 Sol 首先不考虑\(a\)的限制 我们要求的是 \[\sum_{i = 1}^n \sum_{j = 1}^m \sigma(gcd(i, j))\] 用常规的套路可以化到这个形式 ...
- Python之面向对象继承复习
总结:self是谁就从谁开始寻找
- 用java访问Oracle数据库、取得记录并输出到界面
Class.forName(“oracle.jdbc.driver.OracleDriver”);Connection conn=DriverManager.getConnection( url , ...
- SpringBoot访问html访问不了的问题
springboot默认是不支持jsp的 注意pom.xml是否添加了thymeleaf的依赖 <dependency> <groupId>org.springframewor ...
- MVC框架以及实例
MVC框架 MVC(model,view,controller),一种将业务逻辑.数据.界面分离的方法组织代码的框架.在改进界面及用户交互的同时,不需要重写业务逻辑.MVC将传统的输入.处理和输出分离 ...
- 【Leetcode】【Easy】Compare Version Numbers
Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 &l ...
- 同时对view延时执行两个动画时候的现象
同时对view延时执行两个动画时候的现象 对于view延时执行了两个动画后,会将第一个动画效果终止了,直接在第一个动画的view的最后的状态上接执行后续的动画效果,也就是说,我们可以利用这个特性来写分 ...
- ppt基本操作
一.概述及作用 ppt是一种表达用户思想的有力工具,无论是介绍一个计划,介绍一个新的产品,或是员工报告,员工培训,只要事先做一个演示文稿,那么阐述的过程就会变得见面,简明和清晰. 二.界面构成 演示文 ...