Python django TDD一個簡單的記事本例子

功能測試的主要代碼html

      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.先測試數據庫是否正常存儲數據python

               在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沒法經過django

            解決遷移數據庫oop

                            1.修改models.pypost

                             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.測試前端數據是否正確填入數據庫code

                   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])
相關文章
相關標籤/搜索