安装
Ubuntu:
apt-get install tsung
Mac:
brew install tsung
其他: tsung.erlang-projects.org/user_manual…
配置
参考官网配置
编写一个简单的go web程序:
- 初始化
go mod init example
- 编写主程序
package main
import (
"encoding/json"
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
testdata := map[string]string{
"message": "pong",
"jpg1": "user12-1.mp4.jpg",
"jpg23": "user12-1.mp4.jpg",
"jpg5": "user12-1.mp4.jpg",
"jpg4": "user12-1.mp4.jpg",
"jpg11": "user12-1.mp4.jpg",
"jpg14": "user12-1.mp4.jpg",
"jpg3": "user12-1.mp4.jpg",
"jpg51": "user12-1.mp4.jpg",
"jpg6": "user12-1.mp4.jpg",
"jpg15": "user12-1.mp4.jpg",
"jpg125": "user12-1.mp4.jpg",
"jpg421": "user12-1.mp4.jpg",
"jpg124": "user12-1.mp4.jpg",
"jpg1255": "user12-1.mp4.jpg",
"jpg": "user12-1.mp4.jpg",
}
jsonData, err := json.Marshal(testdata)
if err != nil {
fmt.Println("JSON serialization error:", err)
panic(err)
}
// 设置响应头
w.Header().Set("Content-Type", "text/plain")
_, err1 := w.Write(jsonData)
if err1 != nil {
panic(err1)
}
})
fmt.Println("http server started on :8080")
err := http.ListenAndServe(":8080", nil)
if err != nil {
panic(err)
}
}
部署到Docker或者Kubernetes
Docker部署
Dockerfile:
FROM golang:alpine AS builder
MAINTAINER Lookeke
ENV VERSION 1.0
WORKDIR /app
# 拷贝当前目录下可以执行文件
COPY . .
RUN go env -w GOPROXY=https://proxy.golang.com.cn,direct
RUN mkdir -p /app/bin
# # pre-copy/cache go.mod for pre-downloading dependencies and only redownloading them in subsequent builds if they change
RUN go mod download && go mod verify
RUN go env -w CGO_ENABLED=0 GOOS=linux GOARCH=amd64 && go build -o example .
FROM scratch
#FROM alpine
WORKDIR /app
# 从 builder 镜像中复制 Go 二进制文件到当前镜像中
COPY --from=builder /app/example .
# 定义容器启动时运行的命令
ENTRYPOINT ["/app/example"]
# docker build --progress=plain --no-cache -t example .
# docker run -itd -v ./configs:/data/conf -p 8080:8080 -p 4000:4000 example
docker-compose.yml:
version: '3'
services:
app:
build:
context: .
dockerfile: Dockerfile
ports:
- "8080:8080"
- "4000:4000"
container_name: example
运行:
docker-compose up -d
Kubernetes
将image替换为容器的URL
apiVersion: apps/v1
kind: Deployment
metadata:
name: example
labels:
app: example
spec:
replicas: 1
selector:
matchLabels:
app: example
template:
metadata:
name: example
labels:
app: example
spec:
containers:
- name: example
image: examole
imagePullPolicy: IfNotPresent
ports:
- name: http
protocol: TCP
containerPort: 8080
restartPolicy: Always
示例配置:
<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd">
<tsung loglevel="notice" version="1.0">
<clients>
<client host="localhost" use_controller_vm="false" maxusers="2000" cpu="4"/>
</clients>
<servers>
<server host="localhost" port="8080" type="tcp"></server>
</servers>
<load>
<arrivalphase phase="1" duration="10" unit="minute">
<users maxnumber="100" interarrival="0.02" unit="second"></users>
</arrivalphase>
</load>
<options>
<option type="ts_http" name="user_agent">
<user_agent probability="80">Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.8) Gecko/20050513 Galeon/1.3.21</user_agent>
<user_agent probability="20">Mozilla/5.0 (Windows; U; Windows NT 5.2; fr-FR; rv:1.7.8) Gecko/20050511 Firefox/1.0.4</user_agent>
</option>
</options>
<sessions>
<session name="http-example" probability="100" type="ts_http">
<request>
<http url="/" method="GET" version="1.1"></http>
</request>
<thinktime value="20" random="true"></thinktime>
</session>
</sessions>
</tsung>
使用
选项: -f :用于设置配置文件的路径,指定测试用例和配置信息的文件。默认情况下,配置文件是 ~/.tsung/tsung.xml。 -l :指定日志文件存储的目录。Tsung 将在该目录下创建以日期和时间命名的子目录来存储日志文件。默认目录是 ~/.tsung/log/。 -i :设置控制器的标识符,通常为空。 -r :设置远程连接器的命令,通常为 ssh。 -s:启用 Erlang SMP(对称多处理)模式,用于在客户端节点上利用多核处理器。 -p :设置每个 Erlang 虚拟机的最大进程数。默认值是 250,000。 -X
:添加额外的 Erlang 加载路径。可以多次使用 -X 参数来指定多个目录。 -m :将监控输出写入指定的文件。默认文件是 tsung.log。您还可以将监控输出定向到标准输出,使用 - 参数。 -F:使用全名(Fully Qualified Domain Name,FQDN)作为 Erlang 节点的名称。 -L :设置 SSL 会话的生存期,默认为 600 秒。 -w :设置预热延迟,即在开始正式测试之前等待的时间,默认为 1 秒。 -n:禁用 Web GUI,默认情况下 Tsung 会在端口 8091 上启动 Web GUI。 -k:在测试完成后保持 Web GUI(和控制器)运行。 -v:打印 Tsung 版本信息并退出。 -6:使用 IPv6 用于 Tsung 内部通信。 -x :指定要从运行中排除的请求标签。多个标签可以使用逗号分隔。 -t :设置 Erlang Inet 监听的 TCP 端口号的最小值,默认为 64000。 -T :设置 Erlang Inet 监听的 TCP 端口号的最大值,默认为 65500。 -h:显示帮助信息。运行示例
tsung -f http.xml start -k
查看Web GUI的状态
浏览器访问: <IP>:8091 即可查看