51Testing软件测试论坛
标题:
常用的前端自动化测试工具介绍 —— Karma(一)
[打印本页]
作者:
悠悠小仙仙
时间:
2018-1-16 15:45
标题:
常用的前端自动化测试工具介绍 —— Karma(一)
在开发的过程中,除了代码本身,测试也是重要的一环。大体来说,测试分为以下几种类型:
单元测试
功能测试
性能测试
安全测试
对于普通开发者而言,单元测试和功能测试是最常见的两种测试方式,本系列文章要介绍的几个工具是针对这两个方面的。
单元测试是对某一块独立的业务模块进行测试,可以是一个小功能,甚至一个函数。在前端开发中,我们可以选用 Karma进行代码的单元测试,这个工具十分强大,它集成了像Jasmine(基于BDD的测试框架),PhantomJS(无界面的浏览器)这些测试套件。还有一些其他有用的功能,比如生成代码覆盖率的报告等。
本文只介绍 Karma的基本使用。
单元测试工具Karma
要使用Karma对代码进行单元测试,首先需要安装一系列的相关插件。我们来新建一个名为myKarmDemo的目录,并安装相关的插件:
npminstallkarma-cli-g
npminstallkarmajasmine-corekarma-jasminekarma-phantomjs-launcher-D
接下来对我们的工程进行初始化:
karmainit
之后会弹出一些选项,其中包含了一些初始化的配置工作,使用上下方向键可以在配置项之间进行切换。我这里选择使用 Jasmine测试框架,使用PhantomJS无界面浏览器,整体的配置选项如下:
myKarmDemokarmainit
Whichtestingframeworkdoyouwanttouse?
Presstabtolistpossibleoptions.Entertomovetothenextquestion.
>jasmine
DoyouwanttouseRequire.js?
ThiswilladdRequire.jsplugin.
Presstabtolistpossibleoptions.Entertomovetothenextquestion.
>no
Doyouwanttocaptureanybrowsersautomatically?
Presstabtolistpossibleoptions.Enteremptystringtomovetothenextquestion.
>PhantomJS
Whatisthelocationofyoursourceandtestfiles?
Youcanuseglobpatterns,eg."js/*.js"or"test/**/*Spec.js".
Enteremptystringtomovetothenextquestion.
>
Shouldanyofthefilesincludedbythepreviouspatternsbeexcluded?
Youcanuseglobpatterns,eg."**/*.swp".
Enteremptystringtomovetothenextquestion.
>
DoyouwantKarmatowatchallthefilesandrunthetestsonchange?
Presstabtolistpossibleoptions.
>no
Configfilegeneratedat"/home/charley/Desktop/myKarmDemo/karma.conf.js".
初始化完成之后,会在我们的项目中生成一个 karma.conf.js文件,这个文件就是Karma的配置文件。
配置文件比较简单,能够比较轻松的看懂,这里我对原始的配置文件进行简单的修改,结果如下:
//Karmaconfiguration
//GeneratedonSunOct29201721:45:27GMT+0800(CST)
module.exports=function(config){
config.set({
//basepaththatwillbeusedtoresolveallpatterns(eg.files,exclude)
basePath:'',
//frameworkstouse
//availableframeworks:https://npmjs.org/browse/keyword/karma-adapter
frameworks:['jasmine'],
//listoffiles/patternstoloadinthebrowser
files:[
"./src/**/*.js",
"./test/**/*.spec.js",
],
//listoffilestoexclude
exclude:[
],
//preprocessmatchingfilesbeforeservingthemtothebrowser
//availablepreprocessors:https://npmjs.org/browse/keyword/karma-preprocessor
preprocessors:{
},
//testresultsreportertouse
//possiblevalues:'dots','progress'
//availablereporters:https://npmjs.org/browse/keyword/karma-reporter
reporters:['progress'],
//webserverport
port:9876,
//enable/disablecolorsintheoutput(reportersandlogs)
colors:true,
//leveloflogging
//possiblevalues:config.LOG_DISABLE||config.LOG_ERROR||config.LOG_WARN||config.LOG_INFO||config.LOG_DEBUG
logLevel:config.LOG_INFO,
//enable/disablewatchingfileandexecutingtestswheneveranyfilechanges
autoWatch:false,
//startthesebrowsers
//availablebrowserlaunchers:https://npmjs.org/browse/keyword/karma-launcher
browsers:['PhantomJS'],
//ContinuousIntegrationmode
//iftrue,Karmacapturesbrowsers,runsthetestsandexits
singleRun:true,
//Concurrencylevel
//howmanybrowsershouldbestartedsimultaneous
concurrency:Infinity
})
}
然后创建一个 src目录和一个test目录,在其中分别创建index.js和index.spec.js文件。
我要做的测试内容比较简单,对 index.js中的两个函数(一个加法函数,一个乘法函数)进行测试。
index.js文件如下:
//加法函数
functionadd(x){
returnfunction(y){
returnx+y;
}
}
//乘法函数
functionmulti(x){
returnfunction(y){
returnx*y+1;
}
}
index.spec.js文件如下:
describe("运算功能单元测试",function(){
it("加法函数测试",function(){
varadd5=add(5)
expect(add5(5)).toBe(10)
});
it("乘法函数测试",function(){
varmulti5=multi(5)
expect(multi5(5)).toBe(25)
})
})
单测的代码写好后,就可以使用 karmastart来运行单元测试。由于我们的乘法代码中有错误,因此测试结果是这样的:
myKarmDemokarmastart
2910201722:21:56.283:INFO[karma]:Karmav1.7.1serverstartedathttp://0.0.0.0:9876/
2910201722:21:56.287:INFO[launcher]:LaunchingbrowserPhantomJSwithunlimitedconcurrency
2910201722:21:56.294:INFO[launcher]:StartingbrowserPhantomJS
2910201722:21:56.549:INFO[PhantomJS2.1.1(Linux0.0.0)]:Connectedonsocket0h6boaepSUMwG7l2AAAAwithid44948955
PhantomJS2.1.1(Linux0.0.0)运算功能单元测试乘法函数测试FAILED
Expected26tobe25.
test/index.spec.js:9:31
PhantomJS2.1.1(Linux0.0.0):Executed2of2(1FAILED)(0.048secs/0.002secs)
将乘法函数的代码改为正常,再次启用 karmastart进行测试:
2910201722:23:08.670:INFO[karma]:Karmav1.7.1serverstartedathttp://0.0.0.0:9876/
2910201722:23:08.673:INFO[launcher]:LaunchingbrowserPhantomJSwithunlimitedconcurrency
2910201722:23:08.685:INFO[launcher]:StartingbrowserPhantomJS
2910201722:23:08.940:INFO[PhantomJS2.1.1(Linux0.0.0)]:Connectedonsocketpl_pZDcAK4rBTpr0AAAAwithid40770640
PhantomJS2.1.1(Linux0.0.0):Executed2of2SUCCESS(0.045secs/0.001secs)
复制代码
对了,如果使用PhantomJS作为代码的运行环境,其对于ES6的支持性不是太好,我在代码中使用了箭头函数,在运行时就报错了。为了解决这个问题,你可以使用Chrome或其他浏览器进行测试,也需要安装相应的launcher,如果你使用Chrome浏览器测试,需要安装karma-chrome-launcher插件。
或者,你可以使用Babel等工具对代码进行转码后进行测试。
使用PhantomJS的好处在于其是一个无界面的浏览器运行环境,可以跑在命令行环境中,在某些没有Chrome等浏览器服务器环境下比较好用,方便代码验收和集成。
对于Karma的介绍就到这里了,本文只是对Karma的安装和使用进行了简单的介绍,权当抛砖引玉,至于更多的用法,您可以再进行研究。
作者:
梦想家
时间:
2018-5-14 17:27
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/)
Powered by Discuz! X3.2