1

我正在使用 cypress runner 来执行规范文件并返回结果,如下所示。

亚军.js:

const cypress = require('cypress');
const param = require("./cypress/support/Param");

async function testRunner(fixture) {
    return cypress.run({
      config: {
      },
      env: {
        testcaseID: `${fixture}`,
      },
      spec: './cypress/integration/' + `${param.getSpec()}` + ".spec.js",
    });
  }

规格文件:

let map = new Map();

describe("How to add map values in the cypress result.json",() =>{

    const baseUrl = "https://www.google.com/";

    const testData = Cypress.env('fixture')

    beforeEach("",()=>{

        cy.visit(baseUrl);
    });

    it("Test Case1: Search the keyword", function () {
            cy.xpath("//input[@name='q']").type(testData.searchKeyword);
            map.set("UserInput",testData.searchKeyword); //It's just sample
            cy.xpath("//input[@value='Google Search']").click();
            map.set("customMessage","test"); //It's just sample but actual usecase is different
            cy.get("//ul/li[2]").should("be.visible");
    });

});

使用以下行在主运行器中获得结果:

result = await testRunner(dataSet[i]);
                    if (result.runs[0].stats.failures === 1) {
                        console.log(result);
                    }

上面的代码工作正常,我可以得到包含测试用例是否通过/失败的 result.json。但除此之外,我只想添加更多存储在 Map 中的运行时值,并想在 Cypress.run 返回结果中添加这些值。

有人可以建议我处理这个问题的优化方法吗?如何获取地图中可用的一些运行时值,这些值将与 cypress 运行结果一起返回。

提前致谢。

更新:

我刚刚创建了一个 Map() 变量并使用 getter 和 setter 调用该变量,但仍然没有运气。

var EnumPojo = {
    
    LISTENER: new Map(),

    get listener()
    {
        return this.LISTENER;
    },

    set listener(value)
    {
        return this.listener =value;
    };

}

将上面的地图调用到脚本中:

const runtimeValues = require("../../EnumPojo.js");

 describe("How to add map values in the cypress result.json",() =>{
    
        const baseUrl = "https://www.google.com/";
    
        const testData = Cypress.env('fixture')
    
        beforeEach("",()=>{
    
            cy.visit(baseUrl);
        });
    
        it("Test Case1: Search the keyword", function () {
                cy.xpath("//input[@name='q']").type(testData.searchKeyword);
                runtimeValues.LISTENER.set("UserInput",testData.searchKeyword); //It's just sample
                cy.xpath("//input[@value='Google Search']").click();
                runtimeValues.LISTENER.set("customMessage","test"); //It's just sample but actual usecase is different
                cy.get("//ul/li[2]").should("be.visible");
        });
    
    });

亚军:

 const runtimeValues = require("../../EnumPojo.js");

 result = await testRunner(dataSet[i]);
                        if (result.runs[0].stats.failures === 1) {
                            console.log(result);
                            console.log(runtimeValues.LISTENER);
                        }

输出:地图{0}

4

1 回答 1

0

在测试中,将地图保存在fixtures下

it('my-test', function () {

  ...
  cy.fixture('map.json').then(mapData => {
    mapData['my-test'] = JSON.stringify(map)  // use unique key for this test
    cy.writeFile('./fixtures/map.json', JSON.stringify(mapData))
  })
})

在赛跑者中,

const fs = require('fs')

cypress.run({...})
  .then(result => {
    const mapData = fs.readFileSync('./cypress/fixtures/map.json')  // adjust path to where script is
    /*
      mapData is {
        'my-test': { ...data here },
        'other-test': { ...data here },
      }
    */   
   })

但是 JavascriptMap可能无法正确序列化,最好在保存前转换为对象。

于 2021-10-25T07:54:37.920 回答