Python语言技术文档

微信小程序技术文档

php语言技术文档

jsp语言技术文档

asp语言技术文档

C#/.NET语言技术文档

html5/css技术文档

javascript

点击排行

您现在的位置:首页 > 技术文档 > Python网站web

Django单元测试工具test client使用详解

来源:中文源码网    浏览:308 次    日期:2024-05-17 09:01:44
【下载文档:  Django单元测试工具test client使用详解.txt 】


Django单元测试工具test client使用详解
The test client
test client是一个python类,来模拟一个简单的“哑”浏览器,允许你来测试你的view函数.你可以使用test client完成下列事情:
1.模拟"Get"和"Post"请求,观察响应结果--从HTTP(headers,status codes)到页面内容.
2.检查重定向链(如果有的话),在每一步检查URL和status code。
3.用一个包括特定值的模板context来测试一个request被Django模板渲染。
>>> from django.test.client import Client
>>> c = Client()
>>> response = c.post('/login/', {'username': 'john', 'password': 'smith'})
>>> response.status_code
200
>>> response = c.get('/customer/details/')
>>> response.content
'使用django.test.client.Client的实例来使用test client。
注意:请求网页时,使用path而不是整个domain。
>>> c.get('/login/')
是正确的。
>>> c.get('http://www.example.com/login/')
是错误的。
test client不适合操作不是由Django建立的网站.所以,请求其它网页时,请使用python的标准库--urllib或者urllib2.
为了解析URl,test client使用由ROOT_URLCONF(settings.py)指定的URLconf。
默认情况下,test client会忽略CSRF检查,如果要强制进行CSRF检查,可以
csrf_client = Client(enforce_csrf_checks=True)
Making Requests
使用django.test.client.Client()来执行请求。
class Client(enforce_csrf_checks=False, **defaults)
可以使用关键字参数来指定默认的请求报头:
c = Client(HTTP_USER_AGENT='Mozilla/5.0')
记得在USER_AGENT前加HTTP_。
Client实例具有以下方法:
get(path, data={}, follow=False, **extra)
执行一个GET请求并返回Response对象。
>>> c = Client()
>>> c.get('/customers/details/', {'name': 'fred', 'age': 7})
相当于向以下url执行GET:
/customers/details/?name=fred&age=7
extra关键字参数可用作请求报头:
>>> c = Client()
>>> c.get('/customers/details/', {'name': 'fred', 'age': 7},
... HTTP_X_REQUESTED_WITH='XMLHttpRequest')
当然也可以将查询字符对编码后加入url:
>>> c = Client()
>>> c.get('/customers/details/?name=fred&age=7')
data参数的优先级在编码后的url之上。
如果将follow设置为True,client会追踪任何重定向,返回的response有redirect_chain属性,包括所有重定向过程中的url和状态码组成的元祖列表。
如果有个URL /redirect_me/ 重定向向 /next/, 再重定向向 /final/:
>>> response = c.get('/redirect_me/', follow=True)
>>> response.redirect_chain
[(u'http://testserver/next/', 302), (u'http://testserver/final/', 302)]
post(path, data={}, content_type=MULTIPART_CONTENT, follow=False, **extra)
执行一个POST请求并返回response对象,data参数为POST数据。
如果提供content_type参数(例如 text/xml),数据会被作为报头中Content-Type的类型进行POST上传。
如果不提供content_type参数,数据会被作为multipart/form-data类型上传。
为一个参数提交多个多个值时--比如选住