菜单

老男孩python第肆期

2019年4月28日 - 皇家赌场系统

 bootstrap cdn在线地址

对Python的Django框架中的项目进行单元测试的章程,pythondjango

 Python中的单元测试

我们先来回想一下Python中的单元测试方法。
上边是3个 Python的单元测试简单的例证:

假诺我们付出三个除法的意义,有的同学只怕感到很简短,代码是如此的:

def division_funtion(x, y):
  return x / y

唯独如此写毕竟对如故不对吗,有个别同学能够在代码下边那样测试:

def division_funtion(x, y):
  return x / y


if __name__ == '__main__':
  print division_funtion(2, 1)
  print division_funtion(2, 4)
  print division_funtion(8, 3)

唯独这样运转后收获的结果,本身每一次都得算一下去审查批准3遍,很不便利,Python中有
unittest
模块,能够很有益地打开测试,实际情况能够作品最后的链接,看官方网站文书档案的事无巨细介绍。

下边是一个简易的以身作则:

import unittest


def division_funtion(x, y):
  return x / y


class TestDivision(unittest.TestCase):
  def test_int(self):
    self.assertEqual(division_funtion(9, 3), 3)

  def test_int2(self):
    self.assertEqual(division_funtion(9, 4), 2.25)

  def test_float(self):
    self.assertEqual(division_funtion(4.2, 3), 1.4)


if __name__ == '__main__':
  unittest.main()

笔者回顾地写了四个测试示例(不料定周到,只是示范,比方未有思虑除数是0的场合),运维后开掘:

F.F
======================================================================
FAIL: test_float (__main__.TestDivision)
----------------------------------------------------------------------
Traceback (most recent call last):
 File "/Users/tu/YunPan/mydivision.py", line 16, in test_float
  self.assertEqual(division_funtion(4.2, 3), 1.4)
AssertionError: 1.4000000000000001 != 1.4

======================================================================
FAIL: test_int2 (__main__.TestDivision)
----------------------------------------------------------------------
Traceback (most recent call last):
 File "/Users/tu/YunPan/1.py", line 13, in test_int2
  self.assertEqual(division_funtion(9, 4), 2.25)
AssertionError: 2 != 2.25

----------------------------------------------------------------------
Ran 3 tests in 0.001s

FAILED (failures=2)

汗!发掘了没,竟然五个都退步了,测试开采:

四.二除以叁 对等 一.四千00000000000一 不等于期望值 壹.四

九除以肆等于二,不对等期望的 贰.25

上边我们便是要修复那几个难题,再一次运维测试,直到运营不报错截至。

举个例子依据真实景况,要是大家只须要保留到小数点后七个人,能够如此改:

def division_funtion(x, y):
  return round(float(x) / y, 6)

再也运维就不报错了:

...
----------------------------------------------------------------------
Ran 3 tests in 0.000s

 
OK

Django中的单元测试

不久举办单元测试(UnitTest)是比较好的做法,极端的情形以致重申“测试先行”。未来我们早已有了首个model类和Form类,是时候伊始写测试代码了。

Django帮忙python的单元测试(unit test)和文书测试(doc
test),大家那里关键钻探单元测试的秘诀。那里不对单元测试的反驳做过多的论述,借使你曾经深谙了下列概念:test
suite, test case, test/test action,  test data, assert等等。

在单元测试方面,Django承接python的unittest.TestCase落成了和谐的django.test.TestCase,编写测试用
例平时从那边初叶。测试代码日常位于app的tests.py文件中(也足以在models.py中编辑,可是作者不提议那样做)。在Django生成的
depotapp中,已经包涵了那么些文件,并且当中富含了二个测试用例的样例:

depot/depotapp/tests.py

from django.test import TestCase
class SimpleTest(TestCase):
def test_basic_addition(self):
"""
Tests that 1 + 1 always equals 2.
"""
self.assertEqual(1 + 1, 2)

你能够有几种方式运维单元测试:

用第两种办法实施上边提供的样例,结果如下:

$ python manage.py test depotapp.SimpleTest

Creating test database for alias 'default'...
.
----------------------------------------------------------------------
Ran 1 test in 0.012s

OK
Destroying test database for alias 'default'...

你可能会重视到,输出消息中回顾了创设和删除数据库的操作。为了制止测试数据产生的熏陶,测试进度会采用三个独立的数据库,关于怎么样钦赐测试数据库
的细节,请查阅Django文书档案。在大家的例证中,由于应用sqlite数据库,Django将默许使用内部存款和储蓄器数据库来进展测试。

下面就让大家来编排测试用例。在《Agile Web Development with Rails
四th》中,7.二节,最后落成的ProductTest代码如下:

class ProductTest < ActiveSupport::TestCase
test "product attributes must not be empty"do
product = Product.new
assert product.invalid?
assert product.errors[:title].any?
assert product.errors[:description].any?
assert product.errors[:price].any?
assert product.errors[:image_url].any?
end
test "product price must be positive"do
product = Product.new(:title => "My Book Title",
:description => "yyy",
:image_url => "zzz.jpg")
product.price = -1
assert product.invalid?
assert_equal "must be greater than or equal to 0.01",
product.errors[:price].join('; ')
product.price = 0
assert product.invalid?
assert_equal "must be greater than or equal to 0.01",
product.errors[:price].join('; ')
product.price = 1
assert product.valid?
end
def new_product(image_url)
Product.new(:title => "My Book Title",
:description => "yyy",
:price => 1,
:image_url => image_url)
end
test "image url"do
ok = %w{ fred.gif fred.jpg fred.png FRED.JPG FRED.Jpg
http://a.b.c/x/y/z/fred.gif }
bad = %w{ fred.doc fred.gif/more fred.gif.more }
ok.eachdo |name|
assert new_product(name).valid?, "#{name} shouldn't be invalid"
end
bad.eachdo |name|
assert new_product(name).invalid?, "#{name} shouldn't be valid"
end
end
test "product is not valid without a unique title"do
product = Product.new(:title => products(:ruby).title,
:description => "yyy",
:price => 1,
:image_url => "fred.gif")
assert !product.save
assert_equal "has already been taken", product.errors[:title].join('; ')
end
test "product is not valid without a unique title - i18n"do
product = Product.new(:title => products(:ruby).title,
:description => "yyy",
:price => 1,
:image_url => "fred.gif")
assert !product.save
assert_equal I18n.translate('activerecord.errors.messages.taken'),
product.errors[:title].join('; ')
end
end

对Product测试的内容包罗:

1.title,description,price,image_url不能够为空;

  1. price必须高于零;

  2. image_url必须以jpg,png,jpg结尾,并且对大小写不灵动;

  3. titile必须唯1;

让大家在Django中举办这个测试。由于ProductForm包涵了模型校验和表单校验规则,使用ProductForm能够很轻便的落到实处上述测试:

depot/depotapp/tests.py

#/usr/bin/python
#coding: utf8
"""
This file demonstrates writing tests using the unittest module. These will pass
when you run "manage.py test".
Replace this with more appropriate tests for your application.
"""
from django.test import TestCase
from forms import ProductForm
class SimpleTest(TestCase):
def test_basic_addition(self):
"""
Tests that 1 + 1 always equals 2.
"""
self.assertEqual(1 + 1, 2)
class ProductTest(TestCase):
def setUp(self):
self.product = {
'title':'My Book Title',
'description':'yyy',
'image_url':'http://google.com/logo.png',
'price':1
}
f = ProductForm(self.product)
f.save()
self.product['title'] = 'My Another Book Title'
#### title,description,price,image_url不能为空
def test_attrs_cannot_empty(self):
f = ProductForm({})
self.assertFalse(f.is_valid())
self.assertTrue(f['title'].errors)
self.assertTrue(f['description'].errors)
self.assertTrue(f['price'].errors)
self.assertTrue(f['image_url'].errors)
####  price必须大于零
def test_price_positive(self):
f = ProductForm(self.product)
self.assertTrue(f.is_valid())
self.product['price'] = 0
f = ProductForm(self.product)
self.assertFalse(f.is_valid())
self.product['price'] = -1
f = ProductForm(self.product)
self.assertFalse(f.is_valid())
self.product['price'] = 1
####  image_url必须以jpg,png,jpg结尾,并且对大小写不敏感;
def test_imgae_url_endwiths(self):
url_base = 'http://google.com/'
oks = ('fred.gif', 'fred.jpg', 'fred.png', 'FRED.JPG', 'FRED.Jpg')
bads = ('fred.doc', 'fred.gif/more', 'fred.gif.more')
for endwith in oks:
self.product['image_url'] = url_base+endwith
f = ProductForm(self.product)
self.assertTrue(f.is_valid(),msg='error when image_url endwith '+endwith)
for endwith in bads:
self.product['image_url'] = url_base+endwith
f = ProductForm(self.product)
self.assertFalse(f.is_valid(),msg='error when image_url endwith '+endwith)
self.product['image_url'] = 'http://google.com/logo.png'
###  titile必须唯一
def test_title_unique(self):
self.product['title'] = 'My Book Title'
f = ProductForm(self.product)
self.assertFalse(f.is_valid())
self.product['title'] = 'My Another Book Title'

接下来运行 python manage.py test
depotapp.ProductTest。就像预想的那么,测试未有通过:

Creating test database for alias 'default'...
.F..
======================================================================
FAIL: test_imgae_url_endwiths (depot.depotapp.tests.ProductTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/holbrook/Documents/Dropbox/depot/../depot/depotapp/tests.py", line 65, in test_imgae_url_endwiths
self.assertTrue(f.is_valid(),msg='error when image_url endwith '+endwith)
AssertionError: False is not True : error when image_url endwith FRED.JPG

----------------------------------------------------------------------
Ran 4 tests in 0.055s

FAILED (failures=1)
Destroying test database for alias 'default'...

因为大家事先并未考虑到image_url的图样扩大名大概会大写。修改ProductForm的连带部分如下:

def clean_image_url(self):
url = self.cleaned_data['image_url']
ifnot endsWith(url.lower(), '.jpg', '.png', '.gif'):
raise forms.ValidationError('图片格式必须为jpg、png或gif')
return url

下一场再运维测试:

$ python manage.py test depotapp.ProductTest

Creating test database for alias 'default'...
....
----------------------------------------------------------------------
Ran 4 tests in 0.060s

OK
Destroying test database for alias 'default'...

测试通过,并且经过单元测试,大家发现并消除了1个bug。

 

开盘介绍

前端手艺概要

后日内容大致

Html本质以及在web程序中的作用

html的head内标签

html的body内标签之Logo、换行及任何

chrome查看html样式基本操作

html的body内标签之input种类

html的body内标签之多行文本及下来框

html的body内标签之超链接

html的body内标签之图片及表格

html的body内标签之表格

html的body内标签之田野(field)set标签和label标签

上述剧情计算

css选择器

css的存在形式及优先级

css边框以及另外常用样式

css之float样式

css之float完毕作业实例

css之display样式

css之内外边距

本周功课以及思路

L11-lesson11
0一 python s六 day 11 上节功课和读书分享
02 python s6 day 11 jQuery选择器
03 python s6 day 11 jQuery选择器eq和nth-child的区别
0肆 python s陆 day 11 jQuery表单选拔器
0伍 python s陆 day 1一 jQuery操作属性、css和再次来到顶部实例
0陆 python s陆 day 11 jQuery过滤器、事件和强大方法
0柒 python s六 day 1一 jQuery模态对话框和ajax
0八 python s陆 day 1一 eclipse意况的陈设
0九 python s6 day 1一 MVC框架和python的WEB框架简单介绍
10 python s6 day 11 Eclipse django 使用
11 python s6 day 11 创建Django project and app
1二 python s陆 day 11 Django用户注册和ajax请求

18_1   
 selenium模块

您大概感兴趣的篇章:

Python中的单元测试 大家先来回想一下Python中的单元测试方法。 上边是贰个Py…

第19周

L12-lesson12
0一 python s六 day 1二上节作业
0贰 python s6 day 1二 Django路由系统
0三 python s陆 day 1二 Windows下Python-MySQL模块的设置
04 python s陆 day 1二 模型字段类型
05 python s6 day 1贰 增加和删除改查过滤排序
06 day1贰 0陆 模版语言和跨站请求伪造一
07 day1二 0陆 模版语言和跨站请求伪造二
08 python s6 day 12 模板extend和include

        第1篇:白话tornado源码之待请求阶段

第17周

  1.  
      数据库基础

  2.  
      数据库进阶

  3.    
        MySQL练习题

  4.            
        MySQL演练题参考答案

  5.    
       Python之路【第76篇】:Django【基础篇】

  6.    
       Python之路【第10七篇】:Django【进阶篇

上节追思

paramiko模块详解

ssh密钥疏解

进度与线程

多线程

二十10二线程案例

主线程与子线程

线程锁

线程之实信号量

线程之Event

队列Queue

作业之主机批量管制

L14-lesson14
01 python s陆 day1四 BBS项目介绍
0二 python s陆 day1肆 设计表结构
0三 python s六 day1四 设计表结构0二
0四 python s陆 day1肆 启用商议插件
05 python s6 day14 定制django admin
06 python s6 day14 使用Bootstrap
07 python s6 day14 展示BBS列表
0捌 python s陆 day1四 显示研商
0九 python s六 day1四 提交商量内容
10 python s6 day1四 增多批评
1一 python s陆 day14 创制新帖
1二 python s6 day1四 落成BBS版块动态切换
1三 python s陆 day1四 落成BBS版块动态切换二

 

快人快语享受

上节回首

静态方法、类方式、属性方法

课堂扯淡

深切讲授类的非凡规成员方法__init__等

长远讲授类的卓殊成员方法__new__等

反射详解

可怜管理TryExcept

互联网编制程序Socket介绍

Socket通讯案例消息发送与吸收

L16-lesson16
01 python s6 day16 上节学业
0贰 python s陆 day16 此次课程概要
0三 python s陆 day1六 动态增进字段和措施精华类和新星类实施父类构造函数
0四 python s6 day16 检查有着父类、奇怪的__call__方法
05 python s6 day16 用type创建类
06 python s6 day16 用mytype创建类
07 python s6 day16 mytype中的__call__方法
08 python s6 day16 类的__new__方法
0玖 python s陆 day16 自定义type创造类的梳理
拾 python s六 day1陆 类的实例化进程的梳理
11 python s6 day16 安装tornado
12 python s6 day16 什么是session
13 python s6 day16 自定义session框架(一)
14 python s6 day16 自定义session框架二
15 python s6 day16 python索引器
1陆 python s陆 day1陆 大型框架结构session框架
一柒 python s陆 day1陆 tornado生命周期概述
18 python s陆 day1陆 tornado源码解析壹
19 python s陆 day1陆 tornado源码解析贰
20 python s6 day16 django和tornado的差异

    cmdb

上节内容回答

上节内容回看

CSS内容补充之position

CSS内容补充之overflow

CSS内容之hover

CSS内容之background

初始javaScript

javascript代码存在格局

javascript基本预览

javascript字符串操作以及跑马灯实例

javascript数组和字典以及for循环

javascript条件语句

javascript函数的定义

Dom直接采用器

Dom直接采纳器

以身作则之模态对话框

示范之全选和反选以及撤销

javascript必须加分号

以身作则之后台管理左侧菜单

前几天内容梳理

本周作业

L08-lesson08
0一 python s6 day 八 上节追思
0二 python s6 day 八 接收客户端数据后写入Redis
03 python s6 day 8 管理监控数据
0四 python s陆 day 捌 数据抢先阀值后报告警察方
05 python s六 day 八 编写监察和控制数据管理模块
06 python s陆 day 八 面向对象编制程序十遗

  1.  
      Http协议

  2.        
     Python CMDB开发

心灵享受

ATM存钱取钱案例剖析

模块定义、导入、优化详解

置于模块详解之time与datetime模块

放肢人体模型特块详解之Range模块

嵌入模块详解之OS模块

停放模块详解之Sys模块

置于模块详解之Shelve模块

放肢体模特块详解之Xml模块

嵌入模块详解之Configparser模块

停放模块详解之Hashlib、Hmac模块

正则表明式Re模块使用详解

L15-lesson15
0一 python s7 day一伍 上节作业
02 python s7 day15 web聊天室(一)
03 python s7 day15 web聊天室(二)
04 python s7 day15 web聊天室(三)
05 python s7 day15 web聊天室(四)
06 python s7 day15 web聊天室(五)
07 python s7 day15 web聊天室(六)
08 python s7 day15 web聊天室(七)
09 python s7 day15 web聊天室(八)
10 python s柒 day15 带你走进分页的世界 (一)
1一 python s七 day一伍 基础知识10遗 (编码和反光)
12 python s七 day1五 基础知识十遗 (装饰器、随机验证码和岁月格式)
13 python s7 day一伍 基础知识十遗(re、os、sys和作业)

35-7  
  Django之ModelForm组件

 

L18-lesson18
0一 s六 day1八 世界上最安全的API接口验证
02 s陆 day18 中度自定义的权能管理
0三 s6 day1八 监察和控制模块架构介绍
0肆 s6 day1八 定义监察和控制模板等城门失火表结构
0伍 s陆 day18 客户端自动汇报意况
0陆 s6 day1八 监察和控制历史数据的管理
07 s六 day18 完毕异步无阻塞的思路
0八 s陆 day1八 监察和控制数据动态画图

  1.    
       Python之路【第九篇】:Python操作
    RabbitMQ、Redis、Memcache、SQLAlchemy

  2.    
       Python开垦【第八陆篇】:AJAX全套

课程布署

任课内容回看

Django①对多的开创

成立一对多表结构

获得单表单数据的二种方式

一对多跨表操作

有个别多块表操作的的三种方式

充实1对许多据示例

初识Ajax

Ajax内容基本整理

编写制定一对多演示

创办多对多以及扩张示范

本节内容梳理

本周功课

0一 python s6 day柒 上节回顾
02 python s6 day7 SNMP使用
03 python s6 day7 大型监察和控制架构讲明
04 python s6 day7 Redis使用
0伍 python s陆 day七 定义监控文书档案结构
06 python s陆 day7 监控架构讲明
07 python s6 day柒 定义监察和控制模板
08 python s6 day7 自定义监察和控制项
0玖 python s6 day7 通过深copy完毕各主机服务的自定义配置
10 python s陆 day7 配置程序全局变量等消息
1一 python s陆 day7 使用redis订阅服务
1二 python s6 day7 客户端编写
1三 python s六 day七 客户端按不一样频率监察和控制各服务
1四 python s陆 day柒 客户端将监督检查数据重回给劳务器端
一5 python s陆 day柒 作业需要表达

    
 Django基础(一)

 

L13-lesson13
0一 python s陆 登录页面
0十 python s陆 Django装饰器扩张和课业
02 python s陆 后台管理
0三 python s六 用户管理列表中应用bootstrap的分页
04 python s6 Django中Form的使用
0伍 python s陆 Django中Form的选择和源码分析
06 python s陆 Django中间件的法力和python的反光
0七 python s陆 Django中间件的练习
08 python s6 Django利用装饰器成立过滤器
0玖 python s6 Django装饰器和用户认证

35-2   s10期Tornao分享

本节小鸡汤(电影分享)

面向对象介绍

面向对象本性介绍

实例演示opp编程好处

实例变量与类变量

类变量的功能及析构函数

类的继续

经文类与新式类的一连顺序

继续实例批注

多态实例疏解

本节作业之选课系统开荒

L09-lesson09
01py s6 day9 html概述
02py s陆 day玖 尾部标签
03py s6 day9 body内标签1
04py s6 day9 body内标签2(password和form表单)
05py s6 day9 body内标签3(label和列表)
06py s6 day9 body内标签3(table和fieldset)
07py s6 day九 body内标签伍(内联和块级标签)
08py s6 day9 class and style selector
09py s6 day9 class background
10py s6 day9 class border display margin padding
11py s6 day9 class position
1二py s陆 day玖 后台管理框架
13py s6 day9 作业、

37_1    
 KindEditor

第5周

L19-lesson19-end
0壹 s陆day19 最终一课介绍
02 s陆day1玖 职主要编辑排系统介绍
03 s6day1九 架构疏解演示
0四 s陆day1九 架构疏解演示0二
05 s6day1玖 Form表单的中肯
0陆 s六day1玖 架构代码完结解释
0柒 s陆day1九 上传下载文件
08 s六day1九 实现配置管理的思绪
10 s6day19 装饰器
11 s陆 day1玖 学期总回看
1二 s陆 day1九 完成学业后的提议

 
 Py西游攻关之装饰器  苑昊先生

今日知识点概要

上节内容回看以及U奥迪Q3L的补充

视图获取用户请求相关消息以及呼吁头

模板之继续

模板之导入

上节学业景况

自定义 simple_tag

自定义filter

自定义分页

Cookie是哪些鬼

据悉Cookie达成用户登陆

依附cookie实现定制展现数据条数

带具名的Cookie

CBV和FBV用户认证装饰器

本周作业

L17-lesson17
0一 s6day 一7 毕业类别课前沉思
02 s6day 壹七 运营平台框架结构介绍
03 s陆day 一柒 CMDB架构介绍
04 s陆day 1七 怎么着统一筹算NB的表结构
05 s陆day 壹七 设计表结构
06 s陆day 一七 创制项目
07 s6day 17 使用Restful API标准
08 s6day 17 Django rest framework的使用
0玖 s陆day 壹7 开辟适合Restful标准的接口
10 s陆day 壹七 自动创立立异资金数额

            
 Python之路【第玖8篇】:Web框架们

第23周

39          
 python 之路,Day12 –
redis缓存数据库

亟需的交换自身,QQ:184491251四

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图