mockservice

package module
v0.0.0-...-c7a1da7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 18, 2021 License: MIT Imports: 15 Imported by: 0

README

mockservice

一个简单的模拟服务工具

依赖Github仓库:
https://github.com/bettersun/moist

简介

前端连接到该工具,该工具实现请求转发、请求和响应信息的保存。
该工具也可提供模拟服务,即作为一个虚拟的服务器提供所需的响应数据。

运行工具

进入到 command 目录,运行 go build 命令后生成可执行文件,运行可执行文件即可。

配置文件

程序运行所需的配置,修改该文件的内容后,需要重新启动该工具以生效。
格式为 yaml 格式。

config.yml

# 此文件内容修改后需重启
# 端口
port: 9999
# 日志文件
logFile: mock.log
# 日志等级
# -1: DEBUG
# 0: INFO
# 1: WARN
# 2: ERROR
# 3: FATAL
logLevel: 0
# 主机文件
hostFile: host.yml
# 模拟服务信息文件
infoFile: info.yml
# 使用模拟服务通用响应头
useMockCommonResponseHeader: true
  1. 端口

    端口为该工具的监听接口,前端连接到此工具所在主机的该端口。 本机连接的话,手机的模拟器不能连接 127.0.0.1 或者 localhost。

    若不配置,默认使用 9527。

  2. 日志文件

    日志文件为该工具运行时日志保存的文件名。

    若不配置,默认使用 mock.log。

  3. 日志等级

    日志保存的等级,高于或等于该等级的日志会被保存。

    数字对应等级为:
    -1: DEBUG 0: INFO 1: WARN 2: ERROR 3: FATAL

    若不配置,默认使用 0 (信息)。

  4. 主机文件

    前端通过该工具连接的对象主机列表的文件名。

    若不配置,默认使用 host.yml。

  5. 模拟服务信息文件

    前端请求的各个 URL 对应的配置信息列表的文件名。

    若不配置,默认使用 info.yml。

  6. 使用模拟服务通用响应头

    该工具转发请求时,真实主机返回的响应头信息会保存。 位置为 response_header/response_header.json。

    不使用该工具转发,使用该工具提供模拟服务时,对于各个 URL 的响应,需要响应头信息。 默认提供了一个通用响应头,response_header/common_response_header.json。

    对于 URL 的请求,首先会查找是否存在真实主机的响应头。 如果不存在,并且配置文件里使用模拟服务通用响应头为 true 时,则会使用 response_header/common_response_header.json 的内容作为模拟服务的响应头。

    对于 URL 的请求,首先会查找是否存在真实主机的响应头,如果不存在,并且配置文件里使用模拟服务通用响应头为 false 时,则不作特殊处理。

    若不配置,默认使用 false。

主机文件

前端需要连接的主机列表,包括主机 IP 和服务监听的端口,也可使用服务映射的根 URL。

配置文件中的配置项为: hostFile

格式为 yaml 格式。

- http://localhost:8012
- http://127.0.0.1:8015
- http://192.168.9.12:8016
- http://www.helloworld.cn

模拟服务信息

前端请求的各个 URL(包括请求方法)对应的配置信息列表,该工具通过该配置信息来转发请求或提供模拟服务。

若不配置该文件,前端通过该工具转发请求时,会自动记录对应的的模拟服务信息并保存到文件。 有个前提是工具运行时必须指定默认目标主机,这样工具才能知道请求要转发的目标主机。

配置文件中的配置项为: infoFile

格式为 yaml 格式。

- url: /bettersun/hello
  method: POST
  targetHost: http://localhost:8012
  useDefaultTargetHost: true
  useMockService: true
  statusCode: 200
  responseFile: json/hello.json
  description: hello_POST
- url: /bettersun/hello
  method: GET
  targetHost: http://localhost:8012
  useDefaultTargetHost: true
  useMockService: false
  statusCode: 200
  responseFile: ""
  description: hello_GET
- url: /bettersun/hello
  method: PUT
  targetHost: http://localhost:8012
  useDefaultTargetHost: true
  useMockService: false
  statusCode: 200
  responseFile: ""
  description: Hello_PUT
  1. url

    前端请求的 URL。

  2. method

    前端请求URL 时的请求方法。 GET/POST/PUT/DELETE 等。

  3. targetHost

    目标主机,为前端请求需要连接的真实主机,即该工具转发请求需要连接的真实主机。 当使用模拟服务(useMockService 为 true)时,则由该工具提供模拟服务,不再连接目标主机。

  4. useDefaultTargetHost

    使用默认目标主机标志。

    程序启动时,默认目标主机为主机文件里配置的第一个。 可在画面中选择默认目标主机,适用于前端请求的大部分URL为同一台主机提供真实服务的情况。

    当 使用默认目标主机标志 为 true 时,则使用当前选择的默认目标主机。 若 使用默认目标主机标志 为 false 时,则使用配置信息中的目标主机(targetHost)。

  5. useMockService

    使用模拟服务标志。

    当 使用模拟服务标志 为 true 时,该工具不会转发前端请求的 URL,会对前端请求的 URL提供模拟服务。 当 使用模拟服务标志 为 false 时,该工具会转发前端请求的 URL。

  6. statusCode

    模拟服务响应状态码。

    当使用模拟服务时,该工具对于前端请求的 URL 返回的响应状态码。

  7. responseFile

    模拟服务响应文件名。

    当使用模拟服务时,该工具对于前端请求的 URL 返回的响应体内容所在的文件。 对应文件里保存模拟服务的响应体内容。

    文件的路径规则:

    响应体内容为 JSON 时, response/URL(转换)_请求方法/body_MdHms.json 响应体内容非 JSON 时, response/URL(转换)_请求方法/body_MdHms.txt

    • URL(转换) 为将请求 URL 去掉首个斜线,并将斜线转为下划线后的值。 例: /bettersun/hello 转换后为 bettersun_hello

    • 请求方法为大写。

    • MdHms 为 月日时分秒各两位的数字。

    文件例:

    response/bettersun_hello_GET/body_0112091212.txt response/bettersun_hello_GET/body_0112091216.json

  8. description

    该 URL(包括请求方法)对应的说明或描述。

模拟服务通用响应头

位置是 response_header/common_response_header.json

可自定义内容,默认的三个选项为支持跨域、gzip 压缩和响应格式为json(UTF8)。

格式为 json 格式。

{
    "Access-Control-Allow-Origin": [
        "*"
    ],
    "Content-Encoding": [
        "gzip"
    ],
    "Content-Type": [
        "application/json;charset=UTF-8"
    ]
}

该工具转发请求时,真实主机返回的响应头信息会保存。 位置为 response_header/response_header.json。

不使用该工具转发,使用该工具提供模拟服务时,对于各个 URL 的响应,需要响应头信息。 默认提供了一个通用响应头,response_header/common_response_header.json。

对于 URL 的请求,首先会查找是否存在真实主机的响应头。 如果不存在,并且配置文件里使用模拟服务通用响应头为 true 时,则会使用 response_header/common_response_header.json 的内容作为模拟服务的响应头。

对于 URL 的请求,首先会查找是否存在真实主机的响应头,如果不存在,并且配置文件里使用模拟服务通用响应头为 false 时,则不作特殊处理。

请求响应记录

通过该工具转发请求到真实的目标主机时,会自动记录请求信息和响应信息。

  1. 记录的请求信息

    记录的请求信息保存在下面目录。

    requeset/URL(转换)_请求方法/req_MdHms.json

    • URL(转换) 为将请求 URL 去掉首个斜线,并将斜线转为下划线后的值。
      例: /bettersun/hello 转换后为 bettersun_hello

    • 请求方法为大写。

    • MdHms 为 月日时分秒各两位的数字。

    记录的请求信息内容为 请求的 URL、请求头和请求体。

  2. 记录的响应信息

    记录的响应头信息保存在下面文件。
    response_header/response_header.json

    文件内容是 URL(转换)_请求方法 作为键,响应头信息作为值的 Map 转换后的 JSON 文本。

    当使用模拟服务时,会首先查找该文件并从该文件中查找 URL(包括请求方法)对应的响应头信息。若该文件不存在或查找不到对应的响应头信息,并且配置文件里的使用模拟服务通用响应头为 true 时,则会读取模拟服务通用响应头文件的内容作为响应头信息返回。

    响应体信息保存在下面目录。

    响应体内容为 JSON 时, response/URL(转换)_请求方法/body_MdHms.json 响应体内容非 JSON 时, response/URL(转换)_请求方法/body_MdHms.txt

    • URL(转换) 为将请求 URL 去掉首个斜线,并将斜线转为下划线后的值。 例: /bettersun/hello 转换后为 bettersun_hello

    • 请求方法为大写。

    • MdHms 为 月日时分秒各两位的数字。

    文件例:

    response/bettersun_hello_GET/body_0112091212.txt response/bettersun_hello_GET/body_0112091216.json

Go的init()方法里向Flutter端发送消息,Flutter端接收不到。

Documentation

Index

Constants

View Source
const ConfigFile = "config.yml"

/ 配置文件

Variables

/ 指向go-flutter的Plugin 用于向Flutter端发送消息

Functions

func CloseServer

func CloseServer() error

/ 关闭服务

func DoHandle

func DoHandle(w http.ResponseWriter, r *http.Request)

/ 响应函数

func ListHost

func ListHost() []string

/ 获取目标主机列表

func Load

func Load() error

/ 加载配置和输入

func LoadCommonResponseHeader

func LoadCommonResponseHeader(config *Config)

/ 读取模拟服务通用响应头

func LoadHost

func LoadHost(config *Config)

/ 读取目标主机

func LoadMockServiceInfo

func LoadMockServiceInfo(config *Config)

/ 读取模拟服务信息

func LoadResponseFile

func LoadResponseFile(url string, method string) ([]string, error)

/ 获取URL的响应文件列表

func LoadResponseHeader

func LoadResponseHeader(config *Config)

/ 读取响应头信息 / 使用代理转发请求时,会自动生成URI对应的响应头信息

func MockService

func MockService()

/ 模拟服务

func MockServiceCommand

func MockServiceCommand()

/ 模拟服务(命令行调用)

func Notify

func Notify(message string)

/ 向Flutter发送通知表示信息

func NotifyAddMockServiceInfo

func NotifyAddMockServiceInfo(info interface{})

/ 向Flutter发送通知,添加新的模拟服务信息

func OutRequest

func OutRequest(url string, method string, header http.Header, body string)

/ 输出请求到文件

func OutResponseBody

func OutResponseBody(method string, url string, isJSON bool, body []byte)

/ 输出响应体到文件

func OutResponseHeader

func OutResponseHeader(mHeader map[string]http.Header)

/ 输出响应到文件

func OutputHost

func OutputHost(config Config, hostSlice []string) error

/ 保存目标主机

func OutputMockServiceInfo

func OutputMockServiceInfo(config Config, infoSlice []MockServiceInfo) error

/ 保存模拟服务信息

func RenameResponseFile

func RenameResponseFile(responseFile string, fileName string) error

/ 保存目标主机

func SaveHost

func SaveHost() error

/ 保存主机列表

func SaveMockServiceInfo

func SaveMockServiceInfo() error

/ 保存模拟服务信息

func SetDefaultTargetHost

func SetDefaultTargetHost(targetHost string) bool

/ 设置默认目标主机

func UpdateAllMockServiceInfo

func UpdateAllMockServiceInfo(newInfoSlice []MockServiceInfo)

/ 更新单个模拟服务信息和URL对应模拟服务信息Map

func UpdateMockServiceInfo

func UpdateMockServiceInfo(info MockServiceInfo)

/ 更新单个模拟服务信息和URL对应模拟服务信息Map

Types

type Config

type Config struct {
	Port     string `yaml:"port"`     // 端口
	LogFile  string `yaml:"logFile"`  // 日志文件
	LogLevel int    `yaml:"logLevel"` // 日志等级
	HostFile string `yaml:"hostFile"` // 目标主机文件
	InfoFile string `yaml:"infoFile"` // 模拟服务信息文件

	// 使用模拟服务通用响应头
	// 仅当URL对应的响应头不存在时使用
	UseMockCommonResponseHeader bool `yaml:"useMockCommonResponseHeader"`
}

/ 配置

type MockServiceInfo

type MockServiceInfo struct {
	URL                  string `yaml:"url" json:"url"`                                   // URL
	Method               string `yaml:"method" json:"method"`                             // HTTP请求方法
	TargetHost           string `yaml:"targetHost" json:"targetHost"`                     // 目标主机
	UseDefaultTargetHost bool   `yaml:"useDefaultTargetHost" json:"useDefaultTargetHost"` // 使用默认目标主机
	UseMockService       bool   `yaml:"useMockService" json:"useMockService"`             // 使用模拟服务
	StatusCode           int    `yaml:"statusCode" json:"statusCode"`                     // 响应状态码
	ResponseFile         string `yaml:"responseFile" json:"responseFile"`                 // 响应文件
	Description          string `yaml:"description" json:"description"`                   //  说明
}

/ 模拟服务信息

func ListMockServiceInfo

func ListMockServiceInfo() []MockServiceInfo

/ 获取模拟服务信息

type ResponseHeader

type ResponseHeader struct {
	URL    string              `yaml:"url" json:"url"`       // URL
	Method string              `yaml:"method" json:"method"` // HTTP请求方法
	Header map[string][]string `yaml:"header" json:"header"` // 响应头部
}

/ 响应头部

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL