Если cursor
- это генератор в глобальной области видимости, то первый тест, который будет использовать его, исчерпает его, поэтому он будет пуст для всех остальных тестовых случаев. Поскольку все утверждения находятся в циклах, они не будут выполняться. Лучше использовать приспособление pytest. , похожее на:
import pymongo
import re
import unittest
import pytest
from contextlib import closing
@pytest.fixture
def cursor():
with closing(pymongo.MongoClient("mongodb://root:mongodbadmin@18.223.241.113:27017")) as myclient:
mydb = myclient["Ecomm_Product_db"]
mycol = mydb["products"]
yield mycol.find({})
def test_category_name(cursor):
'''Asserts given special characters are not available in the category name'''
regex = re.compile('[@_!#$/%^*()<>?|}{~:],')
for name in cursor:
assert regex.search(name['category'])==None
def test_category_type(cursor):
'''Asserts category name value type is an string '''
for name in cursor:
assert type(name['category'])==str
def test_category_minlength(cursor):
'''Asserts given min length condition for category name '''
for name in cursor:
assert len(name['category'])>=5
def test_category_maxlength(cursor):
'''Asserts given max length condition for category name '''
for name in cursor:
assert len(name['category'])<=50
Вы будете каждый раз получать новый курсор таким образом.