diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml new file mode 100644 index 0000000..857ce21 --- /dev/null +++ b/.github/workflows/gh-pages.yml @@ -0,0 +1,25 @@ +name: Deploy + +on: + push: + branches: + - main + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v3 + with: + node-version: 18 + - run: cd docs/;bash docs_env.sh + + - name: Build + run: export VITE_BASE="/youqu/";pnpm run build + + - name: Deploy + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: docs/.vitepress/dist \ No newline at end of file diff --git a/README.md b/README.md index 29b722b..8ec40ac 100644 --- a/README.md +++ b/README.md @@ -9,9 +9,11 @@ -------------- -**[YouQu3]()** 旨在成为下一代 Linux 自动化测试框架,全新的插件化及模块化功能,带来全新的使用效果。 +文档: + +-------------- -[YouQu3架构设计.md](docs/YouQu3架构设计.md) +**[YouQu3]()** 旨在成为下一代 Linux 自动化测试框架,全新的插件化及模块化功能,带来全新的使用效果。 ## [特性]() @@ -56,14 +58,14 @@ pip install youqu3[http] ## [YouQu3 插件生态]() -| **序号** | YouQu3 插件名称 | 说明 | +| 序号(是否可用) | YouQu3 插件名称 | 说明 | | :----------------------------------------------------------: | ------------------------------------ | ------------------------------------ | -| 1 | [youqu-dogtail](https://github.com/funny-dream/youqu-dogtail) | 属性定位插件 | -| 2 | [youqu-imagecenter-rpc](https://github.com/funny-dream/youqu-imagecenter-rpc) | 基于 RPC 服务的图像识别插件 | -| 3 | [youqu-mousekey](https://github.com/funny-dream/youqu-mousekey) | 键鼠操作插件 | -| 4 | [pytest-youqu-playwright](https://github.com/funny-dream/pytest-youqu-playwright) | 基于 Playwright 的 Web UI 自动化插件 | -| 5 | [funnylog](https://linuxdeepin.github.io/funnylog/) | 全自动日志插件 | -| 6 | [pdocr-rpc](https://linuxdeepin.github.io/pdocr-rpc/) | 基于 RPC 服务的 OCR 识别插件 | -| 7 | [pytest-mark-manage](https://github.com/funny-dream/pytest-mark-manage) | 用例标签化管理插件 | -| 8 | [wdotool](https://github.com/funny-dream/wdotool) | Wayland下完美的键鼠工具 | +| 1 ☑ | [youqu-dogtail](https://github.com/funny-dream/youqu-dogtail) | 属性定位插件 | +| 2 ☐ | [youqu-imagecenter-rpc](https://github.com/funny-dream/youqu-imagecenter-rpc) | 基于 RPC 服务的图像识别插件 | +| 3 ☑ | [youqu-mousekey](https://github.com/funny-dream/youqu-mousekey) | 键鼠操作插件 | +| 4 ☐ | [pytest-youqu-playwright](https://github.com/funny-dream/pytest-youqu-playwright) | 基于 Playwright 的 Web UI 自动化插件 | +| 5 ☑ | [funnylog](https://linuxdeepin.github.io/funnylog/) | 全自动日志插件 | +| 6 ☑ | [pdocr-rpc](https://linuxdeepin.github.io/pdocr-rpc/) | 基于 RPC 服务的 OCR 识别插件 | +| 7 ☑ | [pytest-mark-manage](https://github.com/funny-dream/pytest-mark-manage) | 用例标签化管理插件 | +| 8 ☐ | [wdotool](https://github.com/funny-dream/wdotool) | Wayland 下完美的键鼠工具 | diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts new file mode 100644 index 0000000..45e425a --- /dev/null +++ b/docs/.vitepress/config.mts @@ -0,0 +1,90 @@ +import {defineConfig} from 'vitepress' +import {withMermaid} from "vitepress-plugin-mermaid"; +import timeline from "vitepress-markdown-timeline"; +import {version} from "../../package.json" + +// https://vitepress.dev/reference/site-config +export default withMermaid( + defineConfig({ + base: process.env.VITE_BASE, + lang: 'zh-CN', + title: "YouQu3 | 下一代Linux自动化测试框架", + description: "使用简单且功能强大的自动化测试框架", + head: [ + ['meta', {name: 'referrer', content: 'no-referrer-when-downgrade'}], + ['link', {rel: 'icon', href: `${process.env.VITE_BASE || '/'}favicon.ico`}], + ], + vite: { + publicDir: "assets", + }, + markdown: { + config: (md) => { + md.use(timeline) + } + }, + + themeConfig: { + // https://vitepress.dev/reference/default-theme-config + siteTitle: "YouQu3", + nav: [ + {text: '首页', link: '/index'}, + {text: '设计', link: '/设计/YouQu3架构设计规划'}, + { + text: '插件', items: [ + {text: "日志系统 | funnylog", link: "https://linuxdeepin.github.io/funnylog/"}, + {text: "文字识别 | pdocr-rpc", link: "https://linuxdeepin.github.io/pdocr-rpc/"}, + ] + }, + ], + + sidebar: { + "/设计/": [ + { + text: "框架设计", + collapsed: false, + items: [ + {text: "YouQu3架构设计规划", link: "/设计/YouQu3架构设计规划"}, + {text: "APP工程设计方案", link: "/设计/APP工程设计方案"}, + ] + }, + ], + }, + search: { + provider: 'local' + }, + ignoreDeadLinks: true, + // ========================================================= + logo: {src: '/logo.png', width: 26, height: 30}, + socialLinks: [ + {icon: 'github', link: 'https://github.com/funny-dream/youqu3'} + ], + footer: { + copyright: `版权所有 © 2024-${new Date().getFullYear()} 统信软件` + }, + //大纲显示2-3级标题 + outline: [2, 4], + //大纲顶部标题 + outlineTitle: '当前页大纲', + + docFooter: { + prev: '上一页', + next: '下一页' + }, + + lastUpdated: { + text: '最后更新于', + formatOptions: { + dateStyle: 'short', + timeStyle: 'medium' + } + }, + + langMenuLabel: '多语言', + returnToTopLabel: '回到顶部', + sidebarMenuLabel: '菜单', + darkModeSwitchLabel: '主题', + lightModeSwitchTitle: '切换到浅色模式', + darkModeSwitchTitle: '切换到深色模式' + }, + }) +); diff --git a/docs/.vitepress/theme/components/PageInfo.vue b/docs/.vitepress/theme/components/PageInfo.vue new file mode 100644 index 0000000..657ccca --- /dev/null +++ b/docs/.vitepress/theme/components/PageInfo.vue @@ -0,0 +1,41 @@ + + + + + \ No newline at end of file diff --git a/docs/.vitepress/theme/components/Statistics.Vue b/docs/.vitepress/theme/components/Statistics.Vue new file mode 100644 index 0000000..21e1f71 --- /dev/null +++ b/docs/.vitepress/theme/components/Statistics.Vue @@ -0,0 +1,28 @@ + + \ No newline at end of file diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts new file mode 100644 index 0000000..a2db06e --- /dev/null +++ b/docs/.vitepress/theme/index.ts @@ -0,0 +1,72 @@ +import DefaultTheme from 'vitepress/theme'; +import { h, onMounted, watch, nextTick } from "vue"; +import giscusTalk from 'vitepress-plugin-comment-with-giscus'; +import { useData, useRoute, inBrowser } from 'vitepress'; +import mediumZoom from 'medium-zoom'; +import vitepressBackToTop from 'vitepress-plugin-back-to-top'; +import 'vitepress-plugin-back-to-top/dist/style.css'; +import "vitepress-markdown-timeline/dist/theme/index.css"; +import busuanzi from 'busuanzi.pure.js'; + +import './style/index.css'; +import PageInfo from './components/PageInfo.vue'; + +export default { + extends: DefaultTheme, + + Layout() { + return h(DefaultTheme.Layout, null, { + "doc-before": () => h(PageInfo) // 文章阅读统计 + }); + }, + + enhanceApp({ app , router }) { + if (inBrowser) { + router.onAfterRouteChanged = () => { + busuanzi.fetch() + }; + } + + vitepressBackToTop({ + // default + threshold:300 + }) + + }, + + setup() { + // Get frontmatter and route + const {frontmatter} = useData(); + const route = useRoute(); + const initZoom = () => { + mediumZoom('.main img', { background: 'var(--vp-c-bg)' }) + }; + onMounted(() => { + initZoom() + }); + watch( + () => route.path, + () => nextTick(() => initZoom()) + ); + + // giscus配置 + giscusTalk( + { + repo: 'linuxdeepin/youqu', //仓库 + repoId: 'R_kgDOKDOpHg', //仓库ID + category: 'Announcements', // 讨论分类 + categoryId: 'DIC_kwDOKDOpHs4CcRPx', //讨论分类ID + mapping: 'pathname', + inputPosition: 'top', + lang: 'zh-CN', + }, + { + frontmatter, route + }, + //默认值为true,表示已启用,此参数可以忽略; + //如果为false,则表示未启用 + //您可以使用“comment:true”序言在页面上单独启用它 + true + ) + }, +} \ No newline at end of file diff --git a/docs/.vitepress/theme/style/index.css b/docs/.vitepress/theme/style/index.css new file mode 100644 index 0000000..aee9a82 --- /dev/null +++ b/docs/.vitepress/theme/style/index.css @@ -0,0 +1 @@ +@import './var.css'; \ No newline at end of file diff --git a/docs/.vitepress/theme/style/main.scss b/docs/.vitepress/theme/style/main.scss new file mode 100644 index 0000000..5e2e7e3 --- /dev/null +++ b/docs/.vitepress/theme/style/main.scss @@ -0,0 +1,7 @@ +.medium-zoom-image { + z-index: 21; +} + +.medium-zoom-overlay { + z-index: 20; +} \ No newline at end of file diff --git a/docs/.vitepress/theme/style/var.css b/docs/.vitepress/theme/style/var.css new file mode 100644 index 0000000..66e9a77 --- /dev/null +++ b/docs/.vitepress/theme/style/var.css @@ -0,0 +1,23 @@ +h1 { + background: -webkit-linear-gradient(120deg, #28C76F 30%, #28C76F); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + +} + +h2 { + background: -webkit-linear-gradient(120deg, #28C76F 30%, #28C76F); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + +} + +.medium-zoom-overlay { + z-index: 20; +} + +.medium-zoom-image { + z-index: 9999 !important;/* 给的值是21,但是实测盖不住,直接999 */ +} \ No newline at end of file diff --git a/docs/docs_env.sh b/docs/docs_env.sh new file mode 100644 index 0000000..d588e2c --- /dev/null +++ b/docs/docs_env.sh @@ -0,0 +1,34 @@ +set -e +ROOT_DIR=$(dirname "$(pwd)") + +cd ${ROOT_DIR} +docs_path="$( cd "$( dirname "$0")" && pwd)" +if [[ "${docs_path}" != "${PWD}" ]]; then + cd "${docs_path}" || exit 1 +fi + +node_version=v18.16.1 +opt_node_dir="node${node_version}" + +if ! command -v node &> /dev/null; then + wget https://cdn.npmmirror.com/binaries/node/${node_version}/node-${node_version}-linux-x64.tar.xz + tar -xvJf node-${node_version}-linux-x64.tar.xz + sudo rm -rf /opt/${opt_node_dir} + sudo mv node-${node_version}-linux-x64 /opt/${opt_node_dir} + sudo rm -rf /usr/local/bin/npm; sudo ln -s /opt/${opt_node_dir}/bin/npm /usr/local/bin/npm + sudo rm -rf /usr/local/bin/node; sudo ln -s /opt/${opt_node_dir}/bin/node /usr/local/bin/node +elif ! command -v pnpm &> /dev/null; then + npm config set registry https://registry.npmmirror.com + npm install -g pnpm + sudo rm -rf /usr/local/bin/pnpm; sudo ln -s /opt/${opt_node_dir}/bin/pnpm /usr/local/bin/pnpm + sudo rm -rf /usr/local/bin/pnpx; sudo ln -s /opt/${opt_node_dir}/bin/pnpx /usr/local/bin/pnpx +fi + +pnpm add -D vitepress +pnpm i vitepress-plugin-comment-with-giscus +pnpm i vitepress-plugin-back-to-top +pnpm add -D busuanzi.pure.js +pnpm add -D markdown-it-mathjax3 +pnpm i @mermaid-js/mermaid-mindmap@9.3.0 mermaid@9.1.0 vitepress-plugin-mermaid@2.0.10 +pnpm i medium-zoom +pnpm add -D vitepress-markdown-timeline diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..ee3c990 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,56 @@ +--- +# https://vitepress.dev/reference/default-theme-home-page +layout: home + +hero: + name: YouQu3 + text: "下一代 Linux 自动化测试框架" + tagline: 让 Linux 自动化测试变得更简单 + actions: + - theme: brand + text: GitHub + link: "https://github.com/funny-dream/youqu3" + image: + src: /logo.png + alt: YouQu3 + +features: + - icon: 💻 + title: Linux 桌面 UI 自动化测试 + details: 提升Linux桌面应用品质,确保用户体验的一致性,选择我们的UI自动化测试服务。 + - icon: 🌏 + title: Web UI 自动化测试 + details: Web UI自动化测试,优化用户体验,提升Web应用的稳定性和可靠性。 + - icon: 🚌 + title: Linux DBus 接口自动化测试 + details: 专业自动化测试D-Bus接口,为Linux桌面应用的稳定性和可靠性保驾护航。 + - icon: 🚀 + title: 命令行自动化测试 + details: 高效命令行自动化测试,让Linux软件开发和维护更加轻松便捷。 + - icon: ️🕷️ + title: HTTP 接口自动化测试 + details: 保障HTTP接口的响应速度和数据传输安全,我们的自动化测试是您的明智之选。 + +--- + + diff --git "a/docs/\350\256\276\350\256\241/APP\345\267\245\347\250\213\350\256\276\350\256\241\346\226\271\346\241\210.md" "b/docs/\350\256\276\350\256\241/APP\345\267\245\347\250\213\350\256\276\350\256\241\346\226\271\346\241\210.md" new file mode 100644 index 0000000..cf6ada8 --- /dev/null +++ "b/docs/\350\256\276\350\256\241/APP\345\267\245\347\250\213\350\256\276\350\256\241\346\226\271\346\241\210.md" @@ -0,0 +1 @@ +# APP工程设计方案 diff --git "a/docs/YouQu3\346\236\266\346\236\204\350\256\276\350\256\241.md" "b/docs/\350\256\276\350\256\241/YouQu3\346\236\266\346\236\204\350\256\276\350\256\241\350\247\204\345\210\222.md" similarity index 88% rename from "docs/YouQu3\346\236\266\346\236\204\350\256\276\350\256\241.md" rename to "docs/\350\256\276\350\256\241/YouQu3\346\236\266\346\236\204\350\256\276\350\256\241\350\247\204\345\210\222.md" index ad3aa90..0a96e40 100644 --- "a/docs/YouQu3\346\236\266\346\236\204\350\256\276\350\256\241.md" +++ "b/docs/\350\256\276\350\256\241/YouQu3\346\236\266\346\236\204\350\256\276\350\256\241\350\247\204\345\210\222.md" @@ -1,4 +1,4 @@ -# YouQu3 架构设计 +# YouQu3 架构设计规划 ## 1. 背景 @@ -6,13 +6,13 @@ YouQu 是 2021 年成都测试团队开始内部孵化的项目,旨在开发 YouQu 在公司内部已经被大量的自动化测试项目使用,在公司的多个自动化流程中运行得很好,能满足公司对自动化测试的业务需求,也得到了公司领导、同事们、内外部开发者们的认可。 -但 YouQu 在现有框架下,仍然存在一些问题,比如:每次使用需要初始化框架工程及单独做环境部署,操作较为复杂、用例开发环境下更新版本不方便、源代码暴露在用户面前,导致框架代码容易被用户修改、绑定了太多公司的业务、一些底层模块或接口命名不优雅、对纯 CLI 操作系统支持不够友好等等。 +但 YouQu 在现有框架下,仍然存在一些问题,比如:每次使用需要初始化框架工程及单独做环境部署,操作较为复杂、用例开发环境下更新版本不方便、源代码暴露在用户面前,导致框架代码容易被用户修改、绑定了太多公司的业务、一些底层模块或接口命名不优雅、对纯 CLI 操作系统环境支持不够友好等等。 有些问题处理起来必然会影响到框架的兼容性,势必对现有公司自动化用例、业务流程有一些影响,有些问题在现有框架结构下根本无法解决,因此我们才萌生了对框架结构进行重新设计想法,我们想要设计开发一个更加简单易用、更加纯粹、扩展性和兼容性更好的自动化测试框架 —— YouQu3。 ## 2. 目标 -YouQu3 旨在成为下一代 Linux 自动化测试框架,在继承 YouQu 诸多亮点功能的同时解决其遇到的问题,同时对各功能进行插件化、模块化改造,全面优化插件调用机制。 +YouQu3 旨在成为下一代 Linux 自动化测试框架,在继承 YouQu 诸多亮点功能的同时解决其遇到的问题,同时对各功能进行插件化、模块化改造,全面优化框架接口调用机制。 - 以 Python 包的形式提供框架能力,方便安装、更新。 - 支持离线部署,用例整体打包交付之后,可以在无网络环境下直接运行。 @@ -27,7 +27,7 @@ YouQu3 旨在成为下一代 Linux 自动化测试框架,在继承 YouQu 诸 框架层提供总线服务,各功能以插件的方式接入,功能插件可插拔,由用例层决定使用哪些功能对应安装哪些插件,实现插件依赖的定制化、轻量化。 -YouQu3 框架及插件库以 Python 三方包的形式提供,用例层直接 import 使用,框架源代码不直接呈现在用户面前,用户只需要关注用例、方法代码。 +YouQu3 框架代码及插件库以 Python 三方包的形式提供,用例层直接 import 使用,框架源代码不直接呈现在用户面前,用户只需要关注用例、方法代码。 框架提供驱动执行的命令,可以在通过命令行快速驱动测试用例执行,通过命令行参数控制,支持多种用例驱动模式,如:路径驱动、标签驱动、关键词驱动等等,执行模式支持本地驱动执行和远程驱动执行。 @@ -41,7 +41,7 @@ YouQu3 框架及插件库以 Python 三方包的形式提供,用例层直接 i - 用例执行过程中动态调用 YouQu3 底层功能,并动态加载 YouQu3 插件; -- 若插件已经安装,也正常调用,否则提示用户进行安装; +- 若插件已经安装,则正常调用,否则提示用户进行安装,抛异常程序终止; - 用例执行完成后生成多种测试报告,并根据需要将测试结果,通过配置的接口进行数据回填。 @@ -65,4 +65,4 @@ YouQu3 框架及插件库以 Python 三方包的形式提供,用例层直接 i 非开发者下运行 -过程钩子 +过程钩子 \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..394a05c --- /dev/null +++ b/package.json @@ -0,0 +1,22 @@ +{ + "version": "3.0.0", + "devDependencies": { + "busuanzi.pure.js": "^1.0.3", + "markdown-it-mathjax3": "^4.3.2", + "vitepress": "1.0.0-rc.36", + "vitepress-markdown-timeline": "^1.2.1" + }, + "scripts": { + "dev": "vitepress dev docs", + "build": "vitepress build docs", + "pre": "vitepress preview docs" + }, + "dependencies": { + "@mermaid-js/mermaid-mindmap": "9.3.0", + "medium-zoom": "^1.1.0", + "mermaid": "^9.1.0", + "vitepress-plugin-back-to-top": "^1.0.1", + "vitepress-plugin-comment-with-giscus": "^1.1.15", + "vitepress-plugin-mermaid": "^2.0.10" + } +} \ No newline at end of file