功能測試的主要代碼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])