Тестирование длительного процесса в Xamarin Test Cloud
У меня есть вопрос о Xamarin Test Cloud, надеюсь, кто-то может указать мне правильное направление.
Когда пользователь нажимает кнопку в моем приложении, процесс запускается около 30 минут. Я добавил проект Unit Test, и он отлично работает в эмуляторе.
Однако мне нужно протестировать его на реальных устройствах, поэтому я решил использовать Xamarin Test Cloud. Когда я запускаю тест там, он не завершает его. Как я уже сказал, это займет 30 минут, но тест заканчивается почти сразу.
Вот код моего теста:
[Test]
[Timeout(Int32.MaxValue)]
public async void Optimize()
{
await Task.Run(async() =>
{
app.Screenshot("Start " + DateTime.Now);
app.Tap(x => x.Marked("btnOptimize"));
await Task.Delay(120000);
app.Screenshot("End " + DateTime.Now);
}
}
Если я запускаю тест в эмуляторе, имена снимков экрана (например): "Начало 12:00:00" и "Конец 12:30:00" соответственно (это означает, что он выполняется в течение 30 минут, как и ожидалось). Однако в Test Cloud я получаю (например) "Начало 12:00:00" и "Конец 12:02:00", что означает, что тест выполняется только в течение 2 минут. Но это потому, что я добавил задержку. Без задержки он будет работать всего 5 секунд.
Это то, что мне нужно? Я могу добавить 1800000, чтобы тест мог быть завершен за 30 минут, но что, если я не знаю время?
Спасибо и извините, если это основной вопрос
3 ответа
Хотя я никогда не пробовал время ожидания 30 минут, Calabash позволяет вам ждать условия, используя wait_for
):
Следующий фрагмент является примером того, как использовать wait_for для обнаружения присутствия кнопки на экране:
wait_for(timeout: 60, timeout_message: "Could not find 'Sign in' button") do
element_exists("button marked:'Sign in'")
end
Ссылка: https://docs.xamarin.com/guides/testcloud/calabash/working-with/timeouts/
Просто к сведению: 30 минут - это действительно долгое время для "фоновой обработки" мобильного устройства без взаимодействия с пользовательским интерфейсом. Если вы нацелены на iOS/Apple Store, этот смертный приговор в получении одобрения Apple на представление, так как они никогда не будут ждать так долго для приложения, чтобы обработать что-то....
Нечто подобное должно сделать работу:
[Test]
public async void Optimize()
{
app.Screenshot("Start");
app.Tap("btnOptimize");
app.WaitForElement ("otherButton", "Timed out waiting for Button", new TimeSpan(0,30,0));
app.Screenshot("End");
}
Где "otherButton" становится видимым, когда задача выполнена. В API есть и другие методы ожидания.
Но обратите внимание, что по умолчанию тестовое облако Xamarin имеет максимум тридцать минут на тест. Это значение по умолчанию можно изменить, обратившись в службу поддержки Xamarin Test Cloud.
Кроме того, не рекомендуется включать недетерминированную информацию или любую информацию, которая может варьироваться в зависимости от устройства или работать в заголовках снимков экрана. При запуске более чем на одном устройстве шаги отчета о тестировании и снимки экрана частично сопоставляются по названиям снимков экрана, поэтому они должны совпадать на разных устройствах для достижения наилучших результатов.
Вам нужно идентифицировать нажатие по Id и добавить WaitForElement(первый аргумент - это запрос, который вы хотите ждать) в правильном синтаксисе, как показано ниже. Это должно работать для вас.
app.Screenshot("Start " + DateTime.Now);
app.WaitForElement(x => x.Id("btnOptimize"),"Optimization timed out",new System.TimeSpan(0,30,0),null,null);
app.Tap(x => x.Id("btnOptimize"));
app.Screenshot("End " + DateTime.Now);