http接口測試整理系列3--簡單實例

前文已介紹了http相關的基礎知識概念,現在我們以實際的Python代碼形式來實現一個簡單的http的服務端和客戶端,並通過unittest框架實現一個簡單的http接口測試用例

1)首先我們通過Python的socket模塊來建一個http的服務端

__author__ = '27231'
#coding:utf-8
import socket

#http頭信息
header = """\
HTTP/1.1 200 OK
Context-Type: text/html;char
Server: Python-slp version 1.0
Context-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 = True
while 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-8

import httplib2

header = {
    "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,body

3)我們先在瀏覽器中打開這個頁面試試
使用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-8

import httplib2
import unittest
import urllib

class 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格式的測試報告

待續。。。

發佈了21 篇原創文章 · 獲贊 9 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章