feat: create python plugin in scaffold

This commit is contained in:
debugtalk
2022-03-18 18:07:58 +08:00
parent 5ad4bc3cce
commit c252549568
7 changed files with 272 additions and 19 deletions
+67 -12
View File
@@ -6,12 +6,24 @@ import (
"os/exec"
"path"
"github.com/pkg/errors"
"github.com/rs/zerolog/log"
"github.com/httprunner/funplugin/shared"
"github.com/httprunner/hrp"
"github.com/httprunner/hrp/internal/builtin"
"github.com/httprunner/hrp/internal/ga"
"github.com/rs/zerolog/log"
)
func CreateScaffold(projectName string) error {
type PluginType uint
const (
Ignore PluginType = iota
Py
Go
)
func CreateScaffold(projectName string, pluginType PluginType) error {
// report event
ga.SendEvent(ga.EventTracking{
Category: "Scaffold",
@@ -37,16 +49,17 @@ func CreateScaffold(projectName string) error {
if err := builtin.CreateFolder(path.Join(projectName, "testcases")); err != nil {
return err
}
pluginDir := path.Join(projectName, "plugin")
if err := builtin.CreateFolder(pluginDir); err != nil {
return err
}
if err := builtin.CreateFolder(path.Join(projectName, "reports")); err != nil {
return err
}
// create demo testcases
tCase, _ := demoTestCase.ToTCase()
var tCase *hrp.TCase
if pluginType == Ignore {
tCase, _ = demoTestCaseWithoutPlugin.ToTCase()
} else {
tCase, _ = demoTestCase.ToTCase()
}
err := builtin.Dump2JSON(tCase, path.Join(projectName, "testcases", "demo.json"))
if err != nil {
log.Error().Err(err).Msg("create demo.json testcase failed")
@@ -58,9 +71,43 @@ func CreateScaffold(projectName string) error {
return err
}
// create .gitignore
if err := builtin.CreateFile(path.Join(projectName, ".gitignore"), demoIgnoreContent); err != nil {
return err
}
// create .env
if err := builtin.CreateFile(path.Join(projectName, ".env"), demoEnvContent); err != nil {
return err
}
// create debugtalk function plugin
switch pluginType {
case Ignore:
log.Info().Msg("skip creating function plugin")
return nil
case Py:
return createPythonPlugin(projectName)
case Go:
return createGoPlugin(projectName)
}
return nil
}
func createGoPlugin(projectName string) error {
log.Info().Msg("start to create hashicorp go plugin")
// check go sdk
if err := builtin.ExecCommand(exec.Command("go", "version"), projectName); err != nil {
return errors.Wrap(err, "go sdk not installed")
}
// create debugtalk.go
pluginDir := path.Join(projectName, "plugin")
if err := builtin.CreateFolder(pluginDir); err != nil {
return err
}
pluginFile := path.Join(pluginDir, "debugtalk.go")
if err := builtin.CreateFile(pluginFile, demoPlugin); err != nil {
if err := builtin.CreateFile(pluginFile, demoGoPlugin); err != nil {
return err
}
@@ -79,12 +126,20 @@ func CreateScaffold(projectName string) error {
return err
}
// create .gitignore
if err := builtin.CreateFile(path.Join(projectName, ".gitignore"), demoIgnoreContent); err != nil {
return nil
}
func createPythonPlugin(projectName string) error {
log.Info().Msg("start to create hashicorp python plugin")
// create debugtalk.py
pluginFile := path.Join(projectName, "debugtalk.py")
if err := builtin.CreateFile(pluginFile, demoPyPlugin); err != nil {
return err
}
// create .env
if err := builtin.CreateFile(path.Join(projectName, ".env"), demoEnvContent); err != nil {
// create python venv
if _, err := shared.PreparePython3Venv(pluginFile); err != nil {
return err
}