├── .gitignore ├── LICENSE ├── README.md ├── TestHub-client ├── .eslintrc.js ├── .gitignore ├── .npmrc ├── .prettierignore ├── .prettierrc ├── .umirc.desktop.ts ├── .umirc.ts ├── .umirc.web.ts ├── package.json ├── public │ └── logo.ico ├── src │ ├── assets │ │ ├── font │ │ │ ├── demo.css │ │ │ ├── demo_index.html │ │ │ ├── iconfont.css │ │ │ ├── iconfont.js │ │ │ ├── iconfont.json │ │ │ ├── iconfont.ttf │ │ │ ├── iconfont.woff │ │ │ └── iconfont.woff2 │ │ ├── img │ │ │ ├── contact.jpeg │ │ │ ├── empty.svg │ │ │ ├── login-bg.svg │ │ │ ├── theme-auto.png │ │ │ ├── theme-dark.png │ │ │ └── theme-light.png │ │ └── logo │ │ │ ├── logo.icns │ │ │ ├── logo.ico │ │ │ ├── logo.png │ │ │ └── logo.webp │ ├── blocks │ │ └── Setting │ │ │ ├── About │ │ │ ├── index.less │ │ │ └── index.tsx │ │ │ ├── BaseSetting │ │ │ ├── index.less │ │ │ └── index.tsx │ │ │ ├── ProxySetting │ │ │ ├── index.less │ │ │ └── index.tsx │ │ │ ├── UpdateDetection │ │ │ ├── index.less │ │ │ └── index.tsx │ │ │ ├── User │ │ │ ├── index.less │ │ │ └── index.tsx │ │ │ ├── index.less │ │ │ └── index.tsx │ ├── components │ │ ├── TestHub │ │ │ ├── MonacoEditor │ │ │ │ ├── MyMonacoDiffEditor │ │ │ │ │ ├── editorConfig.ts │ │ │ │ │ └── index.tsx │ │ │ │ ├── MyMonacoEditor │ │ │ │ │ ├── editorConfig.ts │ │ │ │ │ ├── index.less │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── language │ │ │ │ │ │ └── casexml │ │ │ │ │ │ ├── CasexmlEditor.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── item │ │ │ │ │ │ └── suggestions │ │ │ │ │ │ └── dom.tsx │ │ │ │ ├── initMonaco.tsx │ │ │ │ └── useMonacoTheme.ts │ │ │ ├── ProjectSelect │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── SearchInput │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── SearchTree │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── assembly │ │ │ │ └── params │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ ├── dataTypeShow │ │ │ │ └── index.tsx │ │ │ ├── errorBoundary │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── expLog │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── formulaLog │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── http │ │ │ │ ├── Body.tsx │ │ │ │ ├── FormData.tsx │ │ │ │ ├── RequestView │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ │ ├── ResponseView │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ │ ├── i18n │ │ │ │ │ ├── en-us │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── zh-cn │ │ │ │ │ │ └── index.ts │ │ │ │ └── typings.d.ts │ │ │ ├── myReactJson │ │ │ │ └── index.tsx │ │ │ └── plugins │ │ │ │ ├── ActionType.ts │ │ │ │ ├── Entry.tsx │ │ │ │ ├── Icon.tsx │ │ │ │ ├── Result.tsx │ │ │ │ ├── i18n │ │ │ │ ├── plugin-en-us.ts │ │ │ │ └── plugin-zh-cn.ts │ │ │ │ └── item │ │ │ │ ├── app │ │ │ │ ├── entry │ │ │ │ │ └── index.tsx │ │ │ │ ├── i18n │ │ │ │ │ ├── app-en-us.ts │ │ │ │ │ └── app-zh-cn.ts │ │ │ │ └── result │ │ │ │ │ └── index.tsx │ │ │ │ ├── check │ │ │ │ ├── entry │ │ │ │ │ └── index.tsx │ │ │ │ ├── i18n │ │ │ │ │ ├── check-en-us.ts │ │ │ │ │ └── check-zh-cn.ts │ │ │ │ └── result │ │ │ │ │ └── index.tsx │ │ │ │ ├── checkObj │ │ │ │ ├── entry │ │ │ │ │ └── index.tsx │ │ │ │ ├── i18n │ │ │ │ │ ├── checkObj-en-us.ts │ │ │ │ │ └── checkObj-zh-cn.ts │ │ │ │ └── result │ │ │ │ │ └── index.tsx │ │ │ │ ├── const │ │ │ │ └── entry │ │ │ │ │ └── index.tsx │ │ │ │ ├── http │ │ │ │ ├── entry │ │ │ │ │ └── index.tsx │ │ │ │ ├── i18n │ │ │ │ │ ├── http-en-us.ts │ │ │ │ │ └── http-zh-cn.ts │ │ │ │ └── result │ │ │ │ │ ├── HttpRes.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── sleep │ │ │ │ ├── entry │ │ │ │ │ └── index.tsx │ │ │ │ ├── i18n │ │ │ │ │ ├── sleep-en-us.ts │ │ │ │ │ └── sleep-zh-cn.ts │ │ │ │ └── result │ │ │ │ │ └── index.tsx │ │ │ │ └── sql │ │ │ │ ├── entry │ │ │ │ └── index.tsx │ │ │ │ ├── i18n │ │ │ │ ├── sql-en-us.ts │ │ │ │ └── sql-zh-cn.ts │ │ │ │ └── result │ │ │ │ └── index.tsx │ │ └── base │ │ │ ├── BasePage │ │ │ ├── index.less │ │ │ └── index.tsx │ │ │ ├── BrandLogo │ │ │ ├── index.less │ │ │ └── index.tsx │ │ │ ├── Contact │ │ │ ├── index.less │ │ │ └── index.tsx │ │ │ ├── Draggable │ │ │ ├── index.less │ │ │ └── index.tsx │ │ │ ├── Empty │ │ │ ├── index.less │ │ │ └── index.tsx │ │ │ ├── Iconfont │ │ │ ├── index.less │ │ │ └── index.tsx │ │ │ ├── Loading │ │ │ ├── LazyLoading │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── Loading │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── LoadingContent │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── LoadingGracile │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ └── LoadingLiquid │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── MenuLabel │ │ │ ├── index.less │ │ │ └── index.tsx │ │ │ ├── Modal │ │ │ └── BaseModal │ │ │ │ └── index.tsx │ │ │ ├── MyNotification │ │ │ ├── index.less │ │ │ └── index.tsx │ │ │ ├── StateIndicator │ │ │ ├── index.less │ │ │ └── index.tsx │ │ │ ├── Tabs │ │ │ ├── index.less │ │ │ └── index.tsx │ │ │ └── TextHighlighter │ │ │ ├── index.less │ │ │ └── index.tsx │ ├── constants │ │ ├── common.ts │ │ ├── console.ts │ │ ├── index.ts │ │ ├── table.ts │ │ └── theme.ts │ ├── electron │ │ ├── ipcRenderer.js │ │ └── main.js │ ├── hooks │ │ ├── getConnection.ts │ │ ├── index.ts │ │ ├── useClickAndDoubleClick.ts │ │ ├── useEventSource.ts │ │ ├── useFocusData.ts │ │ ├── usePollRequestService.ts │ │ ├── useTheme.ts │ │ └── useUpdateEffect.ts │ ├── i18n │ │ ├── en-us │ │ │ ├── caseUS.ts │ │ │ ├── common.ts │ │ │ ├── index.ts │ │ │ ├── login.ts │ │ │ ├── menu.ts │ │ │ ├── setting.ts │ │ │ └── testhub.ts │ │ ├── index.tsx │ │ └── zh-cn │ │ │ ├── caseCN.ts │ │ │ ├── common.ts │ │ │ ├── index.ts │ │ │ ├── login.ts │ │ │ ├── menu.ts │ │ │ ├── setting.ts │ │ │ └── testhub.ts │ ├── layouts │ │ ├── GlobalLayout │ │ │ ├── ServerLoading │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── index.less │ │ │ └── index.tsx │ │ └── init │ │ │ ├── GlobalComponent.tsx │ │ │ ├── init.ts │ │ │ ├── registerMessage.ts │ │ │ └── registerNotification.ts │ ├── models │ │ ├── appPage.ts │ │ ├── casePage.ts │ │ ├── httpPage.ts │ │ └── testPage.ts │ ├── pages │ │ ├── demo │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── document.ejs │ │ ├── login │ │ │ ├── index.less │ │ │ └── index.tsx │ │ └── main │ │ │ ├── case │ │ │ ├── components │ │ │ │ ├── CaseConsole │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ │ ├── CaseLeft │ │ │ │ │ ├── components │ │ │ │ │ │ ├── CaseAdd │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── TreeAdd │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── TreeRename │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── CaseRight │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ │ ├── caseResult │ │ │ │ │ ├── components │ │ │ │ │ │ ├── caseResultLeft │ │ │ │ │ │ │ ├── index.less │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── caseResultRight │ │ │ │ │ │ │ ├── index.less │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ │ └── caseRunParam │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ ├── index.less │ │ │ └── index.tsx │ │ │ ├── http │ │ │ ├── components │ │ │ │ ├── HttpConsole │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ │ ├── HttpLeft │ │ │ │ │ ├── components │ │ │ │ │ │ ├── ApiAdd │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── TreeAdd │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── TreeRename │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── index.tsx │ │ │ │ └── HttpRigth │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ ├── index.less │ │ │ └── index.tsx │ │ │ ├── index.less │ │ │ ├── index.tsx │ │ │ ├── meta │ │ │ ├── components │ │ │ │ ├── MetaLeft │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ │ ├── MetaRight │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ │ └── container │ │ │ │ │ ├── actionPool │ │ │ │ │ ├── env.tsx │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ │ │ └── paramPool │ │ │ │ │ ├── env.tsx │ │ │ │ │ ├── index.less │ │ │ │ │ └── index.tsx │ │ │ ├── index.less │ │ │ └── index.tsx │ │ │ ├── store │ │ │ ├── connection │ │ │ │ └── index.ts │ │ │ ├── main │ │ │ │ └── index.ts │ │ │ └── monaco │ │ │ │ └── index.ts │ │ │ ├── test │ │ │ ├── index.less │ │ │ └── index.tsx │ │ │ └── tools │ │ │ ├── components │ │ │ ├── Tools │ │ │ │ └── FileSearch │ │ │ │ │ ├── index.less │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── store.ts │ │ │ ├── ToolsLeft │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ └── ToolsRight │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── index.less │ │ │ └── index.tsx │ ├── service │ │ ├── base.ts │ │ ├── caseApi.ts │ │ ├── config.ts │ │ ├── plugins │ │ │ └── http │ │ │ │ └── httpApi.ts │ │ ├── project.ts │ │ ├── system.ts │ │ ├── treeApi.ts │ │ └── user.ts │ ├── store │ │ ├── common │ │ │ ├── components.ts │ │ │ ├── copyFocusedContent.ts │ │ │ └── index.ts │ │ └── setting │ │ │ └── index.ts │ ├── styles │ │ ├── antd.less │ │ ├── common.less │ │ ├── global.less │ │ └── var.less │ ├── theme │ │ ├── background │ │ │ ├── dark.ts │ │ │ └── light.ts │ │ ├── common.ts │ │ ├── custom │ │ │ ├── dark.less │ │ │ └── light.less │ │ └── index.ts │ ├── typings │ │ ├── client │ │ │ ├── index.ts │ │ │ └── testHub.ts │ │ ├── common.ts │ │ ├── index.ts │ │ ├── main.ts │ │ ├── server │ │ │ ├── base.ts │ │ │ ├── case.ts │ │ │ ├── execution.ts │ │ │ ├── index.ts │ │ │ ├── plugins │ │ │ │ ├── app.ts │ │ │ │ ├── http.ts │ │ │ │ └── index.ts │ │ │ ├── project.ts │ │ │ └── user.ts │ │ ├── theme.ts │ │ └── tree.ts │ └── utils │ │ ├── check.ts │ │ ├── date.ts │ │ ├── index.ts │ │ ├── localStorage.ts │ │ └── webpack.ts ├── tsconfig.json ├── typings.d.ts └── yarn.lock ├── TestHub-demo ├── TestHubDemo │ ├── demo备份 │ │ └── h2db.mv.db │ ├── docker-compose.yaml │ └── env │ │ ├── pgsql │ │ └── init.sql │ │ └── testhub │ │ └── data │ │ └── db │ │ └── data │ │ └── h2db.mv.db ├── server │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── goddess │ │ │ └── server │ │ │ ├── SpringbootMybatisplusApplication.java │ │ │ ├── controller │ │ │ └── OrderController.java │ │ │ ├── dao │ │ │ ├── AccountMapper.java │ │ │ └── OrderMapper.java │ │ │ ├── dto │ │ │ └── XmlData.java │ │ │ ├── entity │ │ │ ├── Account.java │ │ │ └── Order.java │ │ │ └── util │ │ │ └── IdGenerator.java │ │ └── resources │ │ ├── application.yml │ │ └── mapper │ │ ├── AccountMapper.xml │ │ └── OrderMapper.xml └── serverDocker │ ├── backend │ └── application.yml │ ├── build_and_push.sh │ └── dockerfile ├── TestHub-doc ├── .gitignore ├── package.json ├── pnpm-lock.yaml ├── src │ ├── .vuepress │ │ ├── build_and_push.sh │ │ ├── config.ts │ │ ├── dockerfile │ │ ├── navbar.ts │ │ ├── public │ │ │ ├── assets │ │ │ │ ├── icon │ │ │ │ │ ├── apple-icon-152.png │ │ │ │ │ ├── chrome-192.png │ │ │ │ │ ├── chrome-512.png │ │ │ │ │ ├── chrome-mask-192.png │ │ │ │ │ ├── chrome-mask-512.png │ │ │ │ │ ├── guide-maskable.png │ │ │ │ │ └── ms-icon-144.png │ │ │ │ └── image │ │ │ │ │ ├── advanced.svg │ │ │ │ │ ├── blog.svg │ │ │ │ │ ├── box.svg │ │ │ │ │ ├── features.svg │ │ │ │ │ ├── github-dark.svg │ │ │ │ │ ├── github-light.svg │ │ │ │ │ ├── layout.svg │ │ │ │ │ └── markdown.svg │ │ │ ├── contact.jpeg │ │ │ ├── demo │ │ │ │ ├── antiocn.png │ │ │ │ ├── check.png │ │ │ │ ├── check_loop.png │ │ │ │ ├── check_obj.png │ │ │ │ ├── const.png │ │ │ │ ├── convert.png │ │ │ │ ├── cutoff.png │ │ │ │ ├── demo.png │ │ │ │ ├── http.png │ │ │ │ ├── sleep.png │ │ │ │ ├── sql.png │ │ │ │ └── sqldmi.png │ │ │ ├── favicon.ico │ │ │ ├── images │ │ │ │ ├── build │ │ │ │ │ └── 表达式.jpg │ │ │ │ ├── friends │ │ │ │ │ └── link │ │ │ │ │ │ ├── Binlog4j.png │ │ │ │ │ │ ├── Disjob.png │ │ │ │ │ │ ├── cloudeon.png │ │ │ │ │ │ ├── cubic.png │ │ │ │ │ │ ├── dantecloud-logo.png │ │ │ │ │ │ ├── disjob-2.png │ │ │ │ │ │ ├── dromara.png │ │ │ │ │ │ ├── dynamic-tp.png │ │ │ │ │ │ ├── easy-es2.png │ │ │ │ │ │ ├── fast-request.gif │ │ │ │ │ │ ├── fast-request.png │ │ │ │ │ │ ├── file4j.png │ │ │ │ │ │ ├── forest-logo.png │ │ │ │ │ │ ├── gobrsasync-logo.png │ │ │ │ │ │ ├── goview-logo.png │ │ │ │ │ │ ├── hertzbeat-logo.png │ │ │ │ │ │ ├── hmily.png │ │ │ │ │ │ ├── hodor.png │ │ │ │ │ │ ├── hutool2.png │ │ │ │ │ │ ├── imagecombiner-logo.png │ │ │ │ │ │ ├── jpom.png │ │ │ │ │ │ ├── koalas-rpc2.png │ │ │ │ │ │ ├── liteflow2.png │ │ │ │ │ │ ├── maxkey.png │ │ │ │ │ │ ├── maxkey3.png │ │ │ │ │ │ ├── mayfly-go.png │ │ │ │ │ │ ├── mendmix.png │ │ │ │ │ │ ├── myth.png │ │ │ │ │ │ ├── northstar_logo.png │ │ │ │ │ │ ├── raincat.png │ │ │ │ │ │ ├── ruoyi-plus.png │ │ │ │ │ │ ├── sa-token.png │ │ │ │ │ │ ├── shenyu.svg │ │ │ │ │ │ ├── sms4j.png │ │ │ │ │ │ ├── sureness.png │ │ │ │ │ │ ├── test-hub-heng.png │ │ │ │ │ │ ├── tlog2.png │ │ │ │ │ │ ├── wemq.png │ │ │ │ │ │ ├── wiki-logo.png │ │ │ │ │ │ ├── xeasypdf-logo.png │ │ │ │ │ │ └── yft-design.png │ │ │ │ ├── global │ │ │ │ │ ├── 参数覆盖规则.jpg │ │ │ │ │ └── 行为覆盖规则.jpg │ │ │ │ └── logDesc │ │ │ │ │ ├── 1_0_2 │ │ │ │ │ ├── 全局行为.jpg │ │ │ │ │ ├── 环境级参数.jpg │ │ │ │ │ ├── 退出登陆.jpg │ │ │ │ │ └── 选择环境.jpg │ │ │ │ │ └── 1_0_4 │ │ │ │ │ ├── jiansuo.jpg │ │ │ │ │ ├── tabs.jpg │ │ │ │ │ └── yidong.jpg │ │ │ ├── logo.png │ │ │ └── logo.svg │ │ ├── sidebar.ts │ │ ├── styles │ │ │ ├── config.scss │ │ │ ├── index.scss │ │ │ └── palette.scss │ │ └── theme.ts │ ├── README.md │ ├── ability │ │ ├── README.md │ │ ├── check.md │ │ ├── checkobj.md │ │ ├── const.md │ │ ├── convert.md │ │ ├── http.md │ │ ├── sleep.md │ │ └── sql.md │ ├── custom │ │ ├── README.md │ │ ├── base.md │ │ └── extend.md │ ├── global │ │ └── README.md │ ├── group.md │ ├── issue.md │ ├── log.md │ ├── logDesc │ │ ├── 1_0_2.md │ │ └── 1_0_4.md │ ├── principle │ │ ├── README.md │ │ ├── datatype.md │ │ ├── expression.md │ │ ├── function.md │ │ └── operand.md │ └── slides.md └── yarn.lock ├── TestHub-docker ├── backend │ ├── application.yml │ └── config │ │ └── logback-spring.xml ├── build_and_push.sh ├── dockerfile ├── frontend │ ├── 174.1dd360cb.async.js │ ├── 261.3cb8403b.async.js │ ├── 359.99bc372a.async.js │ ├── 377.d436d266.async.js │ ├── 571.238148b3.async.js │ ├── 665.22c46b9d.async.js │ ├── 778.cb2b4a7d.async.js │ ├── 880.c5f0499b.async.js │ ├── 902.89162dd9.async.js │ ├── 961.e343c808.async.js │ ├── 967.5b6e12b1.async.js │ ├── 978.86e09468.async.js │ ├── 996.a38e64f9.async.js │ ├── editor.worker.js │ ├── html.worker.js │ ├── index.html │ ├── json.worker.js │ ├── layouts__GlobalLayout__index.696dbead.chunk.css │ ├── logo.ico │ ├── p__demo__index.d115d76a.async.js │ ├── p__demo__index.f735e0fb.chunk.css │ ├── p__login__index.0885e91e.chunk.css │ ├── p__login__index.46a5c138.async.js │ ├── p__main__index.e52c5db4.chunk.css │ ├── static │ │ ├── codicon.ecfbfe4b.ttf │ │ ├── contact.6e1d01ef.jpeg │ │ ├── iconfont.302ebffe.woff │ │ ├── iconfont.8290aa03.ttf │ │ ├── iconfont.ae8e71c5.woff2 │ │ ├── login-bg.e6f3ac5d.svg │ │ └── logo.5eb2613d.webp │ └── umi.0cbef2e1.css └── nginx.conf ├── TestHub-electron ├── LICENSE ├── README.md ├── README.zh-CN.md ├── build.sh ├── build │ ├── icons │ │ ├── 256x256.png │ │ ├── 32x32.png │ │ ├── 512x512.png │ │ ├── 64x64.png │ │ └── icon.png │ └── script │ │ └── installer.nsh ├── electron │ ├── addon │ │ ├── autoUpdater │ │ │ └── index.js │ │ ├── awaken │ │ │ └── index.js │ │ ├── chromeExtension │ │ │ └── index.js │ │ ├── javaServer │ │ │ ├── index.js │ │ │ ├── ps.js │ │ │ └── server.js │ │ ├── security │ │ │ └── index.js │ │ └── tray │ │ │ └── index.js │ ├── config │ │ ├── builder.json │ │ ├── config.default.js │ │ ├── config.local.js │ │ ├── config.prod.js │ │ ├── encrypt.js │ │ └── nodemon.json │ ├── controller │ │ ├── example.js │ │ └── framework.js │ ├── index.js │ ├── jobs │ │ └── example │ │ │ ├── hello.js │ │ │ └── timer.js │ ├── preload │ │ ├── bridge.js │ │ └── index.js │ └── service │ │ └── example.js ├── main.js ├── package.json ├── public │ ├── html │ │ └── view_example.html │ ├── images │ │ ├── 1tray.png │ │ ├── logo-32.png │ │ ├── logo.png │ │ └── tray.png │ └── ssl │ │ ├── localhost+1.key │ │ └── localhost+1.pem ├── test.sh └── yarn.lock ├── TestHub-server ├── .gitignore ├── pom.xml ├── testhub-framework │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── dromara │ │ └── testhub │ │ └── framework │ │ ├── aop │ │ └── LogAspect.java │ │ ├── config │ │ ├── AsyncConfig.java │ │ ├── CorsConfig.java │ │ ├── DruidConfig.java │ │ ├── ImageWebAppConfig.java │ │ ├── SaTokenConfigure.java │ │ ├── Swagger3Config.java │ │ ├── WebDataConfigurer.java │ │ ├── WebInterceptorConfig.java │ │ ├── WebSocketConfig.java │ │ └── WebViewConfig.java │ │ ├── exception │ │ ├── AppException.java │ │ └── TestHubException.java │ │ ├── exceptionHandler │ │ ├── AppExceptionHandler.java │ │ ├── ErrorCode.java │ │ └── ValidMsg.java │ │ ├── interceptor │ │ ├── ExtraParam.java │ │ ├── ExtraParamInterceptor.java │ │ └── ExtraParamUtil.java │ │ ├── mybatis │ │ ├── BasePo.java │ │ ├── IBaseMapper.java │ │ ├── MyMetaObjectHandler.java │ │ └── QueryParamUtils.java │ │ ├── trace │ │ ├── TraceInterceptor.java │ │ └── WebConfig.java │ │ ├── util │ │ ├── ContextManager.java │ │ ├── DateUtil.java │ │ ├── FileUtil.java │ │ ├── IdGenerator.java │ │ ├── Key.java │ │ ├── ListUtils.java │ │ ├── SnowFlakeGenerator.java │ │ ├── SpringBootBeanUtils.java │ │ ├── SpringUtil.java │ │ └── UserUtil.java │ │ └── web │ │ ├── PageResult.java │ │ ├── ResultResponse.java │ │ └── dto │ │ ├── IRequestDto.java │ │ └── IResponseDto.java ├── testhub-nsrule │ ├── nsrule-core │ │ ├── antlr4 │ │ │ └── Formula.g4 │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── dromara │ │ │ │ │ └── testhub │ │ │ │ │ └── nsrule │ │ │ │ │ └── core │ │ │ │ │ ├── constant │ │ │ │ │ ├── ConstantUtil.java │ │ │ │ │ ├── ExceptionCode.java │ │ │ │ │ ├── RuleConstant.java │ │ │ │ │ └── RuleException.java │ │ │ │ │ ├── eventbus │ │ │ │ │ ├── AsyncEventBus.java │ │ │ │ │ ├── EventBus.java │ │ │ │ │ ├── EventMessage.java │ │ │ │ │ ├── EventType.java │ │ │ │ │ ├── ObserverAction.java │ │ │ │ │ ├── ObserverRegistry.java │ │ │ │ │ └── Subscribe.java │ │ │ │ │ ├── executer │ │ │ │ │ ├── context │ │ │ │ │ │ ├── Context.java │ │ │ │ │ │ ├── DefContext.java │ │ │ │ │ │ ├── JudgeData.java │ │ │ │ │ │ ├── JudgePath.java │ │ │ │ │ │ ├── MetaContext.java │ │ │ │ │ │ ├── RuleConfig.java │ │ │ │ │ │ └── RuleProject.java │ │ │ │ │ ├── meta │ │ │ │ │ │ ├── MetaClass.java │ │ │ │ │ │ ├── MetaEnum.java │ │ │ │ │ │ ├── MetaJavaType.java │ │ │ │ │ │ ├── MetaObject.java │ │ │ │ │ │ └── MetaProperty.java │ │ │ │ │ ├── mode │ │ │ │ │ │ ├── BaseDataPo.java │ │ │ │ │ │ ├── BasePo.java │ │ │ │ │ │ ├── Rule.java │ │ │ │ │ │ ├── base │ │ │ │ │ │ │ ├── BaseLog.java │ │ │ │ │ │ │ ├── Result.java │ │ │ │ │ │ │ ├── action │ │ │ │ │ │ │ │ ├── Action.java │ │ │ │ │ │ │ │ ├── DoExecute.java │ │ │ │ │ │ │ │ ├── Execute.java │ │ │ │ │ │ │ │ ├── Inject.java │ │ │ │ │ │ │ │ ├── Mapping.java │ │ │ │ │ │ │ │ ├── Param.java │ │ │ │ │ │ │ │ ├── RunState.java │ │ │ │ │ │ │ │ └── Util.java │ │ │ │ │ │ │ ├── bound │ │ │ │ │ │ │ │ ├── Bound.java │ │ │ │ │ │ │ │ └── FreeMarker.java │ │ │ │ │ │ │ ├── formula │ │ │ │ │ │ │ │ ├── ArithmeticNode.java │ │ │ │ │ │ │ │ ├── DataNode.java │ │ │ │ │ │ │ │ ├── FormulaNode.java │ │ │ │ │ │ │ │ ├── FuncNode.java │ │ │ │ │ │ │ │ ├── MixNode.java │ │ │ │ │ │ │ │ ├── PathNode.java │ │ │ │ │ │ │ │ ├── antlr │ │ │ │ │ │ │ │ │ ├── Formula.interp │ │ │ │ │ │ │ │ │ ├── Formula.tokens │ │ │ │ │ │ │ │ │ ├── FormulaBaseListener.java │ │ │ │ │ │ │ │ │ ├── FormulaBaseVisitor.java │ │ │ │ │ │ │ │ │ ├── FormulaLexer.interp │ │ │ │ │ │ │ │ │ ├── FormulaLexer.java │ │ │ │ │ │ │ │ │ ├── FormulaLexer.tokens │ │ │ │ │ │ │ │ │ ├── FormulaListener.java │ │ │ │ │ │ │ │ │ ├── FormulaParser.java │ │ │ │ │ │ │ │ │ └── FormulaVisitor.java │ │ │ │ │ │ │ │ ├── ast │ │ │ │ │ │ │ │ │ ├── ASTTransformVisitor.java │ │ │ │ │ │ │ │ │ └── MyErrorListener.java │ │ │ │ │ │ │ │ └── log │ │ │ │ │ │ │ │ │ ├── ArithmeticLog.java │ │ │ │ │ │ │ │ │ ├── DataLog.java │ │ │ │ │ │ │ │ │ ├── FormulaLog.java │ │ │ │ │ │ │ │ │ ├── MinLog.java │ │ │ │ │ │ │ │ │ ├── PathItemLog.java │ │ │ │ │ │ │ │ │ └── PathLog.java │ │ │ │ │ │ │ └── function │ │ │ │ │ │ │ │ ├── FunctionHandler.java │ │ │ │ │ │ │ │ ├── FunctionHandlerFactory.java │ │ │ │ │ │ │ │ └── impl │ │ │ │ │ │ │ │ ├── FunctionAdd.java │ │ │ │ │ │ │ │ ├── FunctionDiv.java │ │ │ │ │ │ │ │ ├── FunctionLength.java │ │ │ │ │ │ │ │ ├── FunctionMult.java │ │ │ │ │ │ │ │ ├── FunctionSize.java │ │ │ │ │ │ │ │ └── FunctionSub.java │ │ │ │ │ │ └── ruleLine │ │ │ │ │ │ │ ├── Expression.java │ │ │ │ │ │ │ ├── JavaActuator.java │ │ │ │ │ │ │ └── RuleLine.java │ │ │ │ │ └── operation │ │ │ │ │ │ ├── Operation.java │ │ │ │ │ │ ├── OperationFactory.java │ │ │ │ │ │ └── impl │ │ │ │ │ │ ├── compose │ │ │ │ │ │ ├── Ge.java │ │ │ │ │ │ ├── Le.java │ │ │ │ │ │ ├── Like.java │ │ │ │ │ │ ├── Nbe.java │ │ │ │ │ │ ├── Nbed.java │ │ │ │ │ │ ├── Neq.java │ │ │ │ │ │ ├── Neqd.java │ │ │ │ │ │ ├── Nin.java │ │ │ │ │ │ └── Nn.java │ │ │ │ │ │ └── simple │ │ │ │ │ │ ├── Be.java │ │ │ │ │ │ ├── Bed.java │ │ │ │ │ │ ├── Bel.java │ │ │ │ │ │ ├── Ber.java │ │ │ │ │ │ ├── En.java │ │ │ │ │ │ ├── Eq.java │ │ │ │ │ │ ├── Eqd.java │ │ │ │ │ │ ├── Gt.java │ │ │ │ │ │ ├── In.java │ │ │ │ │ │ └── Lt.java │ │ │ │ │ ├── expand │ │ │ │ │ ├── FormulaBuilder.java │ │ │ │ │ └── impl │ │ │ │ │ │ ├── DefaultFormulaBuilder.java │ │ │ │ │ │ └── DoExecuteFactory.java │ │ │ │ │ ├── parser │ │ │ │ │ ├── ActionParser.java │ │ │ │ │ ├── BoundParser.java │ │ │ │ │ ├── BoundParser2.java │ │ │ │ │ ├── BoundParserFreeMarker.java │ │ │ │ │ ├── ExecuteParser.java │ │ │ │ │ ├── RuleConfigBuilder.java │ │ │ │ │ └── RuleParser.java │ │ │ │ │ └── util │ │ │ │ │ └── DataCheckUtil.java │ │ │ └── resources │ │ │ │ ├── META-INF │ │ │ │ └── services │ │ │ │ │ └── org.dromara.testhub.nsrule.core.executer.mode.base.function.FunctionHandler │ │ │ │ └── demo │ │ │ │ ├── Demo.g4 │ │ │ │ ├── Formula2.g4 │ │ │ │ ├── Formula3.g4 │ │ │ │ └── Formula4.g4 │ │ │ └── test │ │ │ └── java │ │ │ └── org │ │ │ └── dromara │ │ │ └── testhub │ │ │ └── nsrule │ │ │ └── core │ │ │ └── executer │ │ │ └── mode │ │ │ └── base │ │ │ └── formula │ │ │ └── FormulaTest.java │ ├── nsrule-flow │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── dromara │ │ │ └── testhub │ │ │ └── nsrule │ │ │ └── flow │ │ │ └── model │ │ │ ├── Flow.java │ │ │ ├── FlowContext.java │ │ │ └── RuleFlow.java │ ├── nsrule-graph │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── dromara │ │ │ └── testhub │ │ │ └── nsrule │ │ │ └── graph │ │ │ ├── constant │ │ │ └── Constant.java │ │ │ └── model │ │ │ ├── Branch.java │ │ │ ├── DecisionResult.java │ │ │ ├── Graph.java │ │ │ ├── GraphContext.java │ │ │ ├── Link.java │ │ │ ├── Result.java │ │ │ └── RuleGraph.java │ ├── nsrule-xml │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ └── java │ │ │ │ └── org │ │ │ │ └── dromara │ │ │ │ └── testhub │ │ │ │ └── nsrule │ │ │ │ └── parserXml │ │ │ │ ├── XMLRuleConfigBuilder.java │ │ │ │ ├── XMLRuleParser.java │ │ │ │ ├── XmlActionDefaultParser.java │ │ │ │ ├── XmlBoundParser.java │ │ │ │ └── XmlExecuteDefaultParser.java │ │ │ └── test │ │ │ └── java │ │ │ ├── JsonPtahTest.java │ │ │ └── Main.java │ └── pom.xml ├── testhub-plugins │ ├── plugins-check │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── org │ │ │ │ └── dromara │ │ │ │ └── testhub │ │ │ │ └── plugins │ │ │ │ └── check │ │ │ │ └── actions │ │ │ │ ├── CheckDTOConvertor.java │ │ │ │ ├── CheckExecuteResultHandler.java │ │ │ │ ├── CheckJsonExecuteParser.java │ │ │ │ ├── CheckPlugin.java │ │ │ │ ├── CheckXMLExecuteParser.java │ │ │ │ ├── dto │ │ │ │ ├── CheckExecuteResult.java │ │ │ │ ├── CheckResultDto.java │ │ │ │ └── RuleCheckItemResDto.java │ │ │ │ └── model │ │ │ │ ├── CheckItem.java │ │ │ │ ├── CheckParamResult.java │ │ │ │ └── TestHubExecuteCheck.java │ │ │ └── resources │ │ │ └── META-INF │ │ │ └── services │ │ │ └── org.dromara.testhub.sdk.action.Plugin │ ├── plugins-compare │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── org │ │ │ │ └── dromara │ │ │ │ └── testhub │ │ │ │ └── plugins │ │ │ │ └── compare │ │ │ │ └── actions │ │ │ │ ├── CheckObjExecuteResultHandler.java │ │ │ │ ├── CheckObjJsonExecuteParser.java │ │ │ │ ├── CheckObjPlugin.java │ │ │ │ ├── CheckObjXMLExecuteParser.java │ │ │ │ ├── dto │ │ │ │ ├── CheckObjExecuteResult.java │ │ │ │ └── CheckObjResultDto.java │ │ │ │ ├── model │ │ │ │ ├── CheckObj.java │ │ │ │ ├── CheckResultObj.java │ │ │ │ └── TestHubExecuteCheckObj.java │ │ │ │ └── util │ │ │ │ └── DiffTool.java │ │ │ └── resources │ │ │ └── META-INF │ │ │ └── services │ │ │ └── org.dromara.testhub.sdk.action.Plugin │ ├── plugins-constant │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── org │ │ │ │ └── dromara │ │ │ │ └── testhub │ │ │ │ └── plugins │ │ │ │ └── constant │ │ │ │ └── actions │ │ │ │ ├── ConstDTOConvertor.java │ │ │ │ ├── ConstJsonActionParser.java │ │ │ │ ├── ConstPlugin.java │ │ │ │ ├── ConstXMLActionParser.java │ │ │ │ └── model │ │ │ │ └── TestHubActionConst.java │ │ │ └── resources │ │ │ └── META-INF │ │ │ └── services │ │ │ └── org.dromara.testhub.sdk.action.Plugin │ ├── plugins-convert │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── org │ │ │ │ └── dromara │ │ │ │ └── testhub │ │ │ │ └── plugins │ │ │ │ └── convert │ │ │ │ └── actions │ │ │ │ ├── ConvertJsonActionParser.java │ │ │ │ ├── ConvertPlugin.java │ │ │ │ ├── ConvertXMLActionParser.java │ │ │ │ ├── model │ │ │ │ ├── Convert.java │ │ │ │ └── TestHubActionConvert.java │ │ │ │ └── util │ │ │ │ └── JSONAttrUtil.java │ │ │ └── resources │ │ │ └── META-INF │ │ │ └── services │ │ │ └── org.dromara.testhub.sdk.action.Plugin │ ├── plugins-http │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── org │ │ │ │ └── dromara │ │ │ │ └── testhub │ │ │ │ └── plugins │ │ │ │ └── http │ │ │ │ ├── HttpConstant.java │ │ │ │ ├── actions │ │ │ │ ├── HttpDTOConvertor.java │ │ │ │ ├── HttpJsonActionParser.java │ │ │ │ ├── HttpJsonExecuteParser.java │ │ │ │ ├── HttpPlugin.java │ │ │ │ ├── HttpXMLActionParser.java │ │ │ │ ├── HttpXMLExecuteParser.java │ │ │ │ └── model │ │ │ │ │ ├── Body.java │ │ │ │ │ ├── TestHubActionHttp.java │ │ │ │ │ └── TestHubExecuteHttp.java │ │ │ │ ├── core │ │ │ │ ├── HttpModel.java │ │ │ │ ├── ResData.java │ │ │ │ └── SendHttp.java │ │ │ │ └── server │ │ │ │ ├── convert │ │ │ │ ├── ApiConvert.java │ │ │ │ └── HttpTreeNodeConvert.java │ │ │ │ ├── domain │ │ │ │ ├── HttpContext.java │ │ │ │ └── service │ │ │ │ │ ├── HttpTreeService.java │ │ │ │ │ └── impl │ │ │ │ │ └── HttpTreeServiceImpl.java │ │ │ │ ├── dto │ │ │ │ ├── HttpApiReqDto.java │ │ │ │ ├── HttpApiResDto.java │ │ │ │ ├── HttpApiSendResDto.java │ │ │ │ ├── HttpDirDto.java │ │ │ │ └── HttpRenameDto.java │ │ │ │ ├── repository │ │ │ │ ├── dao │ │ │ │ │ └── HttpTreeNodeMapper.java │ │ │ │ └── po │ │ │ │ │ └── HttpTreeNodePo.java │ │ │ │ ├── rest │ │ │ │ └── HttpController.java │ │ │ │ └── util │ │ │ │ └── TreeUtil.java │ │ │ └── resources │ │ │ ├── META-INF │ │ │ └── services │ │ │ │ └── org.dromara.testhub.sdk.action.Plugin │ │ │ ├── config │ │ │ └── migration │ │ │ │ ├── h2 │ │ │ │ └── V1_0_4__初始化HTTP.sql │ │ │ │ └── pgsql │ │ │ │ └── V1_0_4__初始化HTTP.sql │ │ │ └── mapper │ │ │ └── HttpTreeNodeMapper.xml │ ├── plugins-sleep │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── org │ │ │ │ └── dromara │ │ │ │ └── testhub │ │ │ │ └── plugins │ │ │ │ └── sleep │ │ │ │ └── actions │ │ │ │ ├── SleepDTOConvertor.java │ │ │ │ ├── SleepJsonExecuteParser.java │ │ │ │ ├── SleepPlugin.java │ │ │ │ ├── SleepXMLExecuteParser.java │ │ │ │ └── model │ │ │ │ └── TestHubExecuteSleep.java │ │ │ └── resources │ │ │ └── META-INF │ │ │ └── services │ │ │ └── org.dromara.testhub.sdk.action.Plugin │ ├── plugins-sql │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── org │ │ │ │ └── dromara │ │ │ │ └── testhub │ │ │ │ └── plugins │ │ │ │ └── sql │ │ │ │ └── actions │ │ │ │ ├── SqlBeginPlugin.java │ │ │ │ ├── SqlCommitPlugin.java │ │ │ │ ├── SqlDTOConvertor.java │ │ │ │ ├── SqlJsonActionParser.java │ │ │ │ ├── SqlJsonExecuteParser.java │ │ │ │ ├── SqlPlugin.java │ │ │ │ ├── SqlXMLActionParser.java │ │ │ │ ├── SqlXMLExecuteParser.java │ │ │ │ ├── core │ │ │ │ └── ConnectionManager.java │ │ │ │ └── model │ │ │ │ ├── TestHubActionSql.java │ │ │ │ └── TestHubExecuteSql.java │ │ │ └── resources │ │ │ └── META-INF │ │ │ └── services │ │ │ └── org.dromara.testhub.sdk.action.Plugin │ └── pom.xml ├── testhub-sdk │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── dromara │ │ └── testhub │ │ └── sdk │ │ └── action │ │ ├── BaseActionExecute.java │ │ ├── BaseDTOConvertor.java │ │ ├── BaseExecuteResultHandler.java │ │ ├── BaseJsonActionParser.java │ │ ├── BaseJsonExecuteParser.java │ │ ├── BaseRuleEndHandler.java │ │ ├── BaseXMLActionParser.java │ │ ├── BaseXMLExecuteParser.java │ │ ├── ExpressionConvertor.java │ │ ├── Plugin.java │ │ ├── PluginClassLoader.java │ │ ├── PluginFactory.java │ │ ├── convert │ │ └── BaseConvert.java │ │ ├── dto │ │ ├── ExecuteResult.java │ │ ├── RuleParamReqDto.java │ │ ├── req │ │ │ └── TreeDirDto.java │ │ └── res │ │ │ ├── RuleExpressionResDto.java │ │ │ ├── RuleParamEffectiveResDto.java │ │ │ ├── RuleParamResDto.java │ │ │ ├── TreeNodeDataResDto.java │ │ │ ├── TreeNodeResDto.java │ │ │ └── TreeNodeResDto2.java │ │ ├── model │ │ ├── HandlerResult.java │ │ └── rule │ │ │ ├── TestHubAction.java │ │ │ └── TestHubExecute.java │ │ └── parser │ │ ├── TestHubActionParser.java │ │ └── TestHubExecuteParser.java └── testhub-server │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── org │ │ └── dromara │ │ └── testhub │ │ └── server │ │ ├── TestHubApplication.java │ │ ├── core │ │ ├── EventObserver.java │ │ ├── config │ │ │ ├── RuleConfiguration.java │ │ │ └── SchedulingConfig.java │ │ ├── rule │ │ │ ├── CacheManager.java │ │ │ ├── CodeGenerateManager.java │ │ │ ├── Constant.java │ │ │ ├── DbManager.java │ │ │ ├── DbRuleConfigBuilder.java │ │ │ └── DbRuleManager.java │ │ └── util │ │ │ ├── CacheUtil.java │ │ │ └── TreeUtil.java │ │ ├── domain │ │ ├── convert │ │ │ ├── DbInfoConvert.java │ │ │ ├── DbRuleConvert.java │ │ │ ├── RuleConvertor.java │ │ │ ├── RuleReq2Dom.java │ │ │ ├── RuleReqConvertor.java │ │ │ ├── TreeInfoConvert.java │ │ │ └── VersionConvert.java │ │ ├── dto │ │ │ ├── all │ │ │ │ └── http │ │ │ │ │ ├── BodyReqDto.java │ │ │ │ │ ├── HttpReqDto.java │ │ │ │ │ └── edit │ │ │ │ │ ├── HttpInfoBaseDto.java │ │ │ │ │ ├── HttpInfoBodyDto.java │ │ │ │ │ ├── HttpInfoKVDto.java │ │ │ │ │ ├── HttpInfoRequestDto.java │ │ │ │ │ ├── HttpInfoResponseDto.java │ │ │ │ │ └── HttpInfoTreeDto.java │ │ │ ├── req │ │ │ │ ├── other │ │ │ │ │ ├── InfoReqDto.java │ │ │ │ │ ├── LoginReqDto.java │ │ │ │ │ ├── RenameDto.java │ │ │ │ │ ├── RuleTreeReqDto.java │ │ │ │ │ └── TreeInfoReqDto.java │ │ │ │ └── rule │ │ │ │ │ ├── ExecutionXmlReqDto.java │ │ │ │ │ ├── RuleActionReqDto.java │ │ │ │ │ ├── RuleCheckItemReqDto.java │ │ │ │ │ ├── RuleDelEnvironmentReqDto.java │ │ │ │ │ ├── RuleDocumentReqDto.java │ │ │ │ │ ├── RuleEnvironmentReqDto.java │ │ │ │ │ ├── RuleExecuteReqDto.java │ │ │ │ │ ├── RuleExpressionReqDto.java │ │ │ │ │ ├── RuleFlowReqDto.java │ │ │ │ │ ├── RuleInjectReqDto.java │ │ │ │ │ ├── RuleMetaClassReqDto.java │ │ │ │ │ ├── RuleMetaEnumReqDto.java │ │ │ │ │ ├── RulePropertyReqDto.java │ │ │ │ │ └── RuleReqDto.java │ │ │ └── res │ │ │ │ ├── ExecuteResult │ │ │ │ ├── ExecutionResult.java │ │ │ │ └── FlowResult.java │ │ │ │ ├── other │ │ │ │ ├── CurrentUserResDto.java │ │ │ │ ├── LoginResDto.java │ │ │ │ ├── UploadResDto.java │ │ │ │ ├── UserResDto.java │ │ │ │ └── VersionResDto.java │ │ │ │ └── rule │ │ │ │ ├── RuleActionResDto.java │ │ │ │ ├── RuleCodeResDto.java │ │ │ │ ├── RuleEnvironmentResDto.java │ │ │ │ ├── RuleExecuteResDto.java │ │ │ │ ├── RuleFlowResDto.java │ │ │ │ ├── RuleInjectResDto.java │ │ │ │ ├── RuleMappingResDto.java │ │ │ │ ├── RuleMetaClassResDto.java │ │ │ │ ├── RuleMetaEnumResDto.java │ │ │ │ ├── RuleProjectResDto.java │ │ │ │ ├── RuleProjectSimpleResDto.java │ │ │ │ ├── RulePropertyResDto.java │ │ │ │ └── RuleResDto.java │ │ ├── service │ │ │ ├── CaseService.java │ │ │ ├── ExecutionService.java │ │ │ ├── ProjectService.java │ │ │ ├── SettingService.java │ │ │ ├── SystemService.java │ │ │ ├── TreeService.java │ │ │ ├── UserService.java │ │ │ └── impl │ │ │ │ ├── CaseServiceImpl.java │ │ │ │ ├── ExecutionServiceImpl.java │ │ │ │ ├── ProjectServiceImpl.java │ │ │ │ ├── SettingServiceImpl.java │ │ │ │ ├── StpInterfaceImpl.java │ │ │ │ ├── SystemServiceImpl.java │ │ │ │ ├── TreeServiceImpl.java │ │ │ │ └── UserServiceImpl.java │ │ └── util │ │ │ ├── BaseTreeUtil.java │ │ │ ├── CaseTreeUtil.java │ │ │ ├── CaseUtil.java │ │ │ └── tree │ │ │ └── TreeItem.java │ │ ├── infrastructure │ │ └── repository │ │ │ ├── dao │ │ │ ├── ActionMapper.java │ │ │ ├── CodeGenerateMapper.java │ │ │ ├── EnvironmentMapper.java │ │ │ ├── ExecuteMapper.java │ │ │ ├── FlowMapper.java │ │ │ ├── InjectMapper.java │ │ │ ├── MappingMapper.java │ │ │ ├── MetaClassMapper.java │ │ │ ├── MetaEnumMapper.java │ │ │ ├── MetaPropertyMapper.java │ │ │ ├── ParamMapper.java │ │ │ ├── ProjectMapper.java │ │ │ ├── RuleMapper.java │ │ │ ├── TreeInfoMapper.java │ │ │ ├── UserMapper.java │ │ │ └── VersionMapper.java │ │ │ └── po │ │ │ ├── ActionPo.java │ │ │ ├── CodeGeneratePo.java │ │ │ ├── EnvironmentPo.java │ │ │ ├── ExecutePo.java │ │ │ ├── FlowPo.java │ │ │ ├── InjectPo.java │ │ │ ├── MappingPo.java │ │ │ ├── MetaClassPo.java │ │ │ ├── MetaEnumPo.java │ │ │ ├── MetaPropertyPo.java │ │ │ ├── ParamPo.java │ │ │ ├── ProjectPo.java │ │ │ ├── RulePo.java │ │ │ ├── TreeInfoPo.java │ │ │ ├── UserPo.java │ │ │ └── VersionPo.java │ │ ├── interfaces │ │ ├── api │ │ │ ├── CaseController.java │ │ │ ├── ProjectController.java │ │ │ ├── SystemController.java │ │ │ ├── TreeController.java │ │ │ └── UserController.java │ │ └── ws │ │ │ └── WebSocketController.java │ │ └── startup │ │ └── ApplicationStartup.java │ └── resources │ ├── application-actuator.yml │ ├── application-h2.yml │ ├── application-mybatisplus.yml │ ├── application-pgsql.yml │ ├── application-testhub.yml │ ├── application-web.yml │ ├── application.yml │ ├── banner.txt │ ├── config │ ├── logback-spring.xml │ └── migration │ │ ├── h2 │ │ ├── V1_0_0__初始化.sql │ │ ├── V1_0_1__初始化.sql │ │ └── V1_0_2__初始化.sql │ │ └── pgsql │ │ ├── V1_0_0__初始化.sql │ │ ├── V1_0_1__初始化.sql │ │ └── V1_0_2__初始化.sql │ └── mapper │ ├── ActionMapper.xml │ ├── CodeGenerateMapper.xml │ ├── EnvironmentMapper.xml │ ├── ExecuteMapper.xml │ ├── FlowMapper.xml │ ├── InjectMapper.xml │ ├── MappingMapper.xml │ ├── MetaClassMapper.xml │ ├── MetaEnumMapper.xml │ ├── MetaPropertyMapper.xml │ ├── ParamMapper.xml │ ├── ProjectMapper.xml │ ├── RuleMapper.xml │ ├── TreeInfoMapper.xml │ ├── UserMapper.xml │ └── VersionMapper.xml └── TestHub-static ├── contact.jpeg └── img ├── check.png ├── check_loop.png ├── check_obj.png ├── convert.png ├── http.png ├── logo.png ├── sql.png ├── 全局行为.jpg ├── 概览.jpg └── 环境级参数.jpg /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | electron-egg/build/jre 3 | target/ 4 | .idea 5 | server/data 6 | client/src/.umi 7 | client/node_modules 8 | electron-egg/node_modules 9 | electron-egg/out 10 | **/.flattened-pom.xml 11 | client/dist 12 | electron-egg/logs 13 | electron-egg/build/extraResources/jdk-17.0.6 14 | electron-egg/build/extraResources/TestHub.jar 15 | electron-egg/public/dist/* 16 | electron-egg/public/!dist/ 17 | electron-egg/build/extraResources/data 18 | client/.vscode 19 | docker/frontend 20 | TestHub-electron/build/jre/win_jre 21 | TestHub-electron/build/jre/mac_jre 22 | TestHub-docker/frontend 23 | TestHub-electron/out 24 | TestHub-electron/node_modules 25 | -------------------------------------------------------------------------------- /TestHub-client/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /.env.local 3 | /.umirc.local.ts 4 | /config/config.local.ts 5 | /src/.umi 6 | /src/.umi-production 7 | /src/.umi-test 8 | /dist 9 | .swc 10 | ./yarn-error.log 11 | 12 | 13 | /release 14 | /static 15 | /versions -------------------------------------------------------------------------------- /TestHub-client/.npmrc: -------------------------------------------------------------------------------- 1 | registry=https://registry.npmmirror.com/ 2 | 3 | -------------------------------------------------------------------------------- /TestHub-client/.prettierignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .umi 3 | .umi-production 4 | -------------------------------------------------------------------------------- /TestHub-client/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 120, 3 | "singleQuote": true, 4 | "trailingComma": "all", 5 | "proseWrap": "never", 6 | "overrides": [{ "files": ".prettierrc", "options": { "parser": "json" } }], 7 | "plugins": ["prettier-plugin-organize-imports", "prettier-plugin-packagejson"] 8 | } -------------------------------------------------------------------------------- /TestHub-client/.umirc.desktop.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'umi'; 2 | import { transitionTimezoneTimestamp } from './src/utils/webpack'; 3 | 4 | export default defineConfig({ 5 | publicPath: './', 6 | history: { 7 | type: 'hash', 8 | }, 9 | define: { 10 | __UMI_ENV__: process.env.UMI_ENV, 11 | __ENV__: process.env.UMI_ENV, 12 | __BUILD_TIME__: transitionTimezoneTimestamp(new Date().getTime()), 13 | __APP_NAME__: process.env.APP_NAME, 14 | __DOC_URL__: "http://www.nsrule.com", 15 | __APP_VERSION__: process.env.APP_VERSION, 16 | __APP_PORT__: process.env.APP_PORT, 17 | }, 18 | headScripts: [ 19 | `window.dataLayer = window.dataLayer || []; 20 | function gtag() { 21 | window.dataLayer.push(arguments); 22 | } 23 | gtag('js', new Date()); 24 | gtag('config', 'G-V8M4E5SF61', { 25 | platform: 'DESKTOP', 26 | version: '${process.env.APP_VERSION}' 27 | });`, 28 | ], 29 | }); 30 | -------------------------------------------------------------------------------- /TestHub-client/public/logo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-client/public/logo.ico -------------------------------------------------------------------------------- /TestHub-client/src/assets/font/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-client/src/assets/font/iconfont.ttf -------------------------------------------------------------------------------- /TestHub-client/src/assets/font/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-client/src/assets/font/iconfont.woff -------------------------------------------------------------------------------- /TestHub-client/src/assets/font/iconfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-client/src/assets/font/iconfont.woff2 -------------------------------------------------------------------------------- /TestHub-client/src/assets/img/contact.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-client/src/assets/img/contact.jpeg -------------------------------------------------------------------------------- /TestHub-client/src/assets/img/theme-auto.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-client/src/assets/img/theme-auto.png -------------------------------------------------------------------------------- /TestHub-client/src/assets/img/theme-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-client/src/assets/img/theme-dark.png -------------------------------------------------------------------------------- /TestHub-client/src/assets/img/theme-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-client/src/assets/img/theme-light.png -------------------------------------------------------------------------------- /TestHub-client/src/assets/logo/logo.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-client/src/assets/logo/logo.icns -------------------------------------------------------------------------------- /TestHub-client/src/assets/logo/logo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-client/src/assets/logo/logo.ico -------------------------------------------------------------------------------- /TestHub-client/src/assets/logo/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-client/src/assets/logo/logo.png -------------------------------------------------------------------------------- /TestHub-client/src/assets/logo/logo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-client/src/assets/logo/logo.webp -------------------------------------------------------------------------------- /TestHub-client/src/blocks/Setting/User/index.less: -------------------------------------------------------------------------------- 1 | .user { 2 | display: flex; 3 | flex-direction: column; 4 | align-items: center; 5 | } 6 | -------------------------------------------------------------------------------- /TestHub-client/src/blocks/Setting/User/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import styles from './index.less'; 3 | import i18n from '@/i18n'; 4 | import { Button } from 'antd'; 5 | import { getUserInfo, setSatoken } from '@/utils/localStorage'; 6 | import { loginOut } from '@/utils'; 7 | 8 | // User 用户信息 9 | export default function User() { 10 | return ( 11 | <> 12 |
13 | 21 |
22 | 23 | ); 24 | } 25 | -------------------------------------------------------------------------------- /TestHub-client/src/components/TestHub/MonacoEditor/MyMonacoEditor/index.less: -------------------------------------------------------------------------------- 1 | .editorContainer { 2 | width: 100%; 3 | height: 100%; 4 | } 5 | -------------------------------------------------------------------------------- /TestHub-client/src/components/TestHub/MonacoEditor/initMonaco.tsx: -------------------------------------------------------------------------------- 1 | import { EditorThemeType } from '@/constants'; 2 | import * as monaco from 'monaco-editor/esm/vs/editor/editor.api'; 3 | 4 | const initMonacoTheme = () => { 5 | monaco.editor.defineTheme(EditorThemeType.DashboardLightTheme, { 6 | base: 'vs', 7 | inherit: true, 8 | rules: [{ background: '#f8f9fa' }] as any, 9 | colors: { 10 | 'editor.foreground': '#000000', 11 | 'editor.background': '#f8f9fa', //背景色 12 | }, 13 | }); 14 | monaco.editor.defineTheme(EditorThemeType.DashboardBlackTheme, { 15 | base: 'vs-dark', 16 | inherit: true, 17 | rules: [{ background: '#131418' }] as any, 18 | colors: { 19 | 'editor.foreground': '#ffffff', 20 | 'editor.background': '#131418', //背景色 21 | }, 22 | }); 23 | }; 24 | 25 | export default initMonacoTheme; 26 | -------------------------------------------------------------------------------- /TestHub-client/src/components/TestHub/assembly/params/index.less: -------------------------------------------------------------------------------- 1 | .effective { 2 | color: var(--color-primary); 3 | } 4 | -------------------------------------------------------------------------------- /TestHub-client/src/components/TestHub/errorBoundary/index.less: -------------------------------------------------------------------------------- 1 | .contentStyle { 2 | margin-top: 16px; 3 | padding: 15px; 4 | // color: rgba(0, 0, 0, 0.45); 5 | font-size: 15px; 6 | // text-align: center; 7 | // background-color: rgba(0, 0, 0, 0.02); 8 | // border: 1px dashed rgb(217, 217, 217); 9 | // border-radius: 8px; 10 | } 11 | -------------------------------------------------------------------------------- /TestHub-client/src/components/TestHub/formulaLog/index.less: -------------------------------------------------------------------------------- 1 | .row_border { 2 | padding: 10px; 3 | border: 1px solid var(--color-border); 4 | } 5 | -------------------------------------------------------------------------------- /TestHub-client/src/components/TestHub/http/ResponseView/index.less: -------------------------------------------------------------------------------- 1 | .responseViewContainer { 2 | width: 100%; 3 | height: 100%; 4 | } 5 | 6 | .responseViewContainerTabs { 7 | width: 100%; 8 | height: 100%; 9 | 10 | .ant-tabs { 11 | height: 100%; 12 | display: flex; 13 | flex-direction: column; 14 | 15 | .ant-tabs-nav { 16 | height: auto; 17 | } 18 | 19 | .ant-tabs-content-holder { 20 | flex: 1; 21 | overflow: scroll; 22 | 23 | .ant-tabs-content { 24 | height: 100%; 25 | .ant-tabs-tabpane-active { 26 | height: 100%; 27 | } 28 | } 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /TestHub-client/src/components/TestHub/http/i18n/en-us/index.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'http.text.url': 'URL', 3 | 'http.text.method': 'Method', 4 | 'http.text.status': 'Status', 5 | 'http.text.statusDesc': 'Status Desc', 6 | 'http.text.error': 'erroe', 7 | 'http.text.pass': 'Pass', 8 | 'http.text.fail': 'Fail', 9 | 'http.columns.param': 'Parameter', 10 | 'http.columns.val': 'Value', 11 | 'http.data.params': 'Params', 12 | 'http.data.rests': 'Rests', 13 | 'http.data.headers': 'Request Headers', 14 | 'http.data.body': 'Request Body', 15 | 'http.data.resbody': 'Response Body', 16 | 'http.data.resheaders': 'Response Headers', 17 | 'http.data.cookies': 'Cookie', 18 | 'http.data.recookies': 'Response Cookie', 19 | 'http.data.req': 'Actual request', 20 | }; 21 | -------------------------------------------------------------------------------- /TestHub-client/src/components/TestHub/http/i18n/zh-cn/index.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'http.text.url': '请求路径', 3 | 'http.text.method': '请求方式', 4 | 'http.text.status': '状态码', 5 | 'http.text.statusDesc': '状态说明', 6 | 'http.text.error': '异常', 7 | 'http.text.pass': '通过', 8 | 'http.text.fail': '失败', 9 | 'http.columns.param': '参数', 10 | 'http.columns.val': '参数值', 11 | 'http.data.params': 'Query参数', 12 | 'http.data.rests': 'Rest参数', 13 | 'http.data.headers': '请求头', 14 | 'http.data.body': '请求体', 15 | 'http.data.resbody': '响应体', 16 | 'http.data.resheaders': '响应头', 17 | 'http.data.cookies': 'Cookie参数', 18 | 'http.data.recookies': '响应Cookie', 19 | 'http.data.req': '实际请求', 20 | } -------------------------------------------------------------------------------- /TestHub-client/src/components/TestHub/plugins/i18n/plugin-en-us.ts: -------------------------------------------------------------------------------- 1 | import checkEnUs from "../item/check/i18n/check-en-us"; 2 | import checkObjEnUs from "../item/checkObj/i18n/checkObj-en-us"; 3 | import httpEnUs from "../item/http/i18n/http-en-us"; 4 | import sleepEnUs from "../item/sleep/i18n/sleep-en-us"; 5 | import sqlEnUs from "../item/sql/i18n/sql-en-us"; 6 | import appEnUs from "../item/app/i18n/app-en-us"; 7 | 8 | export default { 9 | ...appEnUs, 10 | ...httpEnUs, 11 | ...sqlEnUs, 12 | ...checkObjEnUs, 13 | ...checkEnUs, 14 | ...sleepEnUs 15 | } -------------------------------------------------------------------------------- /TestHub-client/src/components/TestHub/plugins/i18n/plugin-zh-cn.ts: -------------------------------------------------------------------------------- 1 | import checkZhCn from "../item/check/i18n/check-zh-cn"; 2 | import checkObjZhCn from "../item/checkObj/i18n/checkObj-zh-cn"; 3 | import httpZhCn from "../item/http/i18n/http-zh-cn"; 4 | import sleepZhCn from "../item/sleep/i18n/sleep-zh-cn"; 5 | import sqlZhCn from "../item/sql/i18n/sql-zh-cn"; 6 | import appZhCn from "../item/app/i18n/app-zh-cn"; 7 | 8 | export default { 9 | ...appZhCn, 10 | ...httpZhCn, 11 | ...sqlZhCn, 12 | ...checkObjZhCn, 13 | ...checkZhCn, 14 | ...sleepZhCn 15 | } -------------------------------------------------------------------------------- /TestHub-client/src/components/TestHub/plugins/item/app/i18n/app-en-us.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'app.text.ip': 'Ip', 3 | 'app.text.appPort': 'Port', 4 | 'app.text.appTimeout': 'Timeout', 5 | 'app.text.errorCode': 'errorCode', 6 | 'app.text.reallyErrorCode': 'reallyError', 7 | 'app.text.request': 'request', 8 | 'app.text.response': 'response', 9 | } -------------------------------------------------------------------------------- /TestHub-client/src/components/TestHub/plugins/item/app/i18n/app-zh-cn.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'app.text.ip': '地址', 3 | 'app.text.appPort': '端口', 4 | 'app.text.appTimeout': '超时时间', 5 | 'app.text.errorCode': '预期错误', 6 | 'app.text.reallyErrorCode': '实际错误', 7 | 'app.text.request': '请求', 8 | 'app.text.response': '响应', 9 | } -------------------------------------------------------------------------------- /TestHub-client/src/components/TestHub/plugins/item/check/entry/index.tsx: -------------------------------------------------------------------------------- 1 | import React, { forwardRef, useImperativeHandle } from 'react'; 2 | 3 | import { RuleActionResDto } from '@/typings'; 4 | interface IProps { 5 | data: RuleActionResDto; 6 | } 7 | 8 | function Check(props: IProps, ref) { 9 | useImperativeHandle(ref, () => ({ 10 | getData: async () => { 11 | return { flag: true, data: { code: 'Check' } }; 12 | }, 13 | })); 14 | 15 | return <>; 16 | } 17 | 18 | export default forwardRef(Check); 19 | -------------------------------------------------------------------------------- /TestHub-client/src/components/TestHub/plugins/item/check/i18n/check-en-us.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'check.text.pass': 'pass', 3 | 'check.text.fail': 'fail', 4 | 'check.text.cover': 'cover', 5 | 'check.text.threshold': 'threshold', 6 | } -------------------------------------------------------------------------------- /TestHub-client/src/components/TestHub/plugins/item/check/i18n/check-zh-cn.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'check.text.pass': '通过', 3 | 'check.text.fail': '失败', 4 | 'check.text.cover': '被阈值', 5 | 'check.text.threshold': '阈值', 6 | } -------------------------------------------------------------------------------- /TestHub-client/src/components/TestHub/plugins/item/checkObj/entry/index.tsx: -------------------------------------------------------------------------------- 1 | import React, { forwardRef, useImperativeHandle, useState } from 'react'; 2 | 3 | import { RuleActionResDto } from '@/typings'; 4 | import { ProForm, ProFormText } from '@ant-design/pro-components'; 5 | import { Col, Form, Row } from 'antd'; 6 | import i18n from '@/i18n'; 7 | interface IProps { 8 | data: RuleActionResDto; 9 | } 10 | 11 | const CheckObj = forwardRef((props: IProps, ref) => { 12 | useImperativeHandle(ref, () => ({ 13 | getData: async () => { 14 | return { flag: true, data: { code: "CheckObj" } }; 15 | }, 16 | })); 17 | 18 | return <> ; 19 | }); 20 | 21 | export default CheckObj; -------------------------------------------------------------------------------- /TestHub-client/src/components/TestHub/plugins/item/checkObj/i18n/checkObj-en-us.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'checkObj.text.pass': 'pass', 3 | 'checkObj.text.fail': 'fail', 4 | 'checkObj.text.cover': 'cover', 5 | 'checkObj.text.threshold': 'threshold', 6 | } -------------------------------------------------------------------------------- /TestHub-client/src/components/TestHub/plugins/item/checkObj/i18n/checkObj-zh-cn.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'checkObj.text.pass': '通过', 3 | 'checkObj.text.fail': '失败', 4 | 'checkObj.text.cover': '被阈值', 5 | 'checkObj.text.threshold': '阈值', 6 | } -------------------------------------------------------------------------------- /TestHub-client/src/components/TestHub/plugins/item/http/i18n/http-en-us.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'http.text.url': 'URL', 3 | 'http.text.method': 'Method', 4 | 'http.text.status': 'Status', 5 | 'http.text.statusDesc': 'Status Desc', 6 | 'http.text.error': 'erroe', 7 | 'http.text.pass': 'Pass', 8 | 'http.text.fail': 'Fail', 9 | 'http.columns.param': 'Parameter', 10 | 'http.columns.val': 'Value', 11 | 'http.data.params': 'Params', 12 | 'http.data.rests': 'Rests', 13 | 'http.data.headers': 'Request Headers', 14 | 'http.data.body': 'Request Body', 15 | 'http.data.resbody': 'Response Body', 16 | 'http.data.resheaders': 'Response Headers', 17 | 'http.data.cookies': 'Cookie', 18 | 'http.data.recookies': 'Response Cookie', 19 | 'http.data.req': 'Actual request', 20 | }; 21 | -------------------------------------------------------------------------------- /TestHub-client/src/components/TestHub/plugins/item/http/i18n/http-zh-cn.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'http.text.url': '请求路径', 3 | 'http.text.method': '请求方式', 4 | 'http.text.status': '状态码', 5 | 'http.text.statusDesc': '状态说明', 6 | 'http.text.error': '异常', 7 | 'http.text.pass': '通过', 8 | 'http.text.fail': '失败', 9 | 'http.columns.param': '参数', 10 | 'http.columns.val': '参数值', 11 | 'http.data.params': 'Params参数', 12 | 'http.data.rests': 'Rests参数', 13 | 'http.data.headers': '请求头', 14 | 'http.data.body': '请求体', 15 | 'http.data.resbody': '响应体', 16 | 'http.data.resheaders': '响应头', 17 | 'http.data.cookies': 'Cookie', 18 | 'http.data.recookies': '响应Cookie', 19 | 'http.data.req': '实际请求', 20 | } -------------------------------------------------------------------------------- /TestHub-client/src/components/TestHub/plugins/item/sleep/entry/index.tsx: -------------------------------------------------------------------------------- 1 | import React, { useImperativeHandle } from 'react'; 2 | 3 | import { RuleActionResDto } from '@/typings'; 4 | interface IProps { 5 | data: RuleActionResDto; 6 | } 7 | 8 | const Sleep = (props: IProps, ref) => { 9 | useImperativeHandle(ref, () => ({ 10 | getData: async () => { 11 | return { flag: true, data: {} }; 12 | }, 13 | })); 14 | 15 | return <>; 16 | }; 17 | 18 | export default Sleep; 19 | -------------------------------------------------------------------------------- /TestHub-client/src/components/TestHub/plugins/item/sleep/i18n/sleep-en-us.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'sleep.text.sleepTime': 'Pause', 3 | 'sleep.text.time': 'millisecond', 4 | } -------------------------------------------------------------------------------- /TestHub-client/src/components/TestHub/plugins/item/sleep/i18n/sleep-zh-cn.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'sleep.text.sleepTime': '暂停时间', 3 | 'sleep.text.time': '毫秒', 4 | } -------------------------------------------------------------------------------- /TestHub-client/src/components/TestHub/plugins/item/sleep/result/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Descriptions } from 'antd'; 3 | import { ExecuteResult, ExecutionResult, FlowResult } from '@/typings/server/execution'; 4 | import i18n from '@/i18n'; 5 | interface IProps { 6 | className?: string; 7 | size: number; 8 | flowResult: FlowResult; 9 | executionResult: ExecutionResult; 10 | executeResult: ExecuteResult; 11 | } 12 | 13 | function Sleep(props: IProps) { 14 | const { executeResult } = props; 15 | 16 | return ( 17 | <> 18 | {executeResult.runStateItem != undefined && ( 19 | 20 | {i18n('sleep.text.sleepTime')}}> 21 | {executeResult.runStateItem.runParams['sleepTime']} {' '} {i18n('sleep.text.time')} 22 | 23 | 24 | )} 25 | 26 | ); 27 | } 28 | 29 | export default Sleep; 30 | -------------------------------------------------------------------------------- /TestHub-client/src/components/TestHub/plugins/item/sql/i18n/sql-en-us.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'sql.text.url': 'Url', 3 | 'sql.text.Driver': 'Driver', 4 | 'sql.text.User': 'User', 5 | 'sql.text.Password': 'Password', 6 | 'sql.text.timeout': 'Timeout', 7 | 'sql.text.timeouttip': 'millisecond', 8 | 'sql.text.query': 'Query', 9 | 'sql.text.yes': 'yes', 10 | 'sql.text.no': 'no', 11 | 'sql.text.conkey': 'Transaction', 12 | 'sql.text.commit': 'Auto Commit' 13 | } -------------------------------------------------------------------------------- /TestHub-client/src/components/TestHub/plugins/item/sql/i18n/sql-zh-cn.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'sql.text.url': '连接地址', 3 | 'sql.text.Driver': '驱动', 4 | 'sql.text.User': '用户', 5 | 'sql.text.Password': '密码', 6 | 'sql.text.timeout': '超时时间', 7 | 'sql.text.timeouttip': '毫秒', 8 | 'sql.text.query': '是否查询', 9 | 'sql.text.yes': '是', 10 | 'sql.text.no': '否', 11 | 'sql.text.conkey': '事务ID', 12 | 'sql.text.commit': '自动提交' 13 | } -------------------------------------------------------------------------------- /TestHub-client/src/components/base/BrandLogo/index.less: -------------------------------------------------------------------------------- 1 | @import '../../../styles/var.less'; 2 | 3 | .box { 4 | display: flex; 5 | justify-content: center; 6 | border-radius: 10%; 7 | overflow: hidden; 8 | img { 9 | display: block; 10 | height: 100%; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /TestHub-client/src/components/base/BrandLogo/index.tsx: -------------------------------------------------------------------------------- 1 | import React, { memo } from 'react'; 2 | import styles from './index.less'; 3 | import classnames from 'classnames'; 4 | import logo from '@/assets/logo/logo.webp'; 5 | 6 | interface IProps extends React.DetailedHTMLProps, HTMLDivElement> { 7 | className?: any; 8 | size?: number; 9 | } 10 | 11 | export default memo(({ className, size = 48, ...res }) => { 12 | return ( 13 |
14 | 15 |
16 | ); 17 | }); 18 | -------------------------------------------------------------------------------- /TestHub-client/src/components/base/Contact/index.less: -------------------------------------------------------------------------------- 1 | .contact { 2 | display: flex; 3 | align-items: center; 4 | flex-direction: column; 5 | .icons { 6 | margin-top: 5px; 7 | .icon { 8 | font-size: 18px; 9 | cursor: pointer; 10 | } 11 | .notFirst { 12 | margin-left: 20px; 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /TestHub-client/src/components/base/Empty/index.less: -------------------------------------------------------------------------------- 1 | .empty { 2 | width: 100%; 3 | height: 100%; 4 | display: flex; 5 | justify-content: center; 6 | align-items: center; 7 | .ears { 8 | font-size: 120px; 9 | font-weight: 900; 10 | color: var(--color-text); 11 | opacity: 0.15; 12 | overflow: hidden; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /TestHub-client/src/components/base/Empty/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import styles from './index.less'; 3 | interface IProps {} 4 | function Empty(props: IProps) { 5 | return ( 6 |
7 |
{__APP_NAME__}
8 |
9 | ); 10 | } 11 | 12 | export default Empty; 13 | -------------------------------------------------------------------------------- /TestHub-client/src/components/base/Loading/LazyLoading/index.less: -------------------------------------------------------------------------------- 1 | @import '../../../styles/var.less'; 2 | .box { 3 | .f-fill-absolute(); 4 | display: flex; 5 | justify-content: center; 6 | align-items: center; 7 | background-color: var(--color-bg-100); 8 | } 9 | -------------------------------------------------------------------------------- /TestHub-client/src/components/base/Loading/LazyLoading/index.tsx: -------------------------------------------------------------------------------- 1 | import React, { memo } from 'react'; 2 | import styles from './index.less'; 3 | import classnames from 'classnames'; 4 | import Loading from '@/components/base/Loading/Loading'; 5 | 6 | interface IProps { 7 | className?: string; 8 | } 9 | 10 | export default memo(({ className }) => { 11 | return ( 12 |
13 | 14 |
15 | ); 16 | }); 17 | -------------------------------------------------------------------------------- /TestHub-client/src/components/base/Loading/LoadingContent/index.less: -------------------------------------------------------------------------------- 1 | .loadingContent { 2 | position: relative; 3 | } 4 | 5 | .stateIndicator { 6 | width: 200px; 7 | height: 200px; 8 | } 9 | 10 | .empty { 11 | height: 100%; 12 | display: flex; 13 | justify-content: center; 14 | align-items: center; 15 | img { 16 | max-width: 100%; 17 | } 18 | } 19 | 20 | .coverLoading { 21 | position: absolute; 22 | inset: 0; 23 | background-color: rgba(0, 0, 0, 0.01); 24 | display: flex; 25 | justify-content: center; 26 | align-items: center; 27 | z-index: 999; 28 | } 29 | -------------------------------------------------------------------------------- /TestHub-client/src/components/base/Loading/LoadingLiquid/index.less: -------------------------------------------------------------------------------- 1 | .box { 2 | svg { 3 | width: 0; 4 | height: 0; 5 | } 6 | } 7 | 8 | .loading { 9 | width: 200px; 10 | height: 200px; 11 | position: relative; 12 | filter: url(#gooey); 13 | } 14 | 15 | .loading span { 16 | position: absolute; 17 | top: 0; 18 | left: 0; 19 | width: 100%; 20 | height: 100%; 21 | display: block; 22 | animation: loading 4s ease-in-out infinite; 23 | /* var函数用来插入css变量的值,css变量名称以--开头 */ 24 | animation-delay: calc(0.2s * var(--i)); 25 | } 26 | 27 | .loading span::before { 28 | content: ''; 29 | position: absolute; 30 | top: 0; 31 | left: calc(50% - 20px); 32 | width: 40px; 33 | height: 40px; 34 | background: linear-gradient(#fce4ec, #03a9f4); 35 | border-radius: 50%; 36 | box-shadow: 0 0 30px #03a9f4; 37 | } 38 | 39 | @keyframes loading { 40 | 0% { 41 | transform: rotate(0deg); 42 | } 43 | 44 | 50%, 45 | 100% { 46 | transform: rotate(360deg); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /TestHub-client/src/components/base/MenuLabel/index.less: -------------------------------------------------------------------------------- 1 | @import '../../../styles/var.less'; 2 | 3 | .menuLabel { 4 | display: flex; 5 | align-items: center; 6 | .menuLabelIconBox { 7 | width: 22px; 8 | display: flex; 9 | align-items: center; 10 | } 11 | // .menuLabelIcon { 12 | // } 13 | // .menuLabelTitle { 14 | // } 15 | .menuLabelIconBright { 16 | color: var(--color-primary); 17 | } 18 | :global { 19 | .ant-dropdown { 20 | z-index: 1080; 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /TestHub-client/src/components/base/MenuLabel/index.tsx: -------------------------------------------------------------------------------- 1 | import React, { memo } from 'react'; 2 | import classnames from 'classnames'; 3 | import Iconfont from '@/components/base/Iconfont'; 4 | import styles from './index.less'; 5 | 6 | interface IProps { 7 | className?: string; 8 | icon?: string; 9 | iconBright?: boolean; 10 | label: string; 11 | } 12 | 13 | export default memo((props) => { 14 | const { className, icon, label, iconBright } = props; 15 | return ( 16 |
17 |
18 | {icon && ( 19 | 23 | )} 24 |
25 |
{label}
26 |
27 | ); 28 | }); 29 | -------------------------------------------------------------------------------- /TestHub-client/src/components/base/TextHighlighter/index.less: -------------------------------------------------------------------------------- 1 | .highlightStyle { 2 | color: var(--red); 3 | font-weight: 900; 4 | } 5 | -------------------------------------------------------------------------------- /TestHub-client/src/components/base/TextHighlighter/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Highlighter from 'react-highlight-words'; 3 | import styles from './index.less'; 4 | interface IProps { 5 | words: string[]; 6 | text: string; 7 | className?: string; 8 | } 9 | function TextHighlighter(props: IProps) { 10 | const highlightStyle = { 11 | color: 'red', // 设置高亮文本的颜色为红色 12 | fontWeight: 'bold', // 可以根据需要设置其他样式,比如加粗 13 | }; 14 | const { className, words, text } = props; 15 | return ( 16 | 23 | ); 24 | } 25 | 26 | export default TextHighlighter; 27 | -------------------------------------------------------------------------------- /TestHub-client/src/constants/common.ts: -------------------------------------------------------------------------------- 1 | export enum ConsoleStatus { 2 | DRAFT = 'DRAFT', 3 | RELEASE = 'RELEASE', 4 | } 5 | 6 | export enum OSType { 7 | WIN = 'Win', 8 | MAC = 'Mac', 9 | RESTS = 'rests', 10 | } 11 | 12 | export enum ConnectionKind { 13 | Private = 'PRIVATE', 14 | Shared = 'SHARED' 15 | } 16 | -------------------------------------------------------------------------------- /TestHub-client/src/constants/console.ts: -------------------------------------------------------------------------------- 1 | 2 | export enum ConsoleOpenedStatus { 3 | IS_OPEN = 'y', 4 | NOT_OPEN = 'n', 5 | } 6 | -------------------------------------------------------------------------------- /TestHub-client/src/constants/index.ts: -------------------------------------------------------------------------------- 1 | export * from './common'; 2 | export * from './table'; 3 | export * from './theme'; 4 | export * from './console'; 5 | 6 | -------------------------------------------------------------------------------- /TestHub-client/src/constants/table.ts: -------------------------------------------------------------------------------- 1 | export enum TableDataType { 2 | BOOLEAN = 'BOOLEAN', 3 | NUMERIC = 'NUMERIC', 4 | STRING = 'STRING', 5 | DATETIME = 'DATETIME', 6 | // 暂时不适配 7 | BINARY = 'BINARY', 8 | CONTENT = 'CONTENT', 9 | STRUCT = 'STRUCT', 10 | DOCUMENT = 'DOCUMENT', 11 | ARRAY = 'ARRAY', 12 | OBJECT = 'OBJECT', 13 | REFERENCE = 'REFERENCE', 14 | ROWID = 'ROWID', 15 | ANY = 'ANY', 16 | UNKNOWN = 'UNKNOWN', 17 | CHAT2DB_ROW_NUMBER = 'CHAT2DB_ROW_NUMBER', 18 | } 19 | 20 | export enum StatusType { 21 | SUCCESS = 'success', 22 | FAIL = 'fail', 23 | } 24 | -------------------------------------------------------------------------------- /TestHub-client/src/constants/theme.ts: -------------------------------------------------------------------------------- 1 | export enum ThemeType { 2 | Light = 'light', 3 | Dark = 'dark', 4 | FollowOs = 'followOs', 5 | } 6 | 7 | export enum EditorThemeType { 8 | DashboardLightTheme = 'DashboardLightTheme', 9 | DashboardBlackTheme = 'DashboardBlackTheme', 10 | } 11 | 12 | export enum MyEditorThemeType { 13 | LightTheme = 'LightTheme', 14 | BlackTheme = 'BlackTheme', 15 | } 16 | 17 | export enum PrimaryColorType { 18 | Polar_Green = 'polar-green', 19 | Golden_Purple = 'golden-purple', 20 | Polar_Blue = 'polar-blue', 21 | Silver = 'silver', 22 | Red = 'red', 23 | Orange = 'orange', 24 | Blue2 = 'blue2', 25 | Gold = 'gold', 26 | } 27 | 28 | export enum LangType { 29 | EN_US = 'en-us', 30 | ZH_CN = 'zh-cn', 31 | // TR_TR = 'tr-tr', 32 | // JA_JP = 'ja-jp', 33 | } 34 | -------------------------------------------------------------------------------- /TestHub-client/src/electron/main.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * 主进程与渲染进程通信频道定义 4 | * Definition of communication channels between main process and rendering process 5 | */ 6 | const ipcApiRoute = { 7 | // framework 8 | javaServerStatus: 'controller.framework.runStatus', 9 | startJavaServer: 'controller.framework.startJavaServer', 10 | closeJavaServer: 'controller.framework.closeJavaServer', 11 | 12 | } 13 | 14 | export { 15 | ipcApiRoute 16 | } 17 | 18 | -------------------------------------------------------------------------------- /TestHub-client/src/hooks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './useTheme'; 2 | export * from './useUpdateEffect'; 3 | export * from './useEventSource'; 4 | -------------------------------------------------------------------------------- /TestHub-client/src/hooks/useUpdateEffect.ts: -------------------------------------------------------------------------------- 1 | import { useRef, useEffect } from 'react'; 2 | 3 | /** 4 | * 第一次Effect更新不执行 5 | * @param fn 6 | * @param arr 7 | */ 8 | export function useUpdateEffect(fn: Function, arr: any[]) { 9 | const first = useRef(true); 10 | useEffect(() => { 11 | if (first.current) { 12 | first.current = false; 13 | } else { 14 | fn(); 15 | } 16 | }, arr); 17 | } 18 | -------------------------------------------------------------------------------- /TestHub-client/src/i18n/en-us/index.ts: -------------------------------------------------------------------------------- 1 | import common from './common'; 2 | import menu from './menu'; 3 | import login from './login'; 4 | import caseUS from './caseUS'; 5 | import setting from './setting'; 6 | import testhub from './testhub'; 7 | import { LangType } from '@/constants'; 8 | import httpEnUs from '@/components/TestHub/http/i18n/en-us'; 9 | import pluginEnUs from '@/components/TestHub/plugins/i18n/plugin-en-us'; 10 | 11 | export default { 12 | lang: LangType.EN_US, 13 | ...common, 14 | ...setting, 15 | ...testhub, 16 | ...menu, 17 | ...caseUS, 18 | ...login, 19 | ...httpEnUs, 20 | ...pluginEnUs 21 | }; 22 | -------------------------------------------------------------------------------- /TestHub-client/src/i18n/en-us/login.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'login.text.logout': 'Logout', 3 | 'login.text.welcome': 'Welcome to Chat2DB', 4 | 'login.text.tips': 'The Chat2DB account is only for team collaboration management.', 5 | 'login.text.tips.title': 'Why need login?', 6 | 'login.text.setting': 'Setting', 7 | 'login.form.user': 'UserName', 8 | 'login.form.user.placeholder': 'Please enter your username', 9 | 'login.form.password': 'Password', 10 | 'login.form.password.placeholder': 'Please enter your password', 11 | 'login.button.login': 'Login', 12 | 'login.tips.defaultPassword': 'The default user name and password are: chat2db', 13 | }; 14 | -------------------------------------------------------------------------------- /TestHub-client/src/i18n/en-us/menu.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'menu.file' : 'File' 3 | } -------------------------------------------------------------------------------- /TestHub-client/src/i18n/zh-cn/index.ts: -------------------------------------------------------------------------------- 1 | import menu from './menu'; 2 | import common from './common'; 3 | import login from './login'; 4 | import caseCN from './caseCN'; 5 | import setting from './setting'; 6 | import testhub from './testhub'; 7 | import { LangType } from '@/constants' 8 | import httpEnUs from '@/components/TestHub/http/i18n/zh-cn'; 9 | import pluginZhCn from '@/components/TestHub/plugins/i18n/plugin-zh-cn'; 10 | 11 | export default { 12 | lang: LangType.ZH_CN, 13 | ...common, 14 | ...menu, 15 | ...login, 16 | ...caseCN, 17 | ...setting, 18 | ...testhub, 19 | ...httpEnUs, 20 | ...pluginZhCn 21 | }; 22 | -------------------------------------------------------------------------------- /TestHub-client/src/i18n/zh-cn/login.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'login.text.logout': '退出登录', 3 | 'login.text.welcome': '欢迎使用 Chat2DB', 4 | 'login.text.tips': 'Chat2DB 账号仅用于团队协作管理', 5 | 'login.text.tips.title': '为什么需要登录?', 6 | 'login.text.setting': '设 置', 7 | 'login.form.user': '用户名', 8 | 'login.form.user.placeholder': '请输入用户名', 9 | 'login.form.password': '密码', 10 | 'login.form.password.placeholder': '请输入密码', 11 | 'login.button.login': '登 录', 12 | 'login.tips.defaultPassword': '默认用户名和密码均为: chat2db', 13 | }; 14 | -------------------------------------------------------------------------------- /TestHub-client/src/i18n/zh-cn/menu.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'menu.file': 'File' 3 | } 4 | -------------------------------------------------------------------------------- /TestHub-client/src/layouts/GlobalLayout/ServerLoading/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import './index.less'; 3 | 4 | // TODO: 首屏以及懒加载Lodding效果 5 | const ServerLoading = () => { 6 | return ( 7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | ); 19 | }; 20 | 21 | export default ServerLoading; 22 | -------------------------------------------------------------------------------- /TestHub-client/src/layouts/init/GlobalComponent.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import MyNotification from '@/components/base/MyNotification'; 3 | import Modal from '@/components/base/Modal/BaseModal'; 4 | 5 | const GlobalComponent = () => { 6 | return ( 7 | <> 8 | 9 | 10 | 11 | ); 12 | }; 13 | 14 | export default GlobalComponent; 15 | -------------------------------------------------------------------------------- /TestHub-client/src/layouts/init/registerMessage.ts: -------------------------------------------------------------------------------- 1 | import { message } from 'antd'; 2 | 3 | export default () => { 4 | message.config({ 5 | maxCount: 1, 6 | duration: 3, 7 | }); 8 | }; 9 | -------------------------------------------------------------------------------- /TestHub-client/src/layouts/init/registerNotification.ts: -------------------------------------------------------------------------------- 1 | import { notification } from 'antd'; 2 | 3 | export default () => { 4 | notification.config({ 5 | placement: 'BottomRight', 6 | maxCount: 2, 7 | duration: null, 8 | }); 9 | }; 10 | -------------------------------------------------------------------------------- /TestHub-client/src/pages/document.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | TestHub 9 | 10 | 11 | 12 | 13 | 15 | 16 | 17 | 18 |
19 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /TestHub-client/src/pages/main/case/components/CaseRight/index.less: -------------------------------------------------------------------------------- 1 | .casePageRight { 2 | height: 100%; 3 | display: flex; 4 | flex-direction: column; 5 | .casePageTabs { 6 | height: auto; 7 | } 8 | .casePageContent { 9 | flex: 1; 10 | position: relative; 11 | 12 | .windowContent { 13 | z-index: 2; 14 | position: absolute; 15 | left: 0; 16 | bottom: 0; 17 | height: 100%; 18 | width: 100%; 19 | } 20 | 21 | .concealTab { 22 | opacity: 0; 23 | z-index: 1; 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /TestHub-client/src/pages/main/case/components/caseResult/components/caseResultLeft/index.less: -------------------------------------------------------------------------------- 1 | // // @import '../../../../../../var.less'; 2 | 3 | // .box { 4 | // padding: 20px 10px; 5 | // } 6 | -------------------------------------------------------------------------------- /TestHub-client/src/pages/main/case/components/caseResult/index.less: -------------------------------------------------------------------------------- 1 | .caseResult { 2 | opacity: 1; 3 | height: 100%; 4 | display: flex; 5 | } 6 | .caseResultRight { 7 | width: 0px; 8 | flex: 1; 9 | overflow: auto; 10 | } 11 | .caseResultLeft { 12 | position: relative; 13 | width: 260px; 14 | min-width: 260px; 15 | max-width: 300px; 16 | overflow: hidden; 17 | transition: width 0.2s background 0.3s; 18 | } 19 | -------------------------------------------------------------------------------- /TestHub-client/src/pages/main/case/components/caseRunParam/index.less: -------------------------------------------------------------------------------- 1 | @import '../../../../var.less'; 2 | 3 | .stepContent{ 4 | 5 | } 6 | .stepContentHide { 7 | // display: none; 8 | visibility: hidden; 9 | height: 0; 10 | width: 0; 11 | overflow: hidden; 12 | } -------------------------------------------------------------------------------- /TestHub-client/src/pages/main/case/index.less: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-client/src/pages/main/case/index.less -------------------------------------------------------------------------------- /TestHub-client/src/pages/main/http/components/HttpRigth/index.less: -------------------------------------------------------------------------------- 1 | .httpPageRight { 2 | height: 100%; 3 | display: flex; 4 | flex-direction: column; 5 | .httpPageTabs { 6 | height: auto; 7 | } 8 | .httpPageContent { 9 | flex: 1; 10 | position: relative; 11 | 12 | .windowContent { 13 | z-index: 2; 14 | position: absolute; 15 | left: 0; 16 | bottom: 0; 17 | height: 100%; 18 | width: 100%; 19 | } 20 | 21 | .concealTab { 22 | opacity: 0; 23 | z-index: 1; 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /TestHub-client/src/pages/main/http/index.less: -------------------------------------------------------------------------------- 1 | .httpPage { 2 | } 3 | -------------------------------------------------------------------------------- /TestHub-client/src/pages/main/meta/components/MetaLeft/index.less: -------------------------------------------------------------------------------- 1 | .metaLeft { 2 | // color: var(--color-text-secondary); 3 | // padding-left: 5px; 4 | 5 | 6 | .dcardsec { 7 | background-color: var(--color-bg-base); 8 | display: flex; 9 | flex-flow: row nowrap; 10 | padding: 8px 12px; 11 | margin: 10px 16px; 12 | border-radius: 8px; 13 | cursor: pointer; 14 | font-size: 14px; 15 | 16 | .icon { 17 | width: 20px; 18 | padding: 0 5px; 19 | } 20 | 21 | .main { 22 | width: calc(100% - 30px); 23 | overflow: hidden; 24 | text-overflow: ellipsis; 25 | max-width: calc(100% - 30px); 26 | } 27 | } 28 | 29 | .dcardsec:hover { 30 | color: var(--color-primary-hover); 31 | // background-color: var(--color-hover-bg); 32 | } 33 | 34 | .activate { 35 | color: var(--color-primary-hover); 36 | background-color: var(--color-hover-bg); 37 | } 38 | 39 | } -------------------------------------------------------------------------------- /TestHub-client/src/pages/main/meta/components/MetaRight/index.less: -------------------------------------------------------------------------------- 1 | .metaRight { 2 | padding: 10px 15px 0 15px; 3 | height: calc(100% - 10px); 4 | display: flex; 5 | flex-direction: column; 6 | 7 | .title { 8 | padding: 5px 0; 9 | height: 24px; 10 | border-bottom: 1px dashed var(--color-border); 11 | 12 | .titleName { 13 | text-overflow: ellipsis; 14 | color: rgba(0, 0, 0, 0.88); 15 | font-weight: 600; 16 | font-size: 16px; 17 | line-height: 1.5; 18 | } 19 | } 20 | 21 | .body { 22 | flex: 1; 23 | // padding: 0 10px; 24 | // overflow: scroll; 25 | // display: flex; 26 | // flex-direction: column; 27 | // overflow: hidden; 28 | } 29 | } -------------------------------------------------------------------------------- /TestHub-client/src/pages/main/meta/index.less: -------------------------------------------------------------------------------- 1 | .metaPage {} -------------------------------------------------------------------------------- /TestHub-client/src/pages/main/test/index.less: -------------------------------------------------------------------------------- 1 | .container { 2 | width: 100%; 3 | height: 100%; 4 | display: flex; 5 | } 6 | -------------------------------------------------------------------------------- /TestHub-client/src/pages/main/tools/components/ToolsLeft/index.less: -------------------------------------------------------------------------------- 1 | .category { 2 | color: var(--color-text-secondary); 3 | padding-left: 5px; 4 | } 5 | .dcardsec { 6 | background-color: var(--color-bg-base); 7 | display: flex; 8 | flex-flow: row nowrap; 9 | padding: 5px 10px; 10 | margin: 8px 16px; 11 | border-radius: 5px; 12 | cursor: pointer; 13 | font-size: 14px; 14 | 15 | .icon { 16 | width: 20px; 17 | padding: 0 5px; 18 | } 19 | 20 | .main { 21 | width: calc(100% - 30px); 22 | overflow: hidden; 23 | text-overflow: ellipsis; 24 | max-width: calc(100% - 30px); 25 | } 26 | } 27 | .dcardsec:hover { 28 | color: var(--color-primary-hover); 29 | // background-color: var(--color-hover-bg); 30 | } 31 | 32 | .activate { 33 | color: var(--color-primary-hover); 34 | background-color: var(--color-hover-bg); 35 | } 36 | -------------------------------------------------------------------------------- /TestHub-client/src/pages/main/tools/components/ToolsRight/index.less: -------------------------------------------------------------------------------- 1 | .toolsRight { 2 | padding: 10px 15px; 3 | flex: 1; 4 | height: calc(100% - 20px); 5 | display: flex; 6 | flex-direction: column; 7 | 8 | .title { 9 | padding: 5px 0; 10 | height: 24px; 11 | text-overflow: ellipsis; 12 | color: rgba(0, 0, 0, 0.88); 13 | font-weight: 600; 14 | font-size: 16px; 15 | line-height: 1.5; 16 | border-bottom: 1px dashed var(--color-border); 17 | 18 | } 19 | 20 | .body { 21 | flex: 1; 22 | padding: 0 10px; 23 | // display: flex; 24 | // flex-direction: column; 25 | // overflow: hidden; 26 | } 27 | } -------------------------------------------------------------------------------- /TestHub-client/src/pages/main/tools/components/ToolsRight/index.tsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useState } from 'react'; 2 | // import { PageContainer } from '@ant-design/pro-layout'; 3 | import classnames from 'classnames'; 4 | import styles from './index.less'; 5 | interface IProps { 6 | toolCode: string | null; 7 | toolName: string | null; 8 | hidden: boolean; 9 | itemContainer?: React.ReactNode; 10 | } 11 | 12 | function ToolsRight(props: IProps) { 13 | // console.log(props.itemContainer); 14 | return ( 15 | <> 16 | 22 | 23 | ); 24 | } 25 | 26 | export default ToolsRight; 27 | -------------------------------------------------------------------------------- /TestHub-client/src/pages/main/tools/index.less: -------------------------------------------------------------------------------- 1 | .httpPage { 2 | } 3 | -------------------------------------------------------------------------------- /TestHub-client/src/store/common/components.ts: -------------------------------------------------------------------------------- 1 | import { useCommonStore } from './index'; 2 | import { IModalData } from '@/components/base/Modal/BaseModal'; 3 | 4 | export interface IComponentsContent { 5 | openModal: ((params: IModalData) => void) | null; 6 | } 7 | 8 | export const initComponentsContent = { 9 | openModal: null, 10 | }; 11 | 12 | export const injectOpenModal = (openModal: IComponentsContent['openModal']) => { 13 | return useCommonStore.setState({ openModal }); 14 | }; 15 | 16 | export const openModal = (modal: IModalData) => { 17 | return useCommonStore.getState().openModal?.(modal); 18 | }; 19 | -------------------------------------------------------------------------------- /TestHub-client/src/store/common/copyFocusedContent.ts: -------------------------------------------------------------------------------- 1 | import {useCommonStore} from './index' 2 | export interface ICopyFocusedContent { 3 | focusedContent: any[][]| any[] | string | null; 4 | } 5 | 6 | export const initCopyFocusedContent = { 7 | focusedContent: null, 8 | } 9 | 10 | export const setFocusedContent: (content: any[][] | any[] | string | null) => void = (focusedContent) => { 11 | return useCommonStore.setState({focusedContent}) 12 | } 13 | -------------------------------------------------------------------------------- /TestHub-client/src/store/common/index.ts: -------------------------------------------------------------------------------- 1 | import { UseBoundStoreWithEqualityFn, createWithEqualityFn } from 'zustand/traditional'; 2 | import { devtools } from 'zustand/middleware'; 3 | import { shallow } from 'zustand/shallow'; 4 | import { StoreApi } from 'zustand'; 5 | 6 | import { initCopyFocusedContent, ICopyFocusedContent } from './copyFocusedContent'; 7 | import { initComponentsContent, IComponentsContent } from './components'; 8 | 9 | export type IStore = ICopyFocusedContent & IComponentsContent; 10 | 11 | export const useCommonStore: UseBoundStoreWithEqualityFn> = createWithEqualityFn( 12 | devtools( 13 | () => ({ 14 | ...initCopyFocusedContent, 15 | ...initComponentsContent, 16 | }), 17 | ), 18 | shallow 19 | ); 20 | -------------------------------------------------------------------------------- /TestHub-client/src/styles/common.less: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-client/src/styles/common.less -------------------------------------------------------------------------------- /TestHub-client/src/theme/common.ts: -------------------------------------------------------------------------------- 1 | export const commonToken = { 2 | fontSize: 14, 3 | wireframe: true, 4 | borderRadius: 4, 5 | borderRadiusLG: 8, 6 | }; 7 | -------------------------------------------------------------------------------- /TestHub-client/src/theme/custom/dark.less: -------------------------------------------------------------------------------- 1 | :root [theme='dark'] { 2 | --custom-color-icon: #5c5d5e; 3 | } 4 | -------------------------------------------------------------------------------- /TestHub-client/src/theme/custom/light.less: -------------------------------------------------------------------------------- 1 | html[theme='light'] { 2 | --custom-color-icon: #383d4b; 3 | } 4 | -------------------------------------------------------------------------------- /TestHub-client/src/typings/client/index.ts: -------------------------------------------------------------------------------- 1 | export * from './testHub'; 2 | 3 | export enum ConsoleStatus { 4 | //参考 git status 5 | UNTRACKED = 'UNTRACKED', //草稿。 未跟踪Untracked 6 | SAVED = 'SAVED', //已保存。 已跟踪tracked 7 | CHANGE = 'CHANGE', //变更。 已修改Changes not staged for commit 8 | } 9 | export interface ConsoleInfo { 10 | name: string; // 名称 11 | id?: number; 12 | key: string; // key 唯一 13 | status: ConsoleStatus; //状态 14 | data: D; //节点 数据 15 | oldData: D; //旧节点 数据 16 | page: P; // 页面临时不需要保存的数据 17 | } 18 | 19 | 20 | -------------------------------------------------------------------------------- /TestHub-client/src/typings/index.ts: -------------------------------------------------------------------------------- 1 | export * from './common'; 2 | export * from './main'; 3 | export * from './theme'; 4 | export * from './tree'; 5 | 6 | export * from './client'; 7 | export * from './server'; 8 | -------------------------------------------------------------------------------- /TestHub-client/src/typings/main.ts: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export interface INavItem { 4 | key: string; 5 | icon: string; 6 | component?: React.ReactNode; 7 | openBrowser?: string; 8 | iconFontSize?: number; 9 | isLoad: boolean; 10 | name: string; 11 | } 12 | -------------------------------------------------------------------------------- /TestHub-client/src/typings/server/base.ts: -------------------------------------------------------------------------------- 1 | export interface TreeNodeResDto { 2 | /** key */ 3 | index: string; 4 | /** 是否是文件夹 */ 5 | isFolder: boolean; 6 | /** 子节点列表 */ 7 | children: string[], 8 | /** 内容 */ 9 | data: TreeNodeDataResDto, 10 | /** 是否可以重命名 */ 11 | canRename: boolean; 12 | /** 是否可以移动 */ 13 | canMove: boolean; 14 | } 15 | export interface TreeNodeDataResDto { 16 | /** key */ 17 | key: string; 18 | /** key */ 19 | parentKey: string; 20 | /** name */ 21 | name: string; 22 | /** 节点类型 */ 23 | nodeType: string; 24 | /** 内容 */ 25 | info?: D; 26 | } 27 | 28 | 29 | -------------------------------------------------------------------------------- /TestHub-client/src/typings/server/index.ts: -------------------------------------------------------------------------------- 1 | export * from './base'; 2 | export * from './user'; 3 | export * from './case'; 4 | export * from './project'; 5 | export * from './plugins'; 6 | export * from './execution'; 7 | -------------------------------------------------------------------------------- /TestHub-client/src/typings/server/plugins/app.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-client/src/typings/server/plugins/app.ts -------------------------------------------------------------------------------- /TestHub-client/src/typings/server/plugins/http.ts: -------------------------------------------------------------------------------- 1 | export interface HttpDirDto { 2 | 3 | /** 项目 */ 4 | projectCode: string; 5 | 6 | /** 父节点key */ 7 | parentId: number; 8 | id: number; 9 | /** 名称 */ 10 | name: string; 11 | } 12 | export interface HttpRenameDto { 13 | id: number; 14 | /** 名称 */ 15 | name: string; 16 | } 17 | 18 | 19 | export interface HttpApiSendResDto { 20 | uuid: string; 21 | timeout?: number; 22 | reqType?: string; 23 | method?: string; 24 | url?: string; 25 | 26 | rests?: Record; 27 | params?: Record; 28 | headers?: Record; 29 | cookies?: Record; 30 | body?: string; 31 | 32 | reHeaders?: Record; 33 | reCookies?: Record; 34 | reType?: string; 35 | resData?: string; 36 | error?: string; 37 | statusCode?: string; 38 | statusName?: string; 39 | } 40 | -------------------------------------------------------------------------------- /TestHub-client/src/typings/server/plugins/index.ts: -------------------------------------------------------------------------------- 1 | export * from './app'; 2 | export * from './http'; -------------------------------------------------------------------------------- /TestHub-client/src/typings/theme.ts: -------------------------------------------------------------------------------- 1 | import { ThemeType, PrimaryColorType } from '@/constants'; 2 | 3 | export interface ITheme { 4 | backgroundColor: ThemeType; 5 | primaryColor: PrimaryColorType; 6 | } 7 | -------------------------------------------------------------------------------- /TestHub-client/src/typings/tree.ts: -------------------------------------------------------------------------------- 1 | export interface RenameDto { 2 | key: string; 3 | /** 名称 */ 4 | name: string; 5 | 6 | } -------------------------------------------------------------------------------- /TestHub-client/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./src/.umi/tsconfig.json", 3 | "compilerOptions": { 4 | "moduleResolution": "node", 5 | "jsx": "react-jsx", 6 | "noImplicitAny": false 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /TestHub-demo/TestHubDemo/demo备份/h2db.mv.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-demo/TestHubDemo/demo备份/h2db.mv.db -------------------------------------------------------------------------------- /TestHub-demo/TestHubDemo/env/pgsql/init.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE "public"."test_order" ( 2 | "id" int8 NOT NULL, 3 | "code" varchar(255) COLLATE "pg_catalog"."default", 4 | "acct_id" int4, 5 | "order_price" numeric(10,2), 6 | "order_qty" int4, 7 | "order_amt" numeric(10,2), 8 | CONSTRAINT "test_order_pkey" PRIMARY KEY ("id") 9 | ) 10 | ; 11 | 12 | ALTER TABLE "public"."test_order" 13 | OWNER TO "postgres"; 14 | 15 | 16 | CREATE TABLE "public"."test_account" ( 17 | "id" int4 NOT NULL, 18 | "usable_amt" numeric(10,2) NOT NULL, 19 | CONSTRAINT "test_account_pkey" PRIMARY KEY ("id") 20 | ) 21 | ; 22 | 23 | ALTER TABLE "public"."test_account" 24 | OWNER TO "postgres"; 25 | 26 | 27 | INSERT INTO "public"."test_account" ("id", "usable_amt") VALUES (960307, '100000.00'); -------------------------------------------------------------------------------- /TestHub-demo/TestHubDemo/env/testhub/data/db/data/h2db.mv.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-demo/TestHubDemo/env/testhub/data/db/data/h2db.mv.db -------------------------------------------------------------------------------- /TestHub-demo/server/src/main/java/com/goddess/server/SpringbootMybatisplusApplication.java: -------------------------------------------------------------------------------- 1 | package com.goddess.server; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class SpringbootMybatisplusApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(SpringbootMybatisplusApplication.class, args); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /TestHub-demo/server/src/main/java/com/goddess/server/dao/AccountMapper.java: -------------------------------------------------------------------------------- 1 | package com.goddess.server.dao; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.goddess.server.entity.Account; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | 8 | @Mapper 9 | public interface AccountMapper extends BaseMapper { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /TestHub-demo/server/src/main/java/com/goddess/server/dao/OrderMapper.java: -------------------------------------------------------------------------------- 1 | package com.goddess.server.dao; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.goddess.server.entity.Order; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | 8 | @Mapper 9 | public interface OrderMapper extends BaseMapper { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /TestHub-demo/server/src/main/java/com/goddess/server/dto/XmlData.java: -------------------------------------------------------------------------------- 1 | package com.goddess.server.dto; 2 | import javax.xml.bind.annotation.XmlElement; 3 | import javax.xml.bind.annotation.XmlRootElement; 4 | 5 | @XmlRootElement(name = "xmlData") 6 | public class XmlData { 7 | 8 | @XmlElement 9 | private String field1; 10 | 11 | @XmlElement 12 | private int field2; 13 | 14 | // Getter and Setter methods for field1 and field2 15 | 16 | public String toXmlString() { 17 | // 将对象转换为 XML 字符串的逻辑 18 | // 这里只是一个示例,你可以根据实际需求自行编写逻辑 19 | StringBuilder xmlBuilder = new StringBuilder(); 20 | xmlBuilder.append(""); 21 | xmlBuilder.append("").append(field1).append(""); 22 | xmlBuilder.append("").append(field2).append(""); 23 | xmlBuilder.append(""); 24 | return xmlBuilder.toString(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /TestHub-demo/server/src/main/java/com/goddess/server/entity/Account.java: -------------------------------------------------------------------------------- 1 | package com.goddess.server.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.TableName; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | import java.math.BigDecimal; 8 | 9 | @Data 10 | @TableName(value = "test_account", resultMap = "poMap") 11 | public class Account implements Serializable { 12 | private Long id; 13 | private BigDecimal usableAmt; 14 | } 15 | -------------------------------------------------------------------------------- /TestHub-demo/server/src/main/java/com/goddess/server/entity/Order.java: -------------------------------------------------------------------------------- 1 | package com.goddess.server.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.TableName; 4 | import lombok.Data; 5 | 6 | import java.math.BigDecimal; 7 | 8 | @Data 9 | @TableName(value = "test_order", resultMap = "poMap") 10 | public class Order { 11 | private Long id; 12 | private String code; 13 | private Long acctId; 14 | private Integer orderQty; 15 | private BigDecimal orderPrice; 16 | private BigDecimal orderAmt; 17 | 18 | 19 | 20 | } 21 | -------------------------------------------------------------------------------- /TestHub-demo/server/src/main/resources/mapper/AccountMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /TestHub-demo/server/src/main/resources/mapper/OrderMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /TestHub-demo/serverDocker/build_and_push.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 读取用户输入 4 | read -p "Docker Hub 用户名: " DOCKER_USERNAME 5 | read -s -p "Docker Hub 密码: " DOCKER_PASSWORD 6 | echo 7 | read -p "TAG 标签号: " DOCKER_IMAGE_TAG 8 | 9 | # 设置变量 10 | DOCKER_IMAGE_NAME="server" 11 | DOCKERHUB_REPO="vinc02131" 12 | 13 | # 构建镜像 14 | docker build -t $DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG . 15 | 16 | # 添加标签 17 | docker tag $DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG $DOCKERHUB_REPO/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG 18 | 19 | # 登录到 Docker Hub 20 | echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin 21 | 22 | # 推送镜像到 Docker Hub 23 | docker push $DOCKERHUB_REPO/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG 24 | 25 | # 注销 Docker Hub 26 | docker logout 27 | -------------------------------------------------------------------------------- /TestHub-demo/serverDocker/dockerfile: -------------------------------------------------------------------------------- 1 | # 使用 openjdk 17 作为基础镜像 2 | FROM openjdk:17-alpine 3 | 4 | # 将后台服务的可执行文件复制到容器中 5 | COPY /backend /backend 6 | # 设置工作目录 7 | WORKDIR /backend 8 | # 暴露后台服务和前端静态文件的端口 9 | EXPOSE 12004 12004 10 | # 启动后台服务 11 | CMD java -jar server-1.0-SNAPSHOT.jar -------------------------------------------------------------------------------- /TestHub-doc/.gitignore: -------------------------------------------------------------------------------- 1 | 2 | node_modules/ 3 | src/.vuepress/.cache/ 4 | src/.vuepress/.temp/ 5 | src/.vuepress/dist/ 6 | -------------------------------------------------------------------------------- /TestHub-doc/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "testhub_doc", 3 | "version": "1.0.4", 4 | "description": "流程编排,插件驱动,测试无限可能", 5 | "license": "Apache License 2.0", 6 | "type": "module", 7 | "scripts": { 8 | "docs:build": "vuepress build src", 9 | "docs:clean-dev": "vuepress dev src --clean-cache", 10 | "docs:dev": "vuepress dev src", 11 | "docs:update-package": "pnpm dlx vp-update" 12 | }, 13 | "devDependencies": { 14 | "@vuepress/client": "2.0.0-beta.66", 15 | "vue": "^3.3.4", 16 | "vuepress": "2.0.0-beta.66", 17 | "vuepress-theme-hope": "2.0.0-beta.235" 18 | } 19 | } -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/build_and_push.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 读取用户输入 4 | read -s -p "Docker Hub 密码: " DOCKER_PASSWORD 5 | echo 6 | read -p "TAG 标签号: " DOCKER_IMAGE_TAG 7 | 8 | # 设置变量 9 | DOCKER_IMAGE_NAME="testhub_doc" 10 | DOCKER_USERNAME="vinc02131" 11 | DOCKERHUB_REPO="vinc02131" 12 | cd ../.. 13 | pwd 14 | yarn docs:build 15 | cd ./src/.vuepress 16 | pwd 17 | 18 | # 构建镜像 19 | docker build -t $DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG . 20 | 21 | # 添加标签 22 | docker tag $DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG $DOCKERHUB_REPO/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG 23 | 24 | # 登录到 Docker Hub 25 | echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin 26 | 27 | # 推送镜像到 Docker Hub 28 | docker push $DOCKERHUB_REPO/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG 29 | 30 | # 注销 Docker Hub 31 | docker logout 32 | -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/config.ts: -------------------------------------------------------------------------------- 1 | import { defineUserConfig } from "vuepress"; 2 | import theme from "./theme.js"; 3 | 4 | export default defineUserConfig({ 5 | base: "/", 6 | 7 | lang: "zh-CN", 8 | title: "TestHub", 9 | description: "TestHub 的文档演示", 10 | 11 | theme, 12 | 13 | // Enable it with pwa 14 | // shouldPrefetch: false, 15 | }); 16 | -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/dockerfile: -------------------------------------------------------------------------------- 1 | # 使用 Nginx 作为基础镜像 2 | FROM nginx:latest 3 | 4 | # 将静态 HTML 文件复制到容器中的指定路径 5 | COPY ./dist /usr/share/nginx/html 6 | 7 | # 暴露 Nginx 的默认 HTTP 端口(一般为 80) 8 | EXPOSE 80 9 | 10 | # 启动 Nginx 服务器 11 | CMD ["nginx", "-g", "daemon off;"] -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/navbar.ts: -------------------------------------------------------------------------------- 1 | import { navbar } from "vuepress-theme-hope"; 2 | 3 | export default navbar([ 4 | { 5 | text: "🏡首页", 6 | link: "/README.md", 7 | // // 仅在 `/zh/guide/` 激活 8 | // activeMatch: "^/zh/guide/$", 9 | }, 10 | { text: "📖使用文档", link: "/ability/README.md" }, 11 | // { 12 | // text: "📒javaDoc", 13 | // link: "https://apidoc.gitee.com/dromara/sms4j" 14 | // }, 15 | { text: "🏮gitee", link: "https://gitee.com/dromara/TestHub" }, 16 | { text: "🪀github", link: "https://github.com/dromara/TestHub" }, 17 | { text: "🤝Dromara组织", link: "https://dromara.org/zh/" }, 18 | { text: "🔍常见问题", link: "/issue" }, 19 | { text: "💡更新日志", link: "/log" }, 20 | // { text: "🎎贡献者", link: "/doc/developer.md" }, 21 | { text: "👪加入交流群", link: "/group", }, 22 | 23 | ]); -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/assets/icon/apple-icon-152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/assets/icon/apple-icon-152.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/assets/icon/chrome-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/assets/icon/chrome-192.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/assets/icon/chrome-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/assets/icon/chrome-512.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/assets/icon/chrome-mask-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/assets/icon/chrome-mask-192.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/assets/icon/chrome-mask-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/assets/icon/chrome-mask-512.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/assets/icon/guide-maskable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/assets/icon/guide-maskable.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/assets/icon/ms-icon-144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/assets/icon/ms-icon-144.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/assets/image/box.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/assets/image/github-dark.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/assets/image/github-light.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/assets/image/markdown.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/contact.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/contact.jpeg -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/demo/antiocn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/demo/antiocn.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/demo/check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/demo/check.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/demo/check_loop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/demo/check_loop.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/demo/check_obj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/demo/check_obj.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/demo/const.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/demo/const.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/demo/convert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/demo/convert.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/demo/cutoff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/demo/cutoff.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/demo/demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/demo/demo.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/demo/http.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/demo/http.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/demo/sleep.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/demo/sleep.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/demo/sql.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/demo/sql.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/demo/sqldmi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/demo/sqldmi.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/favicon.ico -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/build/表达式.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/build/表达式.jpg -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/Binlog4j.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/Binlog4j.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/Disjob.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/Disjob.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/cloudeon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/cloudeon.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/cubic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/cubic.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/dantecloud-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/dantecloud-logo.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/disjob-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/disjob-2.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/dromara.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/dromara.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/dynamic-tp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/dynamic-tp.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/easy-es2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/easy-es2.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/fast-request.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/fast-request.gif -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/fast-request.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/fast-request.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/file4j.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/file4j.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/forest-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/forest-logo.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/gobrsasync-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/gobrsasync-logo.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/goview-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/goview-logo.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/hertzbeat-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/hertzbeat-logo.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/hmily.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/hmily.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/hodor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/hodor.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/hutool2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/hutool2.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/imagecombiner-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/imagecombiner-logo.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/jpom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/jpom.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/koalas-rpc2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/koalas-rpc2.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/liteflow2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/liteflow2.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/maxkey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/maxkey.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/maxkey3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/maxkey3.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/mayfly-go.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/mayfly-go.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/mendmix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/mendmix.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/myth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/myth.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/northstar_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/northstar_logo.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/raincat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/raincat.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/ruoyi-plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/ruoyi-plus.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/sa-token.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/sa-token.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/sms4j.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/sms4j.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/sureness.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/sureness.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/test-hub-heng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/test-hub-heng.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/tlog2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/tlog2.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/wemq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/wemq.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/wiki-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/wiki-logo.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/xeasypdf-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/xeasypdf-logo.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/friends/link/yft-design.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/friends/link/yft-design.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/global/参数覆盖规则.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/global/参数覆盖规则.jpg -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/global/行为覆盖规则.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/global/行为覆盖规则.jpg -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/logDesc/1_0_2/全局行为.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/logDesc/1_0_2/全局行为.jpg -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/logDesc/1_0_2/环境级参数.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/logDesc/1_0_2/环境级参数.jpg -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/logDesc/1_0_2/退出登陆.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/logDesc/1_0_2/退出登陆.jpg -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/logDesc/1_0_2/选择环境.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/logDesc/1_0_2/选择环境.jpg -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/logDesc/1_0_4/jiansuo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/logDesc/1_0_4/jiansuo.jpg -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/logDesc/1_0_4/tabs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/logDesc/1_0_4/tabs.jpg -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/images/logDesc/1_0_4/yidong.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/images/logDesc/1_0_4/yidong.jpg -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/public/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-doc/src/.vuepress/public/logo.png -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/sidebar.ts: -------------------------------------------------------------------------------- 1 | import { sidebar } from "vuepress-theme-hope"; 2 | 3 | export default sidebar({ 4 | "/": [ 5 | "", 6 | { 7 | text: "可以干什么", 8 | icon: "laptop-code", 9 | prefix: "ability/", 10 | link: "ability/", 11 | children: "structure", 12 | }, 13 | { 14 | text: "灵活定制", 15 | icon: "code", 16 | prefix: "custom/", 17 | link: "custom/", 18 | children: "structure", 19 | }, 20 | { 21 | text: "原理介绍", 22 | icon: "book", 23 | prefix: "principle/", 24 | link: "principle/", 25 | children: "structure", 26 | }, 27 | { 28 | text: "全局配置", 29 | icon: "gears", 30 | prefix: "global/", 31 | link: "global/", 32 | children: "structure", 33 | }, 34 | ], 35 | }); 36 | -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/styles/config.scss: -------------------------------------------------------------------------------- 1 | // you can change config here 2 | $colors: #c0392b, #d35400, #f39c12, #27ae60, #16a085, #2980b9, #8e44ad, #2c3e50, 3 | #7f8c8d !default; 4 | 5 | #friends-item { 6 | width: 300px; 7 | height: 150px; 8 | } 9 | 10 | #no-zoom friends-item-img { 11 | width: 300px; 12 | height: 150px; 13 | } 14 | 15 | .centerDiv { 16 | width: 100%; 17 | display: flex; 18 | justify-content: center; 19 | align-items: center; 20 | } -------------------------------------------------------------------------------- /TestHub-doc/src/.vuepress/styles/palette.scss: -------------------------------------------------------------------------------- 1 | // you can change colors here 2 | $theme-color: #096dd9; 3 | -------------------------------------------------------------------------------- /TestHub-doc/src/ability/sleep.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍉 sleep 暂停休息 3 | order: 90 4 | editLink: false 5 | category: 6 | - 能力 7 | --- 8 | 9 | ## SLEEP 10 | 11 | 在自动化测试中,有些接口需要进行异步落库操作。为了确保测试程序在进行后续步骤之前等待足够的时间,我们需要添加一个延时机制。这样,测试程序将在适当的时间间隔后继续执行,以便正确处理异步落库操作。通过这个延时机制,我们可以确保测试的准确性和可靠性。 12 | 13 | ::: tip 特殊提示 14 | 15 | sleep 已经是全局的配置,不需要单独定义 action 16 | 17 | ::: 18 | 19 | ```xml copy 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | ``` 30 | 31 | 32 | -------------------------------------------------------------------------------- /TestHub-doc/src/custom/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 灵活定制 3 | index: false 4 | icon: laptop-code 5 | editLink: false 6 | category: 7 | - 使用指南 8 | --- 9 | 10 | ::: danger 为客官老爷们画堆 🧇🍕🥮🌮 11 | **目前针对测试用例的编写我们只提供 `xml` 模式,页面`拖拉拽`的编辑后续提供。** 12 | ::: 13 | 14 | 每一个测试用例都是一个 xml 的文件,每一段 xml 都是一个组件,组件参数部分重点介绍用例文件中各个组件的DOM应该如何编写。 15 | 学习完本章你可以灵活配置你的测试用例流程 16 | 17 | ::: info 18 | 组件参数部分各部分的介绍都会按照 [rule-用例 ](../custom/base.md#rule用例)。的方式介绍请必读必读 19 | ::: 20 | -------------------------------------------------------------------------------- /TestHub-docker/backend/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | #服务端口 3 | port: 12003 4 | servlet: 5 | context-path: /api 6 | 7 | 8 | 9 | spring: 10 | mvc: 11 | pathmatch: 12 | matching-strategy: ANT_PATH_MATCHER 13 | application: 14 | #服务名称 15 | name: TestHub 16 | servlet: 17 | multipart: 18 | max-file-size: 50MB #单个文件大小 19 | max-request-size: 500MB # 一个次请求中上传文件的总容量的限制 20 | profiles: 21 | #指明使用的数据库 22 | active: h2 23 | # active: pgsql 24 | #导入其他yml文件 25 | include: testhub,actuator,mybatisplus 26 | logging: 27 | config: classpath:config/logback-spring.xml 28 | 29 | 30 | -------------------------------------------------------------------------------- /TestHub-docker/backend/config/logback-spring.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | ${pattern} 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 22 | -------------------------------------------------------------------------------- /TestHub-docker/dockerfile: -------------------------------------------------------------------------------- 1 | # 使用 openjdk 17 作为基础镜像 2 | FROM openjdk:17-alpine 3 | # 修改软件源安装 Nginx 4 | RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tencent.com/g' /etc/apk/repositories \ 5 | && apk add --update --no-cache nginx \ 6 | && rm -f /var/cache/apk/* 7 | 8 | COPY frontend /frontend 9 | # 将后台服务的可执行文件复制到容器中 10 | COPY /backend /backend 11 | # 配置 Nginx 12 | COPY nginx.conf /etc/nginx/nginx.conf 13 | # 设置工作目录 14 | WORKDIR /backend 15 | # 暴露后台服务和前端静态文件的端口 16 | EXPOSE 12003 12003 17 | EXPOSE 11018 11018 18 | # 启动后台服务和 Nginx 19 | CMD java -jar TestHub.jar & nginx -g "daemon off;" -------------------------------------------------------------------------------- /TestHub-docker/frontend/logo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-docker/frontend/logo.ico -------------------------------------------------------------------------------- /TestHub-docker/frontend/static/codicon.ecfbfe4b.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-docker/frontend/static/codicon.ecfbfe4b.ttf -------------------------------------------------------------------------------- /TestHub-docker/frontend/static/contact.6e1d01ef.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-docker/frontend/static/contact.6e1d01ef.jpeg -------------------------------------------------------------------------------- /TestHub-docker/frontend/static/iconfont.302ebffe.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-docker/frontend/static/iconfont.302ebffe.woff -------------------------------------------------------------------------------- /TestHub-docker/frontend/static/iconfont.8290aa03.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-docker/frontend/static/iconfont.8290aa03.ttf -------------------------------------------------------------------------------- /TestHub-docker/frontend/static/iconfont.ae8e71c5.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-docker/frontend/static/iconfont.ae8e71c5.woff2 -------------------------------------------------------------------------------- /TestHub-docker/frontend/static/logo.5eb2613d.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-docker/frontend/static/logo.5eb2613d.webp -------------------------------------------------------------------------------- /TestHub-electron/build/icons/256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-electron/build/icons/256x256.png -------------------------------------------------------------------------------- /TestHub-electron/build/icons/32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-electron/build/icons/32x32.png -------------------------------------------------------------------------------- /TestHub-electron/build/icons/512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-electron/build/icons/512x512.png -------------------------------------------------------------------------------- /TestHub-electron/build/icons/64x64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-electron/build/icons/64x64.png -------------------------------------------------------------------------------- /TestHub-electron/build/icons/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-electron/build/icons/icon.png -------------------------------------------------------------------------------- /TestHub-electron/build/script/installer.nsh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-electron/build/script/installer.nsh -------------------------------------------------------------------------------- /TestHub-electron/electron/addon/security/index.js: -------------------------------------------------------------------------------- 1 | const Log = require('ee-core/log'); 2 | const EE = require('ee-core/ee'); 3 | 4 | /** 5 | * 安全插件 6 | * @class 7 | */ 8 | class SecurityAddon { 9 | 10 | constructor() { 11 | } 12 | 13 | /** 14 | * 创建 15 | */ 16 | create () { 17 | Log.info('[addon:security] load'); 18 | const { CoreApp } = EE; 19 | const runWithDebug = process.argv.find(function(e){ 20 | let isHasDebug = e.includes("--inspect") || e.includes("--inspect-brk") || e.includes("--remote-debugging-port"); 21 | return isHasDebug; 22 | }) 23 | 24 | // 不允许远程调试 25 | if (runWithDebug) { 26 | Log.error('[error] Remote debugging is not allowed, runWithDebug:', runWithDebug); 27 | CoreApp.appQuit(); 28 | } 29 | } 30 | } 31 | 32 | SecurityAddon.toString = () => '[class SecurityAddon]'; 33 | module.exports = SecurityAddon; -------------------------------------------------------------------------------- /TestHub-electron/electron/config/config.local.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | /* 4 | * test 5 | */ 6 | exports.testConfig = { 7 | login: 'http://local.com/api/login', 8 | }; 9 | -------------------------------------------------------------------------------- /TestHub-electron/electron/config/config.prod.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | /* 4 | * test 5 | */ 6 | exports.testConfig = { 7 | login: 'http://prod.com/api/login', 8 | }; 9 | -------------------------------------------------------------------------------- /TestHub-electron/electron/config/encrypt.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 加密配置 3 | * @param type - confusion | bytecode | strict 4 | */ 5 | module.exports = { 6 | type: 'confusion', 7 | files: [ 8 | 'electron/**/*.(js|json)', 9 | '!electron/config/encrypt.js', 10 | '!electron/config/nodemon.json', 11 | '!electron/config/builder.json', 12 | ], 13 | fileExt: ['.js'], 14 | confusionOptions: { 15 | compact: true, 16 | stringArray: true, 17 | stringArrayEncoding: ['none'], 18 | deadCodeInjection: false, 19 | } 20 | }; -------------------------------------------------------------------------------- /TestHub-electron/electron/config/nodemon.json: -------------------------------------------------------------------------------- 1 | { 2 | "watch": [ 3 | "electron/", 4 | "main.js" 5 | ], 6 | "ignore": [], 7 | "ext": "js,json", 8 | "verbose": true, 9 | "exec": "electron . --env=local --hot-reload=1", 10 | "restartable": "hr", 11 | "colours": true, 12 | "events": {} 13 | } -------------------------------------------------------------------------------- /TestHub-electron/electron/controller/example.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const { Controller } = require('ee-core'); 4 | const Log = require('ee-core/log'); 5 | const Services = require('ee-core/services'); 6 | 7 | /** 8 | * example 9 | * @class 10 | */ 11 | class ExampleController extends Controller { 12 | 13 | constructor(ctx) { 14 | super(ctx); 15 | } 16 | 17 | 18 | /** 19 | * 所有方法接收两个参数 20 | * @param args 前端传的参数 21 | * @param event - ipc通信时才有值。详情见:控制器文档 22 | */ 23 | 24 | /** 25 | * test 26 | */ 27 | async test () { 28 | const result = await Services.get('example').test('electron'); 29 | Log.info('service result:', result); 30 | 31 | return 'hello electron-egg'; 32 | } 33 | } 34 | 35 | ExampleController.toString = () => '[class ExampleController]'; 36 | module.exports = ExampleController; -------------------------------------------------------------------------------- /TestHub-electron/electron/jobs/example/hello.js: -------------------------------------------------------------------------------- 1 | const Log = require('ee-core/log'); 2 | 3 | exports.welcome = function () { 4 | Log.info('[child-process] [jobs/example/hello] welcome ! '); 5 | } -------------------------------------------------------------------------------- /TestHub-electron/electron/jobs/example/timer.js: -------------------------------------------------------------------------------- 1 | const Job = require('ee-core/jobs/baseJobClass'); 2 | const Log = require('ee-core/log'); 3 | const Ps = require('ee-core/ps'); 4 | 5 | /** 6 | * example - TimerJob 7 | * @class 8 | */ 9 | class TimerJob extends Job { 10 | 11 | constructor(params) { 12 | super(); 13 | this.params = params; 14 | } 15 | 16 | /** 17 | * handle()方法是必要的,且会被自动调用 18 | */ 19 | async handle () { 20 | Log.info("[child-process] TimerJob params: ", this.params); 21 | 22 | if (Ps.isChildJob()) { 23 | Ps.exit(); 24 | } 25 | } 26 | } 27 | 28 | TimerJob.toString = () => '[class TimerJob]'; 29 | module.exports = TimerJob; 30 | -------------------------------------------------------------------------------- /TestHub-electron/electron/preload/bridge.js: -------------------------------------------------------------------------------- 1 | /* 2 | * 如果启用了上下文隔离,渲染进程无法使用electron的api, 3 | * 可通过contextBridge 导出api给渲染进程使用 4 | */ 5 | 6 | const { contextBridge, ipcRenderer } = require('electron') 7 | 8 | contextBridge.exposeInMainWorld('electron', { 9 | ipcRenderer: ipcRenderer, 10 | }) -------------------------------------------------------------------------------- /TestHub-electron/electron/preload/index.js: -------------------------------------------------------------------------------- 1 | /************************************************* 2 | ** preload为预加载模块,该文件将会在程序启动时加载 ** 3 | *************************************************/ 4 | const Addon = require('ee-core/addon'); 5 | 6 | /** 7 | * 预加载模块入口 8 | */ 9 | module.exports = async () => { 10 | // Addon.get('javaServer').create(); 11 | // 示例功能模块,可选择性使用和修改 12 | Addon.get('tray').create(); 13 | Addon.get('security').create(); 14 | Addon.get('awaken').create(); 15 | 16 | // Addon.get('autoUpdater').create(); 17 | } -------------------------------------------------------------------------------- /TestHub-electron/electron/service/example.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const { Service } = require('ee-core'); 4 | 5 | /** 6 | * 示例服务(service层为单例) 7 | * @class 8 | */ 9 | class ExampleService extends Service { 10 | 11 | constructor(ctx) { 12 | super(ctx); 13 | } 14 | 15 | /** 16 | * test 17 | */ 18 | async test(args) { 19 | let obj = { 20 | status:'ok', 21 | params: args 22 | } 23 | 24 | return obj; 25 | } 26 | } 27 | 28 | ExampleService.toString = () => '[class ExampleService]'; 29 | module.exports = ExampleService; -------------------------------------------------------------------------------- /TestHub-electron/main.js: -------------------------------------------------------------------------------- 1 | const { ElectronEgg } = require('ee-core'); 2 | new ElectronEgg(); -------------------------------------------------------------------------------- /TestHub-electron/public/html/view_example.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 15 | 16 | 17 | 18 |
19 | 这是一个html页面 20 |
21 | 22 | -------------------------------------------------------------------------------- /TestHub-electron/public/images/1tray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-electron/public/images/1tray.png -------------------------------------------------------------------------------- /TestHub-electron/public/images/logo-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-electron/public/images/logo-32.png -------------------------------------------------------------------------------- /TestHub-electron/public/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-electron/public/images/logo.png -------------------------------------------------------------------------------- /TestHub-electron/public/images/tray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-electron/public/images/tray.png -------------------------------------------------------------------------------- /TestHub-electron/test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | read -p "版本号: " DOCKER_IMAGE_TAG 4 | 5 | # # build前端 6 | cd ../client/ 7 | yarn build:desktop 8 | 9 | # pwd 10 | 11 | # # 拷贝前端 12 | cd ../electron-egg 13 | # pwd 14 | cp -r ../client/dist/* ./public/dist 15 | 16 | cp ../server/testhub-server/target/testhub-server-$DOCKER_IMAGE_TAG-SNAPSHOT.jar ./build/extraResources/TestHub.jar 17 | 18 | cp -r ./build/jre/mac_jre/* ./build/extraResources/jdk-17.0.6/ 19 | 20 | 21 | -------------------------------------------------------------------------------- /TestHub-server/.gitignore: -------------------------------------------------------------------------------- 1 | target/ 2 | !.mvn/wrapper/maven-wrapper.jar 3 | !**/src/main/**/target/ 4 | !**/src/test/**/target/ 5 | 6 | ### IntelliJ IDEA ### 7 | .idea/modules.xml 8 | .idea/jarRepositories.xml 9 | .idea/compiler.xml 10 | .idea/libraries/ 11 | *.iws 12 | *.iml 13 | *.ipr 14 | 15 | ### Eclipse ### 16 | .apt_generated 17 | .classpath 18 | .factorypath 19 | .project 20 | .settings 21 | .springBeans 22 | .sts4-cache 23 | 24 | ### NetBeans ### 25 | /nbproject/private/ 26 | /nbbuild/ 27 | /dist/ 28 | /nbdist/ 29 | /.nb-gradle/ 30 | build/ 31 | !**/src/main/**/build/ 32 | !**/src/test/**/build/ 33 | 34 | ### VS Code ### 35 | .vscode/ 36 | 37 | ### Mac OS ### 38 | .DS_Store -------------------------------------------------------------------------------- /TestHub-server/testhub-framework/src/main/java/org/dromara/testhub/framework/config/WebDataConfigurer.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.framework.config; 2 | 3 | import org.springframework.context.annotation.Configuration; 4 | import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; 5 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 6 | 7 | @Configuration 8 | public class WebDataConfigurer implements WebMvcConfigurer { 9 | @Override 10 | public void addResourceHandlers(ResourceHandlerRegistry registry) { 11 | registry.addResourceHandler("/data/**").addResourceLocations("classpath:/data/"); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /TestHub-server/testhub-framework/src/main/java/org/dromara/testhub/framework/config/WebInterceptorConfig.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.framework.config; 2 | 3 | import org.dromara.testhub.framework.interceptor.ExtraParamInterceptor; 4 | import org.springframework.context.annotation.Configuration; 5 | import org.springframework.web.servlet.config.annotation.InterceptorRegistry; 6 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 7 | 8 | @Configuration 9 | public class WebInterceptorConfig implements WebMvcConfigurer { 10 | 11 | @Override 12 | public void addInterceptors(InterceptorRegistry registry) { 13 | // 加入框架的拦截器,用于处理header中的公共参数 14 | registry.addInterceptor(new ExtraParamInterceptor()).addPathPatterns("/**"); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /TestHub-server/testhub-framework/src/main/java/org/dromara/testhub/framework/config/WebViewConfig.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.framework.config; 2 | 3 | import org.springframework.context.annotation.Configuration; 4 | import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; 5 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 6 | 7 | @Configuration 8 | public class WebViewConfig implements WebMvcConfigurer { 9 | @Override 10 | public void addViewControllers(ViewControllerRegistry registry) { 11 | registry.addRedirectViewController("/", "/swagger-ui/index.html"); 12 | } 13 | } 14 | 15 | -------------------------------------------------------------------------------- /TestHub-server/testhub-framework/src/main/java/org/dromara/testhub/framework/exceptionHandler/ValidMsg.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.framework.exceptionHandler; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * @author 失败女神 9 | * @email: 18733123202@163.com 10 | * @date 2023/7/1 上午9:35 11 | */ 12 | @Data 13 | public class ValidMsg implements Serializable { 14 | private static final long serialVersionUID = 1L; 15 | 16 | private String object; 17 | 18 | private String field; 19 | 20 | private String msg; 21 | 22 | public ValidMsg(String object, String field, String msg) { 23 | this.object = object; 24 | this.field = field; 25 | this.msg = msg; 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /TestHub-server/testhub-framework/src/main/java/org/dromara/testhub/framework/interceptor/ExtraParam.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.framework.interceptor; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | import java.io.Serializable; 8 | 9 | @Data 10 | @AllArgsConstructor 11 | @NoArgsConstructor 12 | public class ExtraParam implements Serializable { 13 | 14 | private static final long serialVersionUID = 1L; 15 | 16 | String saToken; 17 | 18 | String traceId; 19 | 20 | Long userId = -1l; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /TestHub-server/testhub-framework/src/main/java/org/dromara/testhub/framework/mybatis/IBaseMapper.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.framework.mybatis; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | 5 | public interface IBaseMapper extends BaseMapper { 6 | } 7 | -------------------------------------------------------------------------------- /TestHub-server/testhub-framework/src/main/java/org/dromara/testhub/framework/trace/WebConfig.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.framework.trace; 2 | 3 | import org.springframework.context.annotation.Configuration; 4 | import org.springframework.web.servlet.config.annotation.InterceptorRegistry; 5 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 6 | 7 | import javax.annotation.Resource; 8 | 9 | 10 | @Configuration 11 | public class WebConfig implements WebMvcConfigurer { 12 | @Resource 13 | private TraceInterceptor traceInterceptor; 14 | 15 | @Override 16 | public void addInterceptors(InterceptorRegistry registry) { 17 | registry.addInterceptor(traceInterceptor) 18 | .addPathPatterns("/**"); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /TestHub-server/testhub-framework/src/main/java/org/dromara/testhub/framework/util/DateUtil.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.framework.util; 2 | 3 | import java.time.Instant; 4 | import java.time.LocalDateTime; 5 | import java.time.ZoneId; 6 | 7 | public class DateUtil { 8 | public static LocalDateTime getDateTimeOfTimestamp(long timestamp) { 9 | Instant instant = Instant.ofEpochMilli(timestamp); 10 | ZoneId zone = ZoneId.systemDefault(); 11 | return LocalDateTime.ofInstant(instant, zone); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /TestHub-server/testhub-framework/src/main/java/org/dromara/testhub/framework/util/IdGenerator.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.framework.util; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.springframework.stereotype.Component; 5 | 6 | import javax.annotation.PostConstruct; 7 | 8 | 9 | @Slf4j 10 | @Component 11 | public class IdGenerator { 12 | private int nodeId = 1; 13 | 14 | private SnowFlakeGenerator snowFlakeGenerator = new SnowFlakeGenerator(nodeId); 15 | 16 | 17 | @PostConstruct 18 | public void init() { 19 | log.info("当前机器的nodeID:{}",nodeId); 20 | } 21 | 22 | /** 23 | * 使用默认的workId 和 datacenter 24 | * 25 | * @return 26 | */ 27 | public synchronized long snowflakeId() { 28 | return snowFlakeGenerator.nextId(); 29 | } 30 | 31 | public synchronized String snowflakeIdStr() { 32 | return snowFlakeGenerator.nextId() + ""; 33 | } 34 | 35 | 36 | 37 | } 38 | 39 | -------------------------------------------------------------------------------- /TestHub-server/testhub-framework/src/main/java/org/dromara/testhub/framework/util/ListUtils.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.framework.util; 2 | 3 | import java.util.ArrayList; 4 | 5 | public class ListUtils extends ArrayList { 6 | public ListUtils add2(T value) { 7 | super.add( value); 8 | return this; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /TestHub-server/testhub-framework/src/main/java/org/dromara/testhub/framework/util/UserUtil.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.framework.util; 2 | 3 | import cn.dev33.satoken.stp.StpUtil; 4 | 5 | /** 6 | * @author yetier 7 | */ 8 | public class UserUtil { 9 | public static final String USER_ID = "userId"; 10 | public static final String ROLE_ADMIN = "admin"; 11 | public static Long getCurrentUserId(){ 12 | Long optId = ContextManager.getContextItem(USER_ID,Long.class); 13 | if(optId == null){ 14 | return Long.parseLong(StpUtil.getLoginId().toString()); 15 | } 16 | return optId; 17 | } 18 | public static boolean checkRole(String role){ 19 | try { 20 | StpUtil.checkRole(role); 21 | return true; 22 | }catch (Exception e){ 23 | return false; 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /TestHub-server/testhub-framework/src/main/java/org/dromara/testhub/framework/web/dto/IRequestDto.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.framework.web.dto; 2 | 3 | 4 | import java.io.Serializable; 5 | 6 | /** 7 | * @author 失败女神 8 | * @email: 18733123202@163.com 9 | * @date 2021/4/7 上午10:22 10 | * @Copyright © 女神帮 11 | */ 12 | public interface IRequestDto extends Serializable { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /TestHub-server/testhub-framework/src/main/java/org/dromara/testhub/framework/web/dto/IResponseDto.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.framework.web.dto; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * @author 失败女神 7 | * @email: 18733123202@163.com 8 | * @date 2021/4/7 上午10:22 9 | * @Copyright © 女神帮 10 | */ 11 | public interface IResponseDto extends Serializable { 12 | } 13 | -------------------------------------------------------------------------------- /TestHub-server/testhub-nsrule/nsrule-core/src/main/java/org/dromara/testhub/nsrule/core/eventbus/AsyncEventBus.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.nsrule.core.eventbus; 2 | 3 | import java.util.concurrent.Executor; 4 | 5 | 6 | public class AsyncEventBus extends EventBus { 7 | public AsyncEventBus(Executor executor) { 8 | super(executor); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /TestHub-server/testhub-nsrule/nsrule-core/src/main/java/org/dromara/testhub/nsrule/core/eventbus/EventMessage.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.nsrule.core.eventbus; 2 | 3 | import org.dromara.testhub.nsrule.core.executer.context.Context; 4 | 5 | 6 | /** 7 | * @author: 失败女神-vinc 8 | * @email: 18733123202@163.com 9 | * @date: 2023/4/16 19:00 10 | */ 11 | public class EventMessage { 12 | 13 | private Context context; 14 | private Object data; 15 | 16 | public EventMessage(Context context, Object data) { 17 | this.data = data; 18 | this.context = context; 19 | } 20 | 21 | 22 | public Object getData() { 23 | return data; 24 | } 25 | 26 | public Context getContext() { 27 | return context; 28 | } 29 | 30 | public void setContext(Context context) { 31 | this.context = context; 32 | } 33 | 34 | public void setData(Object data) { 35 | this.data = data; 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /TestHub-server/testhub-nsrule/nsrule-core/src/main/java/org/dromara/testhub/nsrule/core/eventbus/ObserverAction.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.nsrule.core.eventbus; 2 | 3 | import java.lang.reflect.InvocationTargetException; 4 | import java.lang.reflect.Method; 5 | 6 | 7 | public class ObserverAction { 8 | 9 | private Object target; 10 | private Method method; 11 | 12 | public ObserverAction(Object target, Method method) { 13 | this.target = target; 14 | this.method = method; 15 | this.method.setAccessible(true); 16 | } 17 | 18 | public void execute(Object event) { 19 | try { 20 | method.invoke(target, event); 21 | } catch (IllegalAccessException | InvocationTargetException e) { 22 | e.printStackTrace(); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /TestHub-server/testhub-nsrule/nsrule-core/src/main/java/org/dromara/testhub/nsrule/core/eventbus/Subscribe.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.nsrule.core.eventbus; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | 9 | @Retention(RetentionPolicy.RUNTIME) 10 | @Target(ElementType.METHOD) 11 | public @interface Subscribe { 12 | EventType event(); 13 | } 14 | -------------------------------------------------------------------------------- /TestHub-server/testhub-nsrule/nsrule-core/src/main/java/org/dromara/testhub/nsrule/core/executer/context/JudgeData.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.nsrule.core.executer.context; 2 | 3 | /** 4 | * @author: 失败女神-vinc 5 | * @email: 18733123202@163.com 6 | * @date: 2022/6/3 22:15 7 | */ 8 | public class JudgeData { 9 | } 10 | -------------------------------------------------------------------------------- /TestHub-server/testhub-nsrule/nsrule-core/src/main/java/org/dromara/testhub/nsrule/core/executer/meta/MetaClass.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.nsrule.core.executer.meta; 2 | 3 | import org.dromara.testhub.nsrule.core.executer.mode.BasePo; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 规则对象类 9 | * 10 | * @author: 失败女神-vinc 11 | * @email: 18733123202@163.com 12 | * @date: 2022/6/3 21:11 13 | */ 14 | public class MetaClass extends BasePo { 15 | 16 | //加载器编码 17 | private String loaderCode; 18 | 19 | private List properties; 20 | 21 | public String getLoaderCode() { 22 | return loaderCode; 23 | } 24 | 25 | public void setLoaderCode(String loaderCode) { 26 | this.loaderCode = loaderCode; 27 | } 28 | 29 | public List getProperties() { 30 | return properties; 31 | } 32 | 33 | public void setProperties(List properties) { 34 | this.properties = properties; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /TestHub-server/testhub-nsrule/nsrule-core/src/main/java/org/dromara/testhub/nsrule/core/executer/mode/base/BaseLog.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.nsrule.core.executer.mode.base; 2 | 3 | /** 4 | * @author: 失败女神-vinc 5 | * @email: 18733123202@163.com 6 | * @date: 2023/1/18 10:28 7 | */ 8 | public class BaseLog { 9 | } 10 | -------------------------------------------------------------------------------- /TestHub-server/testhub-nsrule/nsrule-core/src/main/java/org/dromara/testhub/nsrule/core/executer/mode/base/action/DoExecute.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.nsrule.core.executer.mode.base.action; 2 | 3 | import org.dromara.testhub.nsrule.core.executer.context.Context; 4 | 5 | public interface DoExecute { 6 | 7 | int getComplex(); 8 | 9 | String getDataType(); 10 | 11 | String getCode(); 12 | 13 | Object exec(Context context); 14 | } 15 | -------------------------------------------------------------------------------- /TestHub-server/testhub-nsrule/nsrule-core/src/main/java/org/dromara/testhub/nsrule/core/executer/mode/base/action/Mapping.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.nsrule.core.executer.mode.base.action; 2 | 3 | import org.dromara.testhub.nsrule.core.executer.mode.BasePo; 4 | 5 | 6 | public class Mapping extends BasePo { 7 | private String result; 8 | 9 | public String getResult() { 10 | return result; 11 | } 12 | 13 | public void setResult(String result) { 14 | this.result = result; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /TestHub-server/testhub-nsrule/nsrule-core/src/main/java/org/dromara/testhub/nsrule/core/executer/mode/base/bound/Bound.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.nsrule.core.executer.mode.base.bound; 2 | 3 | import org.dromara.testhub.nsrule.core.executer.context.Context; 4 | 5 | public abstract class Bound { 6 | protected String type; 7 | 8 | 9 | public String getType() { 10 | return type; 11 | } 12 | 13 | public void setType(String type) { 14 | this.type = type; 15 | } 16 | 17 | public abstract String build(Context context); 18 | } 19 | -------------------------------------------------------------------------------- /TestHub-server/testhub-nsrule/nsrule-core/src/main/java/org/dromara/testhub/nsrule/core/executer/mode/base/formula/ast/MyErrorListener.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.nsrule.core.executer.mode.base.formula.ast; 2 | 3 | import org.antlr.v4.runtime.*; 4 | 5 | public class MyErrorListener extends BaseErrorListener { 6 | @Override 7 | public void syntaxError(Recognizer recognizer, Object offendingSymbol, 8 | int line, int charPositionInLine, String msg, RecognitionException e) { 9 | throw new RuntimeException("line " + line + ":" + charPositionInLine + " " + msg,e); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /TestHub-server/testhub-nsrule/nsrule-core/src/main/java/org/dromara/testhub/nsrule/core/executer/mode/base/formula/log/MinLog.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.nsrule.core.executer.mode.base.formula.log; 2 | 3 | import org.dromara.testhub.nsrule.core.executer.mode.base.formula.MixNode; 4 | 5 | import java.util.List; 6 | 7 | public class MinLog extends FormulaLog { 8 | public List nodes; 9 | 10 | public MinLog(MixNode node) { 11 | super(node); 12 | } 13 | 14 | public List getNodes() { 15 | return nodes; 16 | } 17 | 18 | public void setNodes(List nodes) { 19 | this.nodes = nodes; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /TestHub-server/testhub-nsrule/nsrule-core/src/main/java/org/dromara/testhub/nsrule/core/executer/mode/base/formula/log/PathItemLog.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.nsrule.core.executer.mode.base.formula.log; 2 | 3 | import org.dromara.testhub.nsrule.core.executer.mode.base.formula.PathNode; 4 | 5 | import java.util.List; 6 | 7 | public class PathItemLog { 8 | 9 | public String attrName; 10 | public List nodes; 11 | 12 | public PathItemLog(){} 13 | 14 | public String getAttrName() { 15 | return attrName; 16 | } 17 | 18 | public void setAttrName(String attrName) { 19 | this.attrName = attrName; 20 | } 21 | 22 | public List getNodes() { 23 | return nodes; 24 | } 25 | 26 | public void setNodes(List nodes) { 27 | this.nodes = nodes; 28 | } 29 | } -------------------------------------------------------------------------------- /TestHub-server/testhub-nsrule/nsrule-core/src/main/java/org/dromara/testhub/nsrule/core/executer/mode/base/formula/log/PathLog.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.nsrule.core.executer.mode.base.formula.log; 2 | 3 | import org.dromara.testhub.nsrule.core.executer.mode.base.formula.PathNode; 4 | 5 | import java.util.List; 6 | 7 | public class PathLog extends FormulaLog { 8 | public String path; 9 | public List itemLogs; 10 | 11 | public PathLog(PathNode node) { 12 | super(node); 13 | } 14 | 15 | 16 | public String getPath() { 17 | return path; 18 | } 19 | 20 | public void setPath(String path) { 21 | this.path = path; 22 | } 23 | 24 | public List getItemLogs() { 25 | return itemLogs; 26 | } 27 | 28 | public void setItemLogs(List itemLogs) { 29 | this.itemLogs = itemLogs; 30 | } 31 | } -------------------------------------------------------------------------------- /TestHub-server/testhub-nsrule/nsrule-core/src/main/java/org/dromara/testhub/nsrule/core/executer/mode/base/function/FunctionHandler.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.nsrule.core.executer.mode.base.function; 2 | 3 | import com.alibaba.fastjson.JSONObject; 4 | import org.dromara.testhub.nsrule.core.executer.context.Context; 5 | 6 | public interface FunctionHandler { 7 | String getName(); 8 | 9 | Object execute(Context context, JSONObject data); 10 | } 11 | -------------------------------------------------------------------------------- /TestHub-server/testhub-nsrule/nsrule-core/src/main/java/org/dromara/testhub/nsrule/core/executer/mode/base/function/impl/FunctionLength.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.nsrule.core.executer.mode.base.function.impl; 2 | 3 | import com.alibaba.fastjson.JSONObject; 4 | import org.dromara.testhub.nsrule.core.executer.context.Context; 5 | import org.dromara.testhub.nsrule.core.executer.mode.base.function.FunctionHandler; 6 | 7 | /** 8 | * @author: 失败女神-vinc 9 | * @email: 18733123202@163.com 10 | * @date: 2022/6/11 21:16 11 | */ 12 | public class FunctionLength implements FunctionHandler { 13 | @Override 14 | public String getName() { 15 | return "length"; 16 | } 17 | 18 | @Override 19 | public Object execute(Context context, JSONObject data) { 20 | if (data == null) { 21 | return null; 22 | } 23 | String attr1 = data.getString("attr1"); 24 | return attr1.length(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /TestHub-server/testhub-nsrule/nsrule-core/src/main/java/org/dromara/testhub/nsrule/core/expand/FormulaBuilder.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.nsrule.core.expand; 2 | 3 | import org.dromara.testhub.nsrule.core.executer.mode.base.formula.FormulaNode; 4 | 5 | public interface FormulaBuilder { 6 | FormulaNode getFormulaNode(String text); 7 | } 8 | -------------------------------------------------------------------------------- /TestHub-server/testhub-nsrule/nsrule-core/src/main/java/org/dromara/testhub/nsrule/core/parser/ActionParser.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.nsrule.core.parser; 2 | 3 | import org.dromara.testhub.nsrule.core.executer.mode.base.action.Action; 4 | 5 | /** 6 | * 行为构建器 7 | */ 8 | public interface ActionParser { 9 | Action parse(Object dataObj, Action action); 10 | } 11 | -------------------------------------------------------------------------------- /TestHub-server/testhub-nsrule/nsrule-core/src/main/java/org/dromara/testhub/nsrule/core/parser/BoundParser.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.nsrule.core.parser; 2 | 3 | import org.dromara.testhub.nsrule.core.executer.mode.base.bound.Bound; 4 | 5 | public interface BoundParser { 6 | B parser(T dataObj); 7 | } 8 | -------------------------------------------------------------------------------- /TestHub-server/testhub-nsrule/nsrule-core/src/main/java/org/dromara/testhub/nsrule/core/parser/RuleConfigBuilder.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.nsrule.core.parser; 2 | 3 | import org.dromara.testhub.nsrule.core.executer.context.RuleConfig; 4 | 5 | /** 6 | * @author: 失败女神-vinc 7 | * @email: 18733123202@163.com 8 | * @date: 2022/6/4 16:16 9 | */ 10 | public interface RuleConfigBuilder { 11 | RuleConfig build(T data) throws Exception; 12 | } 13 | -------------------------------------------------------------------------------- /TestHub-server/testhub-nsrule/nsrule-core/src/main/java/org/dromara/testhub/nsrule/core/parser/RuleParser.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.nsrule.core.parser; 2 | 3 | import org.dromara.testhub.nsrule.core.executer.context.RuleConfig; 4 | import org.dromara.testhub.nsrule.core.executer.context.RuleProject; 5 | import org.dromara.testhub.nsrule.core.executer.mode.Rule; 6 | 7 | /** 8 | * @author: 失败女神-vinc 9 | * @email: 18733123202@163.com 10 | * @date: 2022/6/4 09:36 11 | */ 12 | public interface RuleParser { 13 | Rule parse(T data, RuleConfig ruleConfig) throws Exception; 14 | } 15 | -------------------------------------------------------------------------------- /TestHub-server/testhub-nsrule/nsrule-core/src/main/resources/META-INF/services/org.dromara.testhub.nsrule.core.executer.mode.base.function.FunctionHandler: -------------------------------------------------------------------------------- 1 | 2 | org.dromara.testhub.nsrule.core.executer.mode.base.function.impl.FunctionAdd 3 | org.dromara.testhub.nsrule.core.executer.mode.base.function.impl.FunctionSub 4 | org.dromara.testhub.nsrule.core.executer.mode.base.function.impl.FunctionMult 5 | org.dromara.testhub.nsrule.core.executer.mode.base.function.impl.FunctionDiv 6 | 7 | org.dromara.testhub.nsrule.core.executer.mode.base.function.impl.FunctionSize 8 | org.dromara.testhub.nsrule.core.executer.mode.base.function.impl.FunctionLength 9 | -------------------------------------------------------------------------------- /TestHub-server/testhub-nsrule/nsrule-core/src/main/resources/demo/Demo.g4: -------------------------------------------------------------------------------- 1 | grammar Demo; 2 | 3 | parse : prog+ ; 4 | 5 | prog : 'Hello' ID 6 | | 'hello' ID 7 | ; 8 | 9 | ID : [a-z]+ ; 10 | 11 | WS : [ \t\n\r]+ -> skip ; -------------------------------------------------------------------------------- /TestHub-server/testhub-nsrule/nsrule-core/src/main/resources/demo/Formula2.g4: -------------------------------------------------------------------------------- 1 | grammar Formula; 2 | 3 | formula: pathNode; 4 | 5 | pathNode: 6 | '${' jsonpath '}' # jsonPathExp 7 | ; 8 | 9 | jsonpath: 10 | identifier (subscript)*; 11 | 12 | subscript: 13 | dotIdentifier | arraySubscript; 14 | 15 | dotIdentifier: 16 | DOT identifier; 17 | 18 | arraySubscript: 19 | LBRACKET (asterisk | arrayIndex | pathNode) RBRACKET; 20 | 21 | arrayIndex: 22 | INT; 23 | 24 | asterisk: 25 | ASTERISK (dotIdentifier)?; 26 | 27 | identifier: 28 | Identifier; 29 | 30 | DOT: 31 | '.'; 32 | 33 | DOLLAR: 34 | '$'; 35 | 36 | LCURLY: 37 | '{'; 38 | 39 | RCURLY: 40 | '}'; 41 | 42 | LBRACKET: 43 | '['; 44 | 45 | RBRACKET: 46 | ']'; 47 | 48 | ASTERISK: 49 | '*'; 50 | 51 | INT: 52 | [0-9]+; 53 | 54 | Identifier: 55 | [a-zA-Z_] [a-zA-Z_0-9]*; 56 | 57 | Whitespace: 58 | [ \t\r\n]+ -> skip; 59 | -------------------------------------------------------------------------------- /TestHub-server/testhub-nsrule/nsrule-graph/src/main/java/org/dromara/testhub/nsrule/graph/constant/Constant.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.nsrule.graph.constant; 2 | 3 | import java.time.format.DateTimeFormatter; 4 | 5 | /** 6 | * 常量枚举类 7 | * 8 | * @author: 失败女神-vinc 9 | * @email: 18733123202@163.com 10 | * @date: 2023/5/21 21:29 11 | */ 12 | public class Constant { 13 | 14 | /** 15 | * 下一跳类型 16 | */ 17 | public class NextType { 18 | public static final String BRANCH = "BRANCH";//分支 19 | public static final String RESULT = "RESULT";//结果 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /TestHub-server/testhub-nsrule/nsrule-graph/src/main/java/org/dromara/testhub/nsrule/graph/model/DecisionResult.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.nsrule.graph.model; 2 | 3 | /** 4 | * @author: 失败女神-vinc 5 | * @email: 18733123202@163.com 6 | * @date: 2022/6/4 16:47 7 | */ 8 | public class DecisionResult { 9 | private Object content; 10 | private String dataType; 11 | 12 | public Object getContent() { 13 | return content; 14 | } 15 | 16 | public void setContent(Object content) { 17 | this.content = content; 18 | } 19 | 20 | public String getDataType() { 21 | return dataType; 22 | } 23 | 24 | public void setDataType(String dataType) { 25 | this.dataType = dataType; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /TestHub-server/testhub-nsrule/nsrule-graph/src/main/java/org/dromara/testhub/nsrule/graph/model/Result.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.nsrule.graph.model; 2 | 3 | import org.dromara.testhub.nsrule.core.executer.context.Context; 4 | import org.dromara.testhub.nsrule.core.executer.mode.BaseDataPo; 5 | 6 | /** 7 | * 结果执行器 8 | * 9 | * @author: 失败女神-vinc 10 | * @email: 18733123202@163.com 11 | * @date: 2022/6/3 22:04 12 | */ 13 | public class Result extends BaseDataPo { 14 | 15 | 16 | public Object decision(Context context) { 17 | return getDataFormulaNode().apply(context).getContent(); 18 | } 19 | 20 | 21 | } 22 | -------------------------------------------------------------------------------- /TestHub-server/testhub-plugins/plugins-check/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | org.dromara.testhub 8 | testhub-plugins 9 | ${revision} 10 | ../pom.xml 11 | 12 | 13 | org.dromara.testhub.plugins 14 | plugins-check 15 | ${revision} 16 | 17 | 17 18 | 17 19 | UTF-8 20 | 21 | 22 | -------------------------------------------------------------------------------- /TestHub-server/testhub-plugins/plugins-check/src/main/java/org/dromara/testhub/plugins/check/actions/dto/CheckExecuteResult.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.plugins.check.actions.dto; 2 | 3 | import org.dromara.testhub.sdk.action.dto.ExecuteResult; 4 | import org.dromara.testhub.sdk.action.model.rule.TestHubAction; 5 | import org.dromara.testhub.sdk.action.model.rule.TestHubExecute; 6 | 7 | import java.util.Map; 8 | 9 | public class CheckExecuteResult extends ExecuteResult { 10 | 11 | private Map reData; 12 | 13 | public CheckExecuteResult(TestHubAction action, TestHubExecute execute) { 14 | super(action, execute); 15 | } 16 | 17 | public Map getReData() { 18 | return reData; 19 | } 20 | 21 | public void setReData(Map reData) { 22 | this.reData = reData; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /TestHub-server/testhub-plugins/plugins-check/src/main/java/org/dromara/testhub/plugins/check/actions/dto/CheckResultDto.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.plugins.check.actions.dto; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | import java.util.List; 8 | 9 | @Data 10 | @AllArgsConstructor 11 | @NoArgsConstructor 12 | public class CheckResultDto { 13 | private Boolean flag; 14 | private List itemFlags; 15 | } 16 | -------------------------------------------------------------------------------- /TestHub-server/testhub-plugins/plugins-check/src/main/java/org/dromara/testhub/plugins/check/actions/model/CheckParamResult.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.plugins.check.actions.model; 2 | 3 | import org.dromara.testhub.nsrule.core.executer.mode.ruleLine.JavaActuator; 4 | import lombok.Data; 5 | 6 | @Data 7 | public class CheckParamResult { 8 | private boolean flag; 9 | private String msg; 10 | private JavaActuator.Log log; 11 | } -------------------------------------------------------------------------------- /TestHub-server/testhub-plugins/plugins-check/src/main/java/org/dromara/testhub/plugins/check/actions/model/TestHubExecuteCheck.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.plugins.check.actions.model; 2 | 3 | import org.dromara.testhub.nsrule.core.executer.mode.base.action.Execute; 4 | import org.dromara.testhub.nsrule.core.executer.mode.ruleLine.RuleLine; 5 | import org.dromara.testhub.sdk.action.model.rule.TestHubExecute; 6 | 7 | import java.util.List; 8 | 9 | public class TestHubExecuteCheck extends TestHubExecute { 10 | private List> ruleLines; 11 | 12 | public List> getRuleLines() { 13 | return ruleLines; 14 | } 15 | 16 | public void setRuleLines(List> ruleLines) { 17 | this.ruleLines = ruleLines; 18 | } 19 | 20 | public TestHubExecuteCheck(Execute execute) { 21 | super(execute); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /TestHub-server/testhub-plugins/plugins-check/src/main/resources/META-INF/services/org.dromara.testhub.sdk.action.Plugin: -------------------------------------------------------------------------------- 1 | org.dromara.testhub.plugins.check.actions.CheckPlugin -------------------------------------------------------------------------------- /TestHub-server/testhub-plugins/plugins-compare/src/main/java/org/dromara/testhub/plugins/compare/actions/dto/CheckObjExecuteResult.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.plugins.compare.actions.dto; 2 | 3 | import org.dromara.testhub.sdk.action.dto.ExecuteResult; 4 | import org.dromara.testhub.sdk.action.model.rule.TestHubAction; 5 | import org.dromara.testhub.sdk.action.model.rule.TestHubExecute; 6 | 7 | import java.util.Map; 8 | 9 | public class CheckObjExecuteResult extends ExecuteResult { 10 | 11 | private Map checkObjResult; 12 | 13 | public CheckObjExecuteResult(TestHubAction action, TestHubExecute execute) { 14 | super(action, execute); 15 | } 16 | 17 | 18 | public Map getCheckObjResult() { 19 | return checkObjResult; 20 | } 21 | 22 | public void setCheckObjResult(Map checkObjResult) { 23 | this.checkObjResult = checkObjResult; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /TestHub-server/testhub-plugins/plugins-compare/src/main/java/org/dromara/testhub/plugins/compare/actions/model/CheckResultObj.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.plugins.compare.actions.model; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class CheckResultObj { 7 | 8 | private CheckObj checkObj; 9 | private Boolean flag; 10 | private String msg; 11 | private Object threshold; 12 | private Object cover; 13 | 14 | } -------------------------------------------------------------------------------- /TestHub-server/testhub-plugins/plugins-compare/src/main/java/org/dromara/testhub/plugins/compare/actions/model/TestHubExecuteCheckObj.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.plugins.compare.actions.model; 2 | 3 | import org.dromara.testhub.nsrule.core.executer.mode.base.action.Execute; 4 | import org.dromara.testhub.sdk.action.model.rule.TestHubExecute; 5 | 6 | import java.util.List; 7 | 8 | public class TestHubExecuteCheckObj extends TestHubExecute { 9 | private List checkObjs; 10 | 11 | public List getCheckObjs() { 12 | return checkObjs; 13 | } 14 | 15 | public void setCheckObjs(List checkObjs) { 16 | this.checkObjs = checkObjs; 17 | } 18 | 19 | public TestHubExecuteCheckObj(Execute execute) { 20 | super(execute); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /TestHub-server/testhub-plugins/plugins-compare/src/main/resources/META-INF/services/org.dromara.testhub.sdk.action.Plugin: -------------------------------------------------------------------------------- 1 | org.dromara.testhub.plugins.compare.actions.CheckObjPlugin -------------------------------------------------------------------------------- /TestHub-server/testhub-plugins/plugins-constant/src/main/resources/META-INF/services/org.dromara.testhub.sdk.action.Plugin: -------------------------------------------------------------------------------- 1 | org.dromara.testhub.plugins.constant.actions.ConstPlugin -------------------------------------------------------------------------------- /TestHub-server/testhub-plugins/plugins-convert/src/main/java/org/dromara/testhub/plugins/convert/actions/model/TestHubActionConvert.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.plugins.convert.actions.model; 2 | 3 | import org.dromara.testhub.sdk.action.model.rule.TestHubAction; 4 | import lombok.Data; 5 | 6 | import java.util.List; 7 | 8 | @Data 9 | public class TestHubActionConvert extends TestHubAction { 10 | 11 | private List converts; 12 | 13 | public TestHubActionConvert(TestHubAction action){ 14 | super(); 15 | super.setCode(action.getCode()); 16 | super.setName(action.getName()); 17 | super.setRemark(action.getRemark()); 18 | super.setParams(action.getParams()); 19 | super.setMappings(action.getMappings()); 20 | super.setDataType(action.getDataType()); 21 | super.setComplex(action.getComplex()); 22 | super.setType(action.getType()); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /TestHub-server/testhub-plugins/plugins-convert/src/main/resources/META-INF/services/org.dromara.testhub.sdk.action.Plugin: -------------------------------------------------------------------------------- 1 | org.dromara.testhub.plugins.convert.actions.ConvertPlugin -------------------------------------------------------------------------------- /TestHub-server/testhub-plugins/plugins-http/src/main/java/org/dromara/testhub/plugins/http/HttpConstant.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.plugins.http; 2 | 3 | public class HttpConstant { 4 | public static String TREE_NODE_TYPE_DIR="DIR"; 5 | public static String TREE_NODE_TYPE_API="API"; 6 | public static String TREE_NODE_TYPE_CASE="CASE"; 7 | } 8 | -------------------------------------------------------------------------------- /TestHub-server/testhub-plugins/plugins-http/src/main/java/org/dromara/testhub/plugins/http/actions/model/TestHubExecuteHttp.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.plugins.http.actions.model; 2 | 3 | import org.dromara.testhub.nsrule.core.executer.mode.base.action.Execute; 4 | import org.dromara.testhub.nsrule.core.executer.mode.ruleLine.Expression; 5 | import org.dromara.testhub.sdk.action.model.rule.TestHubExecute; 6 | 7 | public class TestHubExecuteHttp extends TestHubExecute { 8 | private Expression expression; 9 | 10 | public TestHubExecuteHttp(Execute execute) { 11 | super(execute); 12 | } 13 | 14 | public Expression getExpression() { 15 | return expression; 16 | } 17 | 18 | public void setExpression(Expression expression) { 19 | this.expression = expression; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /TestHub-server/testhub-plugins/plugins-http/src/main/java/org/dromara/testhub/plugins/http/server/domain/HttpContext.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.plugins.http.server.domain; 2 | 3 | import org.dromara.testhub.nsrule.core.executer.context.Context; 4 | import org.dromara.testhub.nsrule.core.executer.context.RuleProject; 5 | 6 | import java.util.Map; 7 | 8 | public class HttpContext extends Context> { 9 | 10 | public HttpContext(RuleProject project, String envCode) { 11 | super(project, envCode); 12 | } 13 | 14 | @Override 15 | public String getItemCode() { 16 | return ""; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /TestHub-server/testhub-plugins/plugins-http/src/main/java/org/dromara/testhub/plugins/http/server/domain/service/HttpTreeService.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.plugins.http.server.domain.service; 2 | 3 | 4 | import org.dromara.testhub.plugins.http.server.dto.*; 5 | import org.dromara.testhub.sdk.action.dto.res.TreeNodeResDto2; 6 | 7 | import java.util.Map; 8 | 9 | 10 | public interface HttpTreeService { 11 | Map getTree(String projectCode); 12 | 13 | HttpApiResDto getOne(Long id); 14 | 15 | TreeNodeResDto2 rename(HttpRenameDto renameDto); 16 | 17 | HttpApiResDto saveApi(HttpApiReqDto reqDto, String model); 18 | TreeNodeResDto2 saveDir(HttpDirDto reqDto, String model); 19 | 20 | HttpApiSendResDto send(HttpApiReqDto reqDto) throws Exception; 21 | } 22 | -------------------------------------------------------------------------------- /TestHub-server/testhub-plugins/plugins-http/src/main/java/org/dromara/testhub/plugins/http/server/dto/HttpRenameDto.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.plugins.http.server.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | import org.springframework.validation.annotation.Validated; 9 | 10 | import javax.validation.constraints.NotNull; 11 | 12 | 13 | @Validated 14 | @AllArgsConstructor 15 | @NoArgsConstructor 16 | @Data 17 | @ApiModel 18 | public class HttpRenameDto { 19 | private static final long serialVersionUID = 1L; 20 | 21 | private Long id; 22 | 23 | @ApiModelProperty(value = "名称") 24 | @NotNull 25 | private String name; 26 | } 27 | -------------------------------------------------------------------------------- /TestHub-server/testhub-plugins/plugins-http/src/main/java/org/dromara/testhub/plugins/http/server/repository/dao/HttpTreeNodeMapper.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.plugins.http.server.repository.dao; 2 | 3 | import org.apache.ibatis.annotations.Mapper; 4 | import org.dromara.testhub.framework.mybatis.IBaseMapper; 5 | import org.dromara.testhub.plugins.http.server.repository.po.HttpTreeNodePo; 6 | 7 | @Mapper 8 | public interface HttpTreeNodeMapper extends IBaseMapper { 9 | } 10 | -------------------------------------------------------------------------------- /TestHub-server/testhub-plugins/plugins-http/src/main/resources/META-INF/services/org.dromara.testhub.sdk.action.Plugin: -------------------------------------------------------------------------------- 1 | org.dromara.testhub.plugins.http.actions.HttpPlugin -------------------------------------------------------------------------------- /TestHub-server/testhub-plugins/plugins-sleep/src/main/java/org/dromara/testhub/plugins/sleep/actions/SleepDTOConvertor.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.plugins.sleep.actions; 2 | 3 | import org.dromara.testhub.plugins.sleep.actions.model.TestHubExecuteSleep; 4 | import org.dromara.testhub.sdk.action.BaseDTOConvertor; 5 | import org.dromara.testhub.sdk.action.model.rule.TestHubAction; 6 | import org.dromara.testhub.sdk.action.model.rule.TestHubExecute; 7 | 8 | public class SleepDTOConvertor implements BaseDTOConvertor { 9 | @Override 10 | public Object model2Res(TestHubExecute execute) { 11 | TestHubExecuteSleep executeSleep = (TestHubExecuteSleep) execute; 12 | return executeSleep.getSleepTime(); 13 | } 14 | 15 | @Override 16 | public Object model2Res(TestHubAction action) { 17 | return null; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /TestHub-server/testhub-plugins/plugins-sleep/src/main/java/org/dromara/testhub/plugins/sleep/actions/model/TestHubExecuteSleep.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.plugins.sleep.actions.model; 2 | 3 | import org.dromara.testhub.nsrule.core.executer.mode.base.action.Execute; 4 | import org.dromara.testhub.sdk.action.model.rule.TestHubExecute; 5 | 6 | public class TestHubExecuteSleep extends TestHubExecute { 7 | private Long sleepTime; 8 | 9 | public Long getSleepTime() { 10 | return sleepTime; 11 | } 12 | 13 | public void setSleepTime(Long sleepTime) { 14 | this.sleepTime = sleepTime; 15 | } 16 | 17 | public TestHubExecuteSleep(Execute execute) { 18 | super(execute); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /TestHub-server/testhub-plugins/plugins-sleep/src/main/resources/META-INF/services/org.dromara.testhub.sdk.action.Plugin: -------------------------------------------------------------------------------- 1 | org.dromara.testhub.plugins.sleep.actions.SleepPlugin -------------------------------------------------------------------------------- /TestHub-server/testhub-plugins/plugins-sql/src/main/java/org/dromara/testhub/plugins/sql/actions/model/TestHubExecuteSql.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.plugins.sql.actions.model; 2 | 3 | import org.dromara.testhub.nsrule.core.executer.mode.base.action.Execute; 4 | import org.dromara.testhub.sdk.action.model.rule.TestHubExecute; 5 | 6 | public class TestHubExecuteSql extends TestHubExecute { 7 | //数据库事务ID 8 | private String conKey; 9 | //是否自动提交 10 | private boolean commit = false; 11 | 12 | public TestHubExecuteSql(Execute execute) { 13 | super(execute); 14 | } 15 | 16 | public String getConKey() { 17 | return conKey; 18 | } 19 | 20 | public void setConKey(String conKey) { 21 | this.conKey = conKey; 22 | } 23 | 24 | public boolean getCommit() { 25 | return commit; 26 | } 27 | 28 | public void setCommit(Boolean commit) { 29 | this.commit = commit; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /TestHub-server/testhub-plugins/plugins-sql/src/main/resources/META-INF/services/org.dromara.testhub.sdk.action.Plugin: -------------------------------------------------------------------------------- 1 | org.dromara.testhub.plugins.sql.actions.SqlPlugin 2 | org.dromara.testhub.plugins.sql.actions.SqlBeginPlugin 3 | org.dromara.testhub.plugins.sql.actions.SqlCommitPlugin -------------------------------------------------------------------------------- /TestHub-server/testhub-sdk/src/main/java/org/dromara/testhub/sdk/action/BaseActionExecute.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.sdk.action; 2 | 3 | public interface BaseActionExecute { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /TestHub-server/testhub-sdk/src/main/java/org/dromara/testhub/sdk/action/BaseDTOConvertor.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.sdk.action; 2 | 3 | import org.dromara.testhub.sdk.action.model.rule.TestHubAction; 4 | import org.dromara.testhub.sdk.action.model.rule.TestHubExecute; 5 | 6 | public interface BaseDTOConvertor { 7 | Object model2Res(TestHubExecute execute); 8 | 9 | Object model2Res(TestHubAction action); 10 | } 11 | -------------------------------------------------------------------------------- /TestHub-server/testhub-sdk/src/main/java/org/dromara/testhub/sdk/action/BaseExecuteResultHandler.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.sdk.action; 2 | 3 | import org.dromara.testhub.nsrule.core.executer.mode.base.action.RunState; 4 | import org.dromara.testhub.sdk.action.model.HandlerResult; 5 | import org.dromara.testhub.sdk.action.model.rule.TestHubAction; 6 | import org.dromara.testhub.sdk.action.model.rule.TestHubExecute; 7 | 8 | import java.util.HashMap; 9 | 10 | public interface BaseExecuteResultHandler { 11 | HandlerResult handler(TestHubAction action, TestHubExecute execute, RunState.Item stateItem, HashMap flowData,Object executeData); 12 | } 13 | -------------------------------------------------------------------------------- /TestHub-server/testhub-sdk/src/main/java/org/dromara/testhub/sdk/action/BaseJsonActionParser.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.sdk.action; 2 | 3 | import com.alibaba.fastjson.JSONObject; 4 | import org.dromara.testhub.sdk.action.model.rule.TestHubAction; 5 | 6 | public interface BaseJsonActionParser { 7 | //解析xml配置的行为 8 | TestHubAction json2Model(JSONObject element, TestHubAction action); 9 | 10 | //将行为配置写入json 11 | JSONObject model2json(TestHubAction action); 12 | } 13 | -------------------------------------------------------------------------------- /TestHub-server/testhub-sdk/src/main/java/org/dromara/testhub/sdk/action/BaseJsonExecuteParser.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.sdk.action; 2 | 3 | import com.alibaba.fastjson.JSONObject; 4 | import org.dromara.testhub.sdk.action.model.rule.TestHubAction; 5 | import org.dromara.testhub.sdk.action.model.rule.TestHubExecute; 6 | 7 | public interface BaseJsonExecuteParser { 8 | 9 | TestHubExecute json2model(JSONObject element, TestHubExecute execute, TestHubAction action); 10 | 11 | JSONObject model2json( TestHubExecute execute, TestHubAction action); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /TestHub-server/testhub-sdk/src/main/java/org/dromara/testhub/sdk/action/BaseRuleEndHandler.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.sdk.action; 2 | 3 | public interface BaseRuleEndHandler { 4 | void handler(String uuid); 5 | } 6 | -------------------------------------------------------------------------------- /TestHub-server/testhub-sdk/src/main/java/org/dromara/testhub/sdk/action/BaseXMLActionParser.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.sdk.action; 2 | 3 | import org.dromara.testhub.sdk.action.model.rule.TestHubAction; 4 | import org.dom4j.Element; 5 | 6 | public interface BaseXMLActionParser { 7 | //解析xml配置的行为 8 | TestHubAction xml2Model(Element element, TestHubAction action); 9 | 10 | //将行为配置写入xml 11 | Element model2xml(Element element,TestHubAction action); 12 | } 13 | -------------------------------------------------------------------------------- /TestHub-server/testhub-sdk/src/main/java/org/dromara/testhub/sdk/action/BaseXMLExecuteParser.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.sdk.action; 2 | 3 | import org.dromara.testhub.sdk.action.model.rule.TestHubAction; 4 | import org.dromara.testhub.sdk.action.model.rule.TestHubExecute; 5 | import org.dom4j.Element; 6 | 7 | public interface BaseXMLExecuteParser { 8 | 9 | TestHubExecute xml2model(Element element, TestHubExecute execute, TestHubAction action); 10 | 11 | Element model2xml(Element element, TestHubExecute execute, TestHubAction action); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /TestHub-server/testhub-sdk/src/main/java/org/dromara/testhub/sdk/action/PluginClassLoader.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.sdk.action; 2 | 3 | 4 | import java.io.File; 5 | import java.net.URL; 6 | import java.net.URLClassLoader; 7 | 8 | public class PluginClassLoader extends URLClassLoader { 9 | public PluginClassLoader(URL[] urls) { 10 | super(urls); 11 | } 12 | 13 | public void addJarFile(String jarFilePath) throws Exception { 14 | File jarFile = new File(jarFilePath); 15 | if (jarFile.exists()) { 16 | URL jarUrl = jarFile.toURI().toURL(); 17 | addURL(jarUrl); 18 | } else { 19 | throw new Exception("JAR file does not exist: " + jarFilePath); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /TestHub-server/testhub-sdk/src/main/java/org/dromara/testhub/sdk/action/convert/BaseConvert.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.sdk.action.convert; 2 | 3 | import org.dromara.testhub.nsrule.core.executer.mode.base.action.Param; 4 | import org.dromara.testhub.sdk.action.dto.RuleParamReqDto; 5 | import org.mapstruct.Mapper; 6 | 7 | import java.util.List; 8 | 9 | 10 | @Mapper(componentModel="spring") 11 | public interface BaseConvert { 12 | 13 | List paramsReq2Mode(List params); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /TestHub-server/testhub-sdk/src/main/java/org/dromara/testhub/sdk/action/dto/req/TreeDirDto.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.sdk.action.dto.req; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | import org.springframework.validation.annotation.Validated; 9 | 10 | import javax.validation.constraints.NotNull; 11 | 12 | /** 13 | * @author yetier 14 | */ 15 | @Validated 16 | @AllArgsConstructor 17 | @NoArgsConstructor 18 | @Data 19 | @ApiModel 20 | public class TreeDirDto { 21 | private static final long serialVersionUID = 1L; 22 | 23 | private Long id; 24 | 25 | @ApiModelProperty(value = "父节点") 26 | @NotNull 27 | private Long parentId; 28 | 29 | @ApiModelProperty(value = "项目编码") 30 | private String projectCode; 31 | 32 | @ApiModelProperty(value = "名称") 33 | @NotNull 34 | private String name; 35 | } 36 | -------------------------------------------------------------------------------- /TestHub-server/testhub-sdk/src/main/java/org/dromara/testhub/sdk/action/dto/res/RuleParamEffectiveResDto.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.sdk.action.dto.res; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | 9 | 10 | @AllArgsConstructor 11 | @NoArgsConstructor 12 | @ApiModel 13 | @Data 14 | public class RuleParamEffectiveResDto extends RuleParamResDto { 15 | @ApiModelProperty(value = "是否生效") 16 | private Boolean effective = true; 17 | } -------------------------------------------------------------------------------- /TestHub-server/testhub-sdk/src/main/java/org/dromara/testhub/sdk/action/dto/res/TreeNodeDataResDto.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.sdk.action.dto.res; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | 9 | @AllArgsConstructor 10 | @NoArgsConstructor 11 | @Data 12 | @ApiModel 13 | public class TreeNodeDataResDto { 14 | @ApiModelProperty(value = "index") 15 | private String key; 16 | 17 | @ApiModelProperty(value = "parentKey") 18 | private String parentKey; 19 | 20 | @ApiModelProperty(value = "name") 21 | private String name; 22 | 23 | @ApiModelProperty(value = "节点类型") 24 | private String nodeType; 25 | 26 | @ApiModelProperty(value = "信息") 27 | private D info; 28 | } 29 | -------------------------------------------------------------------------------- /TestHub-server/testhub-sdk/src/main/java/org/dromara/testhub/sdk/action/model/HandlerResult.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.sdk.action.model; 2 | 3 | import org.dromara.testhub.sdk.action.dto.ExecuteResult; 4 | import lombok.Data; 5 | 6 | @Data 7 | public class HandlerResult { 8 | private ExecuteResult executeResult; 9 | private int errorNumber = 0; 10 | private boolean execFlag = true; 11 | 12 | public HandlerResult(){ 13 | 14 | } 15 | public HandlerResult(ExecuteResult executeResult){ 16 | this.executeResult = executeResult; 17 | } 18 | public void addErrorNumber(){ 19 | errorNumber++; 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /TestHub-server/testhub-sdk/src/main/java/org/dromara/testhub/sdk/action/model/rule/TestHubExecute.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.sdk.action.model.rule; 2 | 3 | import lombok.Data; 4 | import org.dromara.testhub.nsrule.core.executer.mode.base.action.Execute; 5 | 6 | 7 | @Data 8 | public class TestHubExecute extends Execute { 9 | 10 | public TestHubExecute() { 11 | } 12 | 13 | public TestHubExecute(Execute execute) { 14 | super(); 15 | super.setId(execute.getId()); 16 | super.setAlias(execute.getAlias()); 17 | super.setCode(execute.getCode()); 18 | super.setName(execute.getName()); 19 | super.setBlock(execute.isBlock()); 20 | super.setDoCode(execute.getDoCode()); 21 | super.setInjects(execute.getInjects()); 22 | super.setInit(execute.isInit()); 23 | super.setActionCode(execute.getActionCode()); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/TestHubApplication.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.mybatis.spring.annotation.MapperScan; 5 | import org.springframework.boot.SpringApplication; 6 | import org.springframework.boot.autoconfigure.SpringBootApplication; 7 | import org.springframework.scheduling.annotation.EnableAsync; 8 | 9 | @Slf4j 10 | @EnableAsync 11 | @MapperScan( 12 | value={ 13 | "org.dromara.testhub.server.infrastructure.repository.dao", 14 | "org.dromara.testhub.plugins.*.server.repository.dao" 15 | }) 16 | @SpringBootApplication(scanBasePackages={"org.dromara.testhub"}) 17 | public class TestHubApplication { 18 | 19 | public static void main(String[] args) { 20 | 21 | SpringApplication.run(TestHubApplication.class, args); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/core/config/SchedulingConfig.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.core.config; 2 | 3 | import org.springframework.context.annotation.Bean; 4 | import org.springframework.context.annotation.Configuration; 5 | import org.springframework.scheduling.annotation.EnableScheduling; 6 | import org.springframework.scheduling.config.ScheduledTaskRegistrar; 7 | 8 | @Configuration 9 | @EnableScheduling 10 | public class SchedulingConfig { 11 | 12 | @Bean 13 | public ScheduledTaskRegistrar scheduledTaskRegistrar() { 14 | return new ScheduledTaskRegistrar(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/core/rule/Constant.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.core.rule; 2 | 3 | public class Constant { 4 | public static class OwnerType{ 5 | //系统 6 | public static String SYSTEM="SYSTEM"; 7 | //项目 8 | public static String PROJECT="PROJECT"; 9 | //环境 10 | public static String ENVIRONMENT="ENVIRONMENT"; 11 | //规则 12 | public static String RULE="RULE"; 13 | //流程级别 14 | public static String FLOW="FLOW"; 15 | //行为 16 | public static String ACTION="ACTION"; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/core/rule/DbManager.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.core.rule; 2 | 3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 4 | import org.dromara.testhub.server.infrastructure.repository.dao.TreeInfoMapper; 5 | import org.dromara.testhub.server.infrastructure.repository.po.TreeInfoPo; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.stereotype.Component; 8 | 9 | import java.util.List; 10 | 11 | @Component 12 | public class DbManager { 13 | @Autowired 14 | private TreeInfoMapper treeInfoMapper; 15 | 16 | public List getTreeInfos(String treeType) { 17 | QueryWrapper queryWrapper = new QueryWrapper<>(); 18 | queryWrapper.eq("tree_type",treeType); 19 | return treeInfoMapper.selectList(queryWrapper); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/domain/convert/DbInfoConvert.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.domain.convert; 2 | 3 | import org.dromara.testhub.sdk.action.dto.RuleParamReqDto; 4 | import org.dromara.testhub.server.infrastructure.repository.po.*; 5 | import org.mapstruct.Mapper; 6 | 7 | import java.util.List; 8 | 9 | 10 | @Mapper(componentModel="spring") 11 | public interface DbInfoConvert { 12 | 13 | List paramsReq2Po(List params); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/domain/convert/VersionConvert.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.domain.convert; 2 | 3 | import org.dromara.testhub.server.domain.dto.res.other.VersionResDto; 4 | import org.dromara.testhub.server.infrastructure.repository.po.VersionPo; 5 | import org.mapstruct.Mapper; 6 | 7 | import java.util.List; 8 | 9 | @Mapper(componentModel="spring") 10 | public interface VersionConvert { 11 | VersionResDto po2Res(VersionPo po); 12 | List po2ResList(List pos); 13 | } 14 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/domain/dto/all/http/BodyReqDto.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.domain.dto.all.http; 2 | 3 | import org.dromara.testhub.server.domain.dto.all.http.edit.HttpInfoKVDto; 4 | import io.swagger.annotations.ApiModel; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | 9 | import java.util.List; 10 | 11 | @AllArgsConstructor 12 | @NoArgsConstructor 13 | @Data 14 | @ApiModel 15 | public class BodyReqDto { 16 | private String type; 17 | private String dataType; 18 | private String content; 19 | private List formData; 20 | } 21 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/domain/dto/all/http/HttpReqDto.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.domain.dto.all.http; 2 | 3 | import org.dromara.testhub.server.domain.dto.all.http.edit.HttpInfoKVDto; 4 | import io.swagger.annotations.ApiModel; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | 9 | import javax.validation.constraints.NotNull; 10 | import java.util.List; 11 | 12 | @AllArgsConstructor 13 | @NoArgsConstructor 14 | @Data 15 | @ApiModel 16 | public class HttpReqDto { 17 | private String baseUrl; 18 | private String url; 19 | private String method; 20 | @NotNull 21 | private List headers; 22 | private List params; 23 | private BodyReqDto body; 24 | 25 | @NotNull 26 | private int timeout = 60; 27 | 28 | 29 | 30 | } 31 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/domain/dto/all/http/edit/HttpInfoBaseDto.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.domain.dto.all.http.edit; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | @AllArgsConstructor 9 | @NoArgsConstructor 10 | @Data 11 | @ApiModel 12 | public class HttpInfoBaseDto { 13 | private Long id; 14 | private Long parentId; 15 | private String name; 16 | 17 | private String url; 18 | private String method; 19 | 20 | 21 | private HttpInfoRequestDto requestDto; 22 | private HttpInfoResponseDto responseDto; 23 | 24 | 25 | 26 | } 27 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/domain/dto/all/http/edit/HttpInfoBodyDto.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.domain.dto.all.http.edit; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.util.List; 9 | 10 | @AllArgsConstructor 11 | @NoArgsConstructor 12 | @Data 13 | @ApiModel 14 | public class HttpInfoBodyDto { 15 | private String type; 16 | private String language; 17 | private String content; 18 | private List formData; 19 | } 20 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/domain/dto/all/http/edit/HttpInfoKVDto.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.domain.dto.all.http.edit; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | @AllArgsConstructor 9 | @NoArgsConstructor 10 | @Data 11 | @ApiModel 12 | public class HttpInfoKVDto { 13 | private Long id; 14 | private String title; 15 | private String defVal; 16 | private Boolean state; 17 | private String desc; 18 | } 19 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/domain/dto/all/http/edit/HttpInfoRequestDto.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.domain.dto.all.http.edit; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import javax.validation.constraints.NotNull; 9 | import java.util.List; 10 | 11 | @AllArgsConstructor 12 | @NoArgsConstructor 13 | @Data 14 | @ApiModel 15 | public class HttpInfoRequestDto { 16 | 17 | @NotNull 18 | private List headers; 19 | private HttpInfoBodyDto body; 20 | private List params; 21 | private List rests; 22 | 23 | } 24 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/domain/dto/all/http/edit/HttpInfoResponseDto.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.domain.dto.all.http.edit; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.util.List; 9 | 10 | @AllArgsConstructor 11 | @NoArgsConstructor 12 | @Data 13 | @ApiModel 14 | public class HttpInfoResponseDto { 15 | private String type; 16 | private List datas; 17 | private List headers; 18 | } 19 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/domain/dto/all/http/edit/HttpInfoTreeDto.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.domain.dto.all.http.edit; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.util.List; 9 | 10 | @AllArgsConstructor 11 | @NoArgsConstructor 12 | @Data 13 | @ApiModel 14 | public class HttpInfoTreeDto { 15 | private Long id; 16 | private String title; 17 | private String type; 18 | private String defVal; 19 | private Boolean state; 20 | private String desc; 21 | private List children; 22 | 23 | } 24 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/domain/dto/req/other/InfoReqDto.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.domain.dto.req.other; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | import org.springframework.validation.annotation.Validated; 9 | 10 | import javax.validation.constraints.NotNull; 11 | 12 | @Validated 13 | @AllArgsConstructor 14 | @NoArgsConstructor 15 | @Data 16 | @ApiModel 17 | public class InfoReqDto { 18 | @ApiModelProperty(value = "内容") 19 | @NotNull 20 | private String info; 21 | } 22 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/domain/dto/req/other/RenameDto.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.domain.dto.req.other; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | import org.springframework.validation.annotation.Validated; 9 | 10 | import javax.validation.constraints.NotNull; 11 | 12 | 13 | @Validated 14 | @AllArgsConstructor 15 | @NoArgsConstructor 16 | @Data 17 | @ApiModel 18 | public class RenameDto { 19 | private static final long serialVersionUID = 1L; 20 | @NotNull 21 | private String key; 22 | 23 | @ApiModelProperty(value = "名称") 24 | @NotNull 25 | private String name; 26 | 27 | } 28 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/domain/dto/req/other/RuleTreeReqDto.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.domain.dto.req.other; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | import lombok.NonNull; 9 | import org.springframework.validation.annotation.Validated; 10 | 11 | 12 | @Validated 13 | @AllArgsConstructor 14 | @NoArgsConstructor 15 | @Data 16 | @ApiModel 17 | public class RuleTreeReqDto { 18 | private static final long serialVersionUID = 1L; 19 | 20 | @ApiModelProperty(value = "规则编码") 21 | @NonNull 22 | private String ruleCode; 23 | 24 | @ApiModelProperty(value = "类目ID") 25 | @NonNull 26 | private long treeId; 27 | 28 | 29 | } 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/domain/dto/req/rule/RuleDelEnvironmentReqDto.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.domain.dto.req.rule; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | 9 | import javax.validation.constraints.NotNull; 10 | import java.util.List; 11 | 12 | @AllArgsConstructor 13 | @NoArgsConstructor 14 | @Data 15 | @ApiModel 16 | public class RuleDelEnvironmentReqDto { 17 | private static final long serialVersionUID = 1L; 18 | 19 | @ApiModelProperty(value = "项目编码") 20 | @NotNull() 21 | private String projectCode; 22 | 23 | @ApiModelProperty(value = "编码") 24 | @NotNull 25 | private String code; 26 | 27 | } 28 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/domain/dto/req/rule/RuleFlowReqDto.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.domain.dto.req.rule; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | 9 | import java.util.List; 10 | 11 | 12 | @AllArgsConstructor 13 | @NoArgsConstructor 14 | @Data 15 | @ApiModel 16 | public class RuleFlowReqDto { 17 | private static final long serialVersionUID = 1L; 18 | 19 | @ApiModelProperty(value = "流程id") 20 | private Long id; 21 | 22 | @ApiModelProperty(value = "流程名称") 23 | private String name; 24 | 25 | @ApiModelProperty(value = "流程编码") 26 | private String code; 27 | 28 | @ApiModelProperty(value = "备注") 29 | private String remark; 30 | 31 | @ApiModelProperty(value = "执行步骤") 32 | private List executes; 33 | 34 | 35 | 36 | 37 | } -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/domain/dto/req/rule/RuleInjectReqDto.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.domain.dto.req.rule; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | 9 | @AllArgsConstructor 10 | @NoArgsConstructor 11 | @Data 12 | @ApiModel 13 | public class RuleInjectReqDto { 14 | private static final long serialVersionUID = 1L; 15 | 16 | @ApiModelProperty(value = "注入id") 17 | private Long id; 18 | 19 | @ApiModelProperty(value = "执行步骤名称") 20 | private String data; 21 | 22 | @ApiModelProperty(value = "执行步骤编码") 23 | private String code; 24 | } 25 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/domain/dto/res/ExecuteResult/FlowResult.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.domain.dto.res.ExecuteResult; 2 | 3 | import org.dromara.testhub.sdk.action.dto.ExecuteResult; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | import java.util.List; 8 | 9 | @Data 10 | public class FlowResult { 11 | 12 | //编码 13 | private String code; 14 | @ApiModelProperty(value = "异常数量") 15 | private Integer errorNumber; 16 | 17 | private List executeResults; 18 | 19 | 20 | } 21 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/domain/dto/res/other/CurrentUserResDto.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.domain.dto.res.other; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | import org.springframework.validation.annotation.Validated; 9 | 10 | 11 | @Validated 12 | @AllArgsConstructor 13 | @NoArgsConstructor 14 | @Data 15 | @ApiModel 16 | public class CurrentUserResDto { 17 | private static final long serialVersionUID = 1L; 18 | 19 | @ApiModelProperty(value = "用户名") 20 | private String username; 21 | 22 | @ApiModelProperty(value = "密码") 23 | private String password; 24 | } 25 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/domain/dto/res/other/UploadResDto.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.domain.dto.res.other; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | 9 | @AllArgsConstructor 10 | @NoArgsConstructor 11 | @Data 12 | @ApiModel 13 | public class UploadResDto { 14 | private static final long serialVersionUID = 1L; 15 | 16 | @ApiModelProperty(value = "文件名称") 17 | private String name; 18 | 19 | @ApiModelProperty(value = "路径") 20 | private String path; 21 | } 22 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/domain/dto/res/other/UserResDto.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.domain.dto.res.other; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Builder; 7 | import lombok.Data; 8 | import lombok.NoArgsConstructor; 9 | import org.springframework.validation.annotation.Validated; 10 | 11 | 12 | @Validated 13 | @AllArgsConstructor 14 | @NoArgsConstructor 15 | @Data 16 | @ApiModel 17 | @Builder 18 | public class UserResDto { 19 | private static final long serialVersionUID = 1L; 20 | 21 | @ApiModelProperty(value = "用户名") 22 | private String userName; 23 | 24 | @ApiModelProperty(value = "密码") 25 | private String password; 26 | 27 | @ApiModelProperty(value = "密码") 28 | private String avatar; 29 | 30 | } 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/domain/dto/res/rule/RuleCodeResDto.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.domain.dto.res.rule; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | 9 | @AllArgsConstructor 10 | @NoArgsConstructor 11 | @Data 12 | @ApiModel 13 | public class RuleCodeResDto { 14 | 15 | @ApiModelProperty(value = "规则名称") 16 | private String name; 17 | 18 | @ApiModelProperty(value = "规则编码") 19 | private String code; 20 | 21 | @ApiModelProperty(value = "规则模式") 22 | private String model; 23 | 24 | @ApiModelProperty(value = "所属项目") 25 | private String project; 26 | 27 | @ApiModelProperty(value = "用例文件名称") 28 | private String fileName; 29 | } 30 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/domain/dto/res/rule/RuleFlowResDto.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.domain.dto.res.rule; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | 9 | import java.util.List; 10 | 11 | 12 | @AllArgsConstructor 13 | @NoArgsConstructor 14 | @Data 15 | @ApiModel 16 | public class RuleFlowResDto { 17 | private static final long serialVersionUID = 1L; 18 | 19 | @ApiModelProperty(value = "流程id") 20 | private Long id; 21 | 22 | @ApiModelProperty(value = "流程名称") 23 | private String name; 24 | 25 | @ApiModelProperty(value = "流程编码") 26 | private String code; 27 | 28 | @ApiModelProperty(value = "备注") 29 | private String remark; 30 | 31 | @ApiModelProperty(value = "执行步骤") 32 | private List executes; 33 | 34 | 35 | 36 | 37 | } -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/domain/dto/res/rule/RuleInjectResDto.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.domain.dto.res.rule; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | 9 | @AllArgsConstructor 10 | @NoArgsConstructor 11 | @Data 12 | @ApiModel 13 | public class RuleInjectResDto { 14 | private static final long serialVersionUID = 1L; 15 | 16 | @ApiModelProperty(value = "注入id") 17 | private Long id; 18 | 19 | @ApiModelProperty(value = "执行步骤名称") 20 | private String data; 21 | 22 | @ApiModelProperty(value = "执行步骤编码") 23 | private String code; 24 | } 25 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/domain/dto/res/rule/RuleMappingResDto.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.domain.dto.res.rule; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | 9 | 10 | @AllArgsConstructor 11 | @NoArgsConstructor 12 | @Data 13 | @ApiModel 14 | public class RuleMappingResDto { 15 | private static final long serialVersionUID = 1L; 16 | 17 | @ApiModelProperty(value = "映射描述") 18 | private Long id; 19 | 20 | @ApiModelProperty(value = "映射目标") 21 | private String result; 22 | 23 | @ApiModelProperty(value = "映射源") 24 | private String code; 25 | 26 | } -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/domain/dto/res/rule/RuleProjectSimpleResDto.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.domain.dto.res.rule; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | 9 | @AllArgsConstructor 10 | @NoArgsConstructor 11 | @Data 12 | @ApiModel 13 | public class RuleProjectSimpleResDto { 14 | private static final long serialVersionUID = 1L; 15 | @ApiModelProperty(value = "id") 16 | private Long id; 17 | 18 | @ApiModelProperty(value = "编码") 19 | private String code; 20 | 21 | @ApiModelProperty(value = "名称") 22 | private String name; 23 | 24 | @ApiModelProperty(value = "详情") 25 | private String description; 26 | } 27 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/domain/service/ExecutionService.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.domain.service; 2 | 3 | import org.dromara.testhub.server.domain.dto.req.rule.ExecutionXmlReqDto; 4 | import org.dromara.testhub.server.domain.dto.res.ExecuteResult.ExecutionResult; 5 | 6 | public interface ExecutionService { 7 | ExecutionResult executionXml(ExecutionXmlReqDto executionXmlReqDto) throws Exception; 8 | } 9 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/domain/service/SettingService.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.domain.service; 2 | 3 | 4 | import org.dromara.testhub.server.domain.dto.res.other.VersionResDto; 5 | 6 | import java.util.List; 7 | 8 | public interface SettingService { 9 | 10 | VersionResDto getVersion(); 11 | List getHistoryVersion(); 12 | } 13 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/domain/service/SystemService.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.domain.service; 2 | 3 | 4 | import org.dromara.testhub.sdk.action.dto.res.RuleParamResDto; 5 | 6 | import java.util.List; 7 | 8 | public interface SystemService { 9 | 10 | String paramsJson2Xml(String info); 11 | 12 | List paramsXml2Json(String info); 13 | } 14 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/domain/service/UserService.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.domain.service; 2 | 3 | 4 | import org.dromara.testhub.server.domain.dto.all.http.HttpReqDto; 5 | import org.dromara.testhub.server.domain.dto.all.http.edit.HttpInfoBaseDto; 6 | import org.dromara.testhub.server.domain.dto.req.other.LoginReqDto; 7 | import org.dromara.testhub.server.domain.dto.res.other.LoginResDto; 8 | 9 | public interface UserService { 10 | LoginResDto login(LoginReqDto reqDto); 11 | void outLogin(); 12 | 13 | LoginResDto register(LoginReqDto reqDto); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/domain/util/tree/TreeItem.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.domain.util.tree; 2 | 3 | 4 | public class TreeItem { 5 | private String key; 6 | 7 | private String parentKey; 8 | 9 | private String name; 10 | 11 | private String nodeType; 12 | } 13 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/infrastructure/repository/dao/ActionMapper.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.infrastructure.repository.dao; 2 | 3 | import org.dromara.testhub.framework.mybatis.IBaseMapper; 4 | import org.dromara.testhub.server.infrastructure.repository.po.ActionPo; 5 | import org.apache.ibatis.annotations.Mapper; 6 | import org.apache.ibatis.annotations.Param; 7 | 8 | import java.util.List; 9 | 10 | 11 | @Mapper 12 | public interface ActionMapper extends IBaseMapper { 13 | 14 | int physicsDeleteBatchIds(@Param("ids") List ids); 15 | } 16 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/infrastructure/repository/dao/CodeGenerateMapper.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.infrastructure.repository.dao; 2 | 3 | import org.dromara.testhub.framework.mybatis.IBaseMapper; 4 | import org.dromara.testhub.server.infrastructure.repository.po.CodeGeneratePo; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | @Mapper 8 | public interface CodeGenerateMapper extends IBaseMapper { 9 | CodeGeneratePo forUpdate(String type); 10 | } 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/infrastructure/repository/dao/EnvironmentMapper.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.infrastructure.repository.dao; 2 | 3 | import org.dromara.testhub.framework.mybatis.IBaseMapper; 4 | import org.dromara.testhub.server.infrastructure.repository.po.EnvironmentPo; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | 8 | @Mapper 9 | public interface EnvironmentMapper extends IBaseMapper { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/infrastructure/repository/dao/ExecuteMapper.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.infrastructure.repository.dao; 2 | 3 | import org.dromara.testhub.server.infrastructure.repository.po.ExecutePo; 4 | import org.dromara.testhub.framework.mybatis.IBaseMapper; 5 | import org.apache.ibatis.annotations.Mapper; 6 | import org.apache.ibatis.annotations.Param; 7 | 8 | import java.util.List; 9 | 10 | 11 | @Mapper 12 | public interface ExecuteMapper extends IBaseMapper { 13 | int physicsDeleteBatchIds(@Param("ids") List ids); 14 | } 15 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/infrastructure/repository/dao/FlowMapper.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.infrastructure.repository.dao; 2 | 3 | import org.dromara.testhub.framework.mybatis.IBaseMapper; 4 | import org.dromara.testhub.server.infrastructure.repository.po.FlowPo; 5 | import org.apache.ibatis.annotations.Mapper; 6 | import org.apache.ibatis.annotations.Param; 7 | 8 | import java.util.List; 9 | 10 | 11 | @Mapper 12 | public interface FlowMapper extends IBaseMapper { 13 | int physicsDeleteBatchIds(@Param("ids") List ids); 14 | } 15 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/infrastructure/repository/dao/InjectMapper.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.infrastructure.repository.dao; 2 | 3 | import org.dromara.testhub.framework.mybatis.IBaseMapper; 4 | import org.dromara.testhub.server.infrastructure.repository.po.InjectPo; 5 | import org.apache.ibatis.annotations.Mapper; 6 | import org.apache.ibatis.annotations.Param; 7 | 8 | import java.util.List; 9 | 10 | 11 | @Mapper 12 | public interface InjectMapper extends IBaseMapper { 13 | int physicsDeleteBatchIds(@Param("ids") List ids); 14 | } 15 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/infrastructure/repository/dao/MappingMapper.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.infrastructure.repository.dao; 2 | 3 | import org.dromara.testhub.framework.mybatis.IBaseMapper; 4 | import org.dromara.testhub.server.infrastructure.repository.po.MappingPo; 5 | import org.apache.ibatis.annotations.Mapper; 6 | import org.apache.ibatis.annotations.Param; 7 | 8 | import java.util.List; 9 | 10 | 11 | @Mapper 12 | public interface MappingMapper extends IBaseMapper { 13 | int physicsDeleteBatchIds(@Param("ids") List ids); 14 | } 15 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/infrastructure/repository/dao/MetaClassMapper.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.infrastructure.repository.dao; 2 | 3 | import org.dromara.testhub.framework.mybatis.IBaseMapper; 4 | import org.dromara.testhub.server.infrastructure.repository.po.MetaClassPo; 5 | import org.apache.ibatis.annotations.Mapper; 6 | import org.apache.ibatis.annotations.Param; 7 | 8 | import java.util.List; 9 | 10 | 11 | @Mapper 12 | public interface MetaClassMapper extends IBaseMapper { 13 | int physicsDeleteBatchIds(@Param("ids") List ids); 14 | } 15 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/infrastructure/repository/dao/MetaEnumMapper.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.infrastructure.repository.dao; 2 | 3 | import org.dromara.testhub.framework.mybatis.IBaseMapper; 4 | import org.dromara.testhub.server.infrastructure.repository.po.MetaEnumPo; 5 | import org.apache.ibatis.annotations.Mapper; 6 | import org.apache.ibatis.annotations.Param; 7 | 8 | import java.util.List; 9 | 10 | 11 | @Mapper 12 | public interface MetaEnumMapper extends IBaseMapper { 13 | int physicsDeleteBatchIds(@Param("ids") List ids); 14 | } 15 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/infrastructure/repository/dao/MetaPropertyMapper.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.infrastructure.repository.dao; 2 | 3 | import org.dromara.testhub.framework.mybatis.IBaseMapper; 4 | import org.dromara.testhub.server.infrastructure.repository.po.MetaPropertyPo; 5 | import org.apache.ibatis.annotations.Mapper; 6 | import org.apache.ibatis.annotations.Param; 7 | 8 | import java.util.List; 9 | 10 | 11 | @Mapper 12 | public interface MetaPropertyMapper extends IBaseMapper { 13 | 14 | int physicsDeleteBatchIds(@Param("ids") List ids); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/infrastructure/repository/dao/ParamMapper.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.infrastructure.repository.dao; 2 | 3 | import org.dromara.testhub.framework.mybatis.IBaseMapper; 4 | import org.dromara.testhub.server.infrastructure.repository.po.ParamPo; 5 | import org.apache.ibatis.annotations.Mapper; 6 | import org.apache.ibatis.annotations.Param; 7 | 8 | import java.util.List; 9 | 10 | 11 | @Mapper 12 | public interface ParamMapper extends IBaseMapper { 13 | 14 | int physicsDeleteBatchIds(@Param("ids") List ids); 15 | 16 | int physicsDeleteByOwner(@Param("ownerId")Long ownerId); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/infrastructure/repository/dao/ProjectMapper.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.infrastructure.repository.dao; 2 | 3 | import org.dromara.testhub.framework.mybatis.IBaseMapper; 4 | import org.dromara.testhub.server.infrastructure.repository.po.ProjectPo; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | 8 | @Mapper 9 | public interface ProjectMapper extends IBaseMapper { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/infrastructure/repository/dao/RuleMapper.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.infrastructure.repository.dao; 2 | 3 | import org.dromara.testhub.framework.mybatis.IBaseMapper; 4 | import org.dromara.testhub.server.infrastructure.repository.po.RulePo; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | 8 | @Mapper 9 | public interface RuleMapper extends IBaseMapper { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/infrastructure/repository/dao/TreeInfoMapper.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.infrastructure.repository.dao; 2 | 3 | import org.dromara.testhub.framework.mybatis.IBaseMapper; 4 | import org.dromara.testhub.server.infrastructure.repository.po.TreeInfoPo; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | 8 | @Mapper 9 | public interface TreeInfoMapper extends IBaseMapper { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/infrastructure/repository/dao/UserMapper.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.infrastructure.repository.dao; 2 | 3 | import org.apache.ibatis.annotations.Mapper; 4 | import org.apache.ibatis.annotations.Param; 5 | import org.dromara.testhub.framework.mybatis.IBaseMapper; 6 | import org.dromara.testhub.server.infrastructure.repository.po.ActionPo; 7 | import org.dromara.testhub.server.infrastructure.repository.po.UserPo; 8 | 9 | import java.util.List; 10 | 11 | @Mapper 12 | public interface UserMapper extends IBaseMapper { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/infrastructure/repository/dao/VersionMapper.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.infrastructure.repository.dao; 2 | 3 | import org.apache.ibatis.annotations.Mapper; 4 | import org.dromara.testhub.framework.mybatis.IBaseMapper; 5 | import org.dromara.testhub.server.infrastructure.repository.po.VersionPo; 6 | 7 | 8 | @Mapper 9 | public interface VersionMapper extends IBaseMapper { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/java/org/dromara/testhub/server/interfaces/ws/WebSocketController.java: -------------------------------------------------------------------------------- 1 | package org.dromara.testhub.server.interfaces.ws;//package com.goddess.testhub.interfaces.ws; 2 | // 3 | //import com.alibaba.fastjson.JSONObject; 4 | //import lombok.extern.slf4j.Slf4j; 5 | //import org.springframework.messaging.handler.annotation.MessageMapping; 6 | //import org.springframework.stereotype.Controller; 7 | // 8 | //@Slf4j 9 | //@Controller 10 | //public class WebSocketController { 11 | // @MessageMapping("/hello") 12 | // public JSONObject sendRuleInfo(JSONObject message) { 13 | // log.info("============"+ message.toJSONString()); 14 | // return message; 15 | // } 16 | //} -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/resources/application-mybatisplus.yml: -------------------------------------------------------------------------------- 1 | mybatis-plus: 2 | configuration: 3 | #打印日志 4 | log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 5 | global-config: 6 | db-config: 7 | id-type: INPUT 8 | #逻辑删除 9 | logic-delete-value: true 10 | #逻辑存在 11 | logic-not-delete-value: false 12 | #xml配置 13 | # mapper-locations: classpath*:/mapper/*Mapper.xml 14 | mapper-locations: classpath*:/mapper/**/*.xml 15 | #实体配置 16 | # type-aliases-package: org.dromara.testhub.**.repository.po 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/resources/application-testhub.yml: -------------------------------------------------------------------------------- 1 | testhub: 2 | version: 1.0.4 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/resources/application-web.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | thymeleaf: 3 | prefix: classpath:static/ 4 | 5 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | #服务端口 3 | port: 12003 4 | servlet: 5 | context-path: /api 6 | 7 | 8 | 9 | spring: 10 | mvc: 11 | pathmatch: 12 | matching-strategy: ANT_PATH_MATCHER 13 | application: 14 | #服务名称 15 | name: TestHub 16 | servlet: 17 | multipart: 18 | max-file-size: 50MB #单个文件大小 19 | max-request-size: 500MB # 一个次请求中上传文件的总容量的限制 20 | profiles: 21 | #指明使用的数据库 22 | active: h2 23 | # active: pgsql 24 | #导入其他yml文件 25 | include: testhub,actuator,mybatisplus 26 | logging: 27 | config: classpath:config/logback-spring.xml 28 | 29 | 30 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/resources/banner.txt: -------------------------------------------------------------------------------- 1 | _____ _ _ _ _ 2 | |_ _| ___ ___ | |_ | || | _ _ | |__ 3 | | | / -_) (_-< | _| | __ | | +| | | '_ \ 4 | _|_|_ \___| /__/_ _\__| |_||_| \_,_| |_.__/ 5 | 6 | * Maintainer: 18733123202@163.com & Team TestHub 7 | * OfficialWebsite: http://nsrule.com/ 8 | * SourceCode: https://github.com/dromara/TestHub 9 | * PoweredBy: SpringBoot${spring-boot.formatted-version} 10 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/resources/config/migration/h2/V1_0_2__初始化.sql: -------------------------------------------------------------------------------- 1 | DELETE FROM base_environment WHERE id in (3,4); 2 | -- 修改http json错误的问题 3 | UPDATE base_action SET extend_info = REPLACE(extend_info, '"type":"row"', '"type":"raw"') WHERE type='HTTP' AND POSITION('"type":"row"' IN extend_info) > 0; -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/resources/config/migration/pgsql/V1_0_2__初始化.sql: -------------------------------------------------------------------------------- 1 | DELETE FROM base_environment WHERE id in (3,4); 2 | -- 修改http json错误的问题 3 | UPDATE base_action set extend_info = REPLACE(extend_info, '"type":"row"', '"type":"raw"') WHERE type='HTTP' and extend_info LIKE '%"type":"row"%'; -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/resources/mapper/ProjectMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /TestHub-server/testhub-server/src/main/resources/mapper/VersionMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /TestHub-static/contact.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-static/contact.jpeg -------------------------------------------------------------------------------- /TestHub-static/img/check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-static/img/check.png -------------------------------------------------------------------------------- /TestHub-static/img/check_loop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-static/img/check_loop.png -------------------------------------------------------------------------------- /TestHub-static/img/check_obj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-static/img/check_obj.png -------------------------------------------------------------------------------- /TestHub-static/img/convert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-static/img/convert.png -------------------------------------------------------------------------------- /TestHub-static/img/http.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-static/img/http.png -------------------------------------------------------------------------------- /TestHub-static/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-static/img/logo.png -------------------------------------------------------------------------------- /TestHub-static/img/sql.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-static/img/sql.png -------------------------------------------------------------------------------- /TestHub-static/img/全局行为.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-static/img/全局行为.jpg -------------------------------------------------------------------------------- /TestHub-static/img/概览.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-static/img/概览.jpg -------------------------------------------------------------------------------- /TestHub-static/img/环境级参数.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/TestHub/0d77170022e6b7d9d86ea63fd61906e4525f825a/TestHub-static/img/环境级参数.jpg --------------------------------------------------------------------------------