51Testing软件测试论坛

标题: python mock 脚本 [打印本页]

作者: 巴黎的灯光下    时间: 2017-6-26 13:17
标题: python mock 脚本
rt,mock的工具有很多,但是我觉得还是不如自己写脚本mock随意,方便。
  1. #! usr/bin/python #coding=utf-8
  2. import BaseHTTPServer  
  3. import urlparse  
  4. import time
  5. from SocketServer import ThreadingMixIn
  6. import threading
  7. import os

  8. class WebRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):  

  9.     def do_POST(self):

  10.         print 'post message'
  11.         parsed_path = urlparse.urlparse(self.path)
  12.         paramstr = parsed_path.query
  13.         path = parsed_path.path
  14.         print paramstr
  15.         print path
  16.         for param in paramstr.split('&'):
  17.             print param

  18.         length = self.headers.getheader('content-length');
  19.         nbytes = int(length)
  20.         data = self.rfile.read(nbytes)
  21.         cur_thread = threading.currentThread()
  22.         print 'Thread:%s\tdata:%s' % (cur_thread.getName(), data)

  23.         message_parts = [ 'just a test']  
  24.         message = '\r\n'.join(message_parts)  
  25.         self.send_response(200)  
  26.         self.end_headers()  
  27.         self.wfile.write(message)  

  28.     def do_GET(self):

  29.         print 'get message'
  30.         parsed_path = urlparse.urlparse(self.path)
  31.         paramstr = parsed_path.query
  32.         path = parsed_path.path
  33.         print paramstr
  34.         print path
  35.         for param in paramstr.split('&'):
  36.             print param

  37.         if path == self.getShopLevelURL:
  38.             buf = self.getShopLevelResponseBody
  39.         else:
  40.             buf = 'it works'
  41.             self.send_header("Welcome", "Contect")

  42.         self.protocal_version = 'HTTP/1.1'   
  43.         self.send_response(200)  
  44.         self.end_headers()  
  45.         self.wfile.write(buf)

  46.     '''获取店铺评级接口'''
  47.     getShopLevelURL = '/abtest'
  48.     getShopLevelResponseBody = '''
  49.         {
  50.             "status": 1,
  51.             "info": "success",
  52.             "data": {
  53.                 "input": {
  54.                     "phone_number": "15168329206",
  55.                     "cookie": null,
  56.                     "id": "1234567",
  57.                     "session_id": null,
  58.                     "active_id": null
  59.                 },
  60.                 "abt_type": "b",
  61.                 "abt_name": "abt_001"
  62.             }
  63.         }'''

  64. class ThreadingHttpServer(ThreadingMixIn, BaseHTTPServer.HTTPServer):
  65.     pass

  66. if __name__ == '__main__':
  67.     '''server = BaseHTTPServer.HTTPServer(('0.0.0.0',18360), WebRequestHandler) '''
  68.     server = ThreadingHttpServer(('0.0.0.0',18360), WebRequestHandler)
  69.     ip, port = server.server_address
  70.     '''Start a thread with the server -- that thread will then start one '''
  71.     '''more thread for each request'''
  72.     server_thread = threading.Thread(target=server.serve_forever)
  73.     '''Exit the server thread when the main thread terminates'''
  74.     server_thread.setDaemon(True)
  75.     server_thread.start()

  76.     print "Server loop running in thread:", server_thread.getName()
  77.     while True:
  78.        pass
复制代码



作者: 八戒你干嘛    时间: 2017-6-26 14:54
太直接了。。。先说明一下遇到什么痛点,为何市面上的 mock 都不合适,然后自己为了解决这个痛点采用什么方案,最后再贴代码。这样大伙比较容易理解。
作者: 悠悠小仙仙    时间: 2017-6-26 14:54
我感觉不错,用什么工具不重要,思路正确就可以,这段代码活很清楚,自己用的惯就好。
作者: 乐哈哈yoyo    时间: 2017-6-26 14:55
我建议改用flask实现,代码量少的很




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2