python unittest实现api自动化测试


Posted in Python onApril 04, 2018

项目测试对于一个项目的重要性,大家应该都知道吧,写python的朋友,应该都写过自动化测试脚本。
最近正好负责公司项目中的api测试,下面写了一个简单的例子,对API 测试进行梳理。

首先,编写restful api接口文件 testpost.py,包含了get,post,put方法

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from flask import request
from flask_restful import Resource
from flask_restful import reqparse


test_praser = reqparse.RequestParser()
test_praser.add_argument('ddos')


class TestPost(Resource):
 def post(self, PostData):
 data = request.get_json()
 user = User('wangjing')
 if data['ddos']:
 return {'hello': 'uese', "PostData": PostData, 'ddos': 'data[\'ddos\']'}
 return {'hello': 'uese', "PostData": PostData}

 def get(self, PostData):
 data = request.args
 if data and data['ddos']:
 return "hello" + PostData + data['ddos'], 200
 return {'hello': 'uese', "PostData": PostData}

 def put(self, PostData):
 data = test_praser.parse_args()
 if data and data['ddos']:
 return "hello" + PostData + data['ddos'], 200
 return {'hello': 'uese', "PostData": PostData}

ps:对于request的取值,我这里定义了常用的三种方法:

post方法:request.get_json(),在调用API时,传值是json方式
get和put方法:request.args 或者reqparse.RequestParser(),调用API时,传的是字符串

其次,定义Blueprint(蓝图)文件 init.py

#!/usr/bin/env python
 # -*- coding: utf-8 -*-
 from flask import Blueprint
 from flask_restful import Api
 from testpost import TestPost

 testPostb = Blueprint('testPostb', __name__)
 api = Api(testPostb)
 api.add_resource(TestPost, '/<string:PostData>/postMeth')

然后,编写测试脚本testPostM.py

#!/usr/bin/env python
 # -*- coding: utf-8 -*-
 import unittest
 import json
 from secautoApp.api.testPostMeth import api
 from flask import url_for
 from run import app
 from secautoApp.api.testPostMeth import TestPost

 headers = {'Accept': 'application/json',
 'Content-Type': 'application/json'
 }

 class APITestCase(unittest.TestCase):
 def setUp(self):
 # self.app = create_app(os.getenv("SECAUTOCFG") or 'default')
 self.app = app
 # self.app_context = self.app.app_context()
 # self.app_context.push()
 self.client = self.app.test_client()

 #
 # def tearDown(self):
 # self.app_context.pop()

 def test_post(self):
 # with app.test_request_context():

 response = self.client.get(api.url_for(TestPost, PostData='adb', ddos='123'))
 self.assertTrue(response.status_code == 200)

 response = self.client.get(url_for('testPostb.testpost', PostData='adb', ddos='123'))
 self.assertTrue(response.status_code == 200) 
 self.assertTrue(json.loads(response.data)['PostData'] =='adb')

 response = self.client.post(url_for('testPostb.testpost', PostData='adb'), headers=headers,
   data=json.dumps({"ddos": '123'}))
 print json.loads(response.data)
 self.assertTrue(response.status_code == 200)

 response = self.client.put(url_for('testPostb.testpost', PostData='adb', ddos='123'))
 self.assertTrue(json.loads(response.data) == 'helloadb123')

 response = self.client.put(url_for('testPostb.testpost', PostData='adb'))
 print json.loads(response.data)['PostData']
 self.assertTrue(response.status_code == 200)

ps:调用的api url 主要用的是flask_restful 的api.url_for,或者是flask的url_for,下面我来说下这2种方法的具体使用

flask_restful 的api.url_for说明

api.url_for(TestPost,PostData='adb'),这里的TestPost指的是restful api接口文件中定义的class,因为我们在api蓝图中,已经通过api.add_resource(TestPost, ‘//postMeth')添加类的方式定义过

flask的url_for的使用说明

url_for(‘testPostb.testpost', PostData='adb', ddos='123'),'testPostb.testpost'这个字符串中
testPostb指的是蓝图的名称,也就是testPostb = Blueprint(‘testPostb', name)中Blueprint(‘testPostb',name)中的testPostb。
testpost指的是蓝图下endpoit的端点名称,flask_restful中,指的是api.add_resource(TestPost, ‘//postMeth')中 类名TestPost的小写

启动测试脚本:

C:\secauto3>python run.py test
test_post (testPostM.APITestCase) ... ok

----------------------------------------------------------------------
Ran 1 test in 0.056s

OK

小总结:url_for的传值和request中的取值是有对应关系的,最后就是flask_restful中端点的方式,一定要是api.add_resource中类名的小写。

领取干货:零基础入门学习python视频教程

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python调用cmd命令行制作刷博器
Jan 13 Python
python基于xml parse实现解析cdatasection数据
Sep 30 Python
Python3使用turtle绘制超立方体图形示例
Jun 19 Python
python 统计数组中元素出现次数并进行排序的实例
Jul 02 Python
对python读写文件去重、RE、set的使用详解
Dec 11 Python
Python3.5内置模块之os模块、sys模块、shutil模块用法实例分析
Apr 27 Python
python3 selenium自动化 下拉框定位的例子
Aug 23 Python
Python with标签使用方法解析
Jan 17 Python
Python找出列表中出现次数最多的元素三种方式
Feb 24 Python
matlab中二维插值函数interp2的使用详解
Apr 22 Python
浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack
Jun 23 Python
Python 无限级分类树状结构生成算法的实现
Jan 21 Python
Python Unittest自动化单元测试框架详解
Apr 04 #Python
python如何使用unittest测试接口
Apr 04 #Python
Python统计单词出现的次数
Apr 04 #Python
高效使用Python字典的清单
Apr 04 #Python
Python的numpy库中将矩阵转换为列表等函数的方法
Apr 04 #Python
python 列表,数组,矩阵两两转换tolist()的实例
Apr 04 #Python
使用Python设计一个代码统计工具
Apr 04 #Python
You might like
从零开始学YII2框架(三)扩展插件yii2-gird
2014/08/20 PHP
PHP bin2hex()函数基础实例讲解
2019/02/11 PHP
javascript第一课
2007/02/27 Javascript
javascript确认框的三种使用方法
2013/12/17 Javascript
jquery prop的使用介绍及与attr的区别
2013/12/19 Javascript
JavaScript对象的property属性详解
2014/04/01 Javascript
angularjs基础教程
2014/12/25 Javascript
js正则表达式匹配数字字母下划线等
2015/04/14 Javascript
基于jQuery滑动杆实现购买日期选择效果
2015/09/15 Javascript
javascript制作照片墙及制作过程中出现的问题
2016/04/04 Javascript
浅谈javascript中的 “ &amp;&amp; ” 和 “ || ”
2017/02/02 Javascript
深入理解Nodejs Global 模块
2017/06/03 NodeJs
input type=file 选择图片并且实现预览效果的实例
2017/10/26 Javascript
JavaScript根据json生成html表格的示例代码
2018/10/24 Javascript
js微信分享接口调用详解
2019/07/23 Javascript
JS开发自己的类库实例分析
2019/08/28 Javascript
javascript之分片上传,断点续传的实际项目实现详解
2019/09/05 Javascript
javascript开发实现贪吃蛇游戏
2020/07/31 Javascript
Vue与React的区别和优势对比
2020/12/18 Vue.js
[48:21]Mski vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
[05:26]TI10典藏宝瓶套装外观展示
2020/07/03 DOTA
[57:12]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第一场 10.31
2020/11/02 DOTA
python使用post提交数据到远程url的方法
2015/04/29 Python
老生常谈python之鸭子类和多态
2017/06/13 Python
基于python时间处理方法(详解)
2017/08/14 Python
用Python+OpenCV对比图像质量的几种方法
2019/07/15 Python
python3中eval函数用法使用简介
2019/08/02 Python
python基于opencv检测程序运行效率
2019/12/28 Python
Python变量及数据类型用法原理汇总
2020/08/06 Python
python 牛顿法实现逻辑回归(Logistic Regression)
2020/10/15 Python
用python监控服务器的cpu,磁盘空间,内存,超过邮件报警
2021/01/29 Python
关于css中margin的值和垂直外边距重叠问题
2020/10/27 HTML / CSS
.NET初级开发工程师面试题
2014/04/18 面试题
大学生实习证明范本
2014/01/15 职场文书
上课迟到检讨书
2014/02/19 职场文书
高中学生期末评语
2014/04/25 职场文书