手把手教你基於 JMeter 開發一個自動化測試平臺 (2)
大家好,我們繼續來進行基於 JMeter 的自動化測試平臺的開發實戰。
上次的教程中,我們已經完成了工程開發環境的搭建,那麼現在我們可以進入到程式碼,今天先以一個簡單的例子,來帶著大家熟悉一下。
歷史文章
手把手教你基於 JMeter 開發一個自動化測試平臺 (1)
今天的目標
我們先來明確一下今天的目標,我們要選擇一個相對簡單的目標來作為入門,通過這個過程來熟悉技術棧、專案和開發流程。
經過一番斟酌,我選擇的目標是開發一個新的使用者資訊頁面,因為一來 MeterSphere 這個工程中原來的使用者資訊頁面不是太好看,二來這個功能相對簡單,不涉及太多的業務內容,比較適合上手。
原型設計
現在系統裡面個人資訊的頁面是長這個樣子的,我們就來改造一下這個頁面,來一邊學習一邊熟悉專案。
今天我們的內容主要針對前端部分。
這裡我們來做一下原型設計,大概做成下面這樣。
梳理任務
- 一個頂層標籤:飛致雲學堂,後續我們的內容會放到這裡。
- 一個左側選單,因為後續的演示內容會都放到這,所以我們要分開選單。
- 一個新的人資訊頁面:我們就按上面的原型來實現一個頁面。
準備好助手
再開始之前,我們要先準備幾個助手,也就是先開啟幾個相關的文件,可以隨時查閱。這次的內容主要關聯的都是前端部分,所以只准備前端的即可。
- https://cn.vuejs.org/v2/guide/ vue 的文件,可以隨時用上
- https://router.vuejs.org/zh/ vue-router 的文件
- https://element.eleme.cn/#/zh-CN/component/installation element-ui 的文件
- https://metersphere.io/docs/index.html MeterSphere 的文件
接下我們就開始吧
首先我們要做的第一件事是先分析一下程式碼,就像我們們開始的時候書的一樣,我們是在一個開源專案的基礎上來進行開發和學習,那麼我們要更多的利用專案已經是做的內容。
導航欄和基本頁面
第一步我們先來新增頂部的導航資訊。
這裡我們要找到頂部導航欄位置。他的具體檔案位置如下:
接下來,我們就在裡面加入我們的飛致雲學堂導航連結。 當中加入如下:
<el-menu-item index="/class" onselectstart="return false"> {{$t('commons.class')}} </el-menu-item>
我們會發現 $t('commons.class') 的程式碼,這是因為專案已經進行了多語言的處理,我們也遵循規則,使用多語言的方式,接下來我們就到i18n的檔案中新增對應的配置,檔案位置在:
metersphere/frontend/src/i18n/zh-CN.js
多語言的內容這裡我們演示一次,後續的內容中就不再重複介紹。
在上面新增頂部導航欄的時候,我們新增了一條路由 /class ,那麼我們接下來就來配置這條路由資訊。專案的前端路由資訊都在如下檔案中配置:
metersphere/frontend/src/business/components/common/router/router.js
我們給自己新增一塊路由資訊,後面我們其他示例的路由資訊也都放在 /class 下:
{
path: "/class",
components: {
content: Class
}
}
接下來,我們再來建立/ class 路由對應的頁面,我們也給自己建立一個專門的資料夾:
metersphere/frontend/src/business/components/class
之後我們通過 IDE 直接建立一個 VUE 檔案 ,Class.vue ,然後隨便寫點內容,像下面這樣:
<template>
<div>
<span>111111</span>
</div>
</template>
<script>
export default {
name: "Class"
}
</script>
<style scoped>
</style>
那麼新增好了資訊之後,我們來重新整理一下頁面,會發現頂部的導航已經出來了,點選一下,是一個只有11111的頁面。
新增左側選單
因為我們後續還會新增其他內容,所以這裡我給我們的頁面再加入一個左側選單。
這裡我們可以參考 MeterSphere 已經開發好的左側選單,多利用一下已經做好的元件。我們修改一下 Class.vue:
<template>
<ms-container>
<ms-aside-container>
<ms-new-current-user/>
<el-divider/>
<h1>{{$t('commons.class')}}</h1>
<class-menu/>
</ms-aside-container>
</ms-container>
</template>
<script>
import MsAsideContainer from "../common/components/MsAsideContainer";
import MsContainer from "../common/components/MsContainer";
import MsMainContainer from "../common/components/MsMainContainer";
import MsCurrentUser from "../settings/CurrentUser";
import ClassMenu from "./ClassMenu";
export default {
name: "Class1",
components: {MsContainer, MsAsideContainer, MsCurrentUser, ClassMenu},
}
</script>
<style scoped>
</style>
現在我們的程式碼長這個樣子了,這裡我們用到了專案中已經開發好的幾個元件,MsContainer, MsAsideContainer, MsNewCurrentUser,主要要在 script 部分引入和宣告各個元件。
然後我們自己再寫一個自己的選單內容元件 ClassMenu。
<template>
<el-menu menu-trigger="click" :default-active="$route.path" router>
<el-menu-item index="/class/userMsg">{{$t('commons.personal_info')}}</el-menu-item>
</el-menu>
</template>
<script>
import {checkoutCurrentOrganization, checkoutCurrentWorkspace} from "../../../common/js/utils";
export default {
name: "ClassMenu",
data() {
return {
isCurrentOrganizationAdmin: false,
isCurrentWorkspaceUser: false,
}
},
mounted() {
this.isCurrentOrganizationAdmin = checkoutCurrentOrganization();
this.isCurrentWorkspaceUser = checkoutCurrentWorkspace();
},
}
</script>
<style scoped>
.el-menu {
border-right: 0;
}
.el-menu-item {
height: 40px;
line-height: 40px;
}
.icon {
width: 24px;
margin-right: 10px;
}
.account {
color: #5a78f0;
}
.organization {
color: #b33a5b;
}
.workspace {
color: #44b349;
}
</style>
這裡我們借用了專案中已經有的元件,來處理系統中切換組織和工作空間的邏輯。
接下來,我們在看重新整理一下頁面,可以看到變成了這個樣子
個人資訊頁面
在有了左側選單之後,我們就來完成選單跳轉的個人資訊頁面。
我們先在 class 資料夾下建立 UserMsg.vue
metersphere/frontend/src/business/components/class
我們先把程式碼貼出來:
<template>
<div v-loading="result.loading">
<el-card class="box-card" shadow="hover">
<div slot="header" class="clearfix">
<span>個人資訊</span>
<el-button style="float: right; padding: 3px 0" type="text">編輯</el-button>
</div>
<el-row :gutter="20">
<el-col :span="6"><div class="grid-content bg-purple" align="center">
<div class="block">
<el-image
style="width: 100px; height: 100px"
:src="userData.img"
fit="contain"></el-image>
</div>
</div></el-col>
<el-col :span="18"><div class="grid-content bg-purple">
<el-form ref="form" :model="form" label-width="">
<el-form-item label="ID">
<span>{{userData.id}}</span>
</el-form-item>
<el-form-item :label="$t('commons.username')">
<span>{{userData.name}}</span>
</el-form-item>
<el-form-item :label="$t('commons.email')">
<span>{{userData.email}}</span>
</el-form-item>
<el-form-item :label="$t('commons.phone')">
<span>{{userData.phone}}</span>
</el-form-item>
<el-form-item :label="$t('commons.create_time')">
<span>{{userData.createTime}}</span>
</el-form-item>
<el-form-item :label="$t('commons.operating')">
<template>
<ms-table-operator-button type="primary" circle :tip="$t('member.edit_information')" icon="el-icon-edit"
@exec="edit(userData)" />
</template>
</el-form-item>
</el-form>
</div></el-col>
</el-row>
</el-card>
</div>
</template>
<script>
import {getCurrentUser} from "../../../common/js/utils";
import MsTableOperatorButton from "../common/components/MsTableOperatorButton";
export default {
name: "UserMsg",
components:{MsTableOperatorButton},
data(){
return {
result: {},
userData:{},
updateVisible : false,
editPasswordVisible : false,
isLdapUser:false,
form:{}
};
},
methods:{
currentUser: () => {
return getCurrentUser();
},
initMsg(){
this.result = this.$get("/user/info/" + this.currentUser().id, response => {
let data = response.data;
this.isLdapUser = response.data.source === 'LDAP' ? true : false;
this.userData = data;
})
this.result.loading = true;
},edit(userdata) {
},handleClose: () => {
},updateUser(updateUserForm) {
},
},
activated() {
this.initMsg();
}
}
</script>
<style scoped>
</style>
我們分頁面模板和JS來看一下。
- template:我們按照文章最前面設計的原型,來實現以下頁面,同時,我們也利用了專案中包裝好的一個按鈕,這個按鈕也是在 ElementUI 的按鈕基礎上進行包裝。其他的部分,大家如果有問題可以自己查一下 ElementUI。
- JS:我們目前先把查的功能實現,所以很多方法,只是先留出一個空方法。
接下來我們再新增一下路由資訊,現在是這個樣子:
{
path: "/class",
components: {
content: Class
},
children: [
{
path: 'userMsg',
component: UserMsg,
}
]
},
注意在上面要 import 一下 userMsg
import Class from "../../class/Class";
import UserMsg from "../../class/UserMsg";
我們再來重新整理一下頁面,現在點選左側的選單,可以看到我們的頁面了。
到這裡,我們已經有了一個新的頁面的雛形,因為篇幅所限,今天我們的分享就先到這裡,下次我們繼續來完善修改資訊,上傳,後端等部分的內容。
相關文章
- 手把手教你基於 JMeter 開發一個自動化測試平臺 (1)JMeter
- 自動化測試平臺
- UI 自動化測試平臺UI
- 基於Python豆瓣自動化測試【2】Python
- 基於 HttpRunner 的介面自動化測試平臺宣講 (已落地)HTTP
- 基於LINUX平臺的自動化測試的研究與應用
- 求一個開源的自動化測試平臺 最好是 vue+python 開發的VuePython
- 基於 RF 的 WEB 版自動管理測試平臺Web
- Django 介面自動化測試平臺Django
- 從業務測試需求痛點到自動化測試平臺設計開發
- 自動化測試-敏捷開發的基礎敏捷
- API自動化測試平臺,高效實現對API的自動化測試API
- 自動化測試平臺設計與實現(一)
- 測試開發技能:JMeter高階教程——效能測試與自動化雲監控JMeter
- Windows平臺自動化測試工具基於的一些技術簡介(筆記)Windows筆記
- [opendx] 基於 appium 的移動端 UI 自動化測試平臺-介紹篇APPUI
- 《手把手教你》系列基礎篇(五)-java+ selenium自動化測試- 建立首個自動化指令碼(詳細教程)Java指令碼
- 請問大家,自動化測試可以實現一個指令碼測試全部平臺嗎?指令碼
- JMeter 介面自動化測試(手工轉自動化指令碼)JMeter指令碼
- 測試開發基礎,教你做一個完整功能的Web平臺之登入認證Web
- 測試開發基礎,教你做一個完整功能的Web平臺之環境準備Web
- 手把手教你使J2EE專案開發自動化(轉)
- 開源免費的自動化測試平臺推薦
- API自動化測試平臺,支援場景化的API測試API
- 基於 HttpRunner + Django + Vue + Element UI 的介面自動化測試平臺,生產可用HTTPDjangoVueUI
- 無人值守自動化效能測試平臺
- 測試開發之自動化篇-自動化測試框架設計框架
- 基於 Htte 的 API 自動化測試API
- JMeter做WEB和API自動化測試JMeterWebAPI
- 一種基於 cypress 的 UI 自動化測試框架UI框架
- 試著使用 jmeter 實現介面自動化測試JMeter
- 手把手教你搭建Windows 搭建Prometheus + Grafana + Jmeter視覺化監控平臺WindowsPrometheusGrafanaJMeter視覺化
- Linux下搭建介面自動化測試平臺Linux
- iOS平臺如何進行app自動化測試?iOSAPP
- 手把手教你利用開源專案搭建一個屬於自已的電商平臺
- 自動化測試系統開發手記(一)
- 基於PhantomFlow的自動化UI測試UI
- swift - 基於TCL的自動化測試框架Swift框架