内容说明
补充第一篇的内容,有兴趣的可自行参考「PythonWeb开发:测试驱动方法」
功能测试
使用 Selenium 实现的测试可以驱动真正的网页浏览器,让我们能从用户的角度查看应用是
如何运作的。因此,我们把这类测试叫作“功能测试”。
最简单的方式,就是从User Story中把用户的行为都表示出来。
术语说明
功能测试 = 验收测试 = 端到端测试
书上所说的功能测试,「有些人喜欢称之为验收测试(Acceptance Test)或端到端测试
(End-to-End Test)。这类测试最重要的作用是从外部观察整个应用是如何运作的。另
一个术语是黑箱测试(Black Box Test),因为这种测试对所要测试的系统内部一无
所知。」
在项目的根目录加上功能测试档案
# functional_tests.py
from selenium import webdriver
browser = webdriver.Firefox()
# 用户知道密个在线待办事项应用
# 用户看了这个应用的首页
browser.get('http://localhost:8000')
# 用户注意到网页的标题和头部都包含 “ To-Do ” 这个词
assert 'To-Do' in browser.title
# 应用邀请用户输入一个待办事项
# 用户在一个文本框中输入了 “ Buy peacock feathers ” (购买孔雀羽毛)
# 用户的爱好是使用假蝇做饵钓鱼
# 用户按回车键后,页面更新了
# 待办事项表格中显示了 “ 1: Buy peacock feathers ”
# 页面中又显示了一个文本框,可以输入其他的待办事项
# 用户输入了 “ Use peacock feathers to make a fly ” (使用孔雀羽毛做假蝇)
# 用户做事很有条理
# 页面再次更新,用户的清单中显示了这两个待办事项
# 伊迪丝想知道这个网站是否会记住她的清单
# 用户看到网站为自己生成了一个唯一的URL
# 而且页面中有一些文字解说这个功能
# 用户访问那个URL,发现她的待办事项列表还在
# 用户很满意,去睡觉了
browser.quit()
运行方法:
利用Python标准库中的 unittest 模块
说明直接在代码中注释,直接上代码
class NewVisitorTest(unittest.TestCase):
"""测试组织成类的形式,继承unittest.TestCase"""
def setUp(self):
"""
setUp和tearDown是特殊的方法,分别在各测试方寸前和之后运行,这里用来打来浏览器。
p.s:如果setUp抛出异常,不会执行tearDown
"""
self.browser = webdriver.Firefox()
# 隐式等待:当我们想在网页上查找内容的时候,Selenium会等待三秒来显示内容
self.browser.implicitly_wait(3)
def tearDown(self):
"""setUp和tearDown是特殊的方法,分别在各测试方之前和之后运行,这里用来关闭浏览器"""
self.browser.quit()
def test_can_start_a_list_and_retrieve_it_later(self):
"""
测试主要代码在这个方法中,一般以test_开头的都是测试方法,由测试运行程序运行。
一般类中可以有多个测试方法
"""
# 用户听说有一个很酷的在线待办事项应用
# 用户看了这个应用的首页-网站应用
self.browser.get('http://localhost:8000')
# 用户注意到网页的标题和头部都有包含"To-Do"这个词
# 使用self.assertIn代替assert编写测试断言,unittest提供了很多这种用于编写测试断言的辅助函数,如assertEqual、assertTrue等
self.assertIn('To-Do', self.browser.title)
# 不管怎样,self.fail都会失败,生成指定的错误消息,作者用这个方法提醒测试结束了。
self.fail('Finish the test!')
# 应用邀请他输入一个待办事项
if __name__ == '__main__':
"""
Python脚本用这个语句检查自己是否在命令行中运行,而不是在其他脚本中导入
我们调用unittest.main()启动unittest的测试运行程序,这个程序会在文件中自动查找测类和方法,然后运行。
"""
# 禁止抛出ResourceWarning异常
unittest.main(warnings='ignore')