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. ...
随机推荐
- 理解B+树算法和Innodb索引
一.innodb存储引擎索引概述: innodb存储引擎支持两种常见的索引:B+树索引和哈希索引. innodb支持哈希索引是自适应的,innodb会根据表的使用情况自动生成哈希索引. B+树索引就是 ...
- Thymeleaf学习记录(8)--表达式基本对象
基础对象 #ctx:上下文对象 /* * ====================================================================== * See ja ...
- csharp: 图片字符间距
引用WINDOWS API: [DllImport("gdi32.dll", CharSet = CharSet.Auto)] public static extern int S ...
- BZOJ1021 [SHOI2008]循环的债务
Description Alice.Bob和Cynthia总是为他们之间混乱的债务而烦恼,终于有一天,他们决定坐下来一起解决这个问题. 不过,鉴别钞票的真伪是一件很麻烦的事情,于是他们决定要在清还债务 ...
- Typescript中一些不理解的概念解释(泛型、断言、解构、枚举)
新的项目想使用typescript,因此又对其概念及使用过一遍,本文主要记录下对之前一些概念不太理解的地方. 1.泛型 定义: 在定义函数.接口或者类的时候,不预先指定具体的类型,而是在使用的时候再指 ...
- Java内存模型(JMM)以及 垃圾回收机制 小结
内存模型: 内存模型描述了程序中各个变量(实例域.静态域和数组元素)之间的关系,以及在实际计算机系统中将变量存储到内存和从内存中取出变量这样的底层细节,对象最终是存储在内存里面的,这点没有错,但是编译 ...
- GoJs实现流程管理图
GoJS是一个实现交互类图表(比如流程图,树图,关系图,力导图等等)的JS库. 可以加入诸多功能.如流程判断,节点处理等等.GOJS在设计上极大的减轻了开发人员的开发成本.
- 浅谈 Underscore.js 中 _.throttle 和 _.debounce 的差异[转]
看的文章来自: https://blog.coding.net/blog/the-difference-between-throttle-and-debounce-in-underscorejs 使用 ...
- 四、angularjs 如何在页面没有登录的情况下阻止用户通过更改url进入页面--$stateChangeStart
有时候用户没有登录或者在某些情况下你是不希望用户进入页面,但是angular的路由机制可以让用户直接通过更改Url进入页面,如何处理这一问题呢? ——监控路由转换机制 $stateChangeStar ...
- JS 日期与时间戳相互转化
1.日期格式转时间戳 function getTimestamp(time) { return Date.parse(new Date(time)); } 2.时间戳转日期格式 function tr ...