从网上找了很多django单元测试的案例,感觉不是很好用,于是自己写了一套测试方法,在测试环境我们只需要传uri 、请求方式、参数即可一键对所有接口进行测试。
一、使用requests模拟http请求
假设你执行成功的返回的json格式如下:
1
2
3
4
5
6
7
8
9
|
{
"code" : 0 ,
"message" : "ok" ,
"data" : {
"first" : false,
"token" : "3eeeb5bdad75cbe442fd9c6df5373550"
},
"elapsed" : 96
}
|
我写了一个公共的测试方法test(),def test(method, url, body_data=none, query_string=none, rest_query_string=none): pass
, 传uri 、请求方式、参数(query_string,body或者rest都支持)即可,如下代码可在tests.py文件里执行。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
from django.test import testcase
# create your tests here.
# coding:utf-8
from django.test import testcase, client
import os
import requests
import json
user = "1234567"
host = "http://localhost:8006/app"
false = false
true = true
null = none
token = none
post = "post"
get = "get"
delete = "delete"
put = "put"
headers = { 'content-type' : 'application/json' , 'accept' : '*/*' }
login_data = json.dumps({ "phone" : user,
"pwd" : "e10adc3949ba59abbe56e057f20f883e" ,
"login_type" : 0 ,
"identifier" : "",
"role" : 0 })
login = requests.post(host + "/login" , data = login_data, headers = headers)
login_content = eval (login.content.decode( "utf-8" ))
if login_content[ "code" ] = = 0 :
print ( "login 成功" )
token = login_content[ "data" ][ "token" ]
print ( "token:" + token)
else :
print ( "login fail" )
if not token:
raise exception( "登录异常" )
headers[ "user-token" ] = token
def test(method, url, body_data = none, query_string = none, rest_query_string = none):
if query_string:
url = host + url + ( str (rest_query_string) if rest_query_string is not none else " ") + " ?" + query_string
else :
url = host + url + ( str (rest_query_string) if rest_query_string is not none else "")
if method in [post, delete, put] and body_data:
body_data = json.dumps(body_data)
response_data = requests.request(method, url, data = body_data, headers = headers)
response_data = response_data.content.decode( "utf-8" )
if response_data.find( "\"code\": 0" ) ! = - 1 :
print (url + " 成功!" )
else :
print (url + " 失败!" + response_data)
test(get, "/check_token/" , rest_query_string = token)
test(get, "/get/child" )
|
我们只需要一键执行tests.py文件就能看到效果,如下:
二、优化代码将测试结果优雅地输出到md文件里
优化test方法, 添加样式,md文件支持读取样式。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
def test(method, url, body_data = none, query_string = none, rest_query_string = none):
if query_string:
url = host + url + ( str (rest_query_string) if rest_query_string is not none else " ") + " ?" + query_string
else :
url = host + url + ( str (rest_query_string) if rest_query_string is not none else "")
if method in [post, delete, put] and body_data:
body_data = json.dumps(body_data)
response_data = requests.request(method, url, data = body_data, headers = headers)
response_data = response_data.content.decode( "utf-8" )
status = "<font color='red'>失败</font>"
if response_data.find( "\"code\": 0" ) ! = - 1 :
status = "<font color='green'>成功</font>"
print (url + " 成功!" )
else :
print (url + " 失败!" )
response_data = "```json\n" + response_data + "\n```"
print ( "url: " + url + "\n返回状态: " + status + "\n响应数据:\n" + response_data, file = file )
|
用md编辑器打开,查看结果也是非常的直观:
到此这篇关于django写单元测试的方法的文章就介绍到这了,更多相关django单元测试内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/qq_33036061/article/details/115914998