# JavaScript与QA测试工程师
# 对开发的称呼:
- QA 测试
- FE 前端
- RD 后端
- OP 运维
- DB 数据库
- DBA 数据库开发
# 单元测试
- 原则:
单一职责,接口抽象,层次分离
- 断言库:
保证最小单元是否正常运行检测方法 能判断是否
- 测试风格
- TDD => 关注所有的功能是否被实现
每一个功能都必须有对应的测试用例
- BDD => 关注整体行为是否符合整体预期
编写的每一行代码都有目的,提供一个全面的测试用例集(国内大部分使用)
# 单元测试框架、单元测试生命周期
见ppt
# 自动化单元测试
# 准备工作
和npm一样,yarn和cnpm也是环境包工具 npm install -g yarn
- 确定package包
npm init -y
- 如果装了一个包,为了防止发生变化报错,在本地加了一个锁,于是有了package-lock.json
- 去掉包(yarn remove xxx)
# 开始
npm init -y
- 新建一个tests/unit/index.js文件,新建一个tests/unit/index.spec.js文件
unit存放所有的单测文件
- 在index.js里面写方法,index.spec.js里面写测试
- 将断言测试环境装进来
使用npm在本地安装
npm install karma --save-dev
save 是在开发的时候使用,编译完还在用,save-dev是在开发的时候使用,编译的时候不使用 或者使用yarn安装
yarn add krama --dev
有一个bin文件夹yarn 有缓存,装的比npmn快
把包装在全局
yarn global add karma-cli
- 发布一个包
npm login
npm publish
- 在package.js里面写测试
script里面"unit" : "karma start" => 单测
- npm run unit就可以直接运行单测文件
- 在有krama的本地中初始化生成karma.conf.js文件
krama init
- jasmine判断一下测试文件(断言)
- 是否用require
- 浏览器
- 是否监听
- 修改karma.conf.js,运行npm run unit
- 报错,继续装依赖(cnpm)
npm install karma-jasmine karma-chrome-launcher jasmine-core --save-dev
- 继续运行,安装
npm install karma-phantomjs-launcher --save-dev
- 运行
- 如果不行,改用chrome,要装chrome的启动器
yarn add karma-chrome-launcher
- 成功之后打开浏览器返回success关掉浏览器
- 代码测试覆盖率检查
yarn add karma-coverage --dev
- 运行之后,把doc中的文件拿出来看结果
# e2e--端对端测试(selenium)
selenium(浏览器自动化测试框架)
selenium-webdriver (opens new window) npm install selenium-webdriver --save
test.spec.js
const {Builder, By, Key, until} = require('selenium-webdriver');
(async function example() {
let driver = await new Builder().forBrowser('firefox').build();
try {
await driver.get('http://www.google.com/ncr');
await driver.findElement(By.name('q'));.sendKeys('webdriver', Key.RETURN);
await driver.wait(until.titleIs('webdriver - Google Search'), 1000);
} finally {
await driver.quit();
}
})();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
- 新建e2e文件夹
- 新建*.spec.js
- 从npm官网中复制
- 从npm官网下载浏览器驱动,放到项目文件根目录中
- package.js
node ./tests/e2e/baidu.spec.js
- 运行
npm run e2e
# e2e--端对端测试(rize)[爬虫]
rize (opens new window) npm install --save-dev @types/puppeteer npm install --save-dev puppeteer rize 或 yarn add --dev puppeteer rize
git.spec.js
rize
.goto('https://github.com/')
.type('input.header-search-input', 'node')
.press('Enter')
.waitForNavigation()
.assertSee('Node.js')
.end() // Don't forget to call `end` function to exit browser!
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
- 新建*.spec.js文件,复制
- 安装
- 运行
node ./tests/e2e/baidu.spec.js
# 测试react单元
"jasmine-core": "^3.4.0",
"jest-dom": "^3.2.2",
"react-dom": "^16.8.6",
"react-scripts": "^3.0.1",
"react-testing-library": "^7.0.1",
1
2
3
4
5
6
2
3
4
5
6
- 新建一个src文件夹,index.js
- 写一个react组件(也是一个单元)
- 写一个测试index.spec.js
- 用jest去测试react单元(facebook)
- unit改成react-script test -env-jsdom
- jest会把tests里的文件都执行了
# f2eTest(UI Recorder)
测试UI PhantomCSS BACKSTOPJS
- engine_script引擎脚本
- html_report ./doc/..
- ci_report ./doc/..
backstop test
运行