Coyote
Coyote-это кроссплатформенная библиотека и инструмент для тестирования одновременного C# кода и детерминированного воспроизведения ошибок.
Используя Coyote, вы можете легко проверить параллелизм и другой нетерминизм в вашем коде C#, написав то, что мы называем единичным тестом . Они выглядят как ваши обычные модульные тесты, но могут надежно проверить одновременные рабочие нагрузки (такие как актеры, задачи или параллельные запросы контроллерам ASP.NET). В регулярных модульных тестах вы обычно избегаете параллелизма из -за хластота, но с Coyote вам рекомендуется принять параллелизм в ваших тестах, чтобы найти ошибки.
Койот используется многими командами в Azure для тестирования своих распределенных систем и услуг, и обнаружил сотни ошибок, связанных с параллелизмом, прежде чем развернуть код в производстве и затронуть пользователей. По словам Azure Service Architect:
Койот обнаружил несколько вопросов в начале процесса разработки, такого рода проблемы, которые обычно кровоточили в производство и становятся очень дорогими, чтобы исправить позже.
Койот сделан с Microsoft Research.
Рассмотрим следующий простой тест:
[ Fact ]
public async Task TestTask ( )
{
int value = 0 ;
Task task = Task . Run ( ( ) =>
{
value = 1 ;
} ) ;
Assert . Equal ( 0 , value ) ;
await task ;
}
Этот тест будет проходить большую часть времени, потому что утверждение обычно выполняется до начала задачи, но есть один график, когда задача начинается достаточно быстро, чтобы установить value
1
, что приведет к сбою утверждения. Конечно, это очень наивный пример, и ошибка очевидна, но вы можете себе представить гораздо более сложные условия гонки, которые скрыты в сложных путях исполнения.
Как работает Койот, заключается в том, что вы сначала конвертируете вышеуказанный тест в однозначный тест на единицу, используя API Coyote TestingEngine
:
using Microsoft . Coyote . SystematicTesting ;
[ Fact ]
public async Task CoyoteTestTask ( )
{
var configuration = Configuration . Create ( ) . WithTestingIterations ( 10 ) ;
var engine = TestingEngine . Create ( configuration , TestTask ) ;
engine . Run ( ) ;
}
Затем вы запускаете команду coyote rewrite
из CLI (обычно в качестве задачи после сборки), чтобы автоматически переписать IL ваших видов тестирования и производства. Это позволяет Койоту вводить крючки, которые контролируют одновременное выполнение во время тестирования.
Затем вы можете запустить одновременный модульный тест из вашей любимой модульной структуры тестирования (например, XUNIT). Койот вступит во владение и неоднократно выполнит тест от начала до конца для n итераций (в приведенном выше примере n был настроен на 10
). Под капотом Койот использует интеллектуальные стратегии поиска для изучения всех видов пути выполнения, которые могут скрыть ошибку на каждой итерации.
Удивительно то, что после того, как ошибка найдена , Койот дает вам следы через engine.TestReport
.
Начать работу с Койотом легко! Во-первых, следуйте этому руководству, чтобы установить инструмент командной строки coyote
из Nuget. Теперь вы готовы проверить веб-сайт Coyote для учебных пособий, документации, как то, образцы и дополнительную информацию о проекте. Наслаждаться!
Обновление зависимостей coyote
? Проверьте изменение изменений здесь.
Обратите внимание, что Coyote-это проект с открытым исходным кодом, который предоставляется «как есть». Мы не можем предоставить какую -либо официальную поддержку. Для сотрудников Microsoft у нас есть канал The Friends of Coyote Teams, который является внутренним сообществом, которое может помочь ответить на вопросы и учиться друг у друга.
Этот проект приветствует вклады и предложения. Большинство взносов требуют, чтобы вы согласились с лицензионным соглашением о участнике (CLA), заявив, что вы имеете право и фактически предоставить нам права на использование вашего вклада. Для получения подробной информации, посетите https://cla.opensource.microsoft.com.
Когда вы отправляете запрос на привлечение, бот CLA автоматически определит, нужно ли вам предоставить CLA и правильно украсить PR (например, проверка состояния, комментарий). Просто следуйте инструкциям, предоставленным ботом. Вам нужно будет сделать это только один раз во всех репозиториях, используя наш CLA.
Этот проект принял код поведения с открытым исходным кодом Microsoft. Для получения дополнительной информации см. Code of Perving FAQ или свяжитесь с [email protected] с любыми дополнительными вопросами или комментариями.