功能测试的主要代码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])