日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
創(chuàng)新互聯(lián)Django4.0教程:Django4.0 測(cè)試工具-測(cè)試客戶端

測(cè)試客戶端是一個(gè) Python 類,它充當(dāng)虛擬 Web 瀏覽器,允許您測(cè)試視圖并以編程方式與 Django 驅(qū)動(dòng)的應(yīng)用程序交互。

專注于為中小企業(yè)提供做網(wǎng)站、網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)寧強(qiáng)免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了數(shù)千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

你可以使用測(cè)試客戶端執(zhí)行以下操作:

  • 模擬 URL 上的 ?GET? 和 ?POST?請(qǐng)求并觀察響應(yīng)——從低級(jí) HTTP(結(jié)果頭和狀態(tài)碼)到頁(yè)面內(nèi)容,應(yīng)有盡有。
  • 查看重定向鏈(如果有的話),并檢查每個(gè)步驟的 URL 和狀態(tài)碼。
  • 測(cè)試給定的請(qǐng)求是否由給定的包含某些值以及模板上下文的 Django 模板渲染。

請(qǐng)注意,測(cè)試客戶端并不是要取代 ?Selenium? 或其他“瀏覽器內(nèi)”框架。Django 的測(cè)試客戶端有不同的側(cè)重點(diǎn)。簡(jiǎn)而言之:

  • 使用 Django 的測(cè)試客戶端來(lái)確定要渲染的模板正確,并且模板已傳遞了正確的上下文數(shù)據(jù)
  • 使用 ?Selenium ?等瀏覽器內(nèi)框架來(lái)測(cè)試呈現(xiàn)的 HTML 和網(wǎng)頁(yè)的行為,即 JavaScript 功能。 Django 還為這些框架提供了特殊支持

一個(gè)全面的測(cè)試套件應(yīng)該使用這兩種測(cè)試類型的組合。

概述和一個(gè)簡(jiǎn)單的例子

要使用測(cè)試客戶端,請(qǐng)實(shí)例化 ?django.test.Client? 并檢索網(wǎng)頁(yè):

>>> from django.test import Client
>>> c = Client()
>>> response = c.post('/login/', {'username': 'john', 'password': 'smith'})
>>> response.status_code
200
>>> response = c.get('/customer/details/')
>>> response.content
b'

如本例所示,你可以從 Python 交互式解釋器的會(huì)話中實(shí)例化 ?Client?。
請(qǐng)注意測(cè)試客戶端如何工作的一些重要事項(xiàng):

  • 測(cè)試客戶端不需要運(yùn)行 Web 服務(wù)器。 事實(shí)上,它會(huì)運(yùn)行得很好,根本沒(méi)有運(yùn)行 Web 服務(wù)器! 那是因?yàn)樗苊饬?nbsp;HTTP 的開(kāi)銷,直接與 Django 框架打交道。 這有助于使單元測(cè)試快速運(yùn)行。
  • 檢索頁(yè)面時(shí),請(qǐng)記住指定 URL 的 路徑,而不是整個(gè)域。例如,這是正確的:
>>> c.get('/login/')

這是錯(cuò)誤的:

>>> c.get('https://www.example.com/login/')

測(cè)試客戶端無(wú)法檢索不是由您的 Django 項(xiàng)目提供支持的網(wǎng)頁(yè)。 如果您需要檢索其他網(wǎng)頁(yè),請(qǐng)使用 Python 標(biāo)準(zhǔn)庫(kù)模塊,例如 ?urllib?。

  • 為了解析 URL,測(cè)試客戶端使用你的 ?ROOT_URLCONF ?設(shè)置指向的任何 ?URLconf?。
  • 盡管上面的示例可以在 Python 交互式解釋器中運(yùn)行,但測(cè)試客戶端的某些功能,尤其是與模板相關(guān)的功能,僅在測(cè)試運(yùn)行時(shí)才可用。這樣做的原因是 Django 的測(cè)試運(yùn)行器執(zhí)行了一些黑魔法,以確定給定視圖加載了哪個(gè)模板。 這種黑魔法(本質(zhì)上是在內(nèi)存中修補(bǔ) Django 的模板系統(tǒng))僅在測(cè)試運(yùn)行期間發(fā)生。
  • 默認(rèn)情況下,測(cè)試客戶端將禁用您的站點(diǎn)執(zhí)行的任何 CSRF 檢查。如果出于某種原因,您希望測(cè)試客戶端執(zhí)行 CSRF 檢查,您可以創(chuàng)建一個(gè)強(qiáng)制執(zhí)行 CSRF 檢查的測(cè)試客戶端實(shí)例。 為此,請(qǐng)?jiān)跇?gòu)建客戶端時(shí)傳入 ?enforce_csrf_checks ?參數(shù):
>>> from django.test import Client
>>> csrf_client = Client(enforce_csrf_checks=True)

發(fā)出請(qǐng)求

使用 ?django.test.Client? 類發(fā)出請(qǐng)求。

class Client(enforce_csrf_checks=False, json_encoder=DjangoJSONEncoder, **defaults)

它在構(gòu)造時(shí)不需要任何參數(shù)。然而,你可以使用關(guān)鍵字參數(shù)來(lái)指定一些默認(rèn)頭信息。例如,這將在每個(gè)請(qǐng)求中發(fā)送一個(gè) ?User-Agent? HTTP 頭:

>>> c = Client(HTTP_USER_AGENT='Mozilla/5.0')

傳遞給 ?get()?、?post()? 等方法的 ?extra? 關(guān)鍵字參數(shù)的值,優(yōu)先于傳遞給類構(gòu)造函數(shù)的默認(rèn)值。
?enforce_csrf_checks?參數(shù)可用于測(cè)試 CSRF 保護(hù)。
?json_encoder?參數(shù)允許為 ?post()? 中描述的 JSON 序列化設(shè)置一個(gè)自定義 JSON 編碼器。
?raise_request_exception?參數(shù)允許控制是否在請(qǐng)求過(guò)程中引出的異常也應(yīng)該在測(cè)試中引出。默認(rèn)值為 ?True?。
一旦有了 Client 實(shí)例,就可以調(diào)用以下任何一種方法:

get(path, data=None, follow=False, secure=False, **extra)

對(duì)提供的 ?path?上發(fā)出 ?GET?請(qǐng)求,并返回一個(gè) ?Response?對(duì)象,如下所述。
?data?字典中的鍵值對(duì)用于創(chuàng)建 ?GET?數(shù)據(jù)有效載荷。例如:

>>> c = Client()
>>> c.get('/customers/details/', {'name': 'fred', 'age': 7})

產(chǎn)生等效的 GET 請(qǐng)求:

/customers/details/?name=fred&age=7

?extra?關(guān)鍵詞參數(shù)可以用來(lái)指定請(qǐng)求中要發(fā)送的頭信息。例如:

>>> c = Client()
>>> c.get('/customers/details/', {'name': 'fred', 'age': 7},
...       HTTP_ACCEPT='application/json')

將 HTTP 頭 ?HTTP_ACCEPT?發(fā)送到 ?detail?視圖,這是測(cè)試使用 ?django.http.HttpRequest.accepts()? 方法的代碼路徑的好方法。

如果你已經(jīng)有了 URL 編碼形式的 ?GET?參數(shù),你可以使用該編碼代替使用數(shù)據(jù)參數(shù)。例如,之前的 ?GET?請(qǐng)求也可以改成:

>>> c = Client()
>>> c.get('/customers/details/?name=fred&age=7')

如果你提供的 URL 同時(shí)包含編碼的 ?GET?數(shù)據(jù)和數(shù)據(jù)參數(shù),數(shù)據(jù)參數(shù)將優(yōu)先。
如果將 ?follow?設(shè)置為 ?True?,客戶端將遵循所有重定向,并且將在響應(yīng)對(duì)象中設(shè)置 ?redirect_chain?屬性,該屬性是包含中間 URL 和狀態(tài)碼的元組。
如果你有一個(gè) URL ?/redirect_me/?,重定向到? /next/?,再重定向到 ?/final/?,這是你會(huì)看到的:

>>> response = c.get('/redirect_me/', follow=True)
>>> response.redirect_chain
[('http://testserver/next/', 302), ('http://testserver/final/', 302)]

如果你把 ?secure?設(shè)置為 ?True?,則客戶端將模擬 HTTPS 請(qǐng)求。

post(path, data=None, content_type=MULTIPART_CONTENT, follow=False, secure=False, **extra)

在提供的 ?path?上發(fā)出一個(gè) ?POST?請(qǐng)求,并返回一個(gè) ?Response?對(duì)象,如下所述。
?data?字典中的鍵值對(duì)用于提交 ?POST?數(shù)據(jù)。例如:

>>> c = Client()
>>> c.post('/login/', {'name': 'fred', 'passwd': 'secret'})

這將產(chǎn)生對(duì)這個(gè) URL 的 ?POST?請(qǐng)求:

/login/

且具有此 ?POST?數(shù)據(jù):

name=fred&passwd=secret

如果你提供 ?application/json? 為 ?content_type?,則如果 ?data?是一個(gè)字典、列表或元組時(shí),使用 ?json.dumps()? 進(jìn)行序列化。序列化默認(rèn)是通過(guò) ?DjangoJSONEncoder?,可以通過(guò)為 Client 提供 ?json_encoder?參數(shù)覆蓋。這個(gè)序列化也會(huì)發(fā)生在 ?put()?、?patch()? 和 ?delete()? 請(qǐng)求中。
如果你要提供任何其他的 ?content_type?(例如 ?text/xml? 用于 XML 有效載荷),使用HTTP ?Content-Type? 頭中的 ?content_type?,?data?的內(nèi)容在 ?POST?請(qǐng)求中按原樣發(fā)送。
如果你沒(méi)有為 ?content_type?提供一個(gè)值,data 中的值將以 ?multipart/form-data? 的內(nèi)容類型進(jìn)行傳輸。在這種情況下,data 中的鍵值對(duì)將被編碼為多部分消息,并用于創(chuàng)建 ?POST?數(shù)據(jù)有效載荷。
要為一個(gè)給定的鍵提交多個(gè)值——例如,要指定 ?