mirror of
https://github.com/httprunner/httprunner.git
synced 2026-07-10 23:12:41 +08:00
fix: unittests
This commit is contained in:
@@ -1 +1 @@
|
|||||||
v5.0.0+2503051629
|
v5.0.0+2503051810
|
||||||
|
|||||||
@@ -103,7 +103,9 @@ func (s *StepMobile) Home() *StepMobile {
|
|||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
// TapXY taps the point {X,Y}, X & Y is percentage of coordinates
|
// TapXY taps the point {X,Y}
|
||||||
|
// if X<1 & Y<1, {X,Y} will be considered as percentage
|
||||||
|
// else, X & Y will be considered as absolute coordinates
|
||||||
func (s *StepMobile) TapXY(x, y float64, opts ...option.ActionOption) *StepMobile {
|
func (s *StepMobile) TapXY(x, y float64, opts ...option.ActionOption) *StepMobile {
|
||||||
action := uixt.MobileAction{
|
action := uixt.MobileAction{
|
||||||
Method: uixt.ACTION_TapXY,
|
Method: uixt.ACTION_TapXY,
|
||||||
|
|||||||
@@ -13,33 +13,20 @@ import (
|
|||||||
|
|
||||||
func TestRun(t *testing.T) {
|
func TestRun(t *testing.T) {
|
||||||
err := hrp.BuildPlugin(tmpl("plugin/debugtalk.go"), "./debugtalk.bin")
|
err := hrp.BuildPlugin(tmpl("plugin/debugtalk.go"), "./debugtalk.bin")
|
||||||
if !assert.Nil(t, err) {
|
assert.Nil(t, err)
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
|
|
||||||
genDebugTalkPyPath := filepath.Join(tmpl("plugin/"), hrp.PluginPySourceGenFile)
|
genDebugTalkPyPath := filepath.Join(tmpl("plugin/"), hrp.PluginPySourceGenFile)
|
||||||
err = hrp.BuildPlugin(tmpl("plugin/debugtalk.py"), genDebugTalkPyPath)
|
err = hrp.BuildPlugin(tmpl("plugin/debugtalk.py"), genDebugTalkPyPath)
|
||||||
if !assert.Nil(t, err) {
|
assert.Nil(t, err)
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
|
|
||||||
contentBytes, err := builtin.LoadFile(genDebugTalkPyPath)
|
contentBytes, err := builtin.LoadFile(genDebugTalkPyPath)
|
||||||
if !assert.Nil(t, err) {
|
assert.Nil(t, err)
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
|
|
||||||
content := string(contentBytes)
|
content := string(contentBytes)
|
||||||
if !assert.Contains(t, content, "import funppy") {
|
assert.Contains(t, content, "import funppy")
|
||||||
t.Fatal()
|
assert.Contains(t, content, "funppy.register")
|
||||||
}
|
|
||||||
|
|
||||||
if !assert.Contains(t, content, "funppy.register") {
|
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
|
|
||||||
reg, _ := regexp.Compile(`funppy\.register`)
|
reg, _ := regexp.Compile(`funppy\.register`)
|
||||||
matchedSlice := reg.FindAllStringSubmatch(content, -1)
|
matchedSlice := reg.FindAllStringSubmatch(content, -1)
|
||||||
if !assert.Len(t, matchedSlice, 10) {
|
assert.Len(t, matchedSlice, 10)
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,44 +12,28 @@ func TestLoadTestCases(t *testing.T) {
|
|||||||
// load test cases from folder path
|
// load test cases from folder path
|
||||||
tc := hrp.TestCasePath("../examples/demo-with-py-plugin/testcases/")
|
tc := hrp.TestCasePath("../examples/demo-with-py-plugin/testcases/")
|
||||||
testCases, err := hrp.LoadTestCases(&tc)
|
testCases, err := hrp.LoadTestCases(&tc)
|
||||||
if !assert.Nil(t, err) {
|
assert.Nil(t, err)
|
||||||
t.Fatal()
|
assert.Equal(t, 3, len(testCases))
|
||||||
}
|
|
||||||
if !assert.Equal(t, 4, len(testCases)) {
|
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
|
|
||||||
// load test cases from folder path, including sub folders
|
// load test cases from folder path, including sub folders
|
||||||
tc = hrp.TestCasePath("../examples/demo-with-py-plugin/")
|
tc = hrp.TestCasePath("../examples/demo-with-py-plugin/")
|
||||||
testCases, err = hrp.LoadTestCases(&tc)
|
testCases, err = hrp.LoadTestCases(&tc)
|
||||||
if !assert.Nil(t, err) {
|
assert.Nil(t, err)
|
||||||
t.Fatal()
|
assert.Equal(t, 3, len(testCases))
|
||||||
}
|
|
||||||
if !assert.Equal(t, 4, len(testCases)) {
|
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
|
|
||||||
// load test cases from single file path
|
// load test cases from single file path
|
||||||
tc = hrp.TestCasePath(demoTestCaseWithPluginJSONPath)
|
tc = hrp.TestCasePath(demoTestCaseWithPluginJSONPath)
|
||||||
testCases, err = hrp.LoadTestCases(&tc)
|
testCases, err = hrp.LoadTestCases(&tc)
|
||||||
if !assert.Nil(t, err) {
|
assert.Nil(t, err)
|
||||||
t.Fatal()
|
assert.Equal(t, 1, len(testCases))
|
||||||
}
|
|
||||||
if !assert.Equal(t, 1, len(testCases)) {
|
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
|
|
||||||
// load test cases from TestCase instance
|
// load test cases from TestCase instance
|
||||||
testcase := &hrp.TestCase{
|
testcase := &hrp.TestCase{
|
||||||
Config: hrp.NewConfig("TestCase").SetWeight(3),
|
Config: hrp.NewConfig("TestCase").SetWeight(3),
|
||||||
}
|
}
|
||||||
testCases, err = hrp.LoadTestCases(testcase)
|
testCases, err = hrp.LoadTestCases(testcase)
|
||||||
if !assert.Nil(t, err) {
|
assert.Nil(t, err)
|
||||||
t.Fatal()
|
assert.Equal(t, len(testCases), 1)
|
||||||
}
|
|
||||||
if !assert.Equal(t, len(testCases), 1) {
|
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
|
|
||||||
// load test cases from TestCaseJSON
|
// load test cases from TestCaseJSON
|
||||||
testcaseJSON := hrp.TestCaseJSON(`
|
testcaseJSON := hrp.TestCaseJSON(`
|
||||||
@@ -61,36 +45,21 @@ func TestLoadTestCases(t *testing.T) {
|
|||||||
]
|
]
|
||||||
}`)
|
}`)
|
||||||
testCases, err = hrp.LoadTestCases(&testcaseJSON)
|
testCases, err = hrp.LoadTestCases(&testcaseJSON)
|
||||||
if !assert.Nil(t, err) {
|
assert.Nil(t, err)
|
||||||
t.Fatal()
|
assert.Equal(t, len(testCases), 1)
|
||||||
}
|
|
||||||
if !assert.Equal(t, len(testCases), 1) {
|
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestLoadCase(t *testing.T) {
|
func TestLoadCase(t *testing.T) {
|
||||||
tcJSON := &hrp.TestCaseDef{}
|
tcJSON := &hrp.TestCaseDef{}
|
||||||
tcYAML := &hrp.TestCaseDef{}
|
tcYAML := &hrp.TestCaseDef{}
|
||||||
err := hrp.LoadFileObject(demoTestCaseWithPluginJSONPath, tcJSON)
|
err := hrp.LoadFileObject(demoTestCaseWithPluginJSONPath, tcJSON)
|
||||||
if !assert.NoError(t, err) {
|
assert.Nil(t, err)
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
err = hrp.LoadFileObject(demoTestCaseWithPluginYAMLPath, tcYAML)
|
|
||||||
if !assert.NoError(t, err) {
|
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
|
|
||||||
if !assert.Equal(t, tcJSON.Config.Name, tcYAML.Config.Name) {
|
err = hrp.LoadFileObject(demoTestCaseWithPluginYAMLPath, tcYAML)
|
||||||
t.Fatal()
|
assert.Nil(t, err)
|
||||||
}
|
|
||||||
if !assert.Equal(t, tcJSON.Config.BaseURL, tcYAML.Config.BaseURL) {
|
assert.Equal(t, tcJSON.Config.Name, tcYAML.Config.Name)
|
||||||
t.Fatal()
|
assert.Equal(t, tcJSON.Config.BaseURL, tcYAML.Config.BaseURL)
|
||||||
}
|
assert.Equal(t, tcJSON.Steps[1].StepName, tcYAML.Steps[1].StepName)
|
||||||
if !assert.Equal(t, tcJSON.Steps[1].StepName, tcYAML.Steps[1].StepName) {
|
assert.Equal(t, tcJSON.Steps[1].Request, tcJSON.Steps[1].Request)
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
if !assert.Equal(t, tcJSON.Steps[1].Request, tcJSON.Steps[1].Request) {
|
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,12 +79,8 @@ func TestLoadParameters(t *testing.T) {
|
|||||||
parser := hrp.NewParser()
|
parser := hrp.NewParser()
|
||||||
for _, data := range testData {
|
for _, data := range testData {
|
||||||
value, err := parser.LoadParameters(data.configParameters, variablesMapping)
|
value, err := parser.LoadParameters(data.configParameters, variablesMapping)
|
||||||
if !assert.Nil(t, err) {
|
assert.Nil(t, err)
|
||||||
t.Fatal()
|
assert.Equal(t, data.loadedParameters, value)
|
||||||
}
|
|
||||||
if !assert.Equal(t, data.loadedParameters, value) {
|
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -114,9 +110,7 @@ func TestLoadParametersError(t *testing.T) {
|
|||||||
parser := hrp.NewParser()
|
parser := hrp.NewParser()
|
||||||
for _, data := range testData {
|
for _, data := range testData {
|
||||||
_, err := parser.LoadParameters(data.configParameters, map[string]interface{}{})
|
_, err := parser.LoadParameters(data.configParameters, map[string]interface{}{})
|
||||||
if !assert.Error(t, err) {
|
assert.Error(t, err)
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -250,23 +244,15 @@ func TestInitParametersIteratorCount(t *testing.T) {
|
|||||||
parser := hrp.NewParser()
|
parser := hrp.NewParser()
|
||||||
for _, data := range testData {
|
for _, data := range testData {
|
||||||
iterator, err := parser.InitParametersIterator(data.cfg)
|
iterator, err := parser.InitParametersIterator(data.cfg)
|
||||||
if !assert.Nil(t, err) {
|
assert.Nil(t, err)
|
||||||
t.Fatal()
|
assert.Equal(t, data.expectLimit, iterator.Limit)
|
||||||
}
|
|
||||||
if !assert.Equal(t, data.expectLimit, iterator.Limit) {
|
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
|
|
||||||
for i := 0; i < data.expectLimit; i++ {
|
for i := 0; i < data.expectLimit; i++ {
|
||||||
if !assert.True(t, iterator.HasNext()) {
|
assert.True(t, iterator.HasNext())
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
iterator.Next() // consume next parameters
|
iterator.Next() // consume next parameters
|
||||||
}
|
}
|
||||||
// should not have next
|
// should not have next
|
||||||
if !assert.False(t, iterator.HasNext()) {
|
assert.False(t, iterator.HasNext())
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -299,28 +285,18 @@ func TestInitParametersIteratorUnlimitedCount(t *testing.T) {
|
|||||||
parser := hrp.NewParser()
|
parser := hrp.NewParser()
|
||||||
for _, data := range testData {
|
for _, data := range testData {
|
||||||
iterator, err := parser.InitParametersIterator(data.cfg)
|
iterator, err := parser.InitParametersIterator(data.cfg)
|
||||||
if !assert.Nil(t, err) {
|
assert.Nil(t, err)
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
// set unlimited mode
|
// set unlimited mode
|
||||||
iterator.SetUnlimitedMode()
|
iterator.SetUnlimitedMode()
|
||||||
if !assert.Equal(t, -1, iterator.Limit) {
|
assert.Equal(t, -1, iterator.Limit)
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
|
|
||||||
for i := 0; i < 100; i++ {
|
for i := 0; i < 100; i++ {
|
||||||
if !assert.True(t, iterator.HasNext()) {
|
assert.True(t, iterator.HasNext())
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
iterator.Next() // consume next parameters
|
iterator.Next() // consume next parameters
|
||||||
}
|
}
|
||||||
if !assert.Equal(t, 100, iterator.Index) {
|
assert.Equal(t, 100, iterator.Index)
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
// should also have next
|
// should also have next
|
||||||
if !assert.True(t, iterator.HasNext()) {
|
assert.True(t, iterator.HasNext())
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -382,22 +358,16 @@ func TestInitParametersIteratorContent(t *testing.T) {
|
|||||||
parser := hrp.NewParser()
|
parser := hrp.NewParser()
|
||||||
for _, data := range testData {
|
for _, data := range testData {
|
||||||
iterator, err := parser.InitParametersIterator(data.cfg)
|
iterator, err := parser.InitParametersIterator(data.cfg)
|
||||||
if !assert.Nil(t, err) {
|
assert.Nil(t, err)
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
|
|
||||||
// get expected parameters item
|
// get expected parameters item
|
||||||
for i := 0; i < data.checkIndex; i++ {
|
for i := 0; i < data.checkIndex; i++ {
|
||||||
if !assert.True(t, iterator.HasNext()) {
|
assert.True(t, iterator.HasNext())
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
iterator.Next() // consume next parameters
|
iterator.Next() // consume next parameters
|
||||||
}
|
}
|
||||||
parametersItem := iterator.Next()
|
parametersItem := iterator.Next()
|
||||||
|
|
||||||
if !assert.Equal(t, data.expectParameters, parametersItem) {
|
assert.Equal(t, data.expectParameters, parametersItem)
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -439,9 +409,7 @@ func TestGenCartesianProduct(t *testing.T) {
|
|||||||
|
|
||||||
for _, data := range testData {
|
for _, data := range testData {
|
||||||
parameters := hrp.GenCartesianProduct(data.multiParameters)
|
parameters := hrp.GenCartesianProduct(data.multiParameters)
|
||||||
if !assert.Equal(t, data.expect, parameters) {
|
assert.Equal(t, data.expect, parameters)
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -493,12 +461,8 @@ func TestConvertParameters(t *testing.T) {
|
|||||||
|
|
||||||
for _, data := range testData {
|
for _, data := range testData {
|
||||||
value, err := hrp.ConvertParameters(data.key, data.parametersRawList)
|
value, err := hrp.ConvertParameters(data.key, data.parametersRawList)
|
||||||
if !assert.Nil(t, err) {
|
assert.Nil(t, err)
|
||||||
t.Fatal()
|
assert.Equal(t, data.expect, value)
|
||||||
}
|
|
||||||
if !assert.Equal(t, data.expect, value) {
|
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -533,8 +497,6 @@ func TestConvertParametersError(t *testing.T) {
|
|||||||
|
|
||||||
for _, data := range testData {
|
for _, data := range testData {
|
||||||
_, err := hrp.ConvertParameters(data.key, data.parametersRawList)
|
_, err := hrp.ConvertParameters(data.key, data.parametersRawList)
|
||||||
if !assert.Error(t, err) {
|
assert.Error(t, err)
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,38 +11,26 @@ import (
|
|||||||
func TestLocateFile(t *testing.T) {
|
func TestLocateFile(t *testing.T) {
|
||||||
// specify target file path
|
// specify target file path
|
||||||
_, err := hrp.LocateFile(tmpl("plugin/debugtalk.go"), hrp.PluginGoSourceFile)
|
_, err := hrp.LocateFile(tmpl("plugin/debugtalk.go"), hrp.PluginGoSourceFile)
|
||||||
if !assert.Nil(t, err) {
|
assert.Nil(t, err)
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
|
|
||||||
// specify path with the same dir
|
// specify path with the same dir
|
||||||
_, err = hrp.LocateFile(tmpl("plugin/debugtalk.py"), hrp.PluginGoSourceFile)
|
_, err = hrp.LocateFile(tmpl("plugin/debugtalk.py"), hrp.PluginGoSourceFile)
|
||||||
if !assert.Nil(t, err) {
|
assert.Nil(t, err)
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
|
|
||||||
// specify target file path dir
|
// specify target file path dir
|
||||||
_, err = hrp.LocateFile(tmpl("plugin/"), hrp.PluginGoSourceFile)
|
_, err = hrp.LocateFile(tmpl("plugin/"), hrp.PluginGoSourceFile)
|
||||||
if !assert.Nil(t, err) {
|
assert.Nil(t, err)
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
|
|
||||||
// specify wrong path
|
// specify wrong path
|
||||||
_, err = hrp.LocateFile(".", hrp.PluginGoSourceFile)
|
_, err = hrp.LocateFile(".", hrp.PluginGoSourceFile)
|
||||||
if !assert.Error(t, err) {
|
assert.Error(t, err)
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
_, err = hrp.LocateFile("/abc", hrp.PluginGoSourceFile)
|
_, err = hrp.LocateFile("/abc", hrp.PluginGoSourceFile)
|
||||||
if !assert.Error(t, err) {
|
assert.Error(t, err)
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestLocatePythonPlugin(t *testing.T) {
|
func TestLocatePythonPlugin(t *testing.T) {
|
||||||
_, err := hrp.LocatePlugin(tmpl("plugin/debugtalk.py"))
|
_, err := hrp.LocatePlugin(tmpl("plugin/debugtalk.py"))
|
||||||
if !assert.Nil(t, err) {
|
assert.Nil(t, err)
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestLocateGoPlugin(t *testing.T) {
|
func TestLocateGoPlugin(t *testing.T) {
|
||||||
@@ -50,7 +38,5 @@ func TestLocateGoPlugin(t *testing.T) {
|
|||||||
defer removeHashicorpGoPlugin()
|
defer removeHashicorpGoPlugin()
|
||||||
|
|
||||||
_, err := hrp.LocatePlugin(tmpl("debugtalk.bin"))
|
_, err := hrp.LocatePlugin(tmpl("debugtalk.bin"))
|
||||||
if !assert.Nil(t, err) {
|
assert.Nil(t, err)
|
||||||
t.Fatal()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ const (
|
|||||||
|
|
||||||
// tmpl returns template file path
|
// tmpl returns template file path
|
||||||
func tmpl(relativePath string) string {
|
func tmpl(relativePath string) string {
|
||||||
return filepath.Join("internal/scaffold/templates/", relativePath)
|
return filepath.Join("../internal/scaffold/templates/", relativePath)
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|||||||
@@ -314,11 +314,11 @@ func (ad *ADBDriver) TapAbsXY(x, y float64, opts ...option.ActionOption) error {
|
|||||||
|
|
||||||
func (ad *ADBDriver) DoubleTap(x, y float64, opts ...option.ActionOption) error {
|
func (ad *ADBDriver) DoubleTap(x, y float64, opts ...option.ActionOption) error {
|
||||||
var err error
|
var err error
|
||||||
actionOptions := option.NewActionOptions(opts...)
|
|
||||||
x, y, err = convertToAbsolutePoint(ad, x, y)
|
x, y, err = convertToAbsolutePoint(ad, x, y)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
actionOptions := option.NewActionOptions(opts...)
|
||||||
x, y = actionOptions.ApplyOffset(x, y)
|
x, y = actionOptions.ApplyOffset(x, y)
|
||||||
|
|
||||||
// adb shell input tap x y
|
// adb shell input tap x y
|
||||||
|
|||||||
@@ -4,9 +4,10 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
|
||||||
"github.com/httprunner/httprunner/v5/uixt"
|
"github.com/httprunner/httprunner/v5/uixt"
|
||||||
"github.com/httprunner/httprunner/v5/uixt/option"
|
"github.com/httprunner/httprunner/v5/uixt/option"
|
||||||
"github.com/pkg/errors"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type StubBrowserDriver struct {
|
type StubBrowserDriver struct {
|
||||||
|
|||||||
Reference in New Issue
Block a user