django写单元测试的方法

   从网上找了很多django单元测试的案例,感觉不是很好用,于是自己写了一套测试方法,在测试环境我们只需要传uri 、请求方式、参数即可一键对所有接口进行测试。

一、使用requests模拟Http请求

   假设你执行成功的返回的json格式如下:

{
  \"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文件里执行。

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文件就能看到效果,如下:

django写单元测试的方法

二、优化代码将测试结果优雅地输出到md文件里

优化test方法, 添加样式,md文件支持读取样式。

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)

django写单元测试的方法
django写单元测试的方法

用md编辑器打开,查看结果也是非常的直观:

django写单元测试的方法

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容