CherryPy - 测试



测试是一个过程,在此过程中,应用程序将从不同的角度进行执行,以:

  • 查找问题列表
  • 查找预期结果和实际结果、输出、状态等之间的差异。
  • 了解实施阶段。
  • 查找应用程序对现实目的有用。

测试的目标不是指责开发人员,而是提供工具并提高质量,以评估应用程序在给定时间的健康状况。

测试需要提前计划。这需要定义测试的目的、了解测试用例的范围、列出业务需求并了解项目不同阶段中涉及的风险。

测试被定义为在一个系统或应用程序上要验证的一系列方面。以下是常见测试方法的列表:

  • 单元测试 - 这通常由开发人员自己执行。其目的是检查代码单元是否按预期工作。

  • 可用性测试 - 开发人员通常会忘记他们正在为最终用户编写应用程序,而最终用户并不了解系统。可用性测试验证产品的优缺点。

  • 功能/验收测试 - 在可用性测试检查应用程序或系统是否可用时,功能测试确保每个指定的函数都已实现。

  • 负载和性能测试 - 执行此操作是为了了解系统是否可以适应负载和性能测试。这可能导致硬件更改、优化SQL查询等。

  • 回归测试 - 它验证产品的后续版本不会破坏任何以前的函数。

  • 可靠性和弹性测试 - 可靠性测试有助于验证系统应用程序在其中一个或多个组件出现故障时的行为。

单元测试

照片博客应用程序不断使用单元测试来检查以下内容:

  • 新功能正常工作并按预期工作。
  • 新代码发布不会破坏现有功能。
  • 缺陷已修复并保持修复。

Python 带有一个标准的 unittest 模块,提供了一种不同的单元测试方法。

单元测试

unittest 源于 JUnit,JUnit 是由 Kent Beck 和 Erich Gamma 开发的 Java 单元测试包。单元测试只是返回定义的数据。可以定义模拟对象。这些对象允许针对我们设计接口进行测试,而无需依赖整个应用程序。它们还提供了一种在隔离模式下运行测试的方法,其中包括其他测试。

让我们以以下方式定义一个虚拟类:

import unittest

class 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 模块以提供给定类的单元测试功能。

  • 应通过子类化 unittest 来创建一个类。

  • 上面代码中的每个方法都以单词 test 开头。所有这些方法都由 unittest 处理程序调用。

  • 断言/失败方法由测试用例调用以管理异常。

将此视为运行测试用例的示例:

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

运行测试用例的结果(输出)如下:

----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK

功能测试

一旦应用程序功能根据需求开始成形,一组功能测试就可以验证应用程序在规范方面的正确性。但是,测试应自动执行以获得更好的性能,这将需要使用 Selenium 等第三方产品。

CherryPy 提供了像内置函数这样的辅助类来简化功能测试的编写。

负载测试

根据您正在编写的应用程序和您在容量方面的期望,您可能需要运行负载和性能测试,以检测应用程序中阻止其达到特定性能级别的潜在瓶颈。

本节不会详细介绍如何进行性能或负载测试,因为它超出了 FunkLoad 包的范围。

FunkLoad 的一个非常基本的示例如下:

from funkload.FunkLoadTestCase 
import FunkLoadTestCase

class 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_url

for i in range(nb_time):
self.logd('Try %i' % i)
self.get(home_page, description='Get gome page')
if __name__ in ('main', '__main__'):

import unittest

unittest.main()

以下是上述代码的详细解释:

  • 测试用例必须继承自 FunkLoadTestCase 类,以便 FunkLoad 可以执行其在测试期间跟踪发生情况的内部工作。

  • 类名很重要,因为 FunkLoad 将根据类名查找文件。

  • 设计的测试用例可以直接访问配置文件。Get() 和 post() 方法只是针对服务器调用以获取响应。

广告