如何用Xamarin UI Test和App Center测量Xamarin应用API调用耗时?
解决Xamarin UI Test中API调用耗时统计问题
问题分析
你的代码逻辑框架没问题,但没统计到实际30秒耗时,大概率是以下原因:
- 目标元素
"Got Results"定位不准确:该元素可能在API返回前就已存在,或者AutomationId设置错误,导致WaitForElement提前完成等待。 - 未等待加载状态结束:如果点击搜索后有加载动画,直接等待结果元素可能会因为空状态容器已存在而误判流程完成。
解决方案
1. 确认元素定位的准确性
首先确保"Got Results"对应的元素是API返回结果后才渲染出来的,比如结果列表的根容器,或仅在有结果时显示的提示文本。在Xamarin项目的XAML中正确设置其AutomationId:
<!-- 示例:结果列表容器 --> <ListView AutomationProperties.AutomationId="Got Results" ...>
2. 优化计时逻辑
加入对加载状态的等待,确保计时覆盖从点击搜索到结果完全显示的全流程:
var stopwatch = new Stopwatch(); stopwatch.Start(); // 触发搜索操作 app.Tap("SearchButton"); // 先等待加载指示器消失(替换为你的加载元素标记,比如LoadingSpinner) app.WaitForNoElement(q => q.Marked("LoadingSpinner"), "加载状态未消失", TimeSpan.FromSeconds(50)); // 再等待结果元素出现 app.WaitForElement(q => q.Marked("Got Results"), "未找到结果元素", TimeSpan.FromSeconds(50)); stopwatch.Stop(); long elapsedMs = stopwatch.ElapsedMilliseconds; // 将耗时写入日志,用于负载测试分析 Console.WriteLine($"搜索API处理并显示结果耗时:{elapsedMs}ms");
3. 排查验证步骤
- 若计时依然不准确,可在关键节点添加日志,确认各步骤的时间点:
Console.WriteLine($"点击搜索时间:{DateTime.Now:HH:mm:ss.fff}"); app.Tap("SearchButton"); Console.WriteLine($"等待加载消失开始:{DateTime.Now:HH:mm:ss.fff}"); app.WaitForNoElement(q => q.Marked("LoadingSpinner")); Console.WriteLine($"等待结果开始:{DateTime.Now:HH:mm:ss.fff}"); app.WaitForElement(q => q.Marked("Got Results")); Console.WriteLine($"结果加载完成时间:{DateTime.Now:HH:mm:ss.fff}"); - 检查App Center测试日志,确认
WaitForElement是否触发超时,或者是否提前找到了元素。
内容的提问来源于stack exchange,提问作者Siddhant maurya
相关产品推荐
相关产品推荐

