(每日一题)自动化测试命令执行的全过程
发表时间:2023-11-15 14:06:30
文章来源:炫佑科技
浏览次数:185
菏泽炫佑科技 菏泽炫佑小程序开发 菏泽炫佑app制作 炫佑科技
(每日一题)自动化测试命令执行的全过程
翻译”:[{“text”:”\n
B. 准备一个需要自动化测试的页面(为方便起见,以下内容将通过*简单的演示进行演示)。\n
\\n\n
// 想要测试的页面index
// index.wxml
class="usermotto">
class="user-motto" bind:tap="tapFn">{{motto}}
// index.js
// 获取应用实例
const app = getApp()
Page({
data: {
motto: 'Hello World',
},
tapFn (e) {
console.log(e,'测试自动化结果')
}
})
// index.wxss
.usermotto {
margin-top: 200px;
text-align: center;
}
\n
\\n\n
C. 在项目中新建一个文件,以 .spec.js 结尾(本文以项目根目录下新建的 index.spce.js 为例),输入类似以下内容的内容(实际过程中根据自己的项目进行修改)。\n
\\n\n
const automator = require('miniprogram-automator')
automator.launch({
cliPath: '/Applications/wechatwebdevtools.app/Contents/MacOS/cli', // 工具 cli 位置,如果你没有更改过默认安装位置,可以忽略此项
projectPath: '/Users/susan.li/files/mini-demo', // 项目文件地址
}).then(async miniProgram => {
const page = await miniProgram.reLaunch('/pages/index/index')
await page.waitFor(500)
const element = await page.$('.user-motto')
console.log(await element.attribute('class'))
await element.tap()
await miniProgram.close()
})
\n
\\n\n
这里需要注意3点:\n
\\n1.修改\n
CLI工具(如果你没有改变微信开发工具的默认安装路径,可以忽略这个项目,如果你改变了安装路径,你需要找到安装路径是什么,然后添加到这里);\n
\\n\n
如果您不确定如何检查软件的安装位置,请单击此链接:/post/...\n
\\n\n
2、修改项目的文件路径(这里推荐绝对路径);\n
\\n\n
3. 在下面的演示中修改你实际想要操作的元素\n
\\n\n
D. 在终端中输入以下命令,将执行自动测试结果。\n
\\n\n
node index.spec.js
\n
\\n\n
下面我们来看看命令执行的整个过程\n
\\n\n
这里需要注意的是,在自动化测试中启动微信开发工具时,要注意右侧【启动自动化端口】是否出现以下内容。\n
\\n\n
\n
\\n\n
接下来,我们看看开发工具是否打印出相关内容\n
\\n\n
\n
\\n\n
*后,如果我们看一下终端,你会看到终端将输出以下内容,这正是你的代码的意图\n
\\n\n
\n
\\n\n
这个 Demo Demo 想要实现的是:通过自动化测试 SDK,模拟用户点击 Hello World 文本(点击操作),看看该方法是否能正常执行\n
\\n\n
\n
\\n\n
:如果我在节点索引.spec.js中遇到以下错误消息,原因是什么?\n
\\n\n
(node:2903) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'attribute' of null
at automator.launch.then (/xxx/index.spec.js:38:29)
at process._tickCallback (internal/process/next_tick.js:68:7)
(node:2903) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 2)
(node:2903) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
\n
\\n\n
在这一点上,小程序自动化测试只是一个开始,所以请继续阅读\n
\\n\n
B. 运行以下命令以全局安装 Jest 框架\n
:\\n\n
npm i jest -g
\n
\\n\n
在安装过程中,遇到以下错误消息:\n
\\n\n
\n
\\n根据错误\n
提示符,权限应该不够,所以执行如下命令(实际进程开发可以根据自己的错误进行处理)。\n
\\n\n
// 看看命令行、应该会提示你要输入密码。
sudo npm i jest -g
\n
\\n\n
\n
\\n\n
C. 在工具安全设置中启用CLI/HTTP调用功能(与2.4相同)。\n
\\n\n
至此,Jest 测试框架已经搭建完成,可以继续下一步了\n
\\n\n
4.2 Jest 初体验\n
\\n\n
A. 编写脚本(目标:自动启动微信开发工具>打开项目)。\n
\\n\n
const automator = require('miniprogram-automator')
describe('index', () => {
let miniProgram
let page
beforeAll(async () => {
miniProgram = await automator.launch({
projectPath: '/Users/susan.li/files/shop-mini',
cliPath: '/Applications/wechatwebdevtools.app/Contents/MacOS/cli'
})
page = await miniProgram.reLaunch('/pages/index/index')
await page.waitFor(5000)
}, 30000)
afterAll(async () => {
await miniProgram.close()
})
})
\n
\\n\n
B. 在工具的安全设置中启用CLI/HTTP调用功能(与2.4相同)。\n
\\n\n
三.关闭后,重新启动小程序到主页\n
\\n\nD. 在工具
安全设置中关闭CLI/HTTP调用功能(与2.4相同),关闭微信开发工具\n
\\n\n
E.在项目的根目录中,执行以下脚本\n
:\\n\n
jest index.spec.js
\n
\\n\n
哎呀,错了,看看\n
\\n\n
\n
\\n\n
解决方案:在项目目录下执行以下命令。\n
\\n\n
npm init
\n
\\n\n
安装完成后,项目根目录下会有更多的.json文件\n
\\n\n
\n
\\n\n
然后我们再做一步E:哎呀,又错了微信小程序开发详解pdf(每日一题)自动化测试命令执行的全过程,看\n
\\n\n
\n
\\n\n
错误解析:脚本应至少包含一个测试,即类似 it('xxx', () => ('xxx').toBe('xxx')))。\n
\\n\n
解决方案:添加至少一个测试用例(下面的示例演示了模拟文本的点击事件)。\n
\\n\n
*终的脚本代码如下:\n
\\n\n
const automator = require('miniprogram-automator')
describe('index', () => {
let miniProgram
let page
beforeAll(async () => {
miniProgram = await automator.launch({
projectPath: '/Users/susan.li/files/mini-demo',
cliPath: '/Applications/wechatwebdevtools.app/Contents/MacOS/cli'
})
page = await miniProgram.reLaunch('/pages/index/index')
await page.waitFor(5000)
}, 30000)
it('点击hello world文本', async () => {
await page.waitFor(3000)
// 通过.user-motto选择目标元素
const tabbar = await page.$('.user-motto')
tabbar.tap()
})
// afterAll(async () => {
// await miniProgram.close()
// })
})
\n
\\n\n
然后我们再做一步E:我们会发现开发工具下有一个tap方法\n
\\n\n
\n
\\n\n
脚本执行完毕后,终端会输出以下内容,并告知执行结果:\n
\\n\n
\n
\\n\n
4.3 高级游戏玩法\n
\\n\n
以上做法需要在代码中注入微信工具的安装路径&开发项目路径,不同项目成员内部的配置是不同的\n
\\n即项目\n
本身只维护测试用例脚本,至于在哪里执行脚本,执行的项目目录是什么,由开发来决定\n
\\n使用命令打开\n
微信开发创工具开发版本,连接自动化接口。 A. 找到微信开发工具的安装目录,在目录终端中输入以下命令\n
\\n\n
// 进入微信开发者工具的安装目录(笔者的目录结构是: /Applications/wechatwebdevtools.app) -> /微信开发者工具安装目录/Contents/MacOS
cd /Applications/wechatwebdevtools.app/Contents/MacOS
// 找到要执行自动化测试的目录(笔者项目路径是:/Users/susan.li/files/mini-demo)
cli --auto /Users/susan.li/files/mini-demo --auto-port 9420
\n
\\n提示:自动化端口独立于服务端口(\n
52968 在 开发 Tools -> -> -> 中打印出来,实际上是服务器端口);我们需要在终端上看到以下消息,表示自动化端口(9420)已成功打开\n
\\n\n
// 要看到这句话、这句话很关键!!!!!!
✔ Open project with automation enabled success /Users/susan.li/files/mini-demo
\n
\\n\n
我们来看一下实际效果图:\n
\\n\n
\n
\\n\n
命令运行成功后,会自动打开开发工具和项目,右上角会显示如下提示\n
\\n\n
\n
\\n\n
B. 找到自动化测试项目的根目录,执行以下命令安装SDK(如果已安装,可以忽略)。\n
\\n\n
// 若需要安装、安装命令如下:
npm i miniprogram-automator --save-dev
\n
\\n\n
C. 引入自动化测试SDK,在脚本中连接自动化操作端口\n
\\n\n
const automator = require('miniprogram-automator');
const miniProgram = automator.connect({
wsEndpoint: 'ws://localhost:9420',
})
\n
\\n\n
D、根据业务需求编写脚本并执行相关操作\n
\\n\n
const automator = require('miniprogram-automator')
describe('index', () => {
let miniProgram
// 运行测试前调用、启用自动化端口9420
beforeAll(async () => {
miniProgram = await automator.connect({
wsEndpoint: 'ws://localhost:9420',
})
})
// 运行测试后调用
afterAll(() => {
miniProgram.disconnect();
})
// 自动化测试内容
it('点击hello world文本', async () => {
// 获取页面相关信息
const page = await miniProgram.reLaunch('/pages/index/index')
// 通过.user-motto选择目标元素
const tabbar = await page.$('.user-motto')
// 模拟tap事件
tabbar.tap()
})
})
\n
\\n\n
E.脚本准备就绪后,运行以下命令以执行自动测试(保持微笑开发工具处于打开状态。\n
\\n\n
jest index.spec.js
\n
\\n\n
如果测试通过,终端会有如下PASS提示,如图所示:\n
\\n\n
\n
\\n\n
5.写在*后\n
\\n\n
作为电子商务小程序,它保证了线上业务的稳定运行,要求每个页面、每个模块在异常情况下进行适当的处理,确保给用户*基本的用户体验。\n
\\n\n
本文只是自动化测试的初学者,将结合实际业务进一步总结和演示。\n
\\n\n
如有错误,请留言,我们会及时纠正!\n
\\n\n
如果您觉得它有帮助,请点赞或收藏它!\n“,”to“:”en“,”“:{”“:[47,14,90,14,19,83,39,30,29,28,5,14,22,61,14,34,14,46,15,72,15,48,15,37,27,15,23,15,54,15,15,43,35,19,43,15,43,28,57,26,15,29,15,27,15,32,15,42,15,94,40,5,18,15,46,15,33,15,16,72,57,42,41,15,15,15,15,48,15,36,15,31,15,15,15,15,15,67,5,39,5,29,28
],”“:[143,14,267,14,40,266,107,83,77,98,5,14,67,197,14,74,14,149,15,193,15,94,15,70,76,15,85,15,184,15,15,92,99,36,94,15,99,56,125,78,15,35,15,69,15,112,15,69,15,125,106,5,44,15,97,15,115,15,29,185,188,144,123,15,286,15,51,15,170,15,154,15,102,15,83,15,123,15,101,15,27,244,5,142,5,86,61]}}]}]\n","to":"zh-Hans","":{"":[31,138,6,10,6,263,6,10,6,36,8,23,236,6,103,6,79,6,73,6,98,6,10,6,63,6,193,6,10,6,70,6,10,6,145,6,11,6,189,6,11,6,90,6,11,6,66,6,71,7,11,6,81,6,11,28,157,6,11,6,11,6,88,6,95,6,32,6,90,6,11,6,95,6,6,46,6,121,6,6,67,7,11,6,31,6,11,6,65,6,11,6,108,6,11,6,65,6,11,6,121,6,106,6,40,6,11,6,93,6,11,6,111,6,11,6,25,6,181,26,163,57,211,6,11,71,94,122,6,11,6,47,6,11,6,166,6,11,6,150,6,11,6,98,6,11,6,79,6,11,6,6,113,6,11,6,97,6,11,6,23,6,244,6,142,6,83,6,58,315,288],"":[22,47,6,10,6,93,6,10,6,12,8,3,77,6,38,6,26,6,26,6,28,6,10,6,20,6,57,6,10,6,29,6,10,6,41,6,11,6,76,6,11,6,37,6,11,6,35,6,26,7,11,6,20,6,11,10,49,6,11,6,11,6,38,6,31,6,16,6,36,6,11,6,39,5,6,18,6,50,5,6,16,7,11,6,12,6,11,6,22,6,11,6,28,6,11,6,22,6,11,6,63,6,39,6,14,6,11,6,36,6,11,6,30,6,11,6,14,6,52,9,47,12,66,6,11,21,69,34,6,11,6,16,6,11,6,39,6,11,6,45,6,11,6,31,6,11,6,23,6,11,5,6,42,6,11,6,29,6,11,6,10,6,70,6,34,6,21,6,21,303,287]}}]}]