企业网站建设知识,线上销售模式,医疗机构网站模板,潍坊 企业网站建设这篇文章主要为大家详细介绍了python unittest实现api自动化测试的方法#xff0c;具有一定的参考价值#xff0c;感兴趣的小伙伴们可以参考一下
项目测试对于一个项目的重要性#xff0c;大家应该都知道吧#xff0c;写python的朋友#xff0c;应该都写过自动化测试脚本。…这篇文章主要为大家详细介绍了python unittest实现api自动化测试的方法具有一定的参考价值感兴趣的小伙伴们可以参考一下
项目测试对于一个项目的重要性大家应该都知道吧写python的朋友应该都写过自动化测试脚本。
最近正好负责公司项目中的api测试下面写了一个简单的例子对API 测试进行梳理。
首先编写restful api接口文件 testpost.py包含了getpostput方法
#!/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, //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, PostDataadb, ddos123))
self.assertTrue(response.status_code 200)
response self.client.get(url_for(testPostb.testpost, PostDataadb, ddos123))
self.assertTrue(response.status_code 200)
self.assertTrue(json.loads(response.data)[PostData] adb)
response self.client.post(url_for(testPostb.testpost, PostDataadb), headersheaders,
datajson.dumps({ddos: 123}))
print json.loads(response.data)
self.assertTrue(response.status_code 200)
response self.client.put(url_for(testPostb.testpost, PostDataadb, ddos123))
self.assertTrue(json.loads(response.data) helloadb123)
response self.client.put(url_for(testPostb.testpost, PostDataadb))
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,PostDataadb),这里的TestPost指的是restful api接口文件中定义的class因为我们在api蓝图中已经通过api.add_resource(TestPost, ‘//postMeth)添加类的方式定义过
flask的url_for的使用说明url_for(‘testPostb.testpost, PostDataadb, ddos123),testPostb.testpost这个字符串中
testPostb指的是蓝图的名称也就是testPostb Blueprint(‘testPostb, name)中Blueprint(‘testPostb,name)中的testPostb。
testpost指的是蓝图下endpoit的端点名称,flask_restful中指的是api.add_resource(TestPost, ‘//postMeth)中 类名TestPost的小写
启动测试脚本
C:\secauto3python run.py test
test_post (testPostM.APITestCase) ... ok
----------------------------------------------------------------------
Ran 1 test in 0.056s
OK
小总结url_for的传值和request中的取值是有对应关系的最后就是flask_restful中端点的方式一定要是api.add_resource中类名的小写。
相关推荐
以上就是python unittest实现api自动化测试_python的详细内容更多请关注php中文网其它相关文章本文原创发布php中文网转载请注明出处感谢您的尊重