首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >加速端到端测试

加速端到端测试
EN

Stack Exchange QA用户
提问于 2017-07-10 19:59:10
回答 2查看 3.6K关注 0票数 6

当我们在BrowserStack上执行相同的端到端浏览器自动化测试时,我们注意到显着的减速--测试比在本地执行要慢得多,而且由于时间问题,偶尔也会出现故障。我们试图通过添加显式等待来解决故障,这样做总体上降低了测试的可读性,降低了测试流程的可理解性和干净性。

提高端到端测试执行速度的一般准则是什么?

我们的堆栈包括Protractor/WebDriverJS;我们使用grunt任务启动本地构建服务器,并通过ngrok将其公开给BrowserStack。

EN

回答 2

Stack Exchange QA用户

回答已采纳

发布于 2018-03-29 00:28:19

在加速量角器(Selenium)测试时,我发现了以下几点:

  • 在无头浏览器中运行测试(版本59,铬可以运行 无头)
  • 以直接连接的形式运行测试(directConnect: true)
  • 在可能的情况下,不要在具有相同基本状态(主页)的测试之间注销和重用用户会话。
  • 使简单到点的测试只使用一个和唯一一个断言。
  • 并行运行测试(使用shardTestFiles/maxInstance)
  • 禁用角/CSS动画,它将有助于在更快的页面加载$(‘body’).allowAnimations(假);
  • 删除所有显式等待&将隐式等待降到最小,并谨慎地使用条件等待(使用预期条件)补充/fluent等待(具有较短的轮询间隔)

自定义流畅等待代码示例:

代码语言:javascript
运行
复制
browser.manage().timeouts().implicitlyWait(0);
browser.wait(function () {
    browser.sleep(1000);
    return element(by.id('id1')).isDisplayed()
    .then(
        function (isDisplayed) { 
            return isDisplayed; 
        }, 
        function (error) { 
            return false 
        });
}, 20 * 1000);
  • 删除测试之间的冗余测试步骤(这是最大的时间节省器)
  • 不要使用UI测试来创建/设置测试数据(使用API创建数据),只使用UI测试来验证最终用户业务场景。
  • 不要使用共享(例如与开发人员/业务分析人员/甚至不使用手动测试人员)/or生产副本(重型)数据库,.Use专用轻型QA自动化数据库,只包含精心设计的基线数据。
  • 在运行前恢复/刷新数据库,以保持其干净和轻巧。
  • 在设计测试用例时,消除不必要的长UI步骤,让测试只关注在页面导航最少的情况下的测试验证。
票数 8
EN

Stack Exchange QA用户

发布于 2017-07-11 04:55:18

从我的观点来看,这里有一些提高GUI自动化端到端测试执行速度的通用指南。

1-通过使用唯一的属性/属性来定义测试对象来构建一个实体对象库。

将测试脚本划分为简单的小测试功能(不要重新实现复杂的业务)。

3-定义添加同步函数的正确点(移动到新页面,等待对象出现/消失,等待属性更改,.....etc)。

4-使用动态等待而不是隐式,以获得测试对象的正确行为/属性。

5-将驱动程序超时(Selenium)修改为1:5秒,因为每次使用FindElement()函数时,驱动程序都会等待,直到DOM中加载的对象或抛出异常为止。

结论 --通过一种方法设计您的测试脚本,以获得工具速度的好处,并与应用程序性能同步。

Selenium/C#动态等待对象在DOM中加载并显示在GUI上的示例。

要求以下功能:

代码语言:javascript
运行
复制
Public IwebElement TestObject;
TestObject.Exists(5); // where 5 is time out by seconds.

public static bool Exists(this IWebElement element,int timeOut)
    {
        //GlobalVars.Test.Browser is IwebDriver Object
         bool isExist = false;

        // check that element is not null;
        if (element == null)
        {
            return false;
        }

        // check the element existance.
        try
        {               

            GlobalVars.Test.Browser.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(0);
            WebDriverWait wait = new WebDriverWait(GlobalVars.Test.Browser, TimeSpan.FromSeconds((double)timeOut));
            wait.IgnoreExceptionTypes(typeof(StaleElementReferenceException));
            isExist = wait.Until<bool>((d) => { try { return element.Displayed; } catch (Exception ex) { return false; } });

            return isExist;
        }
        catch (Exception ex)
        {
            return false;
        }
        finally
        {
            GlobalVars.Test.Browser.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(GlobalVars.Test.BrowserTimeOut);
        }   

    }
票数 2
EN
页面原文内容由Stack Exchange QA提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://sqa.stackexchange.com/questions/28446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档