t.me/atinfo_chat Telegram группа по автоматизации тестирования

Как сделать сортировку аналогичной как в MySQL

Теги: #<Tag:0x00007f9b02543158> #<Tag:0x00007f9b02543018> #<Tag:0x00007f9b02542f00>

Я проверяю сортировку таблицы на веб части. Логика реализации: забрать столбец данных, отсортировать его и сравнить, что забранный и отсортированный листы одинаковые.

MySQL возвращает данные отсортированные asc:

‘mapfiltering’, ‘map_appearance_kmz’

Используя алгоритм natural сортировки в python 2.7 получаю:

‘map_appearance_kmz’, ‘mapfiltering’

Сам алгоритм:

import re
def sorted_nicely( l ):
    convert = lambda text: int(text) if text.isdigit() else text
    alphanum_key = lambda key: [convert(c) for c in re.split('([0-9]+)', key)]
    return sorted(l, key = alphanum_key)

Как сделать сортировку такой же, как в MySQL?

Результат запроса к БД выдает такую же сортировку как и на веб? Если да, зачем еще что то сортировать? Получили данные из веба, получили данные из бд и сравнивайте.

Такой подход не удобен тем, что не всегда на вебе отображаются данные в таком же самом виде как возвращает БД. Например БД и веб имеют различные форматы дат, а также не все запросы являются простыми для выборки, поэтому написание запросов под каждый столбец на множестве других страниц сильно увеличит время разработки.
Поэтому был выбран такой подход.

Ну формат даты конвертнуть в запросе не проблема, за то у вас будет актуальная информация и в случае добавления данных в бд не придется менять тестовые данные :slight_smile:
P.S. а проверять ессесно нужно целиком таблицу, а не по строчно
P.P.S: в любом случае даже если вы напишете свой фильтр, не факт что он будет работать так же как сортировка в MySQL, ну либо вам нужно смотреть в сторону сорцов самого MySQL :smile:

В MySQL есть много вариантов сортировки, проще пойти другим путем.