功能测试的主要代码
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])
原文:https://www.cnblogs.com/chenminyu/p/11733627.html