前文已介绍了http相关的基础知识概念,现在我们以实际的Python代码形式来实现一个简单的http的服务端和客户端,并通过unittest框架实现一个简单的http接口测试用例
1)首先我们通过Python的socket模块来建一个http的服务端
__author__ = '27231'#coding:utf-8import socket#http头信息header = """/HTTP/1.1 200 OKContext-Type: text/html;charServer: Python-slp version 1.0Context-Length:/"""#组装http格式数据def http_data(header,datafile): fp = file(datafile) context = fp.readlines() context = ''.join(context) data = "{0} {1}/n/n{2}/n/n".format(header,len(context),context) return data# 基础参数HOST = '10.33.6.205'PORT = 8090# 创建套接字s_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)s_socket.bind((HOST,PORT))s_socket.listen(2)flag = Truewhile flag: if flag: conn,addr = s_socket.accept() PRint 'Connected by',addr flag = False data = conn.recv(1024) if not data: print "Connect closed,start accept a new connect" flag = True continue conn.sendall(http_data(header,'index.html'))conn.close()2)我们再来个http的客户端
__author__ = '27231'#coding:utf-8import httplib2header = { "Accept": "image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, */*","Accept-Language": "zh-CN","User-Agent": "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727)","Accept-Encoding": "gzip, deflate","Host": "10.33.6.205:8090","Connection": "Keep-Alive"}http = httplib2.Http()resp,body = http.request("http://10.33.6.205:8090/","POST",body = "123",headers = header)print resp,body3)我们先在浏览器中打开这个页面试试 使用Chrome浏览器输入IP:端口
用wireshark瞅瞅这个交互数据是什么样子的
对比wireshark抓包中,服务端返回200ok的头信息和数据可知,头和body一起即为我们在http服务端组装的一个文本数据,该文本数据通过socket中的tcp方式发送给web;由此可知http作为应用层的一种协议,其实就是一种文本的交互格式,网络传输基于socket的tcp或udp
http协议结构 headers(头信息,有相应字段规范) /n/n(空一行即两个换行符) Body(协议数据部分)
3)我们再通过Python的unitttest单元测试框架,来测试我们这个搭建的http服务
__author__ = '27231'#coding:utf-8import httplib2import unittestimport urllibclass httptest(unittest.TestCase): def test_1(self): Http = httplib2.Http() #创建http实例 resp,message = Http.request("http://10.33.6.205:8090","POST",body="123") #发送http请求 print resp,message #输出返回头及body self.assertEqual(200,resp.status) #断言判断返回结果 self.assertIn("login name",message) #断言判断返回结果到此我们一个简单的http接口测试用例编写结束
接下来我们将利用Python的文件操作、日志操作等将接口测试相关的数据做相应抽离,并生成html格式的测试报告
待续。。。
新闻热点
疑难解答