• Правильно ли покрывать каждый параметр JSON REST api тестами?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    1. Для каждого метода подготавливаются и проверяются все regex-выражения на корректность работы выборки для ожидаемых входных данных по "белому" списку (это не только к API относится, а ко всему):
    параметр1 -> regex-выражение1
    параметр2 -> regex-выражение2
    и т.д.
    2. Добавляются эти выражения в свои методы, согласно таблице соответствий.
    3. Проверяется каждый метод, что ответ при неверных входных данных содержит всю нужную информацию для понимания происходящего.
    4. Затем 2-3 раза прогоняете весь процесс работы бизнес-логики с этим API.
    5. Всё ОК - можно "болтить".
    Ответ написан
    Комментировать
  • Правильно ли покрывать каждый параметр JSON REST api тестами?

    27cm
    @27cm
    TODO: Написать статус
    1) Нормально ли это при ручном тестировании? Если нет, то как лучше ограничить? К сожалению, выбор тут зависит не от меня.

    Все возможные кейсы вручную не проверяют, обычно ограничиваются только критичными случаями (проверяют обязательные поля и пограничные значения для наиболее важных параметров). Всё зависит от требований к тестированию и сроков. Если нужно, можно и все 100 тестов вручную сделать.

    2) Нормально ли это при автоматизированном тестировании?

    Да. В автотестах, как правило, проверяют все возможные ошибки.

    3) Не упустил ли я чего то?

    Тесты можно писать бесконечно, это опять же зависит от требований заказчика и сроков. Можно проверить отправку невалидного JSON-а, отправку запросов с некорректным HTTP методом: GET, POST, HEAD, PATCH... и т. д.

    Не стоит ограничиваться только сценариями на проверку ошибок. В зависимости от разных комбинаций входных параметров в API может быть реализовано разное поведение. Желательно проверить все принципиально разные успешные сценарии. Например, если в API есть boolean параметр, то необходимо проверить поведение при значении true и значении false.

    2) Нужно ли тестировать каждое обязательное поле по отдельности?

    В идеале да. На практике так мало кто делает, тем более при ручном тестировании, особенно если параметров очень много. Как правило хорошее API в ответе всегда сообщает какие из обязательных полей не указаны, их список и проверяют в ответах. Проверяют три случая: все обязательные поля не указаны в запросе, пара-тройка обязательных полей не указаны, все обязательные поля указаны в запросе.
    Ответ написан
    2 комментария
  • Как корректно реализовать "сборщика" информации (из стороннего публичного API)?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Да, замедлит, делайте отдельным процессом/приложением. Нода однопоточная, поэтому пока приложение разбирает json, готовит его к вставке в бд, оно не сможет отвечать клиентам и они будут видеть это как тормоза сайта.
    Ответ написан
    4 комментария
  • Есть ли возможность поступления на удаленные программы обучения от зарубежных вузов?

    johnnykramer
    @johnnykramer
    software engineer
    coursera - твой выбор.
    нет средств - говоришь им об этом и учишься бесплатно.
    можно выбрать курс обучения из множества именитых ВУЗов.
    в результате обучения получишь сертификат с подписями твоих преподавателей и ректора ВУЗа. то есть, если курс был от MIT - то и сертификат MIT'овский.
    Ответ написан
    2 комментария
  • Как реализовать модель в MVP? Правильно ли я понимаю данный шаблон проектирования?

    VGrabko
    @VGrabko
    Golang, Php, Js
    Всё верно. Present может обратится к другому классу запросто но лучше так не делать. По сути Present аналог контроллера в MVC только с доп. абстракциями
    Ответ написан
    5 комментариев
  • Единый элемент для вывода аудио/видео/фото?

    artemgapchenko
    @artemgapchenko
    Попробуйте ViewStub. В зависимости от того, какой файл пришёл с предыдущего экрана, будете инфлейтить разные макеты (для аудио/фото/видео) и работать с ними.
    Можно даже выделить три разных кастомных виджета, реализающих один общий интерфейс MediaFileHandler. В этом интерфейсе будет метод handleFile(File). При попадании на экран с выводом медиа вы инфлейтите соответствующий layout, содержащий ваш кастомный виджет, и вызываете у виджета handleFile().
    Ответ написан
    1 комментарий
  • Как правильно создать индекс в ElasticSearch?

    onqu
    @onqu
    weasy
    1. Проверять ничего не надо, если данные не нужны, запрос на обновление всего документа аналогичен запросу на добавление. Запрос ниже либо создаст новый документ, либо полностью заменит существующий.

    PUT /компании/компания/{_id}
    {
        "навание": "SpaceX",
        "работники":  ...,
    }


    Если "hash" уникален для каждой копании, его можно использовать в качестве _id

    PUT /компании/компания/{hash}
    {
        ...
    }


    В более ранних версиях (до 1.5) можно было использовать alias для поля _id, которое может генерироваться автоматически:

    "mappings": {
        "компания": {
            // в текущей версии: 2.3 depricated - сказывалось на производительности
            "_id": {"path": "hash"},
            "properties": {
                "навание": {
                    "type": "string"
                },
                ...
            }
        }
    }


    2. В эластике нет, как таковых массивов, есть вложенные объекты. Любое поле документа может содержать множество значений, но значения должны быть одного типа. Тип может быть nested или object, nested позволяет производить более удобный поиск при множестве вложенных объектов.

    Если правильно понимаю, и должности разные, то будет удобнее использовать nested. Иначе object.

    "mappings": {
        "компания": {
            "properties": {
                "работники": {
                    "type": "nested",
                    "properties": {
                        "должность": {
                            "type": "string"
                        },
                        "имя": {
                            "type": "string"
                        }
                    }
                }
            }
        }
    }
    
    // создание/обновление
    PUT /компании/компания/{_id}
    {
        "название": "...",
        "hash": "...",
        "работники": [
            {
                "должность": "манагер",
                "имя": ["Анатолий", "Андрей"]
            },
            {
                "должность":  ["управляющий", "заместитель"]
                "имя": "Дмитрий"
            },
            {
                "должность": "кассир",
                "имя": ["Татьяна", "Анастасия"]
            },
        ]
    }
    
    // примерный поиск
    GET /компании/компания/_search
    {
        "query": {
            "nested": {
                "path": "работники",
                "query": {
                    "bool": {
                        "must": [
                            { "match": { "работники.должность": "управляющий" }},
                            { "match": { "работники.должность":  "кассир" }} 
                        ]
                    }
                }
            }
        }
    }
    Ответ написан
    8 комментариев
  • Что вы делаете с людьми, которые "выпадают" из проектов?

    DDDsa
    @DDDsa
    Возможно, отправить изучать методы раскрутки приложения после запуска. Устанавливать контакты с новостными порталами и блогами по тематике с целью размещения на них обзорной статьи приложения.

    Возможно, занять оформлением и наполнением сайта приложения, если таковой имеется или планируется.

    Возможно, запрячь анализом приложений-конкурентов, пусть составляет сводные таблицы: функционал, плюсы-минусы. Здесь же изучение отзывов клиентов конкурентов для определения моментов, которые важны потребителю.

    Разумеется, это все работает только если вы разрабатываете коммерческий продукт. Хотя последнее пригодится и для внутренней разработки

    UPD: Ну и если человек грамотно пишет - усадите его за написание документации!
    Ответ написан
    3 комментария