Письменный тестовый пример с pytest для проверки данных. Характер тестового примера изменяется с выполнением группы - PullRequest
0 голосов
/ 23 апреля 2019

Я использую pytest для написания модульного теста для проверки данных. Каждый тест написан внутри метода. когда я запускаю каждый тест по отдельности, он дает правильный результат, но когда я пытаюсь запустить все тесты вместе, он пропускает неудачные тесты. Я бы использовал порядок в Pytest, но у меня 400 тестовых случаев. Может кто-нибудь предложить мне решение?

образец теста

import pymongo
import re
import unittest
import pytest


myclient = pymongo.MongoClient("mongodb://root:mongodbadmin@18.223.241.113:27017")
mydb = myclient["Ecomm_Product_db"]
mycol = mydb["products"]
cursor = mycol.find({})


class Data_Validation(unittest.TestCase):     

        def test_category_name(self):
                '''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(self):
                '''Asserts category name value type is an string '''
                for name in cursor:
                        assert type(name['category'])==str

        def test_category_minlength(self):
                '''Asserts given min length condition for category name '''
                for name in cursor:
                        assert len(name['category'])>=5

        def test_category_maxlength(self):   
                '''Asserts given max length condition for category name '''
                for name in cursor:
                        assert len(name['category'])<=50

1 Ответ

0 голосов
/ 23 апреля 2019

Если 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

Вы будете каждый раз получать новый курсор таким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...