mirror of
https://github.com/httprunner/httprunner.git
synced 2026-07-13 00:11:28 +08:00
feat: add scaffold for plugin
This commit is contained in:
@@ -3,9 +3,9 @@
|
|||||||
"name": "demo with complex mechanisms",
|
"name": "demo with complex mechanisms",
|
||||||
"base_url": "https://postman-echo.com",
|
"base_url": "https://postman-echo.com",
|
||||||
"variables": {
|
"variables": {
|
||||||
"a": 12.3,
|
"a": "${sum(10, 2.3)}",
|
||||||
"b": 3.45,
|
"b": 3.45,
|
||||||
"n": 5,
|
"n": "${sum_ints(1, 2, 2)}",
|
||||||
"varFoo1": "${gen_random_string($n)}",
|
"varFoo1": "${gen_random_string($n)}",
|
||||||
"varFoo2": "${max($a, $b)}"
|
"varFoo2": "${max($a, $b)}"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,9 +2,9 @@ config:
|
|||||||
name: demo with complex mechanisms
|
name: demo with complex mechanisms
|
||||||
base_url: https://postman-echo.com
|
base_url: https://postman-echo.com
|
||||||
variables:
|
variables:
|
||||||
a: 12.3
|
a: ${sum(10, 2.3)}
|
||||||
b: 3.45
|
b: 3.45
|
||||||
"n": 5
|
"n": ${sum_ints(1, 2, 2)}
|
||||||
varFoo1: ${gen_random_string($n)}
|
varFoo1: ${gen_random_string($n)}
|
||||||
varFoo2: ${max($a, $b)}
|
varFoo2: ${max($a, $b)}
|
||||||
teststeps:
|
teststeps:
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ var demoTestCase = &hrp.TestCase{
|
|||||||
Config: hrp.NewConfig("demo with complex mechanisms").
|
Config: hrp.NewConfig("demo with complex mechanisms").
|
||||||
SetBaseURL("https://postman-echo.com").
|
SetBaseURL("https://postman-echo.com").
|
||||||
WithVariables(map[string]interface{}{ // global level variables
|
WithVariables(map[string]interface{}{ // global level variables
|
||||||
"n": 5,
|
"n": "${sum_ints(1, 2, 2)}",
|
||||||
"a": 12.3,
|
"a": "${sum(10, 2.3)}",
|
||||||
"b": 3.45,
|
"b": 3.45,
|
||||||
"varFoo1": "${gen_random_string($n)}",
|
"varFoo1": "${gen_random_string($n)}",
|
||||||
"varFoo2": "${max($a, $b)}", // 12.3; eval with built-in function
|
"varFoo2": "${max($a, $b)}", // 12.3; eval with built-in function
|
||||||
@@ -56,6 +56,50 @@ var demoTestCase = &hrp.TestCase{
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// debugtalk.go
|
||||||
|
var demoPlugin = `package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/httprunner/hrp/plugin"
|
||||||
|
)
|
||||||
|
|
||||||
|
func SumTwoInt(a, b int) int {
|
||||||
|
return a + b
|
||||||
|
}
|
||||||
|
|
||||||
|
func SumInts(args ...int) int {
|
||||||
|
var sum int
|
||||||
|
for _, arg := range args {
|
||||||
|
sum += arg
|
||||||
|
}
|
||||||
|
return sum
|
||||||
|
}
|
||||||
|
|
||||||
|
func Sum(args ...interface{}) (interface{}, error) {
|
||||||
|
var sum float64
|
||||||
|
for _, arg := range args {
|
||||||
|
switch v := arg.(type) {
|
||||||
|
case int:
|
||||||
|
sum += float64(v)
|
||||||
|
case float64:
|
||||||
|
sum += v
|
||||||
|
default:
|
||||||
|
return nil, fmt.Errorf("unexpected type: %T", arg)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sum, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
plugin.Register("sum_ints", SumInts)
|
||||||
|
plugin.Register("sum_two_int", SumTwoInt)
|
||||||
|
plugin.Register("sum", Sum)
|
||||||
|
plugin.Serve()
|
||||||
|
}
|
||||||
|
`
|
||||||
|
|
||||||
// .gitignore
|
// .gitignore
|
||||||
var demoIgnoreContent = `.env
|
var demoIgnoreContent = `.env
|
||||||
reports/*
|
reports/*
|
||||||
@@ -64,9 +108,13 @@ reports/*
|
|||||||
.idea/
|
.idea/
|
||||||
.DS_Store
|
.DS_Store
|
||||||
output/
|
output/
|
||||||
|
|
||||||
|
# plugin
|
||||||
|
debugtalk.bin
|
||||||
|
debugtalk.so
|
||||||
`
|
`
|
||||||
|
|
||||||
// .env
|
// .env
|
||||||
var demoEnvContent = `USERNAME=debugtalk
|
var demoEnvContent = `USERNAME=debugtalk
|
||||||
"PASSWORD=123456
|
PASSWORD=123456
|
||||||
`
|
`
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ func TestGenDemoTestCase(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func Example_demo() {
|
func Example_demo() {
|
||||||
|
demoTestCase.Config.ToStruct().Path = "../../examples/debugtalk.bin"
|
||||||
err := hrp.NewRunner(nil).Run(demoTestCase) // hrp.Run(demoTestCase)
|
err := hrp.NewRunner(nil).Run(demoTestCase) // hrp.Run(demoTestCase)
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
// Output:
|
// Output:
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
"os/exec"
|
||||||
"path"
|
"path"
|
||||||
|
|
||||||
"github.com/httprunner/hrp/internal/ga"
|
"github.com/httprunner/hrp/internal/ga"
|
||||||
@@ -36,6 +37,9 @@ func CreateScaffold(projectName string) error {
|
|||||||
if err := createFolder(path.Join(projectName, "testcases")); err != nil {
|
if err := createFolder(path.Join(projectName, "testcases")); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if err := createFolder(path.Join(projectName, "plugin")); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
if err := createFolder(path.Join(projectName, "reports")); err != nil {
|
if err := createFolder(path.Join(projectName, "reports")); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -53,6 +57,18 @@ func CreateScaffold(projectName string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// create debugtalk.go
|
||||||
|
pluginFile := path.Join(projectName, "plugin", "debugtalk.go")
|
||||||
|
if err := createFile(pluginFile, demoPlugin); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
cmd := exec.Command("go", "build",
|
||||||
|
"-o", path.Join(projectName, "debugtalk.bin"),
|
||||||
|
pluginFile)
|
||||||
|
if err := cmd.Run(); err != nil {
|
||||||
|
log.Error().Err(err).Msg("build plugin debugtalk.bin failed")
|
||||||
|
}
|
||||||
|
|
||||||
// create .gitignore
|
// create .gitignore
|
||||||
if err := createFile(path.Join(projectName, ".gitignore"), demoIgnoreContent); err != nil {
|
if err := createFile(path.Join(projectName, ".gitignore"), demoIgnoreContent); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
Reference in New Issue
Block a user