歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> OpenStack中給wsgi程序寫單元測試的方法

OpenStack中給wsgi程序寫單元測試的方法

日期:2017/3/1 9:40:31   编辑:Linux編程

在 OpenStack 中, 針對web應用, 有三種方法來寫單元測試

1) 使用webob生成模擬的request

  • from __future__ import print_function
  • import webob
  • import testtools
  • def hello_world(env, start_response):
  • if env['PATH_INFO'] != '/':
  • start_response('404 Not Found', [('Content-Type', 'text/plain')])
  • return ['Not Found\r\n']
  • start_response('200 OK', [('Content-Type', 'text/plain')])
  • return ['hello world!']
  • class WsgiAppTestCase(testtools.TestCase):
  • def test_hello_world_with_webob(self):
  • resp = webob.Request.blank('/').get_response(hello_world)
  • print("resp=%s" % (resp))
  • self.assertEqual(resp.status_code, 200)
  • self.assertEqual(resp.body, "hello world!")

2) 使用webtest生成模擬的request

  • from __future__ import print_function
  • import httplib2
  • import socket
  • import webob
  • import webtest
  • import testtools
  • def hello_world(env, start_response):
  • if env['PATH_INFO'] != '/':
  • start_response('404 Not Found', [('Content-Type', 'text/plain')])
  • return ['Not Found\r\n']
  • start_response('200 OK', [('Content-Type', 'text/plain')])
  • return ['hello world!']
  • class WsgiAppTestCase(testtools.TestCase):
  • def test_hello_world_with_webtest(self):
  • app = webtest.TestApp(hello_world)
  • resp = app.get('/')
  • print("resp=%s" % (resp))
  • self.assertEqual(resp.status_code, 200)
  • self.assertEqual(resp.body, "hello world!")

3) 啟動一個wsgi server, 並發送真實的 HTTP請求

這種辦法最復雜, 需要以下步驟

  • 調用eventlet包, 開啟monkey_patch模式
  • 使用eventlet包, 創建一個socket, 並在127.0.0.1:8080上做監聽
  • 使用eventlet包, 創建一個wsgi server
  • 使用httplib2包, 發送一個HTTP數據包給server
  • from __future__ import print_function
  • import httplib2
  • import socket
  • import testtools
  • def hello_world(env, start_response):
  • if env['PATH_INFO'] != '/':
  • start_response('404 Not Found', [('Content-Type', 'text/plain')])
  • return ['Not Found\r\n']
  • start_response('200 OK', [('Content-Type', 'text/plain')])
  • return ['hello world!']
  • class WsgiAppTestCase(testtools.TestCase):
  • def test_hello_world_with_eventlet(self):
  • import eventlet
  • eventlet.monkey_patch(os=False)
  • bind_addr = ("127.0.0.1","8080")
  • try:
  • info = socket.getaddrinfo(bind_addr[0],
  • bind_addr[1],
  • socket.AF_UNSPEC,
  • socket.SOCK_STREAM)[0]
  • family = info[0]
  • bind_addr = info[-1]
  • except Exception:
  • family = socket.AF_INET
  • sock = eventlet.listen(bind_addr, family)
  • wsgi_kwargs = {
  • 'func': eventlet.wsgi.server,
  • 'sock': sock,
  • 'site': hello_world,
  • 'protocol': eventlet.wsgi.HttpProtocol,
  • 'debug': False
  • }
  • server = eventlet.spawn(**wsgi_kwargs)
  • client = httplib2.Http()
  • resp, body = client.request(
  • "http://127.0.0.1:8080", "get", headers=None, body=None)
  • print("resp=%s, body=%s" % (resp, body))
  • self.assertEqual(resp.status, 200)
  • self.assertEqual(body, "hello world!")
  • server.kill()

在Ubuntu 12.10 上安裝部署Openstack http://www.linuxidc.com/Linux/2013-08/88184.htm

Ubuntu 12.04 OpenStack Swift單節點部署手冊 http://www.linuxidc.com/Linux/2013-08/88182.htm

OpenStack雲計算快速入門教程 http://www.linuxidc.com/Linux/2013-08/88186.htm

企業部署OpenStack:該做與不該做的事 http://www.linuxidc.com/Linux/2013-09/90428.htm

CentOS 6.5 x64bit 快速安裝OpenStack http://www.linuxidc.com/Linux/2014-06/103775.htm

Copyright © Linux教程網 All Rights Reserved