当前位置 博文首页 > django写单元测试的方法

    django写单元测试的方法

    作者:Dream_it_possible! 时间:2021-07-02 18:41

       从网上找了很多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文件就能看到效果,如下:

    在这里插入图片描述

    二、优化代码将测试结果优雅地输出到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)

    在这里插入图片描述
    在这里插入图片描述

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

    在这里插入图片描述

    jsjbwy