mirror of
https://github.com/httprunner/httprunner.git
synced 2026-08-25 01:59:52 +08:00
Merge pull request #50 from httprunner/go-plugin
v0.5.0 - feat: install hrp with one shell command - feat: report GA event for loading go plugin
This commit is contained in:
2
.github/workflows/release.yml
vendored
2
.github/workflows/release.yml
vendored
@@ -21,6 +21,8 @@ jobs:
|
|||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
- name: Release hrp cli binaries
|
- name: Release hrp cli binaries
|
||||||
uses: wangyoucao577/go-release-action@v1.22
|
uses: wangyoucao577/go-release-action@v1.22
|
||||||
|
env:
|
||||||
|
GA_TRACKING_ID: ${{ secrets.GA_TRACKING_ID }}
|
||||||
with:
|
with:
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
goos: ${{ matrix.goos }}
|
goos: ${{ matrix.goos }}
|
||||||
|
|||||||
2
.github/workflows/unittest.yml
vendored
2
.github/workflows/unittest.yml
vendored
@@ -28,6 +28,8 @@ jobs:
|
|||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
- name: Run coverage
|
- name: Run coverage
|
||||||
|
env:
|
||||||
|
GA_TRACKING_ID: ${{ secrets.GA_TRACKING_ID }}
|
||||||
run: go test -coverprofile="cover.out" -covermode=atomic -race ./...
|
run: go test -coverprofile="cover.out" -covermode=atomic -race ./...
|
||||||
- name: Upload coverage to Codecov
|
- name: Upload coverage to Codecov
|
||||||
uses: codecov/codecov-action@v2
|
uses: codecov/codecov-action@v2
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
## v0.5.0 (2022-01-06)
|
## v0.5.0 (2022-01-06)
|
||||||
|
|
||||||
- feat: support creating and calling custom functions with [go plugin](https://pkg.go.dev/plugin)
|
- feat: support creating and calling custom functions with [go plugin](https://pkg.go.dev/plugin)
|
||||||
|
- feat: install hrp with one shell command
|
||||||
|
- feat: report GA event for loading go plugin
|
||||||
|
|
||||||
## v0.4.0 (2022-01-05)
|
## v0.4.0 (2022-01-05)
|
||||||
|
|
||||||
|
|||||||
@@ -32,4 +32,4 @@ Copyright 2021 debugtalk
|
|||||||
* [hrp har2case](hrp_har2case.md) - Convert HAR to json/yaml testcase files
|
* [hrp har2case](hrp_har2case.md) - Convert HAR to json/yaml testcase files
|
||||||
* [hrp run](hrp_run.md) - run API test
|
* [hrp run](hrp_run.md) - run API test
|
||||||
|
|
||||||
###### Auto generated by spf13/cobra on 6-Jan-2022
|
###### Auto generated by spf13/cobra on 7-Jan-2022
|
||||||
|
|||||||
@@ -38,4 +38,4 @@ hrp boom [flags]
|
|||||||
|
|
||||||
* [hrp](hrp.md) - One-stop solution for HTTP(S) testing.
|
* [hrp](hrp.md) - One-stop solution for HTTP(S) testing.
|
||||||
|
|
||||||
###### Auto generated by spf13/cobra on 6-Jan-2022
|
###### Auto generated by spf13/cobra on 7-Jan-2022
|
||||||
|
|||||||
@@ -23,4 +23,4 @@ hrp har2case harPath... [flags]
|
|||||||
|
|
||||||
* [hrp](hrp.md) - One-stop solution for HTTP(S) testing.
|
* [hrp](hrp.md) - One-stop solution for HTTP(S) testing.
|
||||||
|
|
||||||
###### Auto generated by spf13/cobra on 6-Jan-2022
|
###### Auto generated by spf13/cobra on 7-Jan-2022
|
||||||
|
|||||||
@@ -31,4 +31,4 @@ hrp run path... [flags]
|
|||||||
|
|
||||||
* [hrp](hrp.md) - One-stop solution for HTTP(S) testing.
|
* [hrp](hrp.md) - One-stop solution for HTTP(S) testing.
|
||||||
|
|
||||||
###### Auto generated by spf13/cobra on 6-Jan-2022
|
###### Auto generated by spf13/cobra on 7-Jan-2022
|
||||||
|
|||||||
@@ -51,7 +51,6 @@ func Execute() {
|
|||||||
RootCmd.PersistentFlags().BoolVar(&logJSON, "log-json", false, "set log to json format")
|
RootCmd.PersistentFlags().BoolVar(&logJSON, "log-json", false, "set log to json format")
|
||||||
|
|
||||||
if err := RootCmd.Execute(); err != nil {
|
if err := RootCmd.Execute(); err != nil {
|
||||||
log.Error().Err(err).Msg("Failed to execute root command")
|
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"os"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
"github.com/httprunner/hrp"
|
"github.com/httprunner/hrp"
|
||||||
@@ -18,7 +20,7 @@ var runCmd = &cobra.Command{
|
|||||||
PreRun: func(cmd *cobra.Command, args []string) {
|
PreRun: func(cmd *cobra.Command, args []string) {
|
||||||
setLogLevel(logLevel)
|
setLogLevel(logLevel)
|
||||||
},
|
},
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
var paths []hrp.ITestCase
|
var paths []hrp.ITestCase
|
||||||
for _, arg := range args {
|
for _, arg := range args {
|
||||||
paths = append(paths, &hrp.TestCasePath{Path: arg})
|
paths = append(paths, &hrp.TestCasePath{Path: arg})
|
||||||
@@ -29,7 +31,10 @@ var runCmd = &cobra.Command{
|
|||||||
if proxyUrl != "" {
|
if proxyUrl != "" {
|
||||||
runner.SetProxyUrl(proxyUrl)
|
runner.SetProxyUrl(proxyUrl)
|
||||||
}
|
}
|
||||||
return runner.Run(paths...)
|
err := runner.Run(paths...)
|
||||||
|
if err != nil {
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
84
hrp/scripts/install.sh
Normal file
84
hrp/scripts/install.sh
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# install hrp with one shell command
|
||||||
|
# curl -sL https://raw.githubusercontent.com/httprunner/hrp/main/hrp/scripts/install.sh | bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
function echoError() {
|
||||||
|
echo -e "\033[31m✘ $1\033[0m" # red
|
||||||
|
}
|
||||||
|
export -f echoError
|
||||||
|
|
||||||
|
function echoInfo() {
|
||||||
|
echo -e "\033[32m✔ $1\033[0m" # green
|
||||||
|
}
|
||||||
|
export -f echoInfo
|
||||||
|
|
||||||
|
function echoWarn() {
|
||||||
|
echo -e "\033[33m! $1\033[0m" # yellow
|
||||||
|
}
|
||||||
|
export -f echoError
|
||||||
|
|
||||||
|
function get_latest_version() {
|
||||||
|
# <title>Release v0.4.0 · httprunner/hrp · GitHub</title>
|
||||||
|
curl -sL https://github.com/httprunner/hrp/releases/latest | grep '<title>Release' | cut -d" " -f4
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_arch() {
|
||||||
|
arch=$(uname -m)
|
||||||
|
if [ "$arch" == "x86_64" ]; then
|
||||||
|
arch="amd64"
|
||||||
|
fi
|
||||||
|
echo "$arch"
|
||||||
|
}
|
||||||
|
|
||||||
|
function main() {
|
||||||
|
echoInfo "Detect target hrp package..."
|
||||||
|
version=$(get_latest_version)
|
||||||
|
echo "Latest version: $version"
|
||||||
|
os=$(uname -s)
|
||||||
|
echo "Current OS: $os"
|
||||||
|
arch=$(get_arch)
|
||||||
|
echo "Current ARCH: $arch"
|
||||||
|
pkg="hrp-$version-$os-$arch.tar.gz"
|
||||||
|
url="https://github.com/httprunner/hrp/releases/download/$version/$pkg"
|
||||||
|
echo "Selected package: $url"
|
||||||
|
echo
|
||||||
|
|
||||||
|
echoInfo "Created temp dir..."
|
||||||
|
tmp_dir=$(mktemp -d -t hrp)
|
||||||
|
echo "$tmp_dir"
|
||||||
|
cd "$tmp_dir"
|
||||||
|
echo
|
||||||
|
|
||||||
|
echoInfo "Downloading..."
|
||||||
|
curl -L $url -o "$pkg"
|
||||||
|
echo
|
||||||
|
|
||||||
|
echoInfo "Extracting..."
|
||||||
|
tar -zxf "$pkg"
|
||||||
|
ls -lh
|
||||||
|
echo
|
||||||
|
|
||||||
|
echoInfo "Installing..."
|
||||||
|
if hrp -v > /dev/null; then
|
||||||
|
echoWarn "$(hrp -v) exists, remove first !!!"
|
||||||
|
echo "$ rm -rf $(which hrp)"
|
||||||
|
rm -rf "$(which hrp)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "chmod +x hrp && mv hrp /usr/local/bin/"
|
||||||
|
chmod +x hrp
|
||||||
|
mv hrp /usr/local/bin/
|
||||||
|
echo
|
||||||
|
|
||||||
|
echoInfo "Check installation..."
|
||||||
|
echo "$ which hrp"
|
||||||
|
which hrp
|
||||||
|
echo "$ hrp -v"
|
||||||
|
hrp -v
|
||||||
|
echo "$ hrp -h"
|
||||||
|
hrp -h
|
||||||
|
}
|
||||||
|
|
||||||
|
main
|
||||||
@@ -1,17 +1,16 @@
|
|||||||
package ga
|
package ga
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"os"
|
||||||
|
|
||||||
"github.com/denisbrodbeck/machineid"
|
"github.com/denisbrodbeck/machineid"
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
trackingID = "UA-114587036-1" // Tracking ID for Google Analytics
|
|
||||||
)
|
|
||||||
|
|
||||||
var gaClient *GAClient
|
var gaClient *GAClient
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
trackingID := os.Getenv("GA_TRACKING_ID") // Tracking ID for Google Analytics
|
||||||
clientID, err := machineid.ProtectedID("hrp")
|
clientID, err := machineid.ProtectedID("hrp")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
nodeUUID, _ := uuid.NewUUID()
|
nodeUUID, _ := uuid.NewUUID()
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import (
|
|||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
|
|
||||||
"github.com/httprunner/hrp/internal/builtin"
|
"github.com/httprunner/hrp/internal/builtin"
|
||||||
|
"github.com/httprunner/hrp/internal/ga"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (p *parser) loadPlugin(path string) error {
|
func (p *parser) loadPlugin(path string) error {
|
||||||
@@ -33,6 +34,12 @@ func (p *parser) loadPlugin(path string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// report event for loading go plugin
|
||||||
|
go ga.SendEvent(ga.EventTracking{
|
||||||
|
Category: "LoadGoPlugin",
|
||||||
|
Action: "plugin.Open",
|
||||||
|
})
|
||||||
|
|
||||||
// load plugin
|
// load plugin
|
||||||
plugins, err := plugin.Open(pluginPath)
|
plugins, err := plugin.Open(pluginPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user