接口自動化平臺搭建(一),開發以前須要準備什麼

這個博客系列準備介紹一下使用python語言中的django框架開發出一個接口自動化測試平臺。一來加深本身的印象,溫故而知新,二來但願能夠幫助到其餘想學pythonWeb開發的朋友。css

什麼是web開發呢,其實就是開發一個網站了。那開發網站須要用到哪些知識呢?html

        一、python語言基礎,由於用python開發的,因此python指定要會,最起碼你也得會條件判斷,循環,函數,類這些知識;前端

        二、html、css的基礎知識,由於要開發網站,網頁都html和css寫的,最起碼這些知識你得會,就算不會寫前端,開發不出來特別漂亮的頁面,網站,最起碼要能看懂html標籤含義;python

        三、數據庫基礎知識,由於開發一個網站的話,數據存在哪裏,就是在數據庫裏,那你最起碼要會數據庫的增刪改查吧,要否則怎麼存數據,取數據呢web

        上面這些知識會的話,就基本上能夠了,能夠開發一個簡單的小網站就沒有問題了,若是想開發比較大型的網站,業務邏輯比較複雜的,那就得用到其餘的知識了,好比說redis、MQ等等。redis

    開發前的準備:sql

        一、安裝好 python3.6版本數據庫

    下載地址:https://www.python.org/downloads/django

    選擇本地系統-並下載python3.6.5python3.x

        二、安裝好pycharm,是我們的開發工具

    首先,進入 PyCharm 的官網,PyCharm: Python IDE for Professional Developers by JetBrains.

    直接點擊DOWNLOAD NOW,當即下載:

    JetBrains 提供了三個版本的 PyCharm,分別爲:WindowsmacOSLinux. 在此,咱們選擇macOS,點擊DOWNLOAD

        三、安裝好django,版本2.0.4,使用pip3 install django==2.0.4命令安裝便可

    若是沒有pip則經過mac自帶的easy_install安裝,打開終端輸入命令sudo easy_install pip輸入密碼回車便可.

    安裝完pip而後用pip安裝django, 終端命令pip3 install 目錄等待便可, 安裝成功最後會顯示successful

    爲何要用pip3, 由於若是用pip install ... 的話會默認安裝到mac自帶的python2.x版本上,兩個版本的模塊不是互用的因此用pip3執行安裝命令就安裝到了python3.x上

    下圖爲已經安裝完成的效果:

      

    

    

        四、安裝好navicat或者其餘操做數據庫的可視化工具,由於我們要用到數據庫,要看數據庫、改數據

    下載破解版的navicat客戶端

    參考網址:https://blog.csdn.net/lzwglory/article/details/64440161

    設置鏈接(django項目自帶sqlite數據庫)

    

    便可鏈接成功,進入可視化頁面

    

    

 

Web框架本質

全部的web框架、web請求,本質上都是:socket。

HTTP中,瀏覽器充當socket客戶端,一次請求、一次響應,服務就斷開了。

import socket

def handle_request(client):
    buf = client.recv(1024)
    client.send(b"HTTP/1.1 200 OK\r\n\r\n")
    client.send(b"Hello, Seven")

def main():
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.bind(('localhost',8000))
    sock.listen(5)

    while True:
        connection, address = sock.accept()
        handle_request(connection)
        connection.close()

if __name__ == '__main__':
    main()

 

 

上述經過socket來實現了其本質,而對於真實開發中的python web程序來講,通常會分爲兩部分:服務器程序和應用程序。服務器程序負責對socket服務器進行封裝,並在請求到來時,對請求的各類數據進行整理。應用程序則負責具體的邏輯處理。爲了方便應用程序的開發,就出現了衆多的Web框架,例如:Django、Flask、web.py 等。

對服務器來講,須要支持各類不一樣框架,對框架來講,只有支持它的服務器才能被開發出的應用使用。這時候,標準化就變得尤其重要。

WSGI(Web Server Gateway Interface)是一種規範,它定義了使用python編寫的web app與web server之間接口格式,實現web app與web server間的解耦。

python標準庫提供的獨立WSGI服務器稱爲wsgiref。

from wsgiref.simple_server import make_server

def RunServer(environ, start_response):
    # environ 客戶端發來的全部數據
    # start_response 封裝要返回給用戶的數據(相應頭、相應狀態等)
    start_response('200 OK', [('Content-Type', 'text/html')])
    # 返回的內容
    return ['<h1>Hello, web!</h1>'.encode("utf-8"),]
    # return '<h1>Hello, web!</h1>'  # python2版本中

if __name__ == '__main__':
    httpd = make_server('', 8001, RunServer)
    print ("Serving HTTP on port 8000...")
    httpd.serve_forever()

 

能夠給上面start_response和return處加上斷點,看一下里面的具體內容。

訪問 127.0.0.1:8000/date 斷點顯示能夠看到,「PATH_INFO」 = (str)’/date’

自定義web框架

一、框架

經過python標準庫提供的wsgiref模塊開發一個本身的Web框架

from wsgiref.simple_server import make_server

def index():
    return [b'index',]

def login():
    return [b'login',]

def routers():
    urlpatterns = (
        ('/index',index),
        ('/login',login),
    )
    return urlpatterns

def RunServer(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    url = environ['PATH_INFO']
    urlpatterns = routers()
    func = None
    for item in urlpatterns:
        if item[0] == url:
            func = item[1]
            break
    if func:
        return func()
    else:
        return [b'404 not found',]

if __name__ == '__main__':
    httpd = make_server('', 8000, RunServer)
    print ("Serving HTTP on port 8000...")
    httpd.serve_forever()

 

二、模板引擎

在上一步驟中,對於全部的login、index均返回給用戶瀏覽器一個簡單的字符串,在現實的Web請求中通常會返回一個複雜的符合HTML規則的字符串,因此咱們通常將要返回給用戶的HTML寫在指定文件中,而後再返回。如:

index.html

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <h1>Index</h1>
</body>
</html>

 

login.html

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <form>
        <input type="text" />
        <input type="submit" />
    </form>
</body>
</html>

 

修改一、框架代碼裏index和login函數以下

def index():
    with open("index.html", 'rb') as f:
        data = f.read()
    return [data,]

def login():
    with open("login.html", 'rb') as f:
        data = f.read()
    return [data,]

 

對於上述代碼,雖然能夠返回給用戶HTML的內容以現實複雜的頁面,可是仍是存在問題:如何給用戶返回動態內容?

自定義一套特殊的語法,進行替換

  

data = data.replace(b'@@@@@', "永不眠".encode('utf-8'))

 

import time
t = str(time.time())
data = data.replace(b'@@@@@', t.encode('utf-8'))

 

也可把t改成從數據庫裏取得數據

使用開源工具jinja2,遵循其指定語法

WEB:MVC、MTV

對上面不一樣功能的進行歸類存放。好比數據庫操做的都放在Model文件夾、html文件都放在View文件夾、index和login等函數放在Controller文件夾。

把以上三個文件夾首字母連起來,就是MVC。這就是MVC框架:對文件夾分類、對職責的劃分。

還有個MTV(Model、Template、View),名稱不同,職責是同樣的

        數據庫操做   模板文件    業務處理
MVC     Model       View        Controller
MTV     model       Template    View

 

這就是web框架的本質,Django 是基於MTV的web框架

相關文章
相關標籤/搜索