一、单元测试
单元测试是对小程序不同模块、函数等独立单元进行测试,保证其有良好的功能和接口,可以提高测试的效率,并可及早发现代码的错误。
1. 测试框架
小程序的测试框架官方提供了一套名为「mina」的测试框架。mina是一款轻量、易用、灵活的小程序测试框架。mina提供了测试工具包(如WXML SnapshotTester)和测试用例BLI(编写方式形同HTML),且mina测试框架支持持续集成。使用mina可方便的实现指定目标代码文件的覆盖。
# 测试框架安装
npm install mina-test-framework -D
2. 测试实例
以计算器小程序为例进行单元测试,测试实例包括:输入数字、加法计算、减法计算
// 加法计算测试
var calc = require('../../utils/calc.js')
test('add', function() {
expect(cal.add(1,2)).toBe(3)
expect(cal.add(-1,2)).toBe(1)
})
// 减法计算测试
test('minus', function() {
expect(cal.minus(1,2)).toBe(-1)
expect(cal.minus(-1,2)).toBe(-3)
})
二、性能测试
性能测试的主要目的是衡量小程序在特定条件下的性能,并发现可能的瓶颈。性能测试可以在小程序进行开发的各个阶段进行,也能恰当地掌握不同平台的性能信息,为开发者提供数据支持,从而优化小程序。
1. 测试平台
小程序性能测试需要依赖多个测试平台。目前市面上常用的测试平台包括Top App、Rabbit Preload等。
2. 测试指标
对于小程序性能测试来说,可以考虑四个方面的指标处理: 性能测试指标1:响应时间,即完成任务的平均时间。小程序响应时间受网络状况、服务器资源、客户端硬件等因素影响。 性能测试指标2:并发能力,即同时支持的请求数量。虽然每个客户每秒发送的请求数量通常靠近或接近1秒,但是很多小程序都需要支持大量的并发请求。 性能测试指标3:稳定性,即小程序在不同时段和场景下的表现。包括短时间的高并发和持续时间较长的压力测试,以及小程序的过载估计,稳定性的测试反映出了小程序系统级能力。 性能测试指标4:吞吐量,小程序系统能够承载的最大请求数量。
三、界面测试
界面测试是小程序开发的重要测试环节,小程序的良好交互体验需要优秀的界面。在界面测试中,需要考虑以下几个方面。
1. UI自动化测试工具
目前市场上较为成熟的小程序UI自动化工具仍较少,国内常用的UI自动化工具包括「UIAutomator」、「Appium」、「Webdriver.io」等。
2. 编写测试用例
为保证测试流程的准确性和稳定性,在编写测试用例时需要注意以下几个方面: 测试对象: 小程序的每个页面对应一个wxml模板文件和wxml页面文件。在编写测试用例的时候一定要注意测试对象。 执行时序: 针对交互事件进行测试,通常是UI元素组件的点击或者滑动。 测试数据: 通过模拟输入数据进行测试,比如输入一组符合格式的用户名卡号等。
四、安全测试
安全测试是小程序开发的重要测试环节,小程序涉及到用户的隐私、财产等重要信息,在开发之初,就应该考虑安全性及其测试。
1. 安全测试类型
渗透测试: 渗透测试通过对小程序进行模拟攻击、扫描等,发现可能的安全漏洞。 代码审查: 对小程序代码进行安全检查,控制程序中的业务逻辑与安全策略的一致性、安全配置的正确性等。 加固处理: 对小程序的漏洞进行修补。
// 常见小程序的漏洞处理
function escape(str) {
str.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'")
.replace(/`/g, "`")
return str
}
2. 重要接口测试
检测小程序的重要接口是否可正常使用,如登陆API是否可正常使用。
// 微信小程序接口测试例子
import * as APIs from '../../../api/api'
import fetchMock from 'fetch-mock'
fetchMock.mock(APIs.MOCK_API_URL + '/wechat/hotel', 'POST', {
data: true,
code: 200,
message: '查询成功'
})
APIs.searchHotel('xxx', 'xxxx').then(resp => {
expect(resp.data).toBe(true)
})