0530-3433334

网站建设 APP开发 小程序

知识

分享你我感悟

您当前位置>首页 >> 知识 >> 小程序

(每日一题)自动化测试命令执行的全过程

发表时间: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]}}]}]

炫佑科技专注互联网开发小程序开发-app开发-软件开发-网站制作等

相关案例查看更多