我正在开发一个Flask应用,该应用使用API从Magic:The Gathering检索卡片。我将Flask-SQLAlchemy用于我的数据库模型。我现在使用Python中的unittest使用TestCase编写单元测试。我的每项测试都需要很长时间才能运行(即,一次测试大约需要5分钟)。有些测试根本无法完成运行。有几天,我的测试都无法完成运行,并且将运行数小时而没有结果。这是我的测试用例之一:
from app import app
import os
from unittest import TestCase
from home import COLORS, generate_filter_terms, determine_page, determine_index_range, generate_filtered_cards
from models import db, User
app.config['SQLALCHEMY_DATABASE_URI'] = (
os.environ.get('DATABASE_URL', 'postgres:///mtg_db_test'))
class HomeTestCase(TestCase):
def setUp(self):
"""Create test client, add sample data."""
db.drop_all()
db.create_all()
self.client = app.test_client()
self.user1 = User.signup(email='email1@gmail.com', password='user1password', username='username_1',
image_url=None)
db.session.commit()
User.authenticate(username=self.user1.username,
password='user1password')
def test_generate_filter_terms(self):
category = 'colors'
default_terms = COLORS
req_args = {}
terms = generate_filter_terms(category, default_terms, req_args)
print(terms)
# ^^ THIS LINE PRINTS ['White', 'Blue', 'Black', 'Green', 'Red'], NOT SURE WHY THE BELOW ASSERTS WON'T WORK (THEY RUN INFINITELY AND NEVER COMPLETE)
self.assertIn('White', terms)
self.assertIn('Black', terms)
self.assertIn('Red', terms)
self.assertIn('Blue', terms)
self.assertIn('Green', terms)
下面是generate_filter_terms()函数:
def generate_filter_terms(category, default_terms, req_args):
terms = default_terms
if category in req_args and len(req_args[category]) > 0:
terms = req_args[category].split(',')
return terms
我已经写了18项测试,大约花了一周的时间。我至少需要编写40个测试,如果这个问题继续存在,这将花费很长时间。我尝试过在线寻找解决方案,但没有找到任何专门针对unittest出现此问题的人。如果有人对为什么会发生和/或如何解决有任何见解,或者知道在哪里可以找到解决方案,将不胜感激。