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之hello world
May 21 Python
python算法表示概念扫盲教程
Apr 13 Python
Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】
Jun 20 Python
基于Python实现的微信好友数据分析
Feb 26 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
Jan 14 Python
python实现数据分析与建模
Jul 11 Python
将python安装信息加入注册表的示例
Nov 20 Python
Python自定义聚合函数merge与transform区别详解
May 26 Python
python判断字符串以什么结尾的实例方法
Sep 18 Python
使用python把xmind转换成excel测试用例的实现代码
Oct 12 Python
python实现图像高斯金字塔的示例代码
Dec 11 Python
python用opencv 图像傅里叶变换
Jan 04 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
关于mysql字符集设置了character_set_client=binary 在gbk情况下会出现表描述是乱码的情况
2013/01/06 PHP
destoon首页调用求购供应信息的地区名称的方法
2014/08/21 PHP
php采用file_get_contents代替使用curl实例
2014/11/07 PHP
实例简介PHP的一些高级面向对象编程的特性
2015/11/27 PHP
基于jQuery的淡入淡出可自动切换的幻灯插件
2010/08/24 Javascript
js中复制行和删除行的操作实例
2013/06/25 Javascript
jsp网页搜索结果中实现选中一行使其高亮
2014/02/17 Javascript
JavaScript中连接操作Oracle数据库实例
2015/04/02 Javascript
推荐10 个很棒的 jQuery 特效代码
2015/10/04 Javascript
jQuery获取cookie值及删除cookie用法实例
2016/04/15 Javascript
原生实现一个react-redux的代码示例
2018/06/08 Javascript
详解JavaScript 中 if / if...else...替换方式
2018/07/15 Javascript
vue实现绑定事件的方法实例代码详解
2019/06/20 Javascript
python中list列表的高级函数
2016/05/17 Python
Windows中使用wxPython和py2exe开发Python的GUI程序的实例教程
2016/07/11 Python
python递归删除指定目录及其所有内容的方法
2017/01/13 Python
Python 登录网站详解及实例
2017/04/11 Python
Python序列化基础知识(json/pickle)
2017/10/19 Python
利用python将xml文件解析成html文件的实现方法
2017/12/22 Python
利用Python在一个文件的头部插入数据的实例
2018/05/02 Python
Python数据可视化库seaborn的使用总结
2019/01/15 Python
python实现kmp算法的实例代码
2019/04/03 Python
Python split() 函数拆分字符串将字符串转化为列的方法
2019/07/16 Python
python GUI库图形界面开发之PyQt5信号与槽多窗口数据传递详细使用方法与实例
2020/03/08 Python
django正续或者倒序查库实例
2020/05/19 Python
Python实现一个优先级队列的方法
2020/07/31 Python
python 模块导入问题汇总
2021/02/01 Python
鲜为人知的HTML5语音合成功能
2019/05/17 HTML / CSS
使用数据结构给女朋友写个Html5走迷宫游戏
2019/11/26 HTML / CSS
全球知名旅游社区巴西站点:TripAdvisor巴西
2016/07/21 全球购物
台湾百利市购物中心:e-Payless
2017/08/16 全球购物
毕业生如何写自我鉴定
2014/03/15 职场文书
聘任书模板
2014/03/29 职场文书
2014年学习全国道德模范事迹思想汇报
2014/09/15 职场文书
2015年幼儿园大班工作总结
2015/04/25 职场文书
Java网络编程之UDP实现原理解析
2021/09/04 Java/Android