使用 Selenium + istanbul 的 javascript 代码覆盖率

Posted

技术标签:

【中文标题】使用 Selenium + istanbul 的 javascript 代码覆盖率【英文标题】:javascript code coverage using Selenium + istanbul 【发布时间】:2019-03-15 18:22:39 【问题描述】:

谁能帮助我了解如何在运行 Selenium 测试用例时使用伊斯坦布尔获得 javascript 代码覆盖率?

我已经浏览了this 链接,但无法得到它。在我的情况下如何使用它?我的测试在调用远程服务器的本地浏览器中运行。 Selenium 测试用例是用 Java 编写的。

【问题讨论】:

欢迎来到 ***。请阅读有关如何提出好问题的帮助部分,因为这将有助于社区更好地了解您的问题并为您提供一个好的答案:***.com/help/how-to-ask 我们需要看看您到目前为止尝试了什么以及您遇到了什么错误否则很难给你任何具体的指导。 【参考方案1】:

https://github.com/alex028502/istanbulseleniumexample

我也很难理解,所以我用 webpack 做了上面的例子。

module.exports = 
  devtool: 'source-map',
  mode: 'none',
  module: 
    rules: [
      //  test: /\.js$/, loader: 'babel-loader', exclude: /node_modules/ ,
      
        resolve: 
          extensions: ['.js'],
        ,
        use: 
          loader: 'istanbul-instrumenter-loader',
          options: esModules: true,
        ,
        enforce: 'post',
        exclude: /node_modules/,
      ,
      
        test: /\.coffee$/,
        use: [
          loader: 'coffee-loader',
        ],
      ,
    ],
  ,
  entry: './src/index.js',
  output: 
    path: __dirname + '/public/',
    filename: 'index.js',
  ,
;

如果你在浏览器中运行检测代码,你可以像这样下载它

coverage_info = _driver.execute_script('return JSON.stringify(window.__coverage__);')
# each report needs a unique name
# but we don't care for this example which report corresponds
# to which test
timestamp = datetime.datetime.timestamp(datetime.datetime.now())
file = open("nyc_output/coverage%s.json" % timestamp, 'w')
file.write(coverage_info)
file.close()

然后生成这样的报告

node_modules/.bin/nyc report -t nyc_output

如果您不使用 webpack,您只需像粘贴的示例一样使用命令行检测您的代码,然后它会创建一个包含检测代码的新文件夹。

# from https://medium.com/@the1mills/front-end-javascript-test-coverage-with-istanbul-selenium-4b2be44e3e98
mkdir public-coverage
cp -a public/. public-coverage/   # copy all files over
istanbul instrument public \ 
    --output public-coverage \
    --embed-source true

你提到的链接中我能做的部分是伊斯坦布尔中间件

【讨论】:

以上是关于使用 Selenium + istanbul 的 javascript 代码覆盖率的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 nyc/istanbul 进行代码覆盖

Grunt,Istanbul,Isparta和TypeScript

使用 Istanbul + Webpack 覆盖 JSX 文件的代码

使用 karma-jasmine 和 istanbul 的 Typescript 代码覆盖率

使用 karma-jasmine 和 istanbul 的 Typescript 代码覆盖率

Istanbul BFT共识算法解读