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 相关文章推荐
Flask框架学习笔记(一)安装篇(windows安装与centos安装)
Jun 25 Python
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
Jun 18 Python
Python不使用int()函数把字符串转换为数字的方法
Jul 09 Python
python如何实现一个刷网页小程序
Nov 27 Python
python替换字符串中的子串图文步骤
Jun 19 Python
Python求两点之间的直线距离(2种实现方法)
Jul 07 Python
关于python导入模块import与常见的模块详解
Aug 28 Python
Python程序控制语句用法实例分析
Jan 14 Python
关于Python 中的时间处理包datetime和arrow的方法详解
Mar 19 Python
用Python 爬取猫眼电影数据分析《无名之辈》
Jul 24 Python
基于python requests selenium爬取excel vba过程解析
Aug 12 Python
pycharm 添加解释器的方法步骤
Aug 31 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
php读取csv实现csv文件下载功能
2013/12/18 PHP
php实现指定字符串中查找子字符串的方法
2015/03/17 PHP
php实现在线通讯录功能(附源码)
2016/05/13 PHP
PHP导出带样式的Excel示例代码
2016/08/28 PHP
Netbeans 8.2与PHP相关的新特性介绍
2016/10/08 PHP
php微信公众平台交互与接口详解
2016/11/28 PHP
PHP分享图片的生成方法
2018/04/25 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
JavaScript的面向对象(一)
2006/11/09 Javascript
解决Extjs4中form表单提交后无法进入success函数问题
2013/11/26 Javascript
jquery清空表单数据示例分享
2014/02/13 Javascript
jQuery中:disabled选择器用法实例
2015/01/04 Javascript
js限制文本框只能输入中文的方法
2015/08/11 Javascript
AngularJS解决ng-if中的ng-model值无效的问题
2017/06/21 Javascript
js实现鼠标移动到图片产生遮罩效果
2017/10/21 Javascript
JavaScript模拟实现封装的三种方式及写法区别
2017/10/27 Javascript
ajax请求data遇到的问题分析
2018/01/18 Javascript
对vue里函数的调用顺序介绍
2018/03/17 Javascript
node.js学习笔记之koa框架和简单爬虫练习
2018/12/13 Javascript
vue cli3.0 引入eslint 结合vscode使用
2019/05/27 Javascript
Layui动态生成select下拉选择框不显示的解决方法
2019/09/24 Javascript
vue 重塑数组之修改数组指定index的值操作
2020/08/09 Javascript
python学习手册中的python多态示例代码
2014/01/21 Python
Python三种遍历文件目录的方法实例代码
2018/01/19 Python
python模糊图片过滤的方法
2018/12/14 Python
Python Selenium 之关闭窗口close与quit的方法
2019/02/13 Python
python:动态路由的Flask程序代码
2019/11/22 Python
Python Selenium异常处理的实例分析
2021/02/28 Python
Html5 canvas实现粒子时钟的示例代码
2018/09/06 HTML / CSS
Oakley西班牙官方商店:太阳眼镜和男女运动服
2019/04/26 全球购物
CHARLES & KEITH台湾官网:新加坡时尚品牌
2019/07/30 全球购物
英文自我鉴定
2013/12/10 职场文书
个人先进事迹材料
2014/12/29 职场文书
如何计划开一家便利店?
2019/07/31 职场文书
CSS3通过var()和calc()函数实现动画特效
2021/03/30 HTML / CSS
golang interface判断为空nil的实现代码
2021/04/24 Golang