# JavaScript与QA测试工程师
# why?
- 正确性:测试可以验证代码的正确性,在上线前做到心里有底
- 自动化:当然手工也可以测试,通过console可以打印出内部信息,但是这是一次性的事情,下次测试还需要从头来过,效率不能得到保证。通过编写测试用例,可以做到一次编写,多次运行
- 解释性:测试用例用于测试接口、模块的重要性,那么在测试用例中就会涉及如何使用这些API。其他开发人员如果要使用这些API,那阅读测试用例是一种很好地途 径,有时比文档说明更清晰
- 驱动开发,指导设计:代码被测试的前提是代码本身的可测试性,那么要保证代码的可测试性,就需要在开发中注意API的设计,TDD将测试前移就是起到这么一个作用
- 保证重构:互联网行业产品迭代速度很快,迭代后必然存在代码重构的过程,那怎 么才能保证重构后代码的质量呢?有测试用例做后盾,就可以大胆的进行重构
# 单元测试
- 目的:单元测试能够让开发者明确知道代码结果
- 原则:单一职责、接口抽象、层次分离
- 断言库:保证最小单元是否正常运行检测方法
- 测试风格:测试驱动开发(Test-Driven Development,TDD)、(BehaviorDriven Development,BDD)行为驱动开发均是敏捷开发方法论。
- TDD关注所有的功能是否被实现(每一个功能都必须有对应的测试用 例),suite配合test利用assert('tobi' == user.name);
- BDD关注整体行为是否符合整体预期,编写的每一行代码都有目的提 供一个全面的测试用例集。expect/should,describe配合it利用自然语 言expect(1).toEqual(fn())执行结果。
# 单元测试框架
- better-assert(TDD断言库Github 190star 19fork)
- should.js(BDD断言库Github 2295star 194fork)
- expect.js(BDD断言库Github 1391star 162fork)
- chai.js(TDD BDD双模Github 2823star 271fork)
- Jasmine.js(BDD Github10723star1680fork)
- Node.js本身集成 require(“assert”);
- Intern 更是一个大而全的单元测试框架
- QUnit 一个游离在jQuery左右的测试框架
- Macaca 一套完整的自动化测试解决方案 国产神器来自阿里巴巴
# karma 集成 Jasmine 进行单元测试
karma是一个测试环境,Jasmine是一个Javascript的测试工具,在Karma上运行Jasmine可完成Javascript的自动化测试、生成覆盖率报告等。
# 步骤一.初始化 NPM
实现初始化 NPM 包管理,创建 package.json 项目管理文件。
使用参数 -y 直接按照默认值创建 packgae.json 项目管理文件
PS C:\study\mykarma> npm init -y
Wrote to C:\study\mykarma\package.json:
{
"name": "mykarma",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 步骤二.安装 Karma
npm install karma --save-dev
(Karma安装完毕后):
现在我们可以使用 node 来运行 karma 了
> node ./node_modules/karma/bin/karma
# 步骤三.安装 karma-cli
为了能在命令行直接执行 karma 命令,我们再按着一个karma-cli.
-g 表示全局安装,这样可以在系统的任何文件夹中直接执行 karma 命令。
安装之后,可以直接使用 karma 来启动测试了,首先检查一下当前的版本。
PS C:\study\mykarma> karma --version
Karma version: 0.13.21
PS C:\study\mykarma>
2
3
# 步骤四:安装 Jasmine 和 chrome-launcher/phantomjs-launcher
我们使用 Karma 来驱动单元测试,只有 Karma 是不行的,还需要安装单元测试库以便运行测试脚本,安装测试库与 Karma 的适配器,还有各种浏览器的适配器。
这里我们安装 Jasmine
的测试支持和 chrome 浏览器的适配器
。
对于 jasmine 来说,我们需要 Jasmine 的适配器,还必须有 jasmine-core
库。
karma-chrome-launcher
则提供了 karma 与 chrome 的适配器。
karma-phantomjs-launcher
则提供了 karma 与 无头浏览器 的适配器。
npm i -D jasmine-core karma-jasmine karma-chrome-launcher
# 步骤五:使用Karma进行测试
Karma 的命令
- start
[<configFile>]
[<options>]
启动 Karma 持续执行,也可以执行单次的测试,然后直接收集测试结果. - init
[<configFile>]
初始化配置文件. - run
[<options>]`` [ -- <clientArgs>]
Trigger a test run.
创建 karma 配置文件 执行命令init命令进行配置:
karma init
所有默认配置问题:
说明:
- 测试框架:我们当然选jasmine
- 是否添加Require.js插件
- 选择浏览器: 我们选Chrome
- 测试文件路径设置,文件可以使用通配符匹配,比如*.js匹配指定目录下所有的js文件(实际操作中发现该路径是karma.conf.js文件的相对路径,详见下面我给出的实际测试配置及说明)
- 在测试文件路径下,需要排除的文件
- 是否允许Karma监测文件,yes表示当测试路径下的文件变化时,Karma会自动测试
以下是karma.conf.js的完整内容
module.exports = function(config) {
config.set({
//将用于解析所有模式(如文件、排除)的基本路径
// 基本路径,这个是决定从哪里找引用的文件和要排除的文件
basePath: '',
//生成报表的类型与文件夹位置
coverageReporter: {
type: 'html',
dir: './docs/coverage/'
},
// frameworks to use
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
frameworks: ['jasmine'],//指定断言框架
// 要在浏览器中加载的文件/模式列表
files: [
"./tests/unit/*.js",
"./tests/unit/*.spec.js"
],//测试文件
//要排除的文件/模式列表
exclude: [
],
// 在将匹配文件提供给浏览器之前对其进行预处理
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
preprocessors: {
'./tests/unit/**/*.js': ['coverage']
},
//插件,用到什么就写什么,不写会报错
// plugins : [
// 'karma-jasmine',
// 'karma-requirejs'
// ],
// test results reporter to use
//生成测试结果报告的类型
// possible values: 'dots', 'progress', 'junit', 'growl', 'coverage'
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
reporters: ['progress','coverage'],
// web server port
port: 9876,
// enable / disable colors in the output (reporters and logs)
// 启用/禁用输出中的颜色(测试结果和日志)
colors: true,
// level of logging
// 日志的等级,就那几样看着选
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
logLevel: config.LOG_INFO,
// 是否自动监控,如果是文件一改就自动跑测试用例,这边选择的是否
// enable / disable watching file and executing tests whenever any file changes
autoWatch: true,
// start these browsers
// available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
browsers: ['PhantomJS'],
// 支持的浏览器,用来做兼容性测试,无头浏览器PhantomJS没人维护还是用的时候还是很多坑的。
// - Chrome
// - ChromeCanary
// - Firefox
// - Opera
// - Safari (only Mac)
// - PhantomJS //大坑不能使用ES6的语法
// - IE (only Windows)
// client: {
// mocha: {
// // change Karma's debug.html to the mocha web reporter
// reporter: 'html',
// // require specific files after Mocha is initialized
// require: [require.resolve('bdd-lazy-var/bdd_lazy_var_global')],
// // custom ui, defined in required file above
// ui: 'bdd-lazy-var/global',
// }
// },
// true表示找到浏览器就自动运行test然后退出,默认就好。
singleRun: false,
// 浏览器超时时间,超过这个时间就kill掉了
captureTimeout: 60000,
// Concurrency level
// how many browser should be started simultaneous
concurrency: Infinity
})
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# 步骤六:启动karma
karma start
由于这次加上了配置文件karma.conf.js,因此Karma会按照配置文件中指定的参数执行操作了,由于我们配置的是在Chrome中测试,因此Karma会自动启动Chrome实例,并运行测试用例:(如果在无头浏览器可以直接用PhantomJS,切记它不支持es6语法)
(如果我们点击上图中的debug按钮,进入debug.html并按F12打开开发者工具,选择Console窗口,我们将能看到jasmine的执行日志):
在这个页面,我们可以在源码中设置断点,检查测试。
# 代码覆盖率检查
如果你还想查看测试的代码覆盖率,我们可以安装karma-coverage
插件,安装命令为:
npm install karma-coverage
修改karma.conf.js,增加覆盖率的配置
// preprocess matching files before serving them to the browser
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
preprocessors: {
'../TestFiles/test.js':'coverage'
},
// test results reporter to use
// possible values: 'dots', 'progress'
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
reporters: ['progress','coverage'],
coverageReporter:{
type:'html',
dir:'../TestFiles/coverage/'
},
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
这样就完成了karma 集成 Jasmine 进行单元测试已经生成覆盖率检查
# e2e测试
端对端的测试 需要人点,用程序代替
比如:
# rize
# NightWatch
Nightwatch.js是一个用于Web应用程序和网站的自动化测试框架,他是专门做端对端的
使用Node.js编写并使用W3C WebDriver API(以前称为Selenium WebDriver)。
它是一个完整的浏览器(端到端)测试解决方案,旨在简化设置持续集成和编写自动化测试的过程。
Nightwatch也可用于编写Node.js单元测试 官方文档 (opens new window)
入门教程
# 介绍
Write End-to-End tests in Node.js quickly and effortlessly that run against a Selenium/WebDriver server.(在node.js中快速、轻松地编写端到端测试,这些测试在Selenium/WebDriver服务器上运行。)
# 安装Nightwatch
- 在当前项目中安装
npm i -D nightwatch
- 全局安装
npm i -g nightwatch
# 安装webDriver
Nightwatch有两种方式去调起浏览器跑测试
通过Selenium,调各个浏览器的webDriver唤起浏览器。这个需要安装java、Selenium、webDriver(无头浏览器)
直接通过各家浏览器的webDriver调起对应的浏览器。
我选择了第二种,这里就需要去安装的chrome的webDriver,有个npm包帮我们做了这个事
npm i -D chromedriver
直接安装chromedriver会提示安装不成功,安装的时候可能会遇到'网络问题',在根目录下新建一个.npmrc文件,需要手动指定镜像地址
chromedriver_cdnurl=https://npm.taobao.org/mirrors/chromedriver
相当于
npm install chromedriver --chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedrive -D
# 配置文件nightwatch.json
Nightwatch启动的时候默认会去加载nightwatch.json配置文件,nightwatch.js 与 nightwatch.conf.js也行,这里贴上我的配置文件,并对一些常用的字段做一下说明,其余看文档就行
{
"src_folders": ["./tests/nightwatch"],//指定测试用例的文件夹,里面所有的js文件测试的时候都会被执行
"output_folder": "./docs/nightwatch",//指定产生报告存放的路径
"custom_commands_path": "",
"custom_assertions_path": "",
"page_objects_path": "",
"globals_path": "./webDriver.js",//全局模块路径,nightwatch启动时还会去加载这个路径下的模块,比如我们刚刚下载了Chromedriver,我们需要写个模块文件,简单包装一下暴露出来被nightwatch加载。 这是我根目录下的webDriver.js文件,这样的话,nightwatch就能通过这个文件调webdriver然后启动浏览器了
"selenium": {
"start_process": false
},
"test_settings": {
"default": {
"selenium_port": 9515,
"selenium_host": "localhost",
"default_path_prefix": "",
"screenshots": {
"enabled": true,//是否开启截图,若为false,截图不成功
"path": ""
},
"desiredCapabilities": {
"browserName": "chrome",//默认使用什么浏览器测试
"chromeOptions": {
"args": [
"--no-sandbox",
"user-data-dir=/Users/shenshuaijia/Library/Application Support/Google/Chrome"
]
},
"acceptSslCerts": true
},
"globals": {
"domain": "http://xxx.com"
}
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
- globals_path
const chromedriver = require('chromedriver')
module.exports = {
before: function(done) {
chromedriver.start()
done()
},
after: function(done) {
chromedriver.stop()
done()
}
}
2
3
4
5
6
7
8
9
10
11
- selenium: selenium的配置,因为我选择了第二中安装方式,所以要禁用掉selenium;如果开启会有这些选项
"start_process": true,//是否自动开启selenium服务
"server_path": "./selenium-server-standalone-3.7.1.jar",//selenium jar路径
"log_path": "",
"port": 4444,
"cli_args": {
"webdriver.chrome.driver": "./chromedriver", //driver路径
"webdriver.gecko.driver": "",
"webdriver.edge.driver": ""
}
2
3
4
5
6
7
8
9
- test_settings:启动测试时的一些配置,每一个key对应一套配置,比如通过命令
nightwatch --env default
使用default那一套配置,也可以用nightwatch --env integration
来运行integration那套配置,但需要事先在test_settings中有配置 - desiredCapabilities:这个是对Chromdriver能力配置,具体的话,就需要查看Chromdriver的文档
这里我遇到了一个比较特殊的情况,我需要使用平时使用chrome留下的cookie,而不是完全的沙盒模式,所以,我这里需要启动chromedriver的时候,指定加载chrome用户数据的文件夹"user-data-dir=/Users/xxx/Library/Application Support/Google/Chrome"
,这样所有的登录信息都能在测试的时候被使用。
- globals: 在测试的时候,也可以定义一下全局变量,方便测试的时候使用,这里我定义了一个domain,写测试的时候可以在
browser.globals.domain
获取
# 编写测试
在test/ui
文件夹下新建一个测试文件page.test.js
module.exports = {
'Search by baidu': function (client) {
// 定义页面元素
const searchInput = '#kw';
const searchBtn = '#su';
const resultContainer = '#container';
// 启动浏览器并打开www.baidu.com
client.url('http://baidu.com').maximizeWindow()
// 确保输入框可以使用.
.waitForElementVisible(searchInput, 5000)
// 输入"nightwatch"然后搜索.
.setValue(searchInput, 'nightwatch')
.click(searchBtn)
.waitForElementVisible(resultContainer, 1000)
// 截屏
.saveScreenshot('reports/answers.png')
.end()
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
nightwatch拥有比较优雅的测试写法。这里就是简单打开一个谷歌页面,往输入框输入nightwatch然后点击按钮, 截屏。记住所有的测试完成后需要调end方法来退出浏览量。
nightwatch也可以定义一些钩子函数
module.exports = {
before : function(browser) {
console.log('Setting up...');
},
after : function(browser) {
console.log('Closing down...');
},
beforeEach : function(browser) {
},
afterEach : function() {
},
'step one' : function (browser) {
browser
// ...
},
'step two' : function (browser) {
browser
// ...
.end();
}
};
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 运行测试
`
nightwatch
这里我遇到了一个奇怪的问题,可能是由于我指定了用户目录的关系,我需要先完全退出chrome,在跑测试,不然跑测试新打开的窗口不会按代码里写的测试去走
# 总结
这里我只是简单介绍一下nightwatch,更加详细具体的使用还是需要参考官方文档。有了ui自动化测试以后,我们可以简单的做一些回归测试,比如,改了某些代码以后,把所有的页面都跑一遍,看看控制台有没有报错,比点点点方便多了
# puppeteer
具体的操作可查看npm npm介绍 (opens new window)
# jest
# UI测试
参考文档:
{
//测试用例id,用于BackstopJS管理和为文件命名
"id": "backstop_prod_test",
//测试视口,就是配置各种分辨率
"viewports": [
{
"name": "phone",
"width": 320,
"height": 480
}],
//在执行所有脚本前、页面加载后执行的脚本。通过他我们可以执行用express做一个静态服务器
"onBeforeScript": "onBefore.js",
"onReadyScript": "onReady.js",
//测试用例 可以配置多个测试用例
/**
*scenarios可以配置多个测试用例。
*url指定了需要测试页面的地址;
*selector指定要测试的区域,
*如果整个页面都是测试区域可以直接给document或者是body。
*/
"scenarios": [
{
//测试用例名称
"label": "homepage",
//测试的地址
"url": "https://garris.github.io/BackstopJS/",
//测试的区域,支持css选择器,然后BackstopJS会将选择器指定的地方截屏
"selectors": [
".class",
"#id"
],
"selectorExpansion": true,
"hideSelectors": [],
"removeSelectors": [],
"readyEvent": null,
"delay": 500,
"misMatchThreshold" : 0.1,
//在各种的测试用例执行时、页面加载后前行,我们可以把我们对页面操作的模拟脚本放进onReady.js中
"onBeforeScript": "onBefore.js",
"onReadyScript": "onReady.js"
}
],
//测试图片的输出路径
"paths": {
"bitmaps_reference": "backstop_data/bitmaps_reference",
"bitmaps_test": "backstop_data/bitmaps_test",
"casper_scripts": "backstop_data/casper_scripts",
"html_report": "backstop_data/html_report",
"ci_report": "backstop_data/ci_report"
},
//测试用的浏览器或模拟器,这里用的是PhantomJS
"engine": "phantomjs",
//报告的形式,支持命令行和浏览器两种
"report": ["browser"],
//是否打印测试日志
"debug": false
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# 阿里巴巴UIrecorder测试框架
他的整个安装流程
- 安装uirecorder
- 用工具(UI Recorder)录制测试脚本 uirecorder start
- 测试脚本的回放(各个浏览器)
- 启动java环境selenium-standalone start
- 用mocha测试回放
UI Recorder
是一款零成本UI自动化录制工具,类似于Selenium IDE (opens new window).
UI Recorder
要比Selenium IDE更加强大!
UI Recorder 非常简单易用.
- 官方网站: http://uirecorder.com/ (opens new window)
- 语言切换: English (opens new window), 中文 (opens new window)
- 变更日志: CHANGE (opens new window)
- 视频教程:PC中文教程 (opens new window)
# 功能
- 支持所有用户行为: 键盘事件, 鼠标事件, alert, 文件上传, 拖放, svg, shadow dom
- 支持无线native app(Android, iOS)录制, 基于macaca实现: https://macacajs.com/ (opens new window)
- 无干扰录制: 和正常测试无任何区别,无需任何交互
- 录制用例存储在本地
- 支持丰富的断言类型: val,text,displayed,enabled,selected,attr,css,url,title,cookie,localStorage,sessionStorage
- 支持图片对比
- 支持强大的变量字符串
- 支持公共测试用例: 允许用例中动态调用另外一个
- 支持并发测试
- 支持多国语言: 英文, 简体中文, 繁体中文
- 支持单步截图
- 支持HTML报告和JUnit报告
- 全系统支持: Windows, Mac, Linux
- 基于Nodejs的测试用例: jWebDriver (opens new window)
# 安装uirecorder
说明:这里是基于win的安装。mac系统与之思路类似。
# 1、安装node.js(版本号 >= v7.x)
node官网:https://nodejs.org/en/download/
或者直接下载安装包:https://nodejs.org/dist/v8.11.3/node-v8.11.3-x64.msi
安装时一路next就行了。安装成功之后,验证一下安装是否成功:
打开cmd,输入node -v,然后回车
# 2、安装 chrome(谷歌浏览器)
chrome官网:https://www.google.com/chrome/ (opens new window) (访问此地址需要‘帆樯’)
或者直接下载百度云上chrome安装包:https://pan.baidu.com/s/1RU76eGWOBPJD2EHfE64Bsw (opens new window)
# 3、安装 UI Recorder
npm install uirecorder mocha -g
备注:如果下载不成功,很大可能是因为数据包下载不下来(原因你懂得)。使用淘宝的npm镜像 (opens new window)下载:
使用cnpm命令代替npm:
`npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm install uirecorder mocha -g`
2
3
# 4、检查浏览器与driver版本是否对应
下载成功之后,需要查看一下chromedirver的版本和chrom版本是否对应,如果版本不对应,是无法驱动器浏览器进行录制和回放的。
selenium之 chromedriver与chrome版本映射表 (opens new window)
a)查看chrome版本:chrome://settings/help (opens new window)
b)查看chromedierver的版本:
npm ls chromedriver -g
可以看到uirecorder是2.5.42版本,uirecorder依赖的chromedriver是2.41.0版本
c)根据selenium之 chromedriver与chrome版本映射表 (opens new window),应该下载2.40.0版本的chromedriver:
备注:我自己的chrome是68版本的,所以要下载chromederiver@2.40.0版本的。在我自己的电脑上,68版本的chrome使用2.41.0版本的chromedriver,无法录制。换成2.40.0版本的chromedriver一切正常。_
打开C:\Users{userNmae}\AppData\Roaming\npm\node_modules\uirecorder\package.json
(把{userName}替换成你的用户名,就能找到这个文件了。)_
修改uirecorder依赖chromedriver的版本号:
然后在cmd执行:
cd C:\Users\AnXiaole\AppData\Roaming\npm\node_modules\uirecorder
cnpm install
2
3
// 更新uirecorder依赖的chromedriver为2.40.0版本
npm ls chromedriver -g
// 查看chromedriver的版本
# 5、到此,如果都没有报错,说明安装成功了。
上一步的安装指定版本的chromedriver特别重要,因为不同版本的chrome需要相应版本的chromedriver才能驱动起来 (opens new window)。如果安装的版本不对应,录制或者回放的时候,一般都不会成功。
# 开始录制
# 1、初始化工程
`mkdir project_name // 创建工作目录
cd project_name // 进入到工作目录中,以下的命令都是在此工作目录中执行
uirecorder init // 初始化uirecorder`
2
3
4
5
6
备注:如果运行uirecorder init时报出如下格式的错误:
`C:\uirecorder_workspaces\project_name>uirecorder init
module.js:549
throw err;
^
Error: Cannot find module 'co-thread'
at Function.Module._resolveFilename (module.js:547:15)
at Function.Module._load (module.js:474:25)
at Module.require (module.js:596:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (C:\Users\AnXiaole\AppData\Roaming\npm\node_modules\uirecorder\node_modules\_co-parallel@1.0.0@co-parallel\index.js:6:14)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)`
就执行cnpm install co-thread -g 这是因为在运行uirecorder init时,缺少了uirecorder依赖的co-thread包,所以用cnpm安装(install)一下co-thread。
(编者注:如果运行此命令时报错说找不到cnpm命令,请看【3、安装 UI Recorder】小节)
安装完之后,再执行uirecorder init,此时有可能还报类似的错误,就继续使用cnpm install [包名] -g安装报错的那个依赖包。知道uirecorder init执行成功为止。
(编者注:我在新的电脑安装uirecorder,大于缺失了10几个包,如此循环了十几次,是很正常的。)
# 2、开始录制测试用例
启动uirecorder录制,并且录制的脚本保存到工作目录下的sample/test.spec.js (我这里的工作目录就是project_name)
`uirecorder start`
此时会打开两个chrome浏览器,一个用来校验的,一个用来录制脚本的:
我们去百度,搜索一下uirecorder。
1)在上面输入框中输入www.baidu.com,点击开始录制。
2)然后在百度上一顿操作,随便点。我请客。>_<,然后,不想玩了,就点击左下角的结束录制。
3)然后录制的浏览器会自动关闭,然后,cmd展示:
4)具体如何录制,如何使用断言,这些,官方提供了视频教程:视频教程:PC中文教程 (opens new window)
# 回放
回放,又叫运行测试用例。执行下面命令运行sample/test.spec.js测试用例(即回放刚才的一顿操作)
`run.bat sample/test.spec.js`
此时报错了:
原因:回放的时候,需要运行selenium-standalone,所以重新打开一个cmd,运行:
说明:下面前两个命令为安装selenium-standalone的,如果已经安装过selenium-standalone,就不用再运行前两个命令了。
`cnpm install selenium-standalone@latest -g
selenium-standalone install // 运行这个需要java,安装java自行百度。最低也要安装java8
selenium-standalone start`
安装好java8,看一下版本:
然后在运行之前的命令:selenium-standalone install,则报错:
或者去百度云下载:百度云盘地址 (opens new window),下载之后,保存到指定位置。并且正确命名文件名称。
把文件下载下来,并放到指定的目录中,并重命名之后,执行selenium-standalone start ,入股看到下图,Selenium started,就说明启动成功了。
如果报下面的错误,说明是下载的driver没有放到指定文件夹下,或者是文件命名不对。要该文件的名称的。
C:\Users\AnXiaole\AppData\Roaming\npm\node_modules\selenium-standalone\bin\selenium-standalone:79
throw err;
^
Error: Missing C:\Users\AnXiaole\AppData\Roaming\npm\node_modules\selenium-standalone\.selenium\chromedriver\2.40-x64-chromedriver
//备注:像这个,需要把zip中的driver解压并重命名为2.40-x64-chromedriver(不要带.exe)
at C:\Users\AnXiaole\AppData\Roaming\npm\node_modules\selenium-standalone\lib\check-paths-existence.js:15:20
at FSReqWrap.cb [as oncomplete] (fs.js:312:19)
2
3
4
5
6
7
8
启动了selenium-standalone,在工作目录下运行:run.bat sample/test.spec.js
查看一下测试用例报告:使用浏览器打开,工作目录下的reports\index.html:
# 上传文件
UI Recorder仅支持Native文件上传, 不支持FLASH上传
直接点击“选择文件”按钮或点击“Upload file”, 占位按钮必需要用role或data-role标注为upload
上传的文件必需保存在/uploadfiles/文件夹中。
# 总结
到这里,uirecorder已经安装、录制、回放完毕。
遇到的坑在生成报表的时候一定要注意mocha的版本有时候会不执行mochawesome命令
但是大家如果要用这个工具,一定要明白,此工具的作用在哪里。是做接口测试还是web测试?是做性能测试还是做功能测试?是针对新需求做测试还是针对以往需求做测试?(编者注:这三个问题一定要想明白。)
有人说,用这个工具录制,很麻烦,还不如自己手动做功能测试呢。其实,是因为没有真正明白此工具到底的作用和价值在哪里,说到底,还是没有想明白或者是没有相关上面三个问题。
在这里,我也不做过多说明 ,我是做开发的,可能对测试了解也是皮毛,但是,我还是相信一句话:那些重复的,没有挑战性的工作,一定要想办法交给工具、自动化去完成!工作的意义就是接受挑战并提升自己。
# 录制中禁止如下操作!
1、禁止直接手动修改地址栏中的URL
2、禁止使用TAB切换焦点
3、不要使用双击, WebDriver兼容性不好
4、不要使用鼠标选择部分文本, WebDriver兼容性不好
5、不要手动切换至背景窗口
6、不要点击非关键区域, 仅录制关键步骤
# 参考
修改 下载仓库为淘宝镜像 (opens new window)
selenium-standalone (opens new window)
Macaca 自动化框架 [Python 系列] (opens new window)
UI Recorder 功能详解 (opens new window)
# service测试
# 总结
- 单元测试
- 小的函数与组件
- 接口测试
- 确保数据
- e2e测试
- 确保功能
- ui测试
- 确保样式
- f2etest测试 (opens new window)
- 冒烟测试
- 黑盒测试