软件测试技术之Webpack单元测试,e2e测试
凌雪 2018-11-02 来源 :网络 阅读 1012 评论 0

摘要:本文将带你了解软件测试技术之Webpack单元测试,e2e测试,希望对大家学测试技术有所帮助。

本文将带你了解软件测试技术之Webpack单元测试,e2e测试,希望对大家学测试技术有所帮助。


一、单元测试
      实现单元测试框架的搭建、es6语法的应用、以及测试覆盖率的引入。
      1. 需要安装的项目:
      jasmine:单元测试库
      karma:测试框架,配置选择phantomjs浏览器
      karma-jasmine:操作jasmine的插件
      karma-webpack:webpack与karma的连接
      mock:用于数据模拟,用'npm install --save-dev mockjs'安装
      karma-coverage:测试覆盖率报表
      karma-spec-reporter:命令行输出测试用户的运行结果
      babel-plugin-istanbul: 测试覆盖率显示未通过webpack打包的源码
      由于babel-plugin-istanbul是bable的一个插件,所以需要修改.babelrc文件,代码如下:
      {
      "presets":["es2015","stage-2"],
      "plugins": ["istanbul"] //这句话是重点
      }
      2. 配置参数及运行命令:
      运行命令 .\node_modules\.bin\karma start .\test\karma.conf.js
      karma命令为私有安装,karma配置文件指定在test文件夹下。
      配置文件如下:
      module.exports = function(config) {
      config.set({
      // 基路径:表示karma从那个位置开始找文件
      basePath: '',
      // 框架
      frameworks: ['jasmine'],
      // 测试的入口文件
      files: ['../test/unit/index.js'],
      // 排除的文件,可以是正则
      exclude: [
      ],
      // 对指定文件的preprocess(预处理)
      preprocessors: {
      '../test/unit/index.js': ['webpack', 'sourcemap'],
      '../src/**/*.js': ['webpack','sourcemap', 'coverage', 'coverage']   //表示那些代码需要生成测试覆盖率报表
      },
      // 结果报表
      reporters: ['progress'],
      // 服务器端口
      port: 9876,
      // 报表中是否有颜色区分
      colors: true,
      // 输出的日志级别
      // possible values: config.LOG_DISABLE || config.LOG_ERROR ||   config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
      logLevel: config.LOG_INFO,
      // 文件变化是否自动刷新
      autoWatch: true,
      // 测试的测试器环境
      browsers: ['PhantomJS'],
      // 是否依附浏览器运行
      // if true, Karma captures browsers, runs the tests and exits
      singleRun: false,
      // 并发个数,同时支持在多少个浏览器运行
      // how many browser should be started simultaneous
      concurrency: Infinity,
      //webpack配置
      webpack: webpackConfig,
      //代码覆盖率配置节点
      coverageReporter:{
      dir: './converage',
      reporters:[
      { type: 'lcov', subdir: '.' },
      {type: 'text-summary'}
      ],
      }
      })
      }
      *.spec.js(测试代码)如下:
      import {init} from '../../src/ma'
      import data from '../mocks/demo'
      describe('demo_spec', function(){
      it('body',() => {
      init();
      let button = document.querySelector('.btn');
      button.textContent = data.btnName;
      expect(button.textContent).toEqual(data.btnName);
      })
      });
      src/ma:会向dom插件一个button标签
      mocks/demo.js的代码:
      import Mock from 'mockjs';
      var template = {
      'title': 'Demo01',
      'btnName|1-3': '*'
      }
      export default Mock.mock(template);
      mocks/demo:用mockjs模拟的一些数据
      3. 运行结果
      二、e2e(模拟用户行为的测试)
      1. 需要安装的npm包
      selenium-server:webdriver测试服务器的nodejs搭建
      nightwatch:对selenium-server的包装,简化其配置
      chromedriver:selenium的chrome测试环境插件,如果是firefox、ie等都需要重新下测试环境插件。
      2. 原理简要说明
        selenium-server由于浏览器同源策略(域名、协议、端口相同才是同源,如不明白可以baidu)的限制,selenimue就以代理的方式进行目标站点的测试(也就是测试环境跑的浏览器连接是selenium-server产生的代理服务器),selenium-server代理服务器=selenium核心Js   + 测试目标站点(proxy)。
      3. 相关代码展示
      nightwatch配置参数:
      module.exports = {
      "src_folders": ["test/e2e/specs"],
      "selenium":{
      "start_process":true,
      "server_path": "node_modules/selenium-server/lib/runner/selenium-server-standalone-3.3.1.jar",
      "host": "127.0.0.1",
      "port": 9538,
      "cli_args":{
      "webdriver.chrome.driver": require('chromedriver').path
      }
      },
      "test_settings":{
      "default": {
      "selenium_port": 9538,
      "selenium-host": "127.0.0.1",
      "silent": true,
      "globals":{
      "devServerURL": "//localhost:8080"
      }
      },
      "chrome":{
      "desiredCapabilities": {
      "browserName": "chrome",
      "javascriptEnabled": true,
      "acceptSslCerts": true
      }
      }
      }
      }
      selenium.server_path指向为selenium的jar包
      selenium.cli_args:配置运行时的必要参数,webdriver.chrome.driver指定适合selenium的chrome安装位置
      test.default.globals.devServerURL:需要测试的目标站点,此站点必须处于活动状态。
      测试用例代码:
      module.exports = {
      "default e2e": function(browser){
      var devServer = browser.globals.devServerURL;
      var driver = browser.url(devServer)
      .waitForElementVisible(".btn", 5000)
      .setValue('.btn', 'e2e产生的内容');
      browser.getText('.btn', function(result){
      console.log(result.value);
      });
      browser.end();
      }
      }
   
      nightwatch相关api可以参考此链接
      运行e2e的命令 .\node_modules\.bin\nightwatch --config   ".\test\e2e\runner.js" --env chrome    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标软件测试之测试技术频道!

本文由 @凌雪 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程