从网上找了很多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编辑器打开,查看结果也是非常的直观:
© 版权声明
THE END
暂无评论内容