提交 249aa874 编写于 作者: 雨爱无痕

Add test script

上级 b78f0837
package main
import (
"testing"
"github.com/ozontech/allure-go/pkg/framework/provider"
"github.com/ozontech/allure-go/pkg/framework/runner"
playwright "github.com/playwright-community/playwright-go"
)
var logBrowser playwright.Browser
func CollapseLog(t provider.T) {
t.ID("5502")
t.AddParentSuite("脚本执行日志")
pw, err := playwright.Run()
if err != nil {
t.Error(err)
t.FailNow()
}
headless := true
var slowMo float64 = 100
logBrowser, err := pw.Chromium.Launch(playwright.BrowserTypeLaunchOptions{Headless: &headless, SlowMo: &slowMo})
if err != nil {
t.Errorf("Fail to launch the web logBrowser: %v", err)
t.FailNow()
}
page, err := logBrowser.NewPage()
if err != nil {
t.Errorf("Create the new page fail: %v", err)
t.FailNow()
}
if _, err = page.Goto("http://127.0.0.1:8000/", playwright.PageGotoOptions{
WaitUntil: playwright.WaitUntilStateDomcontentloaded}); err != nil {
t.Errorf("The specific URL is missing: %v", err)
t.FailNow()
}
_, err = page.WaitForSelector(".tree-node")
if err != nil {
t.Errorf("Wait tree-node fail: %v", err)
t.FailNow()
}
locator, err := page.Locator(".tree-node", playwright.PageLocatorOptions{HasText: "单元测试工作目录"})
c, err := locator.Count()
if err != nil || c == 0 {
t.Errorf("Find workspace fail: %v", err)
t.FailNow()
}
err = locator.Click()
if err != nil {
t.Errorf("Click node fail: %v", err)
t.FailNow()
}
scriptLocator, err := locator.Locator("text=1_string_match.php")
if err != nil {
t.Errorf("Find 1_string_match.php fail: %v", err)
t.FailNow()
}
err = scriptLocator.Click()
if err != nil {
t.Errorf("Click script fail: %v", err)
t.FailNow()
}
err = page.Click(".tabs-nav-toolbar>>[title=\"Run\"]")
if err != nil {
t.Errorf("Click run fail: %v", err)
t.FailNow()
}
_, err = page.WaitForSelector("#log-list>>.msg-span>>:has-text('执行1个用例,耗时')")
if err != nil {
t.Errorf("Wait exec result fail: %v", err)
t.FailNow()
}
err = page.Click(".btn[title=\"展开所有\"]")
if err != nil {
t.Errorf("Click expand btn fail: %v", err)
t.FailNow()
}
locator, _ = page.Locator("#log-list>>.show-detail>>:has-text('[Expect]')")
count, _ := locator.Count()
if count == 0 {
t.Error("Find expanded log fail")
t.FailNow()
}
page.WaitForTimeout(100)
err = page.Click(".btn[title=\"折叠所有\"]")
if err != nil {
t.Errorf("Click Collapse btn fail: %v", err)
t.FailNow()
}
locator, _ = page.Locator("#log-list>>.show-detail>>:has-text('[Expect]')")
count, _ = locator.Count()
if count > 0 {
t.Error("Find Collapsed log fail")
t.FailNow()
}
if err = logBrowser.Close(); err != nil {
t.Errorf("The logBrowser cannot be closed: %v", err)
t.FailNow()
}
if err = pw.Stop(); err != nil {
t.Errorf("The playwright cannot be stopped: %v", err)
t.FailNow()
}
}
func FullScreenLog(t provider.T) {
t.ID("5502")
t.AddParentSuite("脚本执行日志")
pw, err := playwright.Run()
if err != nil {
t.Error(err)
t.FailNow()
}
headless := true
var slowMo float64 = 100
logBrowser, err := pw.Chromium.Launch(playwright.BrowserTypeLaunchOptions{Headless: &headless, SlowMo: &slowMo})
if err != nil {
t.Errorf("Fail to launch the web logBrowser: %v", err)
t.FailNow()
}
page, err := logBrowser.NewPage()
if err != nil {
t.Errorf("Create the new page fail: %v", err)
t.FailNow()
}
if _, err = page.Goto("http://127.0.0.1:8000/", playwright.PageGotoOptions{
WaitUntil: playwright.WaitUntilStateDomcontentloaded}); err != nil {
t.Errorf("The specific URL is missing: %v", err)
t.FailNow()
}
_, err = page.WaitForSelector(".tree-node")
if err != nil {
t.Errorf("Wait tree-node fail: %v", err)
t.FailNow()
}
locator, err := page.Locator(".tree-node", playwright.PageLocatorOptions{HasText: "单元测试工作目录"})
c, err := locator.Count()
if err != nil || c == 0 {
t.Errorf("Find workspace fail: %v", err)
t.FailNow()
}
err = locator.Click()
if err != nil {
t.Errorf("Click node fail: %v", err)
t.FailNow()
}
scriptLocator, err := locator.Locator("text=1_string_match.php")
if err != nil {
t.Errorf("Find 1_string_match.php fail: %v", err)
t.FailNow()
}
err = scriptLocator.Click()
if err != nil {
t.Errorf("Click script fail: %v", err)
t.FailNow()
}
err = page.Click(".tabs-nav-toolbar>>[title=\"Run\"]")
if err != nil {
t.Errorf("Click run fail: %v", err)
t.FailNow()
}
_, err = page.WaitForSelector("#log-list>>.msg-span>>:has-text('执行1个用例,耗时')")
if err != nil {
t.Errorf("Wait exec result fail: %v", err)
t.FailNow()
}
err = page.Click(".btn[title=\"向上展开\"]")
if err != nil {
t.Errorf("Click Collapse btn fail: %v", err)
t.FailNow()
}
page.WaitForTimeout(100)
isHidden, err := page.IsHidden("#tabsPane")
if !isHidden {
t.Errorf("Full Screen fail: %v", err)
t.FailNow()
}
if err = logBrowser.Close(); err != nil {
t.Errorf("The logBrowser cannot be closed: %v", err)
t.FailNow()
}
if err = pw.Stop(); err != nil {
t.Errorf("The playwright cannot be stopped: %v", err)
t.FailNow()
}
}
func TestUiLog(t *testing.T) {
runner.Run(t, "客户端-展开折叠执行日志", CollapseLog)
runner.Run(t, "客户端-最大化脚本执行日志", FullScreenLog)
}
package main
import (
"fmt"
"testing"
"github.com/ozontech/allure-go/pkg/framework/provider"
"github.com/ozontech/allure-go/pkg/framework/runner"
playwright "github.com/playwright-community/playwright-go"
)
var productBrowser playwright.Browser
func SwitchProduct(t provider.T) {
t.ID("5496")
t.AddParentSuite("切换禅道产品")
pw, err := playwright.Run()
if err != nil {
t.Error(err)
t.FailNow()
}
headless := true
var slowMo float64 = 100
productBrowser, err := pw.Chromium.Launch(playwright.BrowserTypeLaunchOptions{Headless: &headless, SlowMo: &slowMo})
if err != nil {
t.Errorf("Fail to launch the web productBrowser: %v", err)
t.FailNow()
}
page, err := productBrowser.NewPage()
if err != nil {
t.Errorf("Create the new page fail: %v", err)
t.FailNow()
}
if _, err = page.Goto("http://127.0.0.1:8000/", playwright.PageGotoOptions{
WaitUntil: playwright.WaitUntilStateDomcontentloaded}); err != nil {
t.Errorf("The specific URL is missing: %v", err)
t.FailNow()
}
_, err = page.WaitForSelector(".tree-node")
if err != nil {
t.Errorf("Wait tree-node fail: %v", err)
t.FailNow()
}
locator, err := page.Locator("#siteMenuToggle")
if err != nil {
t.Errorf("The siteMenuToggle is missing: %v", err)
t.FailNow()
}
err = locator.Click()
if err != nil {
t.Errorf("Click is fail: %v", err)
t.FailNow()
}
_, err = page.WaitForSelector("#navbar .list-item")
if err != nil {
t.Errorf("Wait for site list nav fail: %v", err)
t.FailNow()
}
err = page.Click(".list-item-title>>text=单元测试站点")
if err != nil {
t.Errorf("Click site nav fail: %v", err)
t.FailNow()
}
err = page.Click("#productMenuToggle")
if err != nil {
t.Errorf("Click site nav fail: %v", err)
t.FailNow()
}
_, err = page.WaitForSelector("#navbar .list-item")
if err != nil {
t.Errorf("Wait for product list nav fail: %v", err)
t.FailNow()
}
err = page.Click("#navbar .list-item>>text=test")
page.WaitForTimeout(100)
productName, err := page.InnerText("#productMenuToggle>>span")
fmt.Println(productName)
if productName != "test" {
t.Error("Switch product fail")
t.FailNow()
}
if err = productBrowser.Close(); err != nil {
t.Errorf("The productBrowser cannot be closed: %v", err)
t.FailNow()
}
if err = pw.Stop(); err != nil {
t.Errorf("The playwright cannot be stopped: %v", err)
t.FailNow()
}
}
func TestUiProduct(t *testing.T) {
runner.Run(t, "客户端-切换禅道产品", SwitchProduct)
}
......@@ -371,7 +371,7 @@ func RunOpenedAndLast(t provider.T) {
t.Errorf("Find log title in logPane fail: %v", err)
}
resultTitle, err := resultTitleElement.InnerText()
if err != nil || resultTitle != "单元测试工作目录(2)" {
if err != nil || resultTitle != "单元测试工作目录(3)" {
t.Errorf("Find result in rightPane fail: %v", err)
}
timeElement, err := locator.Locator(".time>>span")
......@@ -1082,6 +1082,112 @@ func RunBugStatistic(t provider.T) {
}
}
func RunWorkspace(t provider.T) {
t.ID("5482")
t.AddParentSuite("右键执行脚本")
pw, err := playwright.Run()
if err != nil {
t.Error(err)
t.FailNow()
}
headless := true
var slowMo float64 = 100
workspaceBrowser, err := pw.Chromium.Launch(playwright.BrowserTypeLaunchOptions{Headless: &headless, SlowMo: &slowMo})
if err != nil {
t.Errorf("Fail to launch the web workspaceBrowser: %v", err)
t.FailNow()
}
page, err := workspaceBrowser.NewPage()
if err != nil {
t.Errorf("Create the new page fail: %v", err)
t.FailNow()
}
if _, err = page.Goto("http://127.0.0.1:8000/", playwright.PageGotoOptions{
WaitUntil: playwright.WaitUntilStateDomcontentloaded}); err != nil {
t.Errorf("The specific URL is missing: %v", err)
t.FailNow()
}
_, err = page.WaitForSelector(".tree-node")
if err != nil {
t.Errorf("Wait tree-node fail: %v", err)
t.FailNow()
}
locator, err := page.Locator(".tree-node", playwright.PageLocatorOptions{HasText: "单元测试工作目录"})
c, err := locator.Count()
if err != nil || c == 0 {
t.Errorf("Find workspace fail: %v", err)
t.FailNow()
}
err = locator.Click(playwright.PageClickOptions{Button: playwright.MouseButtonRight})
if err != nil {
t.Errorf("Right click workspace fail: %v", err)
t.FailNow()
}
err = page.Click(".tree-context-menu>>text=执行")
if err != nil {
t.Errorf("Click copy fail: %v", err)
t.FailNow()
}
_, err = page.WaitForSelector("#log-list>>.msg-span>>:has-text('执行3个用例,耗时')")
if err != nil {
t.Errorf("Wait exec workspace result fail: %v", err)
t.FailNow()
}
locator, err = page.Locator("#log-list>>code:has-text('执行3个用例,耗时')")
if err != nil {
t.Errorf("Find exec workspace log fail: %v", err)
t.FailNow()
}
innerText, err := locator.InnerText()
if err != nil {
t.Errorf("Find exec workspace result fail: %v", err)
t.FailNow()
}
if !strings.Contains(innerText, "2(66.0%) 通过,1(33.0%) 失败") {
t.Errorf("Exec workspace fail: %v", err)
t.FailNow()
}
resultTitleElement, err := page.QuerySelector("#rightPane .result-list-item .list-item-title")
if err != nil {
t.Errorf("Find log title in logPane fail: %v", err)
t.FailNow()
}
resultTitle, err := resultTitleElement.InnerText()
if err != nil || resultTitle != "单元测试工作目录(3)" {
t.Errorf("Find result in rightPane fail: %v", err)
t.FailNow()
}
timeElement, err := page.Locator("#log-list>>.case-item:has-text('3_http_interface_call')>>.time>>span")
if err != nil {
t.Errorf("Find log time element in logPane fail: %v", err)
t.FailNow()
}
logTime, err := timeElement.InnerText()
if err != nil {
t.Errorf("Find log time in logPane fail: %v", err)
t.FailNow()
}
resultTimeElement, err := page.QuerySelector("#rightPane .result-list-item .list-item-trailing-text")
if err != nil {
t.Errorf("Find log time in rightPane fail: %v", err)
t.FailNow()
}
resultTime, err := resultTimeElement.InnerText()
if err != nil || logTime[:5] != resultTime {
t.Errorf("Find result in rightPane fail: %v", err)
t.FailNow()
}
if err = workspaceBrowser.Close(); err != nil {
t.Errorf("The workspaceBrowser cannot be closed: %v", err)
t.FailNow()
}
if err = pw.Stop(); err != nil {
t.Errorf("The playwright cannot be stopped: %v", err)
t.FailNow()
}
}
func TestUiRun(t *testing.T) {
runner.Run(t, "客户端-执行单个脚本", RunScript)
runner.Run(t, "客户端-执行选中的脚本文件和文件夹", RunSelectedScripts)
......@@ -1092,4 +1198,5 @@ func TestUiRun(t *testing.T) {
runner.Run(t, "客户端-确认执行统计成功数据", RunSuccessStatistic)
runner.Run(t, "客户端-确认执行统计失败数据", RunFailStatistic)
runner.Run(t, "客户端-确认执行统计bug数据", RunBugStatistic)
runner.Run(t, "客户端-右键执行工作目录", RunWorkspace)
}
......@@ -12,7 +12,7 @@ var scriptBrowser playwright.Browser
func SaveScript(t provider.T) {
t.ID("5470")
t.AddParentSuite("保存脚本")
t.AddParentSuite("禅道站点脚本")
pw, err := playwright.Run()
if err != nil {
t.Error(err)
......@@ -118,6 +118,74 @@ func SaveScript(t provider.T) {
}
}
func ViewScript(t provider.T) {
t.ID("5469")
t.AddParentSuite("禅道站点脚本")
pw, err := playwright.Run()
if err != nil {
t.Error(err)
t.FailNow()
}
headless := true
var slowMo float64 = 100
workspaceBrowser, err := pw.Chromium.Launch(playwright.BrowserTypeLaunchOptions{Headless: &headless, SlowMo: &slowMo})
if err != nil {
t.Errorf("Fail to launch the web workspaceBrowser: %v", err)
t.FailNow()
}
page, err := workspaceBrowser.NewPage()
if err != nil {
t.Errorf("Create the new page fail: %v", err)
t.FailNow()
}
if _, err = page.Goto("http://127.0.0.1:8000/", playwright.PageGotoOptions{
WaitUntil: playwright.WaitUntilStateDomcontentloaded}); err != nil {
t.Errorf("The specific URL is missing: %v", err)
t.FailNow()
}
_, err = page.WaitForSelector(".tree-node")
if err != nil {
t.Errorf("Wait tree-node fail: %v", err)
t.FailNow()
}
locator, err := page.Locator(".tree-node", playwright.PageLocatorOptions{HasText: "单元测试工作目录"})
c, err := locator.Count()
if err != nil || c == 0 {
t.Errorf("Find workspace fail: %v", err)
t.FailNow()
}
err = locator.Click()
if err != nil {
t.Errorf("Click node fail: %v", err)
t.FailNow()
}
scriptLocator, err := locator.Locator("text=1_string_match.php")
if err != nil {
t.Errorf("Find 1_string_match.php fail: %v", err)
t.FailNow()
}
err = scriptLocator.Click()
if err != nil {
t.Errorf("Click script fail: %v", err)
t.FailNow()
}
locator, err = page.Locator(".view-line>>text=title=check string matches pattern")
if err != nil {
t.Errorf("Find title fail: %v", err)
t.FailNow()
}
if err = workspaceBrowser.Close(); err != nil {
t.Errorf("The workspaceBrowser cannot be closed: %v", err)
t.FailNow()
}
if err = pw.Stop(); err != nil {
t.Errorf("The playwright cannot be stopped: %v", err)
t.FailNow()
}
}
func TestUiScript(t *testing.T) {
runner.Run(t, "客户端-编辑保存禅道站点脚本", SaveScript)
// runner.Run(t, "客户端-编辑保存禅道站点脚本", SaveScript)
runner.Run(t, "客户端-显示禅道站点脚本", ViewScript)
}
......@@ -1046,6 +1046,85 @@ func FilterTask(t provider.T) {
t.FailNow()
}
}
func Collapse(t provider.T) {
t.ID("5472")
t.AddParentSuite("管理禅道站点下工作目录")
pw, err := playwright.Run()
if err != nil {
t.Error(err)
t.FailNow()
}
headless := true
var slowMo float64 = 100
workspaceBrowser, err := pw.Chromium.Launch(playwright.BrowserTypeLaunchOptions{Headless: &headless, SlowMo: &slowMo})
if err != nil {
t.Errorf("Fail to launch the web workspaceBrowser: %v", err)
t.FailNow()
}
page, err := workspaceBrowser.NewPage()
if err != nil {
t.Errorf("Create the new page fail: %v", err)
t.FailNow()
}
if _, err = page.Goto("http://127.0.0.1:8000/", playwright.PageGotoOptions{
WaitUntil: playwright.WaitUntilStateDomcontentloaded}); err != nil {
t.Errorf("The specific URL is missing: %v", err)
t.FailNow()
}
locator, err := page.Locator("#siteMenuToggle")
if err != nil {
t.Errorf("The siteMenuToggle is missing: %v", err)
t.FailNow()
}
err = locator.Click()
if err != nil {
t.Errorf("The Click is fail: %v", err)
t.FailNow()
}
_, err = page.WaitForSelector("#navbar .list-item")
if err != nil {
t.Errorf("Wait for workspace list nav fail: %v", err)
t.FailNow()
}
err = page.Click(".list-item-title>>text=单元测试站点")
if err != nil {
t.Errorf("The Click workspace nav fail: %v", err)
t.FailNow()
}
err = page.Click(`#leftPane>>.toolbar>>[title="展开"]`)
if err != nil {
t.Errorf("Click expand workspace btn fail: %v", err)
t.FailNow()
}
page.WaitForTimeout(100)
locator, _ = page.Locator("#leftPane>>.tree-node-item>>text=1_string_match.php")
count, _ := locator.Count()
if count == 0 {
t.Error("Expand workspace fail")
t.FailNow()
}
err = page.Click(`#leftPane>>.toolbar>>[title="折叠"]`)
if err != nil {
t.Errorf("Click Collapse workspace btn fail: %v", err)
t.FailNow()
}
page.WaitForTimeout(100)
locator, _ = page.Locator("#leftPane>>.tree-node-item>>text=1_string_match.php")
count, _ = locator.Count()
if count > 0 {
t.Error("Collapse workspace fail")
t.FailNow()
}
if err = workspaceBrowser.Close(); err != nil {
t.Errorf("The workspaceBrowser cannot be closed: %v", err)
t.FailNow()
}
if err = pw.Stop(); err != nil {
t.Errorf("The playwright cannot be stopped: %v", err)
t.FailNow()
}
}
func TestWorkspace(t *testing.T) {
runner.Run(t, "客户端-从禅道同步部分用例", SyncTwoCaseFromZentao)
runner.Run(t, "客户端-从禅道同步", SyncFromZentao)
......@@ -1057,6 +1136,7 @@ func TestWorkspace(t *testing.T) {
runner.Run(t, "客户端-按目录过滤禅道用例脚本", FilterDir)
runner.Run(t, "客户端-按套件过滤禅道用例脚本", FilterSuite)
runner.Run(t, "客户端-按测试单过滤禅道用例脚本", FilterTask)
runner.Run(t, "客户端-显示展开折叠脚本树状结构", Collapse)
runner.Run(t, "客户端-删除禅道工作目录", DeleteWorkspace)
runner.Run(t, "客户端-创建禅道工作目录", CreateWorkspace)
}
......@@ -202,9 +202,10 @@ export default {
'skip': 'Skip',
'batch': 'Batch',
'batch_select': 'Batch Select',
'expand_all': 'Expand',
'expand': 'Expand',
'collapse': 'Collapse',
'collapse_all': 'Collapse All',
'expand_all': 'Expand All',
'expand_up': 'Expand Up',
'more_actions': 'More Actions',
'show_checkbox': 'Show Checkbox',
......
......@@ -209,9 +209,10 @@ export default {
'skip': '跳过',
'batch': '批量',
'batch_select': '批量选择',
'expand_all': '展开',
'expand': '展开',
'collapse': '折叠',
'collapse_all': '折叠所有',
'expand_all': '展开所有',
'expand_up': '向上展开',
'more_actions': '更多操作',
'show_checkbox': '显示选择框',
......
......@@ -4,7 +4,7 @@
<Button class="rounded pure" :hint="t('clear')"
icon="clear" iconSize="1.4em"
@click="bus.emit(settings.eventClearWebSocketMsg);"/>
<Button class="rounded pure" :hint="t('collapse_all')"
<Button class="rounded pure" :hint="logContentExpand ? t('collapse_all'):t('expand_all')"
:icon="logContentExpand ? 'subtract-square-multiple' : 'add-square-multiple'" iconSize="1.4em"
@click="store.commit('global/setLogContentExpand')"/>
<Button class="rounded pure"
......
......@@ -45,7 +45,7 @@
/>
<Button class="rounded pure" :hint="t('create_workspace')" @click="showModal=!showModal" icon="folder-add" />
<Button class="rounded pure" :hint="t('batch_select')" icon="select-all-on" @click="_handleBatchSelectBtnClick" :active="workDirRef?.isCheckable" />
<Button @click="_handleToggleAllBtnClick" class="rounded pure" :hint="workDirRef?.isAllCollapsed ? t('collapse') : t('expand_all')" :icon="workDirRef?.isAllCollapsed ? 'add-square-multiple' : 'subtract-square-multiple'" iconSize="1.4em" />
<Button @click="_handleToggleAllBtnClick" class="rounded pure" :hint="workDirRef?.isAllCollapsed ? t('expand') : t('collapse')" :icon="workDirRef?.isAllCollapsed ? 'add-square-multiple' : 'subtract-square-multiple'" iconSize="1.4em" />
<Button v-if="checkedCaseIds.length > 0" @click="showBugsModal = !showBugsModal" class="rounded pure" :hint="t('zentao_bug')" icon="bug" iconSize="1.4em" />
<!-- <Button class="rounded pure" :hint="t('more_actions')" icon="more-vert" />-->
</template>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册