tests: add bili android example

This commit is contained in:
lilong.129
2024-01-19 15:53:07 +08:00
parent e7a8cec5db
commit e5aadb54e2
5 changed files with 188 additions and 1 deletions

View File

@@ -0,0 +1,18 @@
{
"config": {
"name": "run ui test on bili android",
"variables": {
"RunTimes": 3,
"SerialNumber": "${ENV(SerialNumber)}"
}
},
"teststeps": [
{
"name": "run bili android",
"shell": {
"string": "bili_android",
"expect_exit_code": 0
}
}
]
}

130
examples/uitest/bili/cli.go Normal file
View File

@@ -0,0 +1,130 @@
package main
import (
"fmt"
"os"
"strconv"
"time"
"github.com/httprunner/httprunner/v4/hrp/pkg/uixt"
)
var (
serial string
runTimes int
)
func init() {
serial := os.Getenv("SerialNumber")
numStr := os.Getenv("RunTimes")
defaultNum := 20
var err error
runTimes, err = strconv.Atoi(numStr)
if err != nil {
runTimes = defaultNum
}
fmt.Printf("=== start running cases, serial=%s, runTimes=%d ===\n", serial, runTimes)
}
func launchAppDriver(pkgName string) (driver *uixt.DriverExt, err error) {
device, _ := uixt.NewAndroidDevice(uixt.WithSerialNumber(serial))
driver, err = device.NewDriver()
if err != nil {
return nil, err
}
_, err = driver.Driver.AppTerminate(pkgName)
if err != nil {
return nil, err
}
err = driver.Driver.AppLaunch(pkgName)
if err != nil {
return nil, err
}
time.Sleep(5 * time.Second)
// 处理弹窗
err = driver.ClosePopupsHandler()
if err != nil {
return nil, err
}
// 进入推荐页
err = driver.TapByOCR("推荐", uixt.WithScope(0, 0, 1, 0.3))
if err != nil {
return nil, err
}
return driver, nil
}
func watchVideo(driver *uixt.DriverExt) (err error) {
err = driver.SwipeUp()
if err != nil {
return err
}
time.Sleep(1 * time.Second)
// 点击进入某视频
err = driver.TapXY(0.3, 0.5)
if err != nil {
return err
}
time.Sleep(5 * time.Second)
// 点击播放区域,展现横屏图标
err = driver.TapXY(0.5, 0.1)
if err != nil {
return err
}
time.Sleep(500 * time.Millisecond)
// 切换横屏
err = driver.TapByUIDetection(
uixt.WithScreenShotUITypes("fullScreen"))
if err != nil {
// 未找到横屏图标,该页面可能不是横版视频(直播|广告|Feed
// 退出回到推荐页
driver.Driver.PressBack()
return nil
}
// 观播 10s
time.Sleep(10 * time.Second)
// 返回视频页面
err = driver.Driver.PressBack()
if err != nil {
return err
}
// 返回推荐页
err = driver.Driver.PressBack()
if err != nil {
return err
}
time.Sleep(1 * time.Second)
return nil
}
// build shell command
// go build -o bili_android examples/uitest/bilibili/cli.go
func main() {
driver, err := launchAppDriver("tv.danmaku.bili")
if err != nil {
panic(err)
}
// 重复采集 XX 次
for i := 0; i < runTimes; i++ {
err = watchVideo(driver)
if err != nil {
panic(err)
}
}
}

View File

@@ -0,0 +1,35 @@
//go:build localtest
package main
import (
"testing"
"github.com/httprunner/httprunner/v4/hrp"
)
func TestMain(t *testing.T) {
main()
}
func TestRunCaseWithShell(t *testing.T) {
testcase1 := &hrp.TestCase{
Config: hrp.NewConfig("run ui test on bili android").
WithVariables(map[string]interface{}{
"SerialNumber": "${ENV(SerialNumber)}",
"RunTimes": 3,
}),
TestSteps: []hrp.IStep{
hrp.NewStep("run bili android").
Shell("bili_android"),
},
}
testcase1.Dump2JSON("bili_android.json")
r := hrp.NewRunner(t)
err := r.Run(testcase1)
if err != nil {
t.Fatal()
}
}

View File

@@ -1 +1 @@
v4.3.6
v4.3.8-202401091556

View File

@@ -282,6 +282,10 @@ func (tc *TCase) toTestCase() (*TestCase, error) {
testCase.TestSteps = append(testCase.TestSteps, &StepMobile{
step: step,
})
} else if step.Shell != nil {
testCase.TestSteps = append(testCase.TestSteps, &StepShell{
step: step,
})
} else {
log.Warn().Interface("step", step).Msg("[convertTestCase] unexpected step")
}