Django 单元测试

模拟浏览器发起请求,测试 web 功能。只是简单记录一下怎么使用。

环境

Win10
Python2.7
Django 1.8.11
MySQL5.6

项目结构

大致如下

mysite
mysite
settings.py
urls.py
views.py
...
templates
...

测试

创建 mysite/mysite/tests.py

也可以放在 mysite/tests.py (项目目录下)

也可以放在 myapp/tests.py (应用目录下)

# -*- coding: utf-8 -*-

from django.test import Client, TestCase

class LittleTestCase(TestCase):
def setUp(self):
"""
测试前置任务,创建一个客户端,可以把它看做浏览器。
"""
self.click = Client() def test_http_response_status(self):
"""
请求根目录,验证响应码
"""
response = self.client.get('/')
self.assertEqual(response.status_code, 200) def test_http_response_content(self):
"""
请求 /get_json/,验证返回 JSON 数据。
"""
response = self.client.get('/get_json/')
self.assertEqual(response.content, '{"msg": "success"}') def test_http_response_context(self):
"""
请求 /hello/,验证上下文,也就是渲染视图的数据
"""
data = {
"name": "jack"
}
response = self.client.get('/hello/', data)
self.assertEqual(response.context["name"], "jack123")

执行测试

Django 找到 test*.py 文件中的 TestCase 子类,进行测试

python manage.py test

如果 tests.py 放在自己创建的目录中,如 mysite/tests/tests.py,执行测试要指定目录

python manage.py test tests/

测试结果

执行了3个测试,全部成功

需要注意,Django 默认创建一个 test_ 开头的数据库执行测试,测试结束会自动销毁这个数据库。

Creating test database for alias 'default'...
...
----------------------------------------------------------------------
Ran 3 tests in 0.533s OK
Destroying test database for alias 'default'...

项目代码

mysite/mysite/urls.py

# -*- coding: utf-8 -*-

from django.conf.urls import include, url
from django.contrib import admin
from django.views.generic import TemplateView
from mysite import views
urlpatterns = [
url(r'^$', views.index),
url(r'^get_json/$', views.get_json),
url(r'^hello/$', views.hello),
]

mysite/mysite/views.py

# -*- coding: utf-8 -*-

import json
from django.shortcuts import render
from django.http import HttpResponse def index(request):
return render(request, 'mysite/index.html') def get_json(request):
result = {
"msg": "success",
}
return HttpResponse(json.dumps(result), content_type="application/json") def hello(request):
name = request.GET.get('name')
data = {
"name": name + "123"
}
return render(request, 'mysite/hello.html', data)

Django Web 测试的更多相关文章

  1. 教程:Visual Studio 中的 Django Web 框架入门

    教程:Visual Studio 中的 Django Web 框架入门 Django 是高级 Python 框架,用于快速.安全及可扩展的 Web 开发. 本教程将在 Visual Studio 提供 ...

  2. Web测试介绍2一 安全测试

            安全测试是在IT软件产品的生命周期中,特别是产品开发基本完成到发布阶段,对产品进行检验以验证产品符合安全需求定义和产品质量标准的过程. 主要安全需求包括: (i) 认证 Authent ...

  3. Web测试的常用测试用例与知识

    1. Web测试中关于登录的测试 2. 搜索功能测试用例设计 3. 翻页功能测试用例 4. 输入框的测试 5. Web测试的常用的检查点 6. 用户及权限管理功能常规测试方法 7. Web测试之兼容性 ...

  4. Web测试中常见分享问题

         Web测试中,由于开发通常指注重完成H5页面的逻辑功能,对各种系统.浏览器等考虑不周,同时Android端各类机型碎片化,容易产生兼容性问题,这其中以分享类型为最. 本文简单分析总结一些测试 ...

  5. web测试常用的用例及知识

      1.      Web测试中关于登录的测试... 1 2.      搜索功能测试用例设计... 2 3.      翻页功能测试用例... 3 4.      输入框的测试... 5 5.    ...

  6. web测试安全性常见问题

    web测试安全性常见问题                  一.             登录账号明文传输 1.  问题一:登录账号密码或者修改密码明文传输 现象:目前物流对内的java系统基本上都是 ...

  7. app测试与web测试的区别

    1.从功能测试的来讲的话,在流程和功能测试上是没有区别的.系统测试和一些细节可能会不一样. 那么我们就要先来了解,web和app的区别. web项目,一般都是b/s架构,基于浏览器的,而app则是c/ ...

  8. web测试一般分为那几个阶段,哪些阶段是可以用工具实现的,都有些什么工具,哪些阶段必须要人工手动来实现呢?

    这是我在知乎上遇到的一个问题: web测试一般分为那几个阶段,哪些阶段是可以用工具实现的,都有些什么工具,哪些阶段必须要人工手动来实现呢? 首先这个提问本身就是有问题的, 没有哪个阶段是用工具实现的, ...

  9. 关于web测试

    关于web测试1页面部分(1) 页面清单是否完整(是否已经将所需要的页面全部都列出来了)(2) 页面是否显示(在不同分辨率下页面是否存在,在不同浏览器版本中页面是是否显示)(3) 页面在窗口中的显示是 ...

随机推荐

  1. 06 drf源码剖析之权限

    06 drf源码剖析之权限 目录 06 drf源码剖析之权限 1. 权限简述 2. 权限使用 3.源码剖析 4. 总结 1. 权限简述 权限与身份验证和限制一起,决定了是否应授予请求访问权限. 权限检 ...

  2. 手把手整合SSM框架

    前言 如果看过前几篇文章,对 Spring 和 MyBatis 有了一定了解,一定想上手试试.这篇文章从 0 到 1,手把手整合 SSM (Spring.Spring MVC.MyBatis). 本篇 ...

  3. Python 实现邮件发送功能(初级)

    在我们日常项目中,会经常使用到邮件的发送功能,如何利用Python发送邮件也是一项必备的技能.本文主要讲述利用Python来发送邮件的一些基本操作. 本章主要包含知识点: 邮件发送原理简述即常用smt ...

  4. java 使用正则去重

    //去重复 public static void test1() { String str = "aaactttsssfvvvvds"; String regex = " ...

  5. Spring用到了那些注解?

    一:@Autowired(按类型注入)1.1通过 @Autowired的使用来消除 set ,get方法.@Autowiredprivate Dao dao;这样就可以删除set ,get方法和spr ...

  6. ​​​​​​​爆力破解Windows操作系统登录密码核心技术

    一.不借助U盘等工具二.已将win7登录账户为test,密码为666666,全套C/C++黑客资料请加:726920220QQ 1.将电脑开机关机几次,进入以下界面

  7. ES6标准中的import和export

    在ES6前, 前端使用RequireJS或者seaJS实现模块化, requireJS是基于AMD规范的模块化库,  而像seaJS是基于CMD规范的模块化库,  两者都是为了为了推广前端模块化的工具 ...

  8. O、Θ、Ω、o、ω,别再傻傻分不清了!

    前言 本篇文章收录于专辑:http://dwz.win/HjK,点击解锁更多数据结构与算法的知识. 你好,我是彤哥,一个每天爬二十六层楼还不忘读源码的硬核男人. 前面几节,我们一起学习了算法的复杂度如 ...

  9. C#结合SMTP实现邮件报警通知

    写在前面 C#是微软推出的一门面向对象的通用型编程语言,它除了可以开发PC软件.网站(借助 http://ASP.NET)和APP(基于 Windows Phone),还能作为游戏脚本,编写游戏逻辑. ...

  10. 手牵手,从零学习Vue源码 系列一(前言-目录篇)

    系列文章: 手牵手,从零学习Vue源码 系列一(前言-目录篇) 手牵手,从零学习Vue源码 系列二(变化侦测篇) 手牵手,从零学习Vue源码 系列三(虚拟DOM篇) 陆续更新中... 预计八月中旬更新 ...