测试是一个过程,在此过程中,应用程序从不同的角度进行,以便&#;
查找问题列表
找出预期和实际结果,输出,状态等之间的差异.
了解实施阶段.
找到对实际用途有用的应用程序.
测试的目的不是让开发人员有错,而是提供工具并提高质量.估计应用程序在给定时间的运行状况.
需要提前计划测试.这要求定义测试目的,理解测试用例的范围,制定业务需求列表并了解项目不同阶段所涉及的风险.
测试是定义为要在系统或应用程序上验证的一系列方面.以下是常用测试方法的列表 :
单元测试 : 这通常由开发人员自己执行.这旨在检查代码单元是否按预期工作.
可用性测试 : 开发人员通常会忘记他们正在为不了解系统的最终用户编写应用程序.可用性测试验证了产品的优缺点.
功能/验收测试 : 虽然可用性测试检查应用程序或系统是否可用,但功能测试可确保实现每个指定的功能.
负载和性能测试 : 这是为了理解系统是否可以适应要进行的负载和性能测试.这可能会导致硬件发生变化,优化SQL查询等.
回归测试 : 它验证产品的连续版本不会破坏任何以前的功能.
可靠性和弹性测试 : 可靠性测试有助于通过一个或多个组件的细分来验证系统应用程序.
单元测试
Photoblog应用程序不断使用单元测试来检查以下内容;
新功能正常运行并符合预期.
新代码版本不会破坏现有功能.
缺陷已修复并保持不变.
Python提供了一个标准的unittest模块,提供了不同的单元测试方法.
Unittest
unittest植根于JUnit,a由Kent Beck和Erich Gamma开发的Java单元测试包.单元测试只返回定义的数据.可以定义模拟对象.这些对象允许针对我们设计的界面进行测试,而不必依赖于整个应用程序.它们还提供了一种在隔离模式下运行测试的方法,包括其他测试.
让我们用以下方式定义一个虚拟类 :
import unittestclass DummyTest(unittest.TestCase):def test_01_forward(self):dummy = Dummy(right_boundary=3) self.assertEqual(dummy.forward(), 1) self.assertEqual(dummy.forward(), 2) self.assertEqual(dummy.forward(), 3) self.assertRaises(ValueError, dummy.forward)def test_02_backward(self):dummy = Dummy(left_boundary=-3, allow_negative=True) self.assertEqual(dummy.backward(), -1) self.assertEqual(dummy.backward(), -2) self.assertEqual(dummy.backward(), -3) self.assertRaises(ValueError, dummy.backward)def test_03_boundaries(self):dummy = Dummy(right_boundary=3, left_boundary=-3,allow_negative=True) self.assertEqual(dummy.backward(), -1) self.assertEqual(dummy.backward(), -2) self.assertEqual(dummy.forward(), -1) self.assertEqual(dummy.backward(), -2) self.assertEqual(dummy.backward(), -3)
代码的解释如下 :
应导入unittest模块以提供给定类的单元测试功能.
A class应该通过继承unittest来创建.
上面代码中的每个方法都以单词test开头.所有这些方法都由unittest处理程序调用.
测试用例调用assert/fail方法来管理异常.
将此视为运行测试用例的示例 :
if __name__ == '__main__':unittest.main()
运行测试用例的结果(输出)如下:
----------------------------------------------------------------------Ran 3 tests in 0.000sOK
功能测试
一旦应用功能按照要求开始成形,功能测试集可以验证应用程序关于规范的正确性.但是,测试应该是自动化的,以获得更好的性能,这需要使用第三方产品,如Selenium.
CherryPy提供了类似内置函数的辅助类,以简化功能的编写测试.
负载测试
根据您编写的应用程序和您对数量的期望,您可能需要运行负载和性能测试为了检测应用程序中阻止其达到某种性能水平的潜在瓶颈.
本节不会详细介绍如何进行性能测试或负载测试.它是FunkLoad包.
FunkLoad的一个非常基本的例子如下&&;
from funkload.FunkLoadTestCase import FunkLoadTestCaseclass LoadHomePage(FunkLoadTestCase):def test_homepage(self):server_url = self.conf_get('main', 'url')nb_time = self.conf_getInt('test_homepage', 'nb_time')home_page = "%s/" % server_urlfor i in range(nb_time):self.logd('Try %i' % i)self.get(home_page, description='Get gome page')if __name__ in ('main', '__main__'):import unittestunittest.main()
以下是上述代码的详细说明 :
测试用例必须从FunkLoadTestCase类继承,以便FunkLoad可以执行内部工作来跟踪测试期间发生的事情.
类名很重要,因为FunkLoad会根据班级名称查找文件.
设计的测试用例可以直接访问配置文件.只需针对服务器调用Get()和post()方法即可获得响应.