/
parallelOk_link.go
95 lines (87 loc) · 2.66 KB
/
parallelOk_link.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package golink
import (
"context"
"fmt"
"math/big"
"sync"
"time"
"github.com/FISCO-BCOS/go-sdk/v3/test/performanceTest/contract/parallelOk"
"github.com/FISCO-BCOS/go-sdk/v3/test/performanceTest/helper"
"github.com/FISCO-BCOS/go-sdk/v3/test/performanceTest/model"
"github.com/sirupsen/logrus"
)
func Transfer(ctx context.Context, chanID uint64, ch chan<- *model.RequestResults, totalNumber uint64, wg *sync.WaitGroup,
request *model.Request, parallelOkSession *parallelOk.ParallelOkSession) {
defer func() {
wg.Done()
}()
// fmt.Printf("启动协程 编号:%05d \n", chanID)
for i := uint64(0); i < totalNumber; i++ {
if ctx.Err() != nil {
fmt.Printf("ctx.Err err: %v \n", ctx.Err())
break
}
list := getRequestList(request)
isSucceed, errCode, requestTime, contentLength := transferList(chanID, list, parallelOkSession)
requestResults := &model.RequestResults{
Time: requestTime,
IsSucceed: isSucceed,
ErrCode: errCode,
ReceivedBytes: contentLength,
}
requestResults.SetID(chanID, i)
ch <- requestResults
}
}
// sendList 多个接口分步压测
func transferList(chanID uint64, requestList []*model.Request, parallelOkSession *parallelOk.ParallelOkSession) (isSucceed bool, errCode int, requestTime uint64,
contentLength int64) {
errCode = model.HTTPOk
for _, request := range requestList {
succeed, code, u, length := transfer(request, parallelOkSession)
isSucceed = succeed
errCode = code
requestTime = requestTime + u
contentLength = contentLength + length
if !succeed {
break
}
}
return
}
func transfer(request *model.Request, parallelOkSession *parallelOk.ParallelOkSession) (bool, int, uint64, int64) {
var (
startTime = time.Now()
isSucceed = false
errCode = model.HTTPOk
contentLength = int64(0)
requestTime uint64
)
from_name := "zhangsan"
to_name := "lisi"
num := big.NewInt(10)
_, _, err := parallelOkSession.Transfer(from_name, to_name, num) // call set API
if err != nil {
logrus.Fatal(err)
}
isSucceed = true
requestTime = uint64(helper.DiffNano(startTime))
return isSucceed, errCode, requestTime, contentLength
}
func getBalance(request *model.Request, parallelOkSession *parallelOk.ParallelOkSession) (bool, int, uint64, int64) {
var (
startTime = time.Now()
isSucceed = false
errCode = model.HTTPOk
contentLength = int64(0)
requestTime uint64
)
to_name := "lisi"
_, err := parallelOkSession.BalanceOf(to_name) // call get API
if err != nil {
logrus.Fatal(err)
}
//fmt.Printf("to_name: %v, item_num: %v \n", to_name, num.Int64() )
requestTime = uint64(helper.DiffNano(startTime))
return isSucceed, errCode, requestTime, contentLength
}