澳门在线威尼斯官方 > 澳门在线威尼斯官方 > 老师讲课博客目录,对Python的Django框架中的项目

原标题:老师讲课博客目录,对Python的Django框架中的项目

浏览次数:92 时间:2019-09-07

 bootstrap cdn在线地址

对Python的Django框架中的项目进展单元测量试验的艺术,pythondjango

 Python中的单元测量检验

我们先来回想一下Python中的单元测验方法。
上边是一个 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)

可是这么运维后收获的结果,本身每便都得算一下去审批三次,很不便利,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)

汗!开掘了没,竟然七个都未果了,测量检验开采:

4.2除以3 对等 1.陆仟000000000001 不对等期望值 1.4

9除以4等于2,不等于期望的 2.25

上面大家正是要修复那么些主题素材,再度运转测量检验,直到运转不报错截至。

举例说根据实情,借使大家只须要保留到小数点后6位,能够那样改:

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:试行全体的测量试验用例
  • python manage.py test app_name, 实施该app的装有测量检验用例
  • python manage.py test app_name.case_name: 施行指定的测验用例

用第两种艺术推行上面提供的样例,结果如下:

$ 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 4th》中,7.2节,最后促成的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必需独一;

让大家在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'...

测量试验通过,况且通过单元测验,大家开采并消除了一个bug。

 

您或者感兴趣的篇章:

  • 行使Python的Django框架结合jQuery落成AJAX购物车页面
  • Python的Django REST框架中的体系化及诉求和再次回到
  • 详解Python的Django框架中的templates设置
  • Python使用django获取客商IP地址的点子
  • 浅析Python的Django框架的周转形式及管理流程
  • Django1.7+python 2.78+pycharm配置mysql数据库教程
  • python常用web框架简单质量测验结果分享(包括django、flask、bottle、tornado)
  • python django集成cas验证系统
  • 教您如何将 Sublime 3 塑变成 Python/Django IDE开拓利器
  • 详解Python的Django框架中manage命令的运用与壮大

Python中的单元测量检验 大家先来回看一下Python中的单元测验方法。 下边是贰个Py...

http://www.xuliangwei.com/ http://www.nnzhp.cn

  cmdb

    cmdb

    cmdb

  1.     第一篇:初识Python

  2.   其次篇:python基础之大旨风格

  3.   其三篇:python基础之数据类型与变量

  4.   第四篇:python基础之法规和循环

  5. 第五篇:python基础之字符编码

  6. py编码终极版  苑昊先生

   Py西游攻关之函数    苑昊先生

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

   Py西游攻关之IOmodel 苑昊先生

  1.   第六篇:python基础之文件管理

  2.   第七篇 python基础之函数,递归,内置函数

  3.   第八篇 迭代器左券和生成器

  4.   第九篇 装饰器

  5. 第十篇 面向对象的次第设计

  6.   第十一篇 面向对象进级

  7.   第十二篇 相当管理

  8.   第十三篇 python基础之socket编制程序

  9.   常用模块

  10.   模块与包

  11. 澳门在线威尼斯官方 ,  进程与线程

17_1    进度与线程理论基础

17_2    Cpython解释器援助的进程与线程

  1.   函数草稿

18_1     selenium模块

  1.   常用模块

  2.   Py西游攻关之模块

  3.    二十多线程与多进度

  4.   Py西游攻关之RabbitMQ、Memcache、Redis

  5.   前端基础之html

  6.     前面四个基础之CSS

  7.     JavaScript 基础学习1

  8.     前面一个学习之jquery

26_1.       Django-ajax

   jQuery

       jQuery网址

  1.       Python开采【第十七篇】:MySQL(一)

  2.       Python开拓【第十八篇】:MySQL(二)

  3.       Python开垦【第十九篇】:Python操作MySQL

       目录补充

  1.     数据库基础

  2.     数据库进级

  3.         MySQL练习题

  4.                 MySQL演练题参照他事他说加以考察答案

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

  6.        Python之路【第十七篇】:Django【进级篇 】

35_1.     Django之Model操作

35-2   s10期Tornao分享

35-3      Django知识点整理

本文由澳门在线威尼斯官方发布于澳门在线威尼斯官方,转载请注明出处:老师讲课博客目录,对Python的Django框架中的项目

关键词:

上一篇:没有了

下一篇:什么样是CGI、法斯特CGI、PHP-CGI、PHP-FPM、Spawn-FC