Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Кто-нибудь верифицировал шаблон вызова REST API, перед запусом теста?

rest
restapi
python
Теги: #<Tag:0x00007fedbfc30af0> #<Tag:0x00007fedbfc307d0> #<Tag:0x00007fedbfc305f0>

(Ilya Dunin) #1

Все привет!

Есть задача протестировать REST API (ну тут все просто, вопросов нет). Инструменты python и py.test. Вопросы следующие, может кто сталкивался и решал подобное:

  1. Есть описание всех API в RAML и хочется на основе этого описания валидировать текущие шаблоны вызова API. Т.е. перед вызовом получили из RAML текущее описание схемы, сравнили с тем что есть, если не совпадает – тест не прошел, даже не стартуем.
  2. Какие есть плюсы у Rester / pyresttest / siesta перед написанием своего велосипеда (учитывая что он уже есть)? Кто пользовался, какие полезные фичи отметили? Вдруг подумал, почему бы не посмотреть в сторону каких-то готовых решений.
    Rester я быстро глянул, там тесты на JSON, есть свой язык внутренний для сравнение результатов. Для меня не айс. Проще на питоне. Остальные два чем могу похвастаться?

Я сейчас собираюсь просто делать внутри своего API класса, вызов какого-нибудь верификатора, который перед загрузкой шаблона, получит последнее актуальное описание и сравнит с тем что сохранено. Но может это велосипед и есть какие-то более правильные решения?

Заранее спасибо за идеи.


(Vatslau) #2

Попробуйте
validator.py - мне нравится по быстрому накидать проверок можно по схеме
тесты так выглядят

 def test_00_login(self):
        modem_session = login_arris_test(modem['password'])

        rules = {
            "unique": [Required, Truthy()],
            "family": [Required, Truthy()],
            "modelname": [Required, Truthy()],
            "name": [Required, Equals('admin')],
            "tech": [Required, Not(Truthy())],
            "moca": [Required, Equals(0)],
            "wifi": [Required, Equals(5)],
            "conType": [Required, Equals('LAN')],
            "muti": [Not(Required), Equals('LAN')],
            "gwWan": [Required, Equals('f')],
            "DefPasswdChanged": [Required, Equals('NO')],
        }
        json_str = json.loads(modem_session['session_string'])
        result = validate(rules, json_str)
        pprint(validate(rules, json_str))

        self.assertTrue(result.valid, True)
        pass

Если апи не сложное должно хватить


(Ilya Dunin) #3

Спасибо! :slight_smile: Посмотрю. У меня просто уже есть свой валидатор, который поддерживает правила, правда я его для другой задачи пилил и надо будет доработать напильником, а этот выглядит неплохо.

Но в целом я про подход спрашивал. Кто как делает. Т.е. моя основная задача зафейлить тест, даже не запуская, если схема изменилась.
Т.е. видимо фикстуру свою написать, которая и будет валидировать входные данные ввиде описания API.