• uni-app项目自动化测试


    1.使用uni-app官网中的自动化测试方式

    uni-app自动化测试@about | uni-app官网创建项目

    1. $ npm install -g @vue/cli# 全局安装vue-cli
    2. $ cd ... // 切换到工程保存目录
    3. $ vue create -p dcloudio/uni-preset-vue#alpha my-project//也可以使用vue create -p dcloudio/uni-preset-vue my-project
    4. $ cd my-project
    5. $ npm install -D jest-environment-node@26.5.2
    6. $ npm install -S puppeteer
    7. $ npm install -S cross-env adbkit node-simctl  playwright @playwright/test

    (如果下载依赖超时,使用cnpm)

    package.json内容如下(如果一直报错,可以删除node_modules文件夹重新拉取所有依赖)

    注意:如果执行测试用例,报错.waitFor is not Function 大概率是有依赖没安装

    1. {
    2. "name": "my-project3",
    3. "version": "0.1.0",
    4. "private": true,
    5. "scripts": {
    6. "serve": "npm run dev:h5",
    7. "build": "npm run build:h5",
    8. "build:app-plus": "cross-env NODE_ENV=production UNI_PLATFORM=app-plus vue-cli-service uni-build",
    9. "build:custom": "cross-env NODE_ENV=production uniapp-cli custom",
    10. "build:h5": "cross-env NODE_ENV=production UNI_PLATFORM=h5 vue-cli-service uni-build",
    11. "build:mp-360": "cross-env NODE_ENV=production UNI_PLATFORM=mp-360 vue-cli-service uni-build",
    12. "build:mp-alipay": "cross-env NODE_ENV=production UNI_PLATFORM=mp-alipay vue-cli-service uni-build",
    13. "build:mp-baidu": "cross-env NODE_ENV=production UNI_PLATFORM=mp-baidu vue-cli-service uni-build",
    14. "build:mp-jd": "cross-env NODE_ENV=production UNI_PLATFORM=mp-jd vue-cli-service uni-build",
    15. "build:mp-kuaishou": "cross-env NODE_ENV=production UNI_PLATFORM=mp-kuaishou vue-cli-service uni-build",
    16. "build:mp-lark": "cross-env NODE_ENV=production UNI_PLATFORM=mp-lark vue-cli-service uni-build",
    17. "build:mp-qq": "cross-env NODE_ENV=production UNI_PLATFORM=mp-qq vue-cli-service uni-build",
    18. "build:mp-toutiao": "cross-env NODE_ENV=production UNI_PLATFORM=mp-toutiao vue-cli-service uni-build",
    19. "build:mp-weixin": "cross-env NODE_ENV=production UNI_PLATFORM=mp-weixin vue-cli-service uni-build",
    20. "build:mp-xhs": "cross-env NODE_ENV=production UNI_PLATFORM=mp-xhs vue-cli-service uni-build",
    21. "build:quickapp-native": "cross-env NODE_ENV=production UNI_PLATFORM=quickapp-native vue-cli-service uni-build",
    22. "build:quickapp-webview": "cross-env NODE_ENV=production UNI_PLATFORM=quickapp-webview vue-cli-service uni-build",
    23. "build:quickapp-webview-huawei": "cross-env NODE_ENV=production UNI_PLATFORM=quickapp-webview-huawei vue-cli-service uni-build",
    24. "build:quickapp-webview-union": "cross-env NODE_ENV=production UNI_PLATFORM=quickapp-webview-union vue-cli-service uni-build",
    25. "dev:app-plus": "cross-env NODE_ENV=development UNI_PLATFORM=app-plus vue-cli-service uni-build --watch",
    26. "dev:custom": "cross-env NODE_ENV=development uniapp-cli custom",
    27. "dev:h5": "cross-env NODE_ENV=development UNI_PLATFORM=h5 vue-cli-service uni-serve",
    28. "dev:mp-360": "cross-env NODE_ENV=development UNI_PLATFORM=mp-360 vue-cli-service uni-build --watch",
    29. "dev:mp-alipay": "cross-env NODE_ENV=development UNI_PLATFORM=mp-alipay vue-cli-service uni-build --watch",
    30. "dev:mp-baidu": "cross-env NODE_ENV=development UNI_PLATFORM=mp-baidu vue-cli-service uni-build --watch",
    31. "dev:mp-jd": "cross-env NODE_ENV=development UNI_PLATFORM=mp-jd vue-cli-service uni-build --watch",
    32. "dev:mp-kuaishou": "cross-env NODE_ENV=development UNI_PLATFORM=mp-kuaishou vue-cli-service uni-build --watch",
    33. "dev:mp-lark": "cross-env NODE_ENV=development UNI_PLATFORM=mp-lark vue-cli-service uni-build --watch",
    34. "dev:mp-qq": "cross-env NODE_ENV=development UNI_PLATFORM=mp-qq vue-cli-service uni-build --watch",
    35. "dev:mp-toutiao": "cross-env NODE_ENV=development UNI_PLATFORM=mp-toutiao vue-cli-service uni-build --watch",
    36. "dev:mp-weixin": "cross-env NODE_ENV=development UNI_PLATFORM=mp-weixin vue-cli-service uni-build --watch",
    37. "dev:mp-xhs": "cross-env NODE_ENV=development UNI_PLATFORM=mp-xhs vue-cli-service uni-build --watch",
    38. "dev:quickapp-native": "cross-env NODE_ENV=development UNI_PLATFORM=quickapp-native vue-cli-service uni-build --watch",
    39. "dev:quickapp-webview": "cross-env NODE_ENV=development UNI_PLATFORM=quickapp-webview vue-cli-service uni-build --watch",
    40. "dev:quickapp-webview-huawei": "cross-env NODE_ENV=development UNI_PLATFORM=quickapp-webview-huawei vue-cli-service uni-build --watch",
    41. "dev:quickapp-webview-union": "cross-env NODE_ENV=development UNI_PLATFORM=quickapp-webview-union vue-cli-service uni-build --watch",
    42. "info": "node node_modules/@dcloudio/vue-cli-plugin-uni/commands/info.js",
    43. "serve:quickapp-native": "node node_modules/@dcloudio/uni-quickapp-native/bin/serve.js",
    44. "test:android": "cross-env UNI_PLATFORM=app-plus UNI_OS_NAME=android jest -i",
    45. "test:h5": "cross-env UNI_PLATFORM=h5 jest -i",
    46. "test:ios": "cross-env UNI_PLATFORM=app-plus UNI_OS_NAME=ios jest -i",
    47. "test:mp-baidu": "cross-env UNI_PLATFORM=mp-baidu jest -i",
    48. "test:wx": "cross-env UNI_PLATFORM=mp-weixin jest -i"
    49. },
    50. "dependencies": {
    51. "@dcloudio/uni-app-plus": "^2.0.1-alpha-35220220719002",
    52. "@dcloudio/uni-h5": "^2.0.1-alpha-35220220719002",
    53. "@dcloudio/uni-helper-json": "*",
    54. "@dcloudio/uni-i18n": "^2.0.1-alpha-35220220719002",
    55. "@dcloudio/uni-mp-360": "^2.0.1-alpha-35220220719002",
    56. "@dcloudio/uni-mp-alipay": "^2.0.1-alpha-35220220719002",
    57. "@dcloudio/uni-mp-baidu": "^2.0.1-alpha-35220220719002",
    58. "@dcloudio/uni-mp-jd": "^2.0.1-alpha-35220220719002",
    59. "@dcloudio/uni-mp-kuaishou": "^2.0.1-alpha-35220220719002",
    60. "@dcloudio/uni-mp-lark": "^2.0.1-alpha-35220220719002",
    61. "@dcloudio/uni-mp-qq": "^2.0.1-alpha-35220220719002",
    62. "@dcloudio/uni-mp-toutiao": "^2.0.1-alpha-35220220719002",
    63. "@dcloudio/uni-mp-vue": "^2.0.1-alpha-35220220719002",
    64. "@dcloudio/uni-mp-weixin": "^2.0.1-alpha-35220220719002",
    65. "@dcloudio/uni-mp-xhs": "^2.0.1-alpha-35220220719002",
    66. "@dcloudio/uni-quickapp-native": "^2.0.1-alpha-35220220719002",
    67. "@dcloudio/uni-quickapp-webview": "^2.0.1-alpha-35220220719002",
    68. "@dcloudio/uni-stat": "^2.0.1-alpha-35220220719002",
    69. "@playwright/test": "^1.23.4",
    70. "@vue/shared": "^3.0.0",
    71. "adbkit": "^2.11.1",
    72. "core-js": "^3.6.5",
    73. "cross-env": "^7.0.3",
    74. "flyio": "^0.6.2",
    75. "node-simctl": "^7.1.0",
    76. "playwright": "^1.23.4",
    77. "regenerator-runtime": "^0.12.1",
    78. "vue": "^2.6.11",
    79. "vuex": "^3.2.0"
    80. },
    81. "devDependencies": {
    82. "@babel/runtime": "~7.17.9",
    83. "@dcloudio/types": "^3.0.4",
    84. "@dcloudio/uni-automator": "^2.0.1-alpha-35220220719002",
    85. "@dcloudio/uni-cli-i18n": "^2.0.1-alpha-35220220719002",
    86. "@dcloudio/uni-cli-shared": "^2.0.1-alpha-35220220719002",
    87. "@dcloudio/uni-migration": "^2.0.1-alpha-35220220719002",
    88. "@dcloudio/uni-template-compiler": "^2.0.1-alpha-35220220719002",
    89. "@dcloudio/vue-cli-plugin-hbuilderx": "^2.0.1-alpha-35220220719002",
    90. "@dcloudio/vue-cli-plugin-uni": "^2.0.1-alpha-35220220719002",
    91. "@dcloudio/vue-cli-plugin-uni-optimize": "^2.0.1-alpha-35220220719002",
    92. "@dcloudio/webpack-uni-mp-loader": "^2.0.1-alpha-35220220719002",
    93. "@dcloudio/webpack-uni-pages-loader": "^2.0.1-alpha-35220220719002",
    94. "@vue/cli-plugin-babel": "~4.5.19",
    95. "@vue/cli-service": "~4.5.19",
    96. "babel-plugin-import": "^1.11.0",
    97. "cross-env": "^7.0.2",
    98. "jest": "^25.4.0",
    99. "jest-environment-node": "^26.5.2",
    100. "mini-types": "*",
    101. "miniprogram-api-typings": "*",
    102. "postcss-comment": "^2.0.0",
    103. "puppeteer": "^15.4.0",
    104. "vue-template-compiler": "^2.6.11"
    105. },
    106. "browserslist": [
    107. "Android >= 4.4",
    108. "ios >= 9"
    109. ],
    110. "resolutions": {
    111. "@babel/runtime": "~7.17.9"
    112. },
    113. "uni-app": {
    114. "scripts": {}
    115. }
    116. }

    jest.config.js

    注意:微信小程序 的port不设置,如果设置了大概率会报错Failed to launch wechat web devTools, please make sure http port is open

    1. module.exports = {
    2.   globalTeardown: '@dcloudio/uni-automator/dist/teardown.js',
    3.   testEnvironment: '@dcloudio/uni-automator/dist/environment.js',
    4.   testEnvironmentOptions: {
    5.     "mp-weixin": {
    6.       // port: 33489, // 默认 9420
    7.       account: ""// 测试账号
    8.       url:'D:/my-project3/dist/dev/mp-weixi',
    9.       args: ""// 指定开发者工具参数
    10.       cwd: ""// 指定开发者工具工作目录
    11.       launch: true// 是否主动拉起开发者工具
    12.       teardown: "disconnect"// 可选值 "disconnect"|"close" 运行测试结束后,断开开发者工具或关闭开发者工具
    13.       remote: false// 是否真机自动化测试
    14.       executablePath: "D:/桌面助手/微信web开发者工具/cli.bat"// 开发者工具cli路径,默认会自动查找,  windows: C:/Program Files (x86)/Tencent/微信web开发者工具/cli.bat", mac: /Applications/wechatwebdevtools.app/Contents/MacOS/cli
    15.     },
    16.   },
    17.   // cli --auto D:\my-project3\dist\dev\mp-weixin --auto-port 33489
    18.   testTimeout: 35000,
    19.   reporters: [
    20.     'default'
    21.   ],
    22.   watchPathIgnorePatterns: ['/node_modules/''/.git/'],
    23.   moduleFileExtensions: ['js''json'],
    24.   rootDir: __dirname,
    25.   testMatch: ['/src/**/*test.[jt]s?(x)'],
    26.   testPathIgnorePatterns: ['/node_modules/']
    27. }

    测试用例index.test.js

    注意点:微信小程序需要设置一定的延时时间,是为了小程序打开开发者工具时间,否则容易超时链接不上报错Async callback was not invoked within the 5000ms timeout specified by jest.setTimeout

    1. describe('pages/index/index.vue', () => {
    2. let page
    3. beforeAll(async () => {
    4. // 重新reLaunch至首页,并获取首页page对象(其中 program 是uni-automator自动注入的全局对象)
    5. page = await program.reLaunch('/pages/index/index')
    6. await page.waitFor(2000)
    7. },10000)//此处设置延时是为了小程序打开开发者工具时间,否则容易超时链接不上报错
    8. it('测试下内容', async () => {
    9. // 检测首页u-link的文本内容
    10. console.log(await (await page.$('.title')).text());
    11. expect(await (await page.$('.title')).text()).toBe('Hello')
    12. })
    13. })

    2.uni-app项目使用微信小程序自动化测试方式

    官网文档地址 
    创建好uni-app项目后 安装miniprogram-automator

    执行 npm i miniprogram-automator -D

    创建 openWeixin.js文件

    1. const automator = require('miniprogram-automator')
    2. automator.launch({
    3. cliPath: 'D:/**/微信web开发者工具/cli.bat', // 工具 cli 位置,如果你没有更改过默认安装位置,可以忽略此项
    4. projectPath: 'D:/**/dist/dev/mp-weixin', // 项目文件地址
    5. }).then(async miniProgram => {
    6. const page = await miniProgram.reLaunch('/pages/decorationPages/home/index')
    7. await page.waitFor(15000)
    8. const element = await page.$('.title')
    9. console.log(await element.attribute('class'))
    10. await element.tap()
    11. await miniProgram.close()
    12. })

    之后执行  node openWeixin.js 
     

  • 相关阅读:
    composer install和update的区别
    js斐波那契数列求和
    20世纪最佳12部学术专著
    并行Stream的性能测试
    1455. 检查单词是否为句中其他单词的前缀
    java计算机毕业设计springboot+vue软件工程课程建设学习网站
    盘点49个Python网站项目Python爱好者不容错过
    JavaScript 数组字符串方法
    Android源码分析 - Framework层的Binder(客户端篇)
    物联网各类数据如何轻松获取?秘诀就在定制文件推送服务
  • 原文地址:https://blog.csdn.net/lyj168997/article/details/125914131