用python做自动化测试--对服务器端的自动化测试(4)-接收端Http Server模拟器
2014-08-04 22:43
381 查看
Python有很多成熟的web框架,比如大名鼎鼎的Django和Pylons, 不过用这些来开发HTTP server模拟器,有点杀鸡用牛刀的意思,也比较复杂,所以web.py, Tornada是最好的选择,2者的用法基本类似。 我开始用的是web.py, 但web,py对于transfer-encoding: chunked的支持不好,当body很大的时候,会导致内存快速增加,溢出,需要打补丁才可以解决。 在搜索这个问题的解决方案的时候,看到了tornado,
性能是web.py的几十倍,用法是基本完全一样的,所以果断换成了Tornado。
这里的register对应前面client模拟器的reg响应, 返回给client的HTTP response。
register.header 文件例子
Content-Type: text/plain
Date:Mon, 04 Aug 2014 14:33:54 GMT
Connection:keep-alive
Vary:Accept-Encoding
register.response 文件例子
<?xml version="1.0" encoding="UTF-8"?>
< UserRegisterResponse >
<ResponseCode>0</ResponseCode>
<Description> Authentication success </Description>
</ UserRegisterResponse >
如果想要得到URL的参数,可以通过self.get_query_argument("username")
如果想要得到body里面的的参数,可以通过self.get_body_argument("username")
上面的例子比Django的web application简单多了吧,tornado web服务是非阻塞的异步模式,性能很好,用来开发高性能的模拟器也是非常适用的。
关于模拟器,还想多说一点,很多时候测试开发的时间很短,测试开发人员又少,模拟器可以简单化,不解析HTTP Client端输入,直接把response写到配置文件里面,让测试人员更大的自由度。
性能是web.py的几十倍,用法是基本完全一样的,所以果断换成了Tornado。
#!/usr/bin/env python #coding=utf-8 import logging import tornado.ioloop import tornado.web def get_headers(headers_value_file): headers_value_dic={} head_file=open(headers_value_file,"r") lines=head_file.readlines() head_file.close() for line in lines: if (line.split(":")[0]).strip()[0]!="#": headers_value_dic[(line.split(":")[0]).strip()]=(line.split(":")[1]).strip() return headers_value_dic class register(tornado.web.RequestHandler): def get(self): self.write("registration is ok") def post(self): #得到全部的body数据,可以解析body的输入,构造reponse,这块涉及到公司业务,所以删除了, request_stream = self.request.body logging.debug("request:"+request_stream) #设置response header, 要设置哪些header和对应值,在register.header配置文件里面 for header, value in get_headers("register.header").iteritems(): self.set_header(header, value) rep=open("register.response","r") response=rep.read().strip() rep.close() self.write(self.write(response)) class SMSVerification(tornado.web.RequestHandler): def get(self): self.write("SMSVerification is ok") def post(self): request_stream = self.request.body logging.debug("request:"+request_stream) response='''<?xml version="1.0" encoding="UTF-8"?> < SMSVerificationResponse > <ResponseCode>0</ResponseCode> <UserName>testuser</UserName> <UserPassword>12345</UserPassword> </ SMSVerificationResponse >''' self.write(response) if __name__=='__main__': application = tornado.web.Application([ (r"/register", register), (r"/SMSVerification", SMSVerification), ]) logging.basicConfig(filename="simserver.log",level=0,format='%(asctime)s %(name)s %(levelname)s %(module)s:%(lineno)d %(message)s') application.listen(8888) tornado.ioloop.IOLoop.instance().start()
这里的register对应前面client模拟器的reg响应, 返回给client的HTTP response。
register.header 文件例子
Content-Type: text/plain
Date:Mon, 04 Aug 2014 14:33:54 GMT
Connection:keep-alive
Vary:Accept-Encoding
register.response 文件例子
<?xml version="1.0" encoding="UTF-8"?>
< UserRegisterResponse >
<ResponseCode>0</ResponseCode>
<Description> Authentication success </Description>
</ UserRegisterResponse >
如果想要得到URL的参数,可以通过self.get_query_argument("username")
如果想要得到body里面的的参数,可以通过self.get_body_argument("username")
上面的例子比Django的web application简单多了吧,tornado web服务是非阻塞的异步模式,性能很好,用来开发高性能的模拟器也是非常适用的。
关于模拟器,还想多说一点,很多时候测试开发的时间很短,测试开发人员又少,模拟器可以简单化,不解析HTTP Client端输入,直接把response写到配置文件里面,让测试人员更大的自由度。
相关文章推荐
- 用python做自动化测试--对服务器端的自动化测试(2)-发送端Http Client模拟器
- 用python做自动化测试--对服务器端的自动化测试(2)-发送端Http Client模拟器
- 用python做自动化测试--对服务器端的自动化测试(3)-更多http client实例
- 用python做自动化测试--对服务器端的自动化测试(1)-系统架构
- RTSP客户端模拟器(TCP方式,Python实现)
- 用Python写socks5服务器端
- android 模拟器和pc服务器端用socket通讯
- 用python做自动化测试--Monkeyrunner 几个问题的解决方案
- python自动化测试_连接几组测试包
- 自动化测试脚本语言-Python 读书笔记
- 用python做自动化测试--Python实现远程性能监控(2)
- 用python做自动化测试--序
- python 自动化测试
- [MTK FP]用Python提取模拟器文件
- 基于Selenium2与Python自动化测试环境搭建
- Python操作IHTMLDocument2用于自动化测试(转)
- 游戏服务器端自动更新脚本(python)
- python自动化测试_从命令行指定测试用例
- 基于Selenium2与Python自动化测试环境搭建
- Python自动化测试 (一) Eclipse+Pydev 搭建开发环境