如何在CI环境中集成cy.visit(本地vs阶段URL)?

时间:2019-02-04 01:12:59

标签: testing continuous-integration cypress

我有一个测试套件,可以在对某些DOM元素进行一堆声明之前打开本地URL。

现在,我想将赛普拉斯集成到我的CI / CD中,但是我不确定如何告诉赛普拉斯访问登台URL而不是本地URL。

有什么主意吗?

it('The body of the page is in viewport', function() {
    cy.visit(
      'http://mylocalurltovisit.local.com.au:8666/foo'
    );
    let initialPosition;
    const body = cy.get('body');
    body.should('have.class', 'pdfView');
    cy.get('.body-wrapper').should($el => {
      initialPosition = $el.position();
      expect(initialPosition.top).equal(0);
      expect(initialPosition.left).equal(0);
    });
  });

我希望访问URL在CI环境中自动切换为说一个过渡(可能是http://staging.com.au/foo)。

2 个答案:

答案 0 :(得分:1)

一种方法是尝试在url's文件中为local and staging网站创建两个不同的cypress.json

{
    "env": {
        "project1_user": "admin",
        "project1_password": "password",
        "localSite" : {
            "url" : "http://mylocalurltovisit.local.com.au:8666/foo"            
        },
        "stagingSite" : {
            "url" : "http://staging.com.au/foo"

        }

    }
}

然后在测试中接收到const的网址;

const localUrl = Cypress.env('localSite').url;
const stagingUrl = Cypress.env('stagingSite').url;

您可以致电beforeEach或直接在测试中使用。用同样的方法可以很好地对站点进行分级。

beforeEach( function() {
    cy.visit(localUrl + '/somelogin.php' );

} );

答案 1 :(得分:0)

使用环境变量,但不要将其放入配置文件中,而应将其传递到启动Cypress的CI命令中,例如

cypress run --env TARGET=local
cypress run --env TARGET=staging

在测试中,您可以使用before()分配正确的url(仅一次)。

describe('...', () => {

  let url;

  before(function() {
    url = {
      local: 'http://...',
      staging: 'http://...'
    }[Cypress.env('TARGET')];
  })