一、测试对象
2. 使用unittest作单元测试
3. 使用.json()解析返回值
三、规则
1. 被测代码的一个python文件对应一个unittest测试文件
2. 每个unittest测试文件中可以包含多个类
3. 每个类对应一个被测函数
4. 每个类可以包含多个测试用例函数
5. 每个测试用例函数对应一个测试用例
四、举例
1. 对于仅仅渲染展示页面的函数
对于接口类函数,即被GET、POST调用的函数
二、步骤 1. 使用request发送GET、POST请求请提前安装requests模块
pip install requests

比如
def admin_booking_history(request):
return render(request, './adminWeb/booking_history.html')
只需判断请求状态是否为200即可判断成功
import requests
import unittest
"""被测代码的一个python文件对应一个unittest测试文件,当前测试adminWeb里views.py"""
"""一个接口一个类,当前测试admin_booking_history接口"""
class admin_booking_history(unittest.TestCase):
def setUp(self):
self.url = "http://127.0.0.1:8000/adminweb/bookinghistory"
self.headers = {'Content-Type': 'application/x-www-form-urlencoded'}
"""测试用例1:测试是否能够正常访问页面"""
def test_get(self):
res = requests.get(self.url)
# 请求成功
self.assertEqual(res.status_code,200)
if __name__ == '__main__':
unittest.main()
比如下面的函数读取了context渲染到html页面上
# 设置展示信息页面
def admin_setting_display_info(request):
system_configurations = SystemConfiguration.objects.filter(Q(configuration_name='days_showed_at_most_one_time'))
context = {}
for system_configuration in system_configurations:
temp = model_to_dict(system_configuration)
print(temp)
context[temp['configuration_name']] = temp['configuration_value']
print(context)
return render(request, './adminWeb/setting_display_info.html', context)
我们应该将数据和展示分离,也就是说,展示页面只展示,数据通过另外一个接口提供,即数据可以通过在html页面里使用ajax加载。这样就可以分开测试了
3. 需要POST提交的函数比如
# 保存设置展示信息
@csrf_exempt
def admin_save_display_info(request):
days_showed_at_most_one_time = request.POST.get('days_showed_at_most_one_time', None)
if days_showed_at_most_one_time is None or days_showed_at_most_one_time == '':
return_json = {}
return_json['code'] = 1
return_json['msg'] = '必须传递days_showed_at_most_one_time参数'
return_json['data'] = {}
return HttpResponse(json.dumps(return_json), content_type='application/json')
defaults = dict()
defaults['configuration_name'] = 'days_showed_at_most_one_time'
defaults['configuration_value'] = days_showed_at_most_one_time
result_days_showed_at_most_one_time = SystemConfiguration.objects.update_or_create(defaults=defaults,
configuration_name='days_showed_at_most_one_time')
print(result_days_showed_at_most_one_time)
# update_or_create返回值为元组: (object, created),
# object为新建或者更新的对象,
# created为一个布尔值,表示是新建还是更新,True为新建,False为更新
context = {}
context['result_days_showed_at_most_one_time'] = json.dumps(result_days_showed_at_most_one_time[1])
print(context)
return_json = {}
return_json['code'] = 0
return_json['msg'] = '修改成功'
return_json['data'] = context
return HttpResponse(json.dumps(return_json), content_type='application/json')
测试函数为
import requests
import unittest
"""被测代码的一个python文件对应一个unittest测试文件,当前测试adminWeb里views.py"""
"""一个接口一个类,当前测试admin_save_display_info接口"""
class admin_save_display_info(unittest.TestCase):
def setUp(self):
self.url = "http://127.0.0.1:8000/adminweb/save_display_info"
self.headers = {'Content-Type': 'application/x-www-form-urlencoded'}
"""测试用例1:必填参数为空"""
def test_params_null(self):
json ={}
res = requests.post(self.url, headers=self.headers, data=json)
data = res.json()
# print(data)
self.assertEqual(res.status_code, 200)
self.assertEqual(data["code"], 1, data["msg"])
"""测试用例2:是否保存成功"""
def test_save(self):
#body接口参数
body = {
"days_showed_at_most_one_time": 9
}
res = requests.post(self.url, data=body, headers=self.headers)
data = res.json()
# print(data)
self.assertEqual(res.status_code, 200)
self.assertEqual(data["code"], 0, data["msg"])
if __name__ == '__main__':
unittest.main()
4. 有的接口需要在用户登陆的情况下测试
比如测试下面的接口,其中读取了session信息
# 保存用户的预约信息
@csrf_exempt
def save_booking(request):
# 校验是否已经登陆
if request.session.get('is_login') is None:
return_json = {}
return_json['code'] = 2
return_json['msg'] = '必须先实名登陆'
return_json['data'] = {}
return HttpResponse(json.dumps(return_json), content_type='application/json')
selected_date_id = request.POST.get('selected_date_id', None)
if selected_date_id is None or selected_date_id == '':
return_json = {}
return_json['code'] = 1
return_json['msg'] = '必须传递selected_date_id参数'
return_json['data'] = {}
return HttpResponse(json.dumps(return_json), content_type='application/json')
# 查询出该时间段的详情
date = EveryDayBookingInfo.objects.filter(id=selected_date_id).first()
selected_date = model_to_dict(date)
print(selected_date)
# 如果可预约人数小于等于0,则表示已经被预约完了
if selected_date['remain_number']
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?