微信小程序自动化测试官方地址:
https://developers.weixin.qq.com/miniprogram/dev/devtools/auto/quick-start.html
微信官方使用的是jest作为测试框架进行的演示,因为自己对jest不熟,平时使用的测试框架是karma+jasmine,所以自己捣鼓了一下午,使用jasmine搭建了微信小程序自动化测试框架,供大家参考。文中如有纰漏,请不吝赐教。
1. 首先在自己的小程序下使用 npm init
转变为node项目,这样我们就可以使用npm工具进行打包工具的下载。
2. 安装小程序自动化SDK:
npm i miniprogram-automator --save-dev
3. 小程序开启cli/http调用功能,位置:微信开发者工具->设置->安全设置->服务端口选择开启
4. 安装jasmine:npm i jasmine --save-dev
(这里安装在本地,你也可以全局安装)
- 初始化项目
jasmine init
,将会生成一下目录:
6. 在spec目录下添加测试脚本:
test.spec.js
const automator = require('miniprogram-automator')
describe('index', () => {
originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
jasmine.DEFAULT_TIMEOUT_INTERVAL = 100000
let miniProgram
let page
beforeAll(async (done) => {
miniProgram = await automator.launch({
cliPath: 'path/to/cli', // 工具 cli 位置,如果你没有更改过默认安装位置,可以忽略此项
projectPath: 'path/to/project', // 项目文件地址
})
page = await miniProgram.reLaunch('/pages/index/index')
await page.waitFor(5000)
done()
})
afterAll(async () => {
await miniProgram.close()
jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;
})
it('desc', async (done) => {
const desc = await page.$$('.intro_index')
expect(desc.length).toBe(4)
expect(await desc[0].text()).toContain('xxxxxx')
done()
})
it('button', async (done) => {
const lists = await page.$('.login_redirect')
expect(await lists.text()).toContain('xxxxxx')
done()
})
})
这里有一点需要澄清一下,如果你的微信开发者工具没有安装在默认目录下面,请更改cliPath的地址,projectPath最好也要改为你实际项目的地址
7. 执行 node node_module/jasmine/bin/jasmine.js
,如果报时间超时的问题,请修改jasmine.DEFAULT_TIMEOUT_INTERVAL
的值,因为众所周知的问题,建议大家把这个时间改长一点。
到这里,jsamine就已经集成好了,但因为自己强迫症在作祟,又做了以下修改:
1. 更改package.json
文件,修改
"scripts": {
"test": "node node_modules/jasmine/bin/jasmine.js"
}
这样每次进行测试的话直接调用npm test
就可以了
2. 添加jasmine-spec-reporter的支持。
因为在cli中正确信息只显示小绿点,看惯了karma的提示,很不爽,于是就更改了显示问题
1)npm install jasmine-spec-reporter --save-dev
安装依赖
2)spec/helpers文件目录下面添加reporter.js,代码如下:
const SpecReporter = require('jasmine-spec-reporter').SpecReporter;
jasmine.getEnv().clearReporters(); // remove default reporter logs
jasmine.getEnv().addReporter(new SpecReporter({ // add jasmine-spec-reporter
spec: {
displayPending: true
}
}));
好了,现在在你的shell中启动npm test就可以看到测试啦。
其他遇到的问题:
jasmine异步调用的问题:
beforeAll,afterAll, it 等有需要用到异步调用的地方首要添加done
参数,其次在调用完毕的地方执行防范done()
即可,具体用法请参考官方文档
网友评论