Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];

Вниз

А не маюсь ли я дурью ? (Автоматизированное тестирование)   Найти похожие ветки 

 
ANB ©   (2005-05-23 10:55) [0]

Сижу, пишу систему автоматизированного тестирования. Сторонние средства начальство зарубило (Rational Robot - плохо работает, на WinRunner - денег нет (а мне платить 1200 в месяц не жалко :) )). Мне только на руку - не надо учить test basic, и попрактиковаться в WinAPI возможность, заодно программировать не разучусь. Но есть у меня потаенная мысля - не изобретаем ли мы велосипед, может таки воспользоваться готовым ?


 
Sergey Masloff   (2005-05-23 10:56) [1]

хм... а чем RationalRobot плохо работает?


 
ANB ©   (2005-05-23 10:59) [2]

1. Не ест программы, написанные в Magic
2. Нет толковых и простых средств работы с БД изнутри
3. Тромозит при записи
4. Слетает при попытке работать параллельно с тестом.


 
ANB ©   (2005-05-23 11:00) [3]

Ну, короче, моя начальница в этом дока, она сказала, что Rational Robot винраннеру в подметки не годится.


 
msguns ©   (2005-05-23 11:00) [4]

Если имеется в виду это:
http://delphimaster.net/view/3-1116328809/
то, имхо, маешься ;)


 
ANB ©   (2005-05-23 11:16) [5]


> msguns ©   (23.05.05 11:00) [4]
- ну так это в любом случае делать нужно. У тебя есть другие идеи, по поводу проверки больших массивов данных ?


 
msguns ©   (2005-05-23 11:26) [6]

>ANB ©   (23.05.05 11:16) [5]
>- ну так это в любом случае делать нужно. У тебя есть другие идеи, по поводу проверки больших массивов данных ?

Там очень туманно описана задача,- какие ж могут быть советы, когда послылают "туда, не знаю - куда" ;))


 
ANB ©   (2005-05-23 11:45) [7]

Ну дык, могу прозрачнее. Есть БД с произвольной структурой. Программист получает ТЗ и пишет скрипт, который с этой базой что то делает. Я параллельно получаю тоже ТЗ и должен написать автопроверялку, которая проверит, что программист затронул только те поля и таблички, которые надо, не трогал тех, которые не надо, и что действия произведены корректно. Причем баз может быть несколько. DB линки каждый раз настраивать признано некошерным, так как проверялка не должна сама вносить в базу изменений, т.е. можно только select.


 
Sergey13 ©   (2005-05-23 11:55) [8]

2[7] ANB ©   (23.05.05 11:45)
>Есть БД с произвольной структурой. Программист получает ТЗ и пишет скрипт, который с этой базой что то делает. Я параллельно получаю тоже ТЗ и должен написать автопроверялку, которая проверит, что программист затронул только те поля и таблички, которые надо, не трогал тех, которые не надо, и что действия произведены корректно.
Ну дык сам вместо того программиста и пиши скрипт изменения. А то после тебя еще надо проверять - все ли ты проверил. 8-)


 
Sergey13 ©   (2005-05-23 12:03) [9]

В догонку. А зачем программисту поручать скрипт? Существуют проги которые генерят скрипт изменения по двум БД. Например Жаба для Оракла или ИБЭксперт для ИБ.


 
Сергей Суровцев ©   (2005-05-23 12:05) [10]

>ANB ©   (23.05.05 11:45) [7]

Кошерным в данном случае было бы поручить это двум независимым программистам на разных копиях базы. Если по итогу их последущего сравнения они совпадают, все верно, иначе ищите ошибки. А до того основную базу не тронь. Отсутствие 100$ на дополнительный винт не аргумент, если база того не стоит, выбросьте ее и займитесь делом. :))


 
ANB ©   (2005-05-23 12:20) [11]


> Сергей Суровцев ©   (23.05.05 12:05) [10]
- ну так идея похожа. Только баз у нас несколько сотен. И перед тем, как с ней работать наживую, нужно проверить, что все село верно. Каждый раз сажать отдельно тестировщика невыгодно. Лучше мы раз вдвоем с прогом помучимся, но потом, с вероятностью процентов 90 мы вовремя найдем ошибку. Короче, это делать в любом случае надо. Тема сабжа - нужен ли свой инструмент тестирования ?


 
Sergey13 ©   (2005-05-23 12:22) [12]

2[11] ANB ©   (23.05.05 12:20)
> Только баз у нас несколько сотен.
Именно баз? И все оригинальные?
ИМХО, вам ничто не поможет. 8-)


 
ANB ©   (2005-05-23 12:25) [13]


> Именно баз? И все оригинальные?
- это базы клиентов. А техподдержка им занимается.


 
Sergey13 ©   (2005-05-23 12:29) [14]

Но структуры то у них одинаковые надеюсь? Почему скрипт, прокативший на одной БД, не прокатит на другой?
>но потом, с вероятностью процентов 90 мы вовремя найдем ошибку.
С таким же (даже выше, ИМХО) процентом вероятности я скажу что проги из [9] сделают не хуже.


 
ANB ©   (2005-05-23 12:34) [15]


> Но структуры то у них одинаковые надеюсь?
- они могут чуточку отличаться, а так же могут появится доп.данные, которые не учли при написании скрипта. Например - была пустая табличка, ее программист, перепутав имя (что не мудрено, если они называются f0010 и т.п.) почистил. При тестовых прогонах ты это не выцепишь. Пришла база, где в этой таблице есть данные . . .


 
Sergey13 ©   (2005-05-23 12:43) [16]

2[15] ANB ©   (23.05.05 12:34)
Как то я слабо себе представляю чем занимается ваша контора. Есть эталонная БД с эталонной структурой. Надо привести БД клиента к этой структуре. Зачем что-то чистить? Скорее ИМХО, могут потребоваться заливки данных, если например добавляем нот нулл поле. А стирать то зачем?


 
ANB ©   (2005-05-23 12:53) [17]

Когда могут гонятся скрипты :
- упгрейд базы на новую версию (тут и таблицы целиком дропаются, так как структура сильно меняется)
- выполнение некоторых редких служебных функций. Тут тоже могут наворотить, что угодно, но структура менятся не будет. А вот данные - менятся и удаляться.
Проверяют сейчас все ручками. Причем сильно неоднократно, так что автоматизация бы помогла. Идея - включили мою прогу, нажали кнопку Run и пошли домой. Утром пришли - посмотрели, что получилось. Некоторые вещи так уже работают.


 
Alex Konshin ©   (2005-05-23 13:01) [18]

Что из себя представляет скрипт?

Я как-то слабо представляю, как можно проверить в общем случае, что совершенно неизвестный скрипт не затрагивает полей, которые не должен затрагивать? Проверить корректность изменения нужных полей - еще понятно.
Можно, конечно, экспортировать базу и сравнивать с образцом, только представляешь ли ты себе стоимость такой операции?
Для уменьшения времени прохождения тестов могу предложить использовать подход, который применяется у нас (а у нас, поверь, много тестов, правда у нас тестируются продукты).

Идея такая:

Тест проверяет один или несколько cases.
Тесты объединены в группы по некому признаку (например, тестирование некой функциональности), но при этом обязаны либо быть независимы друг от друга внутри группы либо наоборот, использовать результаты предыдущего теста. То есть, тесты в группе должны писаться с учетом того, что они будут исполняться в группе. Важно то, что на момент начала исполнения любой группы тестов ситуация должна быть одинаковая: некое начальное  состояние базы, продукта и их настроек.
Как это достигается?
У нас для этого написан некий сервер, который выдает "свежие" базы и экземпляры приложения по требованию. Для Oracle баз он, грубо говоря, создает базы из холодного бекапа. Эти бекапы предварительно созданы из базы-образца: созданы пользователи, загружены тестовые данные и т.п.

Это сделано для ускорения прогонки тестов. Свежая база обеспечивается только для группы тестов, тесты внутри группы уже сами разбираются, что можно портить, а что - нельзя.

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

Вообще-то ты читал мою статью про нашу организацию тестирования? Если нет, то прочти, может быть интересно:
http://home.earthlink.net/~akonshin/Workflow_in_PTC.html


 
Sergey13 ©   (2005-05-23 13:10) [19]

>тут и таблицы целиком дропаются
>А вот данные - менятся и удаляться.
ИМХО, это все равно потенциальный кирпич на голову. Мало ли что там узер наворотит помимо вашей структуры. Кто ему запретит сделать например свою дополнительную аналитику. А вы ему - трямс - и по рогам.
Опять же не факт, что ты учтешь все, например редкие служебные функции с наворотами. Иногда к тому же и порядок прогона здорово меняет картину.

Лично я не верю в возможность автоматизации подобной проверки более-менее сложной БД. Но это сугубо мое ИМХО.


 
Alex Konshin ©   (2005-05-23 13:19) [20]

Sergey13 ©   (23.05.05 13:10) [19]
Лично я не верю в возможность автоматизации подобной проверки более-менее сложной БД. Но это сугубо мое ИМХО.

Согласен.
И, собственно, сразу же вопрос на засыпку: что тестируем? Продукт или действия пользователя? Если второе, то на мой взгляд, это говорит про неверную архитектуру продукта. То есть, конечно, так будет работать, но тестировать это и гарантировать правильность работы продукта - нельзя.
У нас тесты пишутся:
- на проверку функциональности;
- на обнаруженные проблемы (чтобы они возникли снова в будущем).
Здесь же - ни то, ни другое... Я не говорю, что так нельзя, но как это расхлебывать - мне навскидку неясно.


 
Alex Konshin ©   (2005-05-23 13:20) [21]

Отчепятка:
- на обнаруженные проблемы (чтобы они не возникли снова в будущем).


 
msguns ©   (2005-05-23 13:34) [22]

Не проще ли при таком инстале (сотни клиентов) перерулить БД на объектную ? Чтобы прогеры клиентов юзали БД через ваши библиотеки и интерфейсы, а напрямую ну никак ?


 
ANB ©   (2005-05-23 13:54) [23]

1. У клиентов нет прогов. А если есть - трогать нашу базу им запрещено (Система обслуживания смарт-карт). Следовательно, все доп функции они получают только от нас. А если наворотит - то ему действительно - тряс прямо по рогам. Денежкой. И не малой.
2.
> msguns ©   (23.05.05 13:34) [22]
- на объектную так просто не перерулишь, и так еле приспособили это дурацкий Magic под Oracle. Но схема защиты - стандартная - вьюхи и пакеты для изменения живых таблиц. Доступа к таблицам обычные пользователи не имеют.
3. Скрипты - группа команд SQL и PL/SQL для выполнения каких то действий с БД. Просто часть функциональности используется очень редко и мы выполняем это скриптами через SQLPlus. Сами или клиенты под нашим чутким руководством.
4. Насчет сотен я загнул. У нас всего около 5000 инсталляций.
5. Очень интересно мнение Alex Konshin. Тем более, у него, как я понял, есть в этом опыт.
Не мог бы ты выложить на этом сайте свою статью, а то у нас инет подрезан. Плз, нижайшее.
6. Примерно так, как написал алекс, я свою систему и построил. Только обозвал по другому : у меня есть тесты, в них шаги. Шаг - просто исходник на собственном языке. Из шага можно вызывать другие шаги. Дерево тестов пока не делал - будет слишком много - придется делать.


 
ANB ©   (2005-05-23 13:58) [24]

ЗЫ. Скрипт не совершенно неизвестный. Я и прог, который его пишет получаем одно и тоже задание. Я также узнаю у прога, что он собирается менять. И на основе этой информации делаю запросы. Причем проверить то, что таблица не менялась, я могу с достаточной степенью надежности, просто посчитав сумму полей, используя хэш-функцию. Получается одно число, на самой большой таблице будет считаться минут 15, что для нас приемлемо.


 
hCat   (2005-05-23 14:06) [25]

Re Sergey13 Мало ли что там узер наворотит помимо вашей структуры

Мнение мое узкоспециализировано для Оракл, но ИМХО разумно.
Считается плохим тоном создавать пользовательские объекты в каталоге, поставляемом разработчиком. Например, в Оракл, есть каталог (пользователь) SYS, в его области создавать объекты прикладных систем не принято. Так же и дальше - поставляя свою систему я предполагаю, что пользователь (админ) на площадке заказчика будет создавать свои объекты в своем собственном каталоге, благо возможностей в Оракл куча. Иначе сопровождение такой БД м.б. весьма проблематично.

Re Alex Konshin создает базы из холодного бекапа
О каких объемах идет речь, порядок ?

ИМХО стоит разделить тестирование серверной части приложения на неск принципиально разных частей:
- структура БД - см замечание выше д.б. идентична, проверять чем угодно - сравнилок много;
- заполнение и модификация условно постоянных таблиц разработчиком (справочник ставок НДС (VAT) по периодам, как пример) - проверить тоже относительно просто;
- заполнение и модификация таблиц пользовательского ввода разработчиком - ценность результата зависит от изощренности самой БД и разработчика теста (при наличии триггеров вопрос перестает быть столь простым как кажется);
- алгоритмы исполняемые на сервере (Oracle stored proc и пр) - кроме ошибок реализации, суммируются еще и ошибки заполнения данных в таблицах сервера, курсоры пропускающие данные, ошибки инициализации, параметров при вызове, несоответсвия типов параметров и многое другое.


 
Alex Konshin ©   (2005-05-23 14:08) [26]

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


 
ANB ©   (2005-05-23 14:13) [27]


> hCat   (23.05.05 14:06) [25]
- последний абзац возьму на вооружение. Эту тему я еще не продумывал. У меня пока более менее работает :
- Проверка пользовательского интерфейса путем иммитации действий пользователя
- Сравнение схемы БД с эталлоном (включая выборочную проверку справочников)
- Сохранение результатов выполнения запросов и сравнение их с другими, подогнанными для необходимой идентичности.
- Сравнение двух запросов (возможно с разными коннектами).
Никто не отвечает на мой вопрос - не зря ли я все это пишу ? Может уже есть готовые средства с нужной функциональсностью (для проверок и изнутри и снаружи) ? Читал рекламу по WinRunner - ну, типа, умеет тестировать все.


 
ANB ©   (2005-05-23 14:15) [28]


> Alex Konshin ©   (23.05.05 14:08) [26]
- щас вышлю свое мыло. Если не трудно, убери инфу ДСП из статьи. Меня она интересует чисто теоретически, так как решение всех посталенных передо мною задач я уже нашел. Идет процесс кодирования.


 
alex_***   (2005-05-23 14:21) [29]

начальница не Нина Ивашкина?


 
Alex Konshin ©   (2005-05-23 14:24) [30]

hCat   (23.05.05 14:06) [25]
Re Alex Konshin создает базы из холодного бекапа
О каких объемах идет речь, порядок ?

Ну в тех продуктах, с которыми я работаю у нас в бекапе сразу создается кучка пользователей (конкретно - 10) с идентичными данными, и для каждой группы тестов берется не свежая база, а свежий пользователь в базе пока они не кончатся (то есть, я несколько слукавил, когда говорил об новой базе для каждой группы). Размер базы - несколько гиг (вроде около 3).
Холодный бекап на самом деле сжатые файлы базы. То есть, это не совсем бекап в привычном понимании.

Помимо этого сами продукты монстроидальные. И, к тому же, моя специализация на организации тестирования взаимодействия продуктов, а каждый из них занимает более гигабайта в установленном состоянии. Там даже автоматизация установки - отдельная и довольно сложная задача.


 
Alex Konshin ©   (2005-05-23 14:29) [31]

ANB ©   (23.05.05 14:15) [28]
> Alex Konshin ©   (23.05.05 14:08) [26]
- щас вышлю свое мыло. Если не трудно, убери инфу ДСП из статьи. Меня она интересует чисто теоретически, так как решение всех посталенных передо мною задач я уже нашел. Идет процесс кодирования.

Там нет информации ДСП, но все равно большие фирмы как-то шепетильно относятся к тому, что кто-то описывает их работу изнутри. Я уже давал несколько раз эту ссылку здесь в форуме, я и писал-то ее для форума.


 
ANB ©   (2005-05-23 14:52) [32]

Прочитал статью. Полезно. Это я уже читал в книжке, только в ней это было листов на 30 расписано. А какими средствами пользуетесь ? И пишите ли свои ?


 
ANB ©   (2005-05-23 15:32) [33]


> alex_***   (23.05.05 14:21) [29]
- и тут на коллегу нарвался. А у тебя Виталик Королевский !


 
Sergey13 ©   (2005-05-23 16:30) [34]

2[25] hCat   (23.05.05 14:06)
>Считается плохим тоном создавать пользовательские объекты в каталоге, поставляемом разработчиком.
Так считается, но законом это не запрещено. Заказчики разные бывают и админы у них разные. Кроме того, они могут просто написать свою прикладу на основе используемой БД ничего в БД не меняя. А тут облом такой.
Но это все уже офтопик вроде.


 
Cobalt ©   (2005-05-23 18:11) [35]

2 ANB ©   (23.05.05 12:53) [11]

ИМХО - Глупость.
У нас такие скрипты обязательно проходят проверку - но не у тестера, а сначала у проверяющего - такого же программиста. На соответствие заданию, вправо-влево от задания - расстрел исполнителя на месте :)
И только потом тестируется простыми тестировщиками (не программистами).
Не делается двойная работа - почему бы тогда не сравниват ьсразу скрипты? ясно почему - отличий тамможет быть много ;)


 
alex_***   (2005-05-23 18:13) [36]

->[29]
был. Ушел я от вас года 1.5 назад. Ивашкина все рулит, я смотрю. и также с магиком боретесь :). Боритесь, боритесь, он живучий....


 
имя   (2005-05-23 18:21) [37]

Удалено модератором


 
ANB ©   (2005-05-24 09:17) [38]


> Cobalt ©   (23.05.05 18:11) [35]
- гы, не глупость это, а же узаконненный тех.процесс. Проверка двойная, сначала белым тестировщиком в группе разработки, а уже потом - отделом тестирования. Вот на второй этап и нужен автомат, так как ручками уходит МЕСЯЦ !!! Автомат будет работать максимум сутки (для очень большой базы), а тренируясь на маленькой я тест сделаю за неделю.


 
ANB ©   (2005-05-24 09:22) [39]


> alex_***   (23.05.05 18:13) [36]
- кстати, Нина уже не Ивашкина, отстал ты от жизни.


 
Sergey13 ©   (2005-05-24 09:39) [40]

2[38] ANB ©   (24.05.05 09:17)
А еще можно с калькулятором проверить как компьютер считает. Просто пересчитать вручную апдейт с милионом записей. 8-)


 
ANB ©   (2005-05-24 10:10) [41]


> Sergey13 ©   (24.05.05 09:39) [40]
- да зачем оно вообще нужно, тестирование. Если прог написал код, значит он его правильно написал. Че его проверять то ? Ну поглядел проверяющий, утвердил, а заказчику так и скажем : раз так написано, то так и должно быть.


 
Sergey13 ©   (2005-05-24 10:49) [42]

2 [41] ANB ©   (24.05.05 10:10)
Я имел в виду, что написав команду изменения таблицы (или добавление таблицы и перелив туда записей или еще чего) и проверив, что это работает, необязательно проверять суммы всех полей по записям. Если оно работало, то и будет работать. Сугубо ИМХО.
Вот если при этом дропать информацию, то можно огрести геморой. Если только добавлять, то огрехи не так и критичны. Но об этом я уже писАл.


 
Игорь Шевченко ©   (2005-05-24 10:58) [43]


> - да зачем оно вообще нужно, тестирование


Денег обычно больше получается при тестировании, чем без него.


 
nikkie ©   (2005-05-24 11:08) [44]

автоматическое тестирование - оно вещь полезная. но в данном случае ощущение такое, что тестируется, по сути, как работает ALTER TABLE.


 
ANB ©   (2005-05-24 11:19) [45]


> nikkie ©   (24.05.05 11:08) [44]
- сабж прочитай, плз. Тестирование апргрейдов и утилит - только маленький кусочек того, что нужно сделать. Еще нужно тестировать GUI, как при работе в GUI все это ложится в базу, терминальный софт, протоколы обмена и еще кучу всякой гадости. Делать страшно, а надо, так как ручками уже задрались.
Вопрос в сабже : писать или не надо было собственную систему тестирования, или таки приспосабливать готовую, пусть и купленную за деньги ?


 
nikkie ©   (2005-05-24 11:22) [46]

ну прочитал. про GUI понял. и почему SQA Robot не подходит - тоже понял. но в основном ветке обсуждается тестирование изменений базы. не надо мотивировать необходимость этого куска ссылкой на GUI.


 
ANB ©   (2005-05-24 11:46) [47]


> nikkie ©   (24.05.05 11:22) [46]
- думаешь мне охота это писать ? Надо, значит надо. Ты таблички в оракеле с русскими полями видел ? А у нас еще в прошлой версии были. Сейчас на транслит переделали :)))


 
Val ©   (2005-05-24 11:53) [48]

Таблички такого плана переделываются одним оператором - create table as select.
P.S.Вы спрашиваете в топике что-то или пытаетесь всех убедить что вы этим самым не маетесь?


 
ANB ©   (2005-05-24 11:58) [49]


> Val ©   (24.05.05 11:53) [48]
- я спрашиваю в топике. Но не спрашиваю, делать или не делать мне проверку БД. А все почему то советы по этому поводу дают.


 
nikkie ©   (2005-05-24 12:01) [50]

а о чем спрашиваешь? Robot твой Magic не понимает. а WinRunner понимает?

разумеется лучше не изобретать велосипед. если WinRunner имеет все необходимые функции, то лучше и дешевле купить. про "не хочется учить basic" - смешно.


 
ANB ©   (2005-05-24 12:33) [51]


> а WinRunner понимает?
- не пробовали. Раздобыть бы крякнутый, попробовать, а потом уже покупать. В рекламке и про Robot написано, что он все умеет. Кто нибудь пользовался WinRunner ? Насколько просто он умеет работать с БД ? С файлами ? Легко ли из него достучаться до com порта ?

> разумеется лучше не изобретать велосипед
- вот и не хотелось бы изобретать. Но если в готовом средстве не хватает чуть чуть того, что нам нужно, то доделка может обойтись дороже, чем написать свое. А излишние возможности не очень то и нужны.


 
ANB ©   (2005-05-24 14:09) [52]

Хе, не зря писал. Только что багу откопал в утилите, которую еще год назад заказчику сдали. Тестили ручками больше 2-х месяцев.


 
Sergey13 ©   (2005-05-24 14:13) [53]

Работающая больше года бага - фича. 8-)


 
ANB ©   (2005-05-24 14:14) [54]


> Sergey13 ©   (24.05.05 14:13) [53]
- ща отдел магиков отмажется, скажут, что так и задумано. Они иногда половину ошибок, найденных тестировщиками в ограничения переводят :)))



Страницы: 1 2 вся ветка

Форум: "Потрепаться";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.62 MB
Время: 0.039 c
4-1114083686
Максим
2005-04-21 15:41
2005.06.14
USB on/off


1-1117020849
Comrade
2005-05-25 15:34
2005.06.14
RX и DelphiX


1-1117194534
Masta Hookah
2005-05-27 15:48
2005.06.14
"ZIP" -> COMPRESSED


14-1116919778
NeyroSpace
2005-05-24 11:29
2005.06.14
Моменты из фильма Terminator 2


14-1117132611
Просто Джо
2005-05-26 22:36
2005.06.14
Футбол по-программистски





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский