使用unittest扩展功能测试

使用unittest扩展功能测试


打开浏览器–Selenium进行功能测试

在本地在启动Django服务器后,可以使用Selenium实现测试以驱动真正的浏览器,进行功能测试
创建functional_tests.py文件,代码如下:

from selenium import webdriver
import os

chrome_driver = os.path.abspath(r"C:\Users\stone\Desktop\chromedriver.exe")
os.environ["webdriver.chrome.driver"] = chrome_driver

driver = webdriver.Chrome(chrome_driver)
driver.get("http://localhost:8000")
assert('Django' in driver.title)

这段代码实现如下功能:
- 启动一个Selenium webdriver,打开Chrome浏览器
- 在这个浏览器中打开期望的网页[http://localhost:8000]
- 检查(测试断言)这个网页的标题中是否包含’Django’

使用Selenium实现的测试可以驱动真正的网页浏览器,让我们能从用户的角度查看应用是如何运作的。因此将此类测试叫做“功能测试”。

功能测试 = 验收测试 = 端到端测试 = 黑箱测试

先测试后编码

以TDD模式开发一款软件,它的核心是以测试驱动开发,即先有测试再去开发。编写新的功能测试时,可以先写注释,勾勒出用户故事的重点(需求的实例过程)。这样写出的测试可读性强。以后将以一个待办事务清单的web应用为例,进行TDD敏捷开发。

Python标准库中的unittest

unittest要达到如下目标:

  • 支持自动化测试
  • 让所有的测试脚本共享 开启(setup) 和 关闭(shutdown) 的代码
  • 可以通过集合(collections)的方式来组织测试用例脚本
  • 将所有的测试脚本从测试报告框架中独立出来

为了达到以上目标,unittest支持如下几个重要概念:

  • 测试装置(test fixture)
    为一个或者多个测试用例做一些准备工作,例如:连接一个数据库,创建一个目录,或者开启一个进程

  • 测试用例(test case)
    测试用例是测试行为的最小单元,通过对一些输入输出值的对比来进行测试检查

  • 测试套件(test suite)
    将测试用例或者测试用例集合聚合组织起来的集合。可以批量执行一个测试套件内所有的测试用例

  • 测试执行器(test runner)
    组织安排测试脚本执行活动的组件。测试执行器通过一些图形界面,文本界面或者返回一些特殊的值来展示测试脚本的测试结果。主要用于生成测试报告

对上述代码使用unittest进行封装:

#coding=utf-8
from selenium import webdriver
import unittest
import os

chrome_driver_path = r"C:\Users\stone\Desktop\chromedriver.exe"

class NewVisitorTest(unittest.TestCase):
    def setUp(self):
        chrome_driver = os.path.abspath(chrome_driver_path)
        os.environ["webdriver.chrome.driver"] = chrome_driver
        self.driver = webdriver.Chrome(chrome_driver)
        self.driver.implicitly_wait(3) #3秒等待
    def tearDown(self):
        self.driver.quit()

    def test_process(self):
        #用户打开在线待办事务应用首页
        self.driver.get("http://localhost:8000")
        #以确定打开首页,其标题包含‘To-Do’
        self.assertIn('To-Do' , self.driver.title)
        self.fail('Finish the test.')

        #用户的其他操作...

if __name__ == '__main__':
    unittest.main()

执行python functional_tests.py [run functional_tests.py],结果如下:

C:\Python27\python.exe D:/Code/Django_tests/test/functional_tests.py
F
======================================================================
FAIL: test_process (__main__.NewVisitorTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:/Code/Django_tests/test/functional_tests.py", line 21, in test_process
self.assertIn('To-Do' , self.driver.title)
AssertionError: 'To-Do' not found in u'Welcome to Django'

----------------------------------------------------------------------
Ran 1 test in 6.998s

FAILED (failures=1)

Process finished with exit code 1

由于此处仅有测试,还未进行web-app开发,浏览器打开的首页依然是Django欢迎界面。因此会有AssertionError抛出。

使用PyCharm执行unittest测试类[NewVisitorTest]:Run–>Run[Alt+Shift+F10]–>Unittest in NewVisitorTest,结果如下图:
Unittest in NewVisitorTest

点击Export Text Results,即可导出测试结果的html文件,便于存档。
Export Text Results

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值