【问题标题】:make unittest to test the caching status of several routesmake unittest 测试几个路由的缓存状态
【发布时间】:2014-08-01 21:30:28
【问题描述】:

我正在尝试为几条路线编写单元测试。数据操作相当密集并且使服务器 CPU 受限,并且新数据的检索相当少见。因此,我使用烧瓶缓存来@cache.memoize 更密集的路线。

鉴于此,我想为两件事制作测试用例。

  1. 路由正在缓存。否则,操作数据将花费很长时间。
  2. 当我明确清除缓存时,数据将从静态数据中重新加载。没有这个,我的数据将变得陈旧。我将在每次检索新数据时清除缓存。

以下是我使用一些 cmets 进行单元测试的代码。

import unittest
from app import create_app
from app.charts.cache import cache

class ChartTests(unittest.TestCase):
  def setUp(self):
    self.app = create_app('TESTING')
    self.context = self.app.app_context()
    self.client = self.app.test_client()
    self.context.push()

  def tearDown(self):
    self.context.pop()

  def test_routes_cached(self):
    """ test that the routes are caching and uncaching correctly """
    r1 = self.client.get('/chart/upgrade/')
    r2 = self.client.get('/chart/upgrade/')
    r3 = self.client.get('/chart/upgrade/?start_date=201404')
    self.assertTrue( #R1 is not cached )
    self.assertTrue( #R2 is cached )
    self.assertFalse(r3.data == r2.data)
    update_data(app) # changes the csv. Also uses flask-cache's `clear_cache()` to purge
    r_new = self.client.get('/chart/upgrade')
    self.assertTrue( #R_NEW is not cached )
    self.assertTrue(r_new.data != r1.data)

我的路线相当简单,并且倾向于遵循以下模式:

@charts.before_request():
def update_data():
  charts.data = CSVReader('my_csv')

@charts.route('/upgrade')
@cache.memoize()
def upgrade():
  # ... do little fiddles with some data
  return jsonify(my_new_data)

如何在单元测试中对路由的缓存状态做出准确的断言?

【问题讨论】:

    标签: python python-2.7 caching flask flask-cache


    【解决方案1】:

    最简单的方法就是使用get method of flask.ext.cache.Cache:

    def test_routes_cached(self):
        self.assertTrue(cache.get("/chart/upgrade/") is None)
        r1 = self.client.get("/chart/upgrade/")
        self.assertTrue(cache.get("/chart/upgrade/") is not None)
    
        # ... snip ...
    
        update_data(app)
    
        self.assertTrue(cache.get("/chart/upgrade/") is None)
        r_new = self.client.get("/chart/upgrade/")
        self.assertTrue(cache.get("/chart/upgrade/") is not None)
    
        # ... etc. ...
    

    【讨论】:

    • 完美,这似乎正是我想要的。谢谢楼主
    猜你喜欢
    • 2014-08-26
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 2021-05-28
    • 2013-12-21
    • 2020-11-08
    相关资源
    最近更新 更多