百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

通过在Cypress.io上运行测试生成漂亮的测试报告

nanshan 2024-11-20 19:23 67 浏览 0 评论


大家好。 今天,我将向您展示如何通过在Cypress.io上运行测试来生成漂亮的测试报告。 您可能已经知道Cypress是建立在Mocha之上的,所以Mocha的大多数功能都可以与Cypress一起使用,即Mocha的bdd语法,挂钩甚至报告模块。

默认情况下,Mocha提供了许多报告者(超过9个报告者),您可以选择其中一个(或多个)作为自己的测试报告。 在Cypress.io上配置Mocha的报告程序非常简单,只需在cypress.json文件中设置报告程序参数的值即可。

首先,让我向您展示一些内置的Mocha记者,以及如何与Cypress.io一起使用

1.规格

Spec记者是Mocha的默认记者。 因此,如果您未在项目中配置任何报告器,则将其视为测试报告。 规格报告器在TTY上以ANSI颜色显示测试结果,如下所示

要在Cypress.io上配置规格报告器,请将报告器参数配置为spec

{ "reporter": "spec"}

2.点矩阵

如果您想在运行测试时看到一些进展,可以选择这一步。 点矩阵记者是一系列点。 代表运行测试进度的字符。 测试失败会以红色感叹号突出显示! ,待定或跳过的测试以蓝色逗号突出显示,

要在赛普拉斯上配置点矩阵报告器,请将报告器参数指定为点

{
  "reporter": "dot"
}

3.Nyan尼安

您可以选择更多内置的Mocha记者。 请在此页面上找到更多信息https://mochajs.org/#reporters

让我们用Mochawesome创建一个漂亮的Mocha Reporter

Mochawesome是自定义的Mocha报告程序,可生成脱机HTML / CSS报告以可视化您的测试结果。 它分步显示您的测试用例和失败测试的堆栈跟踪。 此外,它支持将您自己的自定义上下文添加到报告中。 这意味着您可以将屏幕快照添加到失败的测试示例中。 就像它的名字一样很棒

步骤1:安装Mochawesome

sh$ yarn add mocha@5.2.0 mochawesome mochawesome-merge

· mocha用作创建自定义报告程序的依赖库。

· mochawesome生成HTML格式的精美报告。

· mochawesome-merge自Cypress v3.0.0起,它分别运行每个规范,从而导致生成多个mochawesome报告(每个规范文件一个)。因此,我们必须使用该库合并所有报告,然后将其生成为一个HTML文件。

步骤2:将Mochawesome配置为Cypress Reporter

{
  "reporter": "mochawesome",
  "reporterOptions": {
      "reportDir": "cypress/report/mochawesome-report",
      "overwrite": false,
      "html": false,
      "json": true,
      "timestamp": "mmddyyyy_HHMMss"
   }
}

将报告程序配置为mochawesome,还可以为报告程序添加一些选项。 ReporterOptions参数取决于您指定的报告者。 这是Mochawesome记者的一些选项。

· 覆盖:覆盖现有的报告文件。 在这种情况下,由于赛普拉斯分别运行每个测试规范文件,因此我必须将此参数设置为false以避免替换现有的报告文件。

· html:在测试(规范)运行后生成html报告。 我计划在所有规格文件完成后生成一个HTML报告。 所以我将此参数设置为false

· json:在测试(规范)运行后生成JSON报告。 是的,我想要这样做是因为我希望这些文件(每个规格一个)将所有测试合并到一个HTML报告中。 所以我将此参数设置为true

您可以在这里找到更多有关摩卡车记者的选项

3.创建自己的赛普拉斯定制测试运行器

通常,对于任何简单的用例,您都可以使用cypress命令在Cypress上运行测试。 但是在这种情况下,我想在所有测试运行之前和之后做一些事情。 因此,我必须使用赛普拉斯模块API创建自己的自定义测试运行器

为自定义测试运行程序安装依赖项

sh$ yarn add yargs ls rimraf

· yargs:从命令行选项解析参数。 这是可选的。

· ls:列出所有现有的报告文件。

· rimraf:在测试运行之前删除所有现有的报告文件。

const cypress = require('cypress')
const yargs = require('yargs')
const { merge } = require('mochawesome-merge')
const marge = require('mochawesome-report-generator')
const rm = require('rimraf')
const cypressConfig = require('./cypress')
const ls = require('ls')
const argv = yargs.options({
    'browser': {
        alias: 'b',
        describe: 'choose browser that you wanna run tests on',
        default: 'chrome',
        choices: ['chrome', 'electron']
    },
    'spec': {
        alias: 's',
        describe: 'run test with specific spec file',
        default: 'cypress/integration/*.spec.js'
    }
}).help()
  .argv

const reportDir = cypressConfig.reporterOptions.reportDir
const reportFiles = `${reportDir}/*.json`
// list all of existing report files
ls(reportFiles, { recurse: true }, file => console.log(`removing ${file.full}`))

// delete all existing report files
rm(reportFiles, (error) => {
    if (error) {
        console.error(`Error while removing existing report files: ${error}`)
        process.exit(1)
    }
    console.log('Removing all existing report files successfully!')
})

cypress.run({
    browser: argv.browser,
    spec: argv.spec
}).then((results) => {
    const reporterOptions = {
        reportDir: results.config.reporterOptions.reportDir,
    }
    generateReport(reporterOptions)
}).catch((error) => {
    console.error('errors: ', error)
    process.exit(1)
})

function generateReport(options) {
    return merge(options).then((report) => {
        marge.create(report, options)
    })
}

sh$ node cypress_runner -b chrome

知道了! 这是Mochawesome HTML报告。 您可以查看测试用例的详细信息,例如 测试代码,测试执行时间(针对每个测试和所有测试)以及左侧的"测试过滤"菜单。 它太酷了。

4.将屏幕截图附加到测试失败的报告中

就像我之前提到的,您可以将自己的自定义上下文添加到Mochawesome报告程序中。因此,我将失败测试的屏幕截图附加到我的报告中。实际上,当在测试运行期间发生故障时,Cypress会自动捕获屏幕截图。因此,我只是将屏幕快照文件添加到报告中,仅此而已。我收听测试:after:运行事件,以通过Cypress支持文件在发生故障时将屏幕快照附加到报告中

const addContext = require('mochawesome/addContext')

Cypress.on('test:after:run', (test, runnable) => {
    if (test.state === 'failed') {
        const screenshotFileName = `${runnable.parent.title} -- ${test.title} (failed).png`
        addContext({ test }, `assets/${Cypress.spec.name}/${screenshotFileName}`)
    }
})

addContext是Mochawesome提供的一个对象,它允许您向报表添加任何自定义上下文。 不仅是屏幕截图文件,还包括您想要的任何东西,例如String,Object等。您可以在此处阅读有关此API的更多详细信息。

然后,我更新cypress.json中的screenshotFolder参数,以将我的屏幕截图放置到Mochawesome资产目录中。 我想确保我的测试报告可以正确引用屏幕快照文件。

我创建了一个新的测试用例,它总是在运行时失败。 之后,我再次运行测试。

最后,生成的测试报告如下所示。

呜呼。 屏幕截图附在报告中! 您可以在此处查看我的完整测试报告。

最后,您可以将此技术应用于您的持续集成系统。 它可以帮助您以精美的格式可视化测试结果。 您的团队成员可以清楚地阅读和理解测试报告。 希望本文对您的工作有所帮助。 测试愉快!

感谢这些酷的lib:https://github.com/adamgruber/mochawesome,https://github.com/Antontelesh/mochawesome-merge

(本文翻译自Traitanit Huangsri的文章《Generate a Beautiful Test Report from running Tests on Cypress.io》,参考:https://medium.com/cypress-io-thailand/generate-a-beautiful-test-report-from-running-tests-on-cypress-io-371c00d7865a)

相关推荐

F5负载均衡器如何通过irules实现应用的灵活转发?

F5是非常强大的商业负载均衡器。除了处理性能强劲,以及高稳定性之外,F5还可以通过irules编写强大灵活的转发规则,实现web业务的灵活应用。irules是基于TCL语法的,每个iRules必须包含...

映射域名到NAS

前面介绍已经将域名映射到家庭路由器上,现在只需要在路由器上设置一下端口转发即可。假设NAS在内网的IP是192.168.1.100,NAS管理端口2000.你的域名是www.xxx.com,配置外部端...

转发(Forward)和重定向(Redirect)的区别

转发是服务器行为,重定向是客户端行为。转发(Forward)通过RequestDispatcher对象的forward(HttpServletRequestrequest,HttpServletRe...

SpringBoot应用中使用拦截器实现路由转发

1、背景项目中有一个SpringBoot开发的微服务,经过业务多年的演进,代码已经累积到令人恐怖的规模,亟需重构,将之拆解成多个微服务。该微服务的接口庞大,调用关系非常复杂,且实施重构的人员大部分不是...

公司想搭建个网站,网站如何进行域名解析?

域名解析是将域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站的一种服务。IP地址是网络上标识站点的数字地址,为方便记忆,采用域名来代替IP地址标识站点地址。域名解析就是域名到IP地址的转...

域名和IP地址什么关系?如何通过域名解析IP?

一般情况下,访客通过域名和IP地址都能访问到网站,那么两者之间有什么关系吗?本文中科三方针对域名和IP地址的关系和区别,以及如何实现域名与IP的绑定做下介绍。域名与IP地址之间的关系IP地址是计算机的...

分享网站域名301重定向的知识

网站域名做301重定向操作时,一般需要由专业的技术来协助完成,如果用户自己在维护,可以按照相应的说明进行操作。好了,下面说说重点,域名301重定向的操作步骤。首先,根据HTTP协议,在客户端向服务器发...

NAS外网到底安全吗?一文看懂HTTP/HTTPS和SSL证书

本内容来源于@什么值得买APP,观点仅代表作者本人|作者:可爱的小cherry搭好了NAS,但是不懂做好网络加密,那么隐私泄露也会随时发生!大家好,这里是Cherry,喜爱折腾、玩数码,热衷于分享数...

ForwardEmail免费、开源、加密的邮件转发服务

ForwardEmail是一款免费、加密和开源的邮件转发服务,设置简单只需4步即可正常使用,通过测试来看也要比ImprovMX好得多,转发近乎秒到且未进入垃圾箱(仅以Mailbox.org发送、Out...

使用CloudFlare进行域名重定向

当网站变更域名的时候,经常会使用域名重定向的方式,将老域名指向到新域名,这通常叫做:URL转发(URLFORWARDING),善于使用URL转发,对SEO来说非常有用,因为用这种方式能明确告知搜索引...

要将端口5002和5003通过Nginx代理到一个域名上的操作笔记

要将端口5002和5003通过Nginx代理到域名www.4rvi.cn的不同路径下,请按照以下步骤配置Nginx:步骤说明创建或编辑Nginx配置文件通常配置文件位于/etc/nginx/sites...

SEO浅谈:网站域名重定向的三种方式

在大多数情况下,我们输入网站访问网站的时候,很难发现www.***.com和***.com的区别,因为一般的网站主,都会把这两个域名指向到同一网站。但是对于网站运营和优化来说,www.***.com和...

花生壳出现诊断域名与转发服务器ip不一致的解决办法

出现诊断域名与转发服务器ip不一致您可以:1、更改客户端所处主机的drs为223.5.5.5备用dns为119.29.29.29;2、在windows上进入命令提示符输入ipconfig/flush...

涨知识了!带你认识什么是域名

1、什么是域名从技术角度来看,域名是在Internet上解决IP地址对应的一种方法。一个完整的域名由两个或两个以上部分组成,各部分之间用英文的句号“.”来分隔。如“abc.com”。其中“com”称...

域名被跳转到其他网站是怎么回事

当你输入域名时被跳转到另一个网站,这可能是由几种原因造成的:一、域名可能配置了域名转发服务。无论何时有人访问域名,比如.com、.top等,都会自动重定向到另一个指定的URL,这通常是在域名注册商设...

取消回复欢迎 发表评论: