标签: e2e-testing

AngularJS测试:Yeoman App中的量角器,Karma,Jasmine

我使用这个yeoman生成器:https: //github.com/Swiip/generator-gulp-angular

它安装了三个测试应用程序:Jasmine,Karma,Protractor根据这篇文章(我应该使用Protractor或Karma进行端到端测试吗?),我应该使用:Karma用于例如单个控制器的小测试.Protactor如果我想测试整个应用程序并模拟用户浏览我的应用程序.根据这篇博客(http://andyshora.com/unit-testing-best-practices-angularjs.html),我将使用Jasmine进行单元测试,使用Karma进行端到端集成测试.

我猜Jasmine是编写测试的语言,另外两个执行代码,这是正确的吗?另外,如果我从未写过一个更重要的是先学习/专注的测试?

jasmine karma-runner protractor e2e-testing

19
推荐指数
1
解决办法
2万
查看次数

赛普拉斯:仅运行一项测试

我只想切换运行一个测试,所以不必等待其他测试来查看一个测试的结果。

目前,我注释掉了其他测试,但这确实很烦人。

有没有一种方法可以切换仅运行一个测试Cypress

e2e-testing cypress

19
推荐指数
7
解决办法
7781
查看次数

OAuth2/OpenID Connect受保护API的自动API测试

我正在研究一个我们计划首先执行API的新项目,以便我们可以在其上实现Web和本机应用程序,并允许第三方集成.到目前为止所有相当标准.

我们还希望为API提供一整套自动化测试,以确保其无回归地工作,并确保其满足要求.同样,相当标准,但因为我们正在测试API,我们将使用代码内HTTP客户端而不是Web浏览器.

我们一直在寻找oauth2/OpenID Connect来促进API的身份验证和授权 - 基本上,客户端可以进行身份​​验证,获取访问令牌,然后使用它来访问所有API资源.

我正在努力解决的问题是让自动化测试与oauth2部分协同工作以实现调用API的好方法.第一个想法是使用"client_credentials"或"密码"授权类型,它们似乎都适用于我们想要的东西,但它们根本没有涵盖在OpenID Connect规范中,当然还有"密码" "无论如何,至少它通常不被认为是个好主意.

这是实现这一目标的最佳方式,还是有其他最佳实践可用于其他流程,但没有Web浏览器?

编辑:在(更多)阅读之后,我有了一个新的计划.完全脱机运行测试,使用针对单独数据库的单独部署,并在测试运行之前将数据直接播种到数据库中,然后使用标准OpenID Connect流,但使用:

  • 出于测试目的在数据库中标记的客户端.这是一个重要的部分,只有在客户端可以直接注册到数据库而不通过业务逻辑的情况下才有可能.
  • 提示=无
  • login_hint =获取访问令牌的用户名
  • 包含"测试"的范围

然后,系统可以检测到这种事实组合,并自动验证提供的用户名,而无需通过浏览器.

这看起来合情合理吗?或者,还有更好的方法?

acceptance-testing openid-connect e2e-testing oauth2

18
推荐指数
1
解决办法
3008
查看次数

赛普拉斯:如何知道在使用 If 条件时元素是否可见?

我想知道一个元素是否可见。我不知道该怎么做。我知道我们可以运行这个:

cy.get('selector').should('be.visible')

但是如果元素不可见,则测试失败。所以我只想要一个布尔值,如果元素不可见,那么我可以通过 if 条件来决定。

用例:

只有当侧边栏不可见时,我才想通过单击按钮来打开侧边菜单。

if(sidebarIsInvisible){
   cy.get('#sideMenuToggleButton').click();
}
Run Code Online (Sandbox Code Playgroud)

这可能吗?

我真的很感激任何贡献。

提前致谢

e2e-testing cypress

18
推荐指数
2
解决办法
3万
查看次数

量角器E2E角度"角度无法在窗口找到"

在角度项目中运行我的测试后,我有一个奇怪的错误 Error: Error while waiting for Protractor to sync with the page: "angular could not be found on the window".我的Protractor配置如下所示:

require('coffee-script').register();

exports.config = {
  seleniumServerJar: './node_modules/protractor/selenium/selenium-server-standalone-2.39.0.jar',
  seleniumAddress: 'http://localhost:4444/wd/hub',

  capabilities: {
    browserName: 'chrome'
    //'chromeOptions': {
    //  'args': ['--disable-extensions']
    //}
  },

  specs: [
    '*_spec.coffee'
  ],

  allScriptsTimeout: 10000000000,
  baseUrl: 'http://localhost:9003/',

  jasmineNodeOpts: {
    isVerbose: false,
    showColors: true,
    includeStackTrace: true,
    defaultTimeoutInterval: 10000000000
  }
};
Run Code Online (Sandbox Code Playgroud)

并测试:

loginPage = require './pages/log_in_page'

describe 'Log In', ->

      it 'shows after login', ->
        loginPage()
        .setEmail('test@dispatch.me')
        .setPass('a46s75d4as765d4a6s7d54as76d5as74das76d5')
Run Code Online (Sandbox Code Playgroud)

从页面获取信息:

module.exports = …
Run Code Online (Sandbox Code Playgroud)

angularjs protractor e2e-testing

17
推荐指数
3
解决办法
3万
查看次数

如何使用赛普拉斯在E2E测试中登录Auth0?

我已经开始测试一个反应webapp但我没有走远,因为我遇到了登录问题.我正在使用cypress e2e测试工具.

将显示一个欢迎页面,其中包含一个要登录的按钮,该按钮将重定向到您的auth0服务.用户使用电子邮件和密码登录,然后使用令牌重定向回webapp.

我尝试了许多不同的方法,导致了不同的问题.

注意:我不想测试Auth0,我只想输入我的webapp.

尝试1.单击登录按钮

尝试:赛普拉斯应该像用户一样做,因此测试将点击登录按钮并转到Auth0并填写凭据.问题:赛普拉斯不允许您在测试期间导航到其他域.

由于赛普拉斯更改了自己的主机URL以匹配您的应用程序的URL,因此它要求您的应用程序保留在同一个超级域中以进行单个测试.

您应该能够禁用该设置"chromeWebSecurity": false,cypress.json但它无法使用,因为您只能访问单个域cy.visit()

尝试2.从测试中以编程方式登录

尝试:使用auth0-js库登录cypress测试,因此不需要单击登录按钮,因此不会发生域更改.

describe('Waiting to fetch', () => {
  beforeEach(() => {
    this.fetchAuthDeferred = getDeferred()
    cy.visit('http://localhost:3000', {
      onBeforeLoad(win) {
        cy.stub(win, 'fetch')
          .withArgs($url)
          .as('fetchAuth')
          .returns(this.fetchAuthDeferred.promise)
      }
    })
  })

  it('login', () => {
    cy.visit('http://localhost:3000')

    const auth = new auth0.WebAuth(authOptions)
    auth.login(loginOptions)

    cy.get('@fetchAuth', { timeout: 10000 }).should('haveOwnProperty', 'token')

    cy.visit('http://localhost:3000')
    cy.get('[class*="hamburger"]').click()
  })
})
Run Code Online (Sandbox Code Playgroud)

问题:cy.route() 不等待获取请求,解决方法是使用cy.stub(win, 'fetch').它不会等待:

在此输入图像描述

尝试3.从webapp以编程方式登录

尝试:我开始认为柏树只是从应用程序发出的间谍请求,而不是来自测试本身(正如我在上面的观点中所尝试的那样).

我在欢迎页面中添加了一个假登录按钮,该按钮将 …

testing mocking e2e-testing auth0 cypress

17
推荐指数
1
解决办法
3881
查看次数

量角器e2e测试登录重定向

目前有部分端到端测试,输入用户名/密码并点击"登录".

它成功地做到了,但在"谢谢你登录"页面结束,而不是重定向到"帐户门户"或"仪表板",就像我通过浏览器登录一样.

这个项目的新功能,但我们正在使用OAuth.

主要问题:这听起来像需要http嘲笑吗?

更多详情:

spec.js

describe('login page', function() {
    browser.driver.get('http://url.path/login');
    it('should render login page', function() {

      // Checking the current url
      var currentUrl = browser.driver.getCurrentUrl();
      expect(currentUrl).toMatch('/login');
    });
    it('should sign in', function() {

      // Find page elements
      var userNameField = browser.driver.findElement(By.id('username'));
      var userPassField = browser.driver.findElement(By.id('password'));
      var userLoginBtn  = browser.driver.findElement(By.id('loginbtn'));

      // Fill input fields
      userNameField.sendKeys('test@user.com');
      userPassField.sendKeys('1234');

      // Ensure fields contain what we've entered
      expect(userNameField.getAttribute('value')).toEqual('test@user.com');
      expect(userPassField.getAttribute('value')).toEqual('1234');

      // Click to sign in - waiting for Angular as it is manually bootstrapped.
      userLoginBtn.click().then(function() { …
Run Code Online (Sandbox Code Playgroud)

javascript oauth angularjs protractor e2e-testing

15
推荐指数
1
解决办法
2万
查看次数

如何在模拟e2e测试时检测API修改?

我想在我们团队的项目中建立一个坚实的e2e测试基础,但我找不到这个问题的简单解决方案:

当您模拟所有调用时,检测服务器返回的对象的实际模型是否已被修改的最佳方法是什么?

您的测试仍然会通过,因为他们正在测试模型的过时版本但应用程序可能已损坏.

例如,如果一个模拟假设/api/users/1返回null,如果用户不存在,当它实际上返回一个空对象,则虽然测试可以通过,被测试的行为依赖于不正确的假设,并且因此可以以意外的方式失败.

或者也许后端以某种方式提供带有最新模型的静态json文件,而前端依赖于此?

这当然假设在后端工作的人和在前端工作的人是独立的团队.

我在这里使用Angular 1.x和Protractor,但这并不依赖于技术.

unit-testing mocking angularjs protractor e2e-testing

15
推荐指数
1
解决办法
457
查看次数

用于在Android中脱机测试服务器响应的透明代理

我有一个数据驱动的Android应用程序支架.添加测试,旨在实现100%的覆盖率.使用OkHttp.

如何使用模拟响应透明地拦截对我的服务器的调用?

想要这种端到端和单元测试.例如:设置build-type MockServer应该加载一个将在模拟器中显示模拟响应的应用程序.

junit android unit-testing okhttp e2e-testing

15
推荐指数
1
解决办法
439
查看次数

在端到端测试中处理第三方API请求

我想用端到端测试来测试我的Rest API.据我了解,集成测试之间的区别在于我们不进行内存系统配置,而是使用真实的测试数据库和网络请求.

但我无法理解如何处理第三方API请求(如GitHub或Bitbucket API).

创建假冒Github帐户是否正常,我的测试会提取假数据?

如何处理访问令牌,并非所有服务都是公开的,甚至公共服务都可能因速率限制而失败.

testing api rest e2e-testing

15
推荐指数
2
解决办法
568
查看次数