Тестирование длительного процесса в 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);

Другие вопросы по тегам