首页 > 编程语言 > 详细

Python django TDD一个简单的记事本例子

时间:2019-10-24 18:18:24      阅读:84      评论:0      收藏:0      [点我收藏+]

功能测试的主要代码

      input.send_keys(‘Buy1‘)#填入文本框
      input.send_keys(Keys.ENTER)#回车
      time.sleep(1)
      input = self.browser.find_element_by_id("id_new_item")
      input.send_keys(‘Buy2‘)  # 填入文本框
      input.send_keys(Keys.ENTER)  # 回车
      time.sleep(1)
      table=self.browser.find_element_by_id(‘id_list_table‘)
      rows=table.find_elements_by_tag_name(‘tr‘)
      self.assertIn(‘1:Buy1‘,[row.text for row in rows])
      self.assertIn(‘2:Buy2‘, [row.text for row in rows])
      self.fail("Finish test")#提前结束测试

单元测试

         1.先测试数据库是否正常存储数据

               在tests.py下新建类

               

class ItemModel(TestCase):#测试数据库
    def test_saving_and_retrieving_items(self):#测试数据库是否正常存储
        first_item=Item()
        first_item.text=‘first item‘
        first_item.save()
        second_item=Item()
        second_item.text=‘second item‘
        second_item.save()
        saved_items=Item.objects.all()
        self.assertEqual(saved_items.count(),2)#测试保存数量
        first_saved=saved_items[0]
        second_saved=saved_items[1]
        self.assertEqual(first_saved.text,‘first item‘)#测试保存的内容
        self.assertEqual(second_saved.text,‘second item‘)

    运行python manage.py test无法通过

            解决迁移数据库

                            1.修改models.py

                             2.运行python manage.py makemigrations

models.py

from django.db import models
class Item(models.Model):
    text=models.TextField(default=‘‘)
# Create your models here.

  2.测试前端数据是否正确填入数据库

                   tests.py主要代码

        response=self.client.post(‘/‘,data={‘item_text‘:‘A new list item‘})
        self.assertEqual(Item.objects.count(),1)#测试在前端填写的有没有正确的填入数据库
        new_item=Item.objects.first()
        self.assertEqual(‘A new list item‘,new_item.text)
        self.assertEqual(response.status_code, 302)#302重定向

      运行未通过

            解决修改views.py代码

            

    if request.POST:
        Item.objects.create(text=request.POST[‘item_text‘])#objects创建一个简化的Item对象,无需调用save
        return redirect(‘/‘)

  3.测试数据库数据是否正确渲染到前端

                test.py主要代码

                  

    def test_displays_all_list_items(self):
        Item.objects.create(text=‘test1‘)
        Item.objects.create(text=‘test2‘)
        response = self.client.post(‘/‘)
        self.assertIn(‘test1‘, response.content.decode())
        self.assertIn(‘test2‘,response.content.decode())

      运行未通过

             解决

            home.html修改

              

<html>
<title>To-Do lists</title>
<body>
<h1>Hello World</h1>
<form method="post">
<input name="item_text" id="id_new_item" placeholder="Enter a to-do item"/>
{% csrf_token %}
</form>
<table id ="id_list_table">
{% for item in items %}
<tr>
<td>{{ forloop.counter}}:{{ item.text }}</td>
</tr>
{% endfor %}
</table>
</body>
</html>

  views.py修改

    if request.POST:
        Item.objects.create(text=request.POST[‘item_text‘])#objects创建一个简化的Item对象,无需调用save
        return redirect(‘/‘)
    items=Item.objects.all()
    return render(request,‘home.html‘,{‘items‘:items})

  使用迁移产生数据库:python manage.py  migrate

最终:功能测试,单元测试通过结束

 

注意:功能测试使用的是真正的数据库,上一次的数据遗留会影响下一次测试

即:

      self.assertIn(‘1:Buy1‘,[row.text for row in rows])
      self.assertIn(‘2:Buy2‘, [row.text for row in rows])

Python django TDD一个简单的记事本例子

原文:https://www.cnblogs.com/chenminyu/p/11733627.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!