NBomber
所属分类:collect
开发工具:F#
文件大小:0KB
下载次数:0
上传日期:2021-11-12 15:26:58
上 传 者:
sh-1993
说明: B缓冲器.F竖琴,,
(NBomber.FSharp,,)
文件列表:
Directory.Build.props (1358, 2021-11-12)
LICENSE (11357, 2021-11-12)
NBomber.FSharp.sln (5837, 2021-11-12)
RELEASE_NOTES.md (428, 2021-11-12)
build.fsx (3342, 2021-11-12)
docs/ (0, 2021-11-12)
docs/Programming.md (4376, 2021-11-12)
docs/img/ (0, 2021-11-12)
docs/img/logo.png (11664, 2021-11-12)
src/ (0, 2021-11-12)
src/NBomber.FSharp.Hopac/ (0, 2021-11-12)
src/NBomber.FSharp.Hopac/Hopac.fs (2210, 2021-11-12)
src/NBomber.FSharp.Hopac/NBomber.FSharp.Hopac.fsproj (625, 2021-11-12)
src/NBomber.FSharp.Http/ (0, 2021-11-12)
src/NBomber.FSharp.Http/HttpStepBuilder.fs (10173, 2021-11-12)
src/NBomber.FSharp.Http/NBomber.FSharp.Http.fsproj (649, 2021-11-12)
src/NBomber.FSharp/ (0, 2021-11-12)
src/NBomber.FSharp/Builder/ (0, 2021-11-12)
src/NBomber.FSharp/Builder/ClientBuilder.fs (3014, 2021-11-12)
src/NBomber.FSharp/Builder/Internals.fs (1255, 2021-11-12)
src/NBomber.FSharp/Builder/ReportBuilder.fs (1546, 2021-11-12)
src/NBomber.FSharp/Builder/RunnerBuilder.fs (4572, 2021-11-12)
src/NBomber.FSharp/Builder/ScenarioBuilder.fs (7508, 2021-11-12)
src/NBomber.FSharp/Builder/StepBuilder.fs (5069, 2021-11-12)
src/NBomber.FSharp/Builder/StepEmptyBuilder.fs (1891, 2021-11-12)
src/NBomber.FSharp/Builders.fs (338, 2021-11-12)
src/NBomber.FSharp/NBomber.FSharp.fsproj (528, 2021-11-12)
test/ (0, 2021-11-12)
test/NBomber.FSharp.Test/ (0, 2021-11-12)
test/NBomber.FSharp.Test/Demo.fs (3209, 2021-11-12)
test/NBomber.FSharp.Test/DslTest.fs (11604, 2021-11-12)
... ...
# NBomber.FSharp
F# Computation Expressions for [NBomber](https://nbomber.com) API
| Package | Description | Status |
|----------------------|-------------|--------|
| NBomber.FSharp | CE for test runners, scenarios and steps | [![NBomber.FSharp](https://buildstats.info/nuget/NBomber.FSharp?includePreReleases=true)](https://www.nuget.org/packages/NBomber.FSharp/) |
| NBomber.FSharp.Http | CE for http calls steps, similar to NBomber.Plugins.Http | [![NBomber.FSharp.Http](https://buildstats.info/nuget/NBomber.FSharp.Http?includePreReleases=true)](https://www.nuget.org/packages/NBomber.FSharp.Http/) |
| NBomber.FSharp.Hopac | [Hopac](https://hopac.github.io) support for the above, depends on both | [![NBomber.FSharp.Hopac](https://buildstats.info/nuget/NBomber.FSharp.Hopac?includePreReleases=true)](https://www.nuget.org/packages/NBomber.FSharp.Hopac/) |
[![Build history](https://buildstats.info/github/chart/PragmaticFlow/NBomber.FSharp)](https://github.com/PragmaticFlow/NBomber.FSharp/actions)
### Scenario
Fluent API | Computation Expression |
```fsharp
Scenario.create "test" [step]
|> Scenario.withWarmUp (seconds 10)
|> Scenario.withLoadSimulations [
KeepConstant(copies = copiesCount, during = seconds 2)
]
```
|
```fsharp
scenario "test" {
warmUp (seconds 10)
load [
KeepConstant(copies = copiesCount, during = seconds 2)
]
init (fun _ -> Task.FromResult())
clean (fun _ -> Task.FromResult())
steps [myStep]
// or if just one step
myStep
}
```
|
### Step
The overloads of `step`'s custom operation `execute` accepts a function taking a step context and returning either `Response` or `unit` directly or wrapped in a `task`, `async` or even in a Hopac `job`
Fluent API | Computation Expression |
```fsharp
Step.create("step name",
myWebsocketPool,
myGuidFeed,
(fun ctx -> task {
let doSomethingWithSocket (_: Guid) (_: ClientWebSocket) =
""
ctx.Logger.Information("Can take feed and client {Ret}",
takeBoth ctx.FeedItem ctx.Client)
return Response.Ok()
}), true)
```
|
```fsharp
step "step name" {
dataFeed myGuidFeed
myWebsocketPool
execute (fun ctx ->
let doSomethingWithSocket (_: Guid) (_: ClientWebSocket) =
""
ctx.Logger.Information("Can take feed and client {Ret}",
takeBoth ctx.FeedItem ctx.Client) )
doNotTrack
}
```
|
### Client factory
Simplified construction of clients. Notable differences are:
- `connect` and `disconnect` functions are more tolerant for missing type signatures and arguments
- no need for `cancellationToken` argument if it is not used in `connect` or `disconnect` functions
- `disconnect` can be omitted completely, if the type of created connection implements `IDisposable` or can be just disposed.
- `count` of connections can be omitted too, it defaults to `1`
- even less verbose compared to the C# API
Fluent API | Computation Expression |
```fsharp
let clientFactory =
ClientFactory.create(
name = "db connections",
initClient = (fun i ctx -> task {
let c = new NpgsqlConnection(connectionString)
do! c.OpenAsync(ctx.CancellationToken)
return c
}),
disposeClient = (fun (c:NpgsqlConnection, ctx) -> c.CloseAsync(ctx.CancellationToken)),
clientCount = 100)
```
|
```fsharp
let clientFactory =
clients "db connections" {
count 100
connect(fun i ctx -> task {
let c = new NpgsqlConnection(connectionString)
do! c.OpenAsync(ctx.CancellationToken)
return c
})
disconnect(fun c ctx -> c.CloseAsync(ctx.CancellationToken))
}
```
|
### Reporter
Imagine you need just a html report. Then it is as short as
```fsharp
report { html }
```
Fluent API | Computation Expression |
```fsharp
NBomberRunner.withReportFormats [
ReportFormat.Csv
ReportFormat.Txt
ReportFormat.Md
ReportFormat.Html
]
|> NBomberRunner.withReportingSinks
[ influxdbSink
customFormatSink ]
(seconds 10)
|> NBomberRunner.withReportFolder "reportsFolder"
|> NBomberRunner.withReportFileName "reportFile"
// or if none
|> NBomberRunner.withoutReports
...
```
|
```fsharp
testSuite "Suite name" {
report {
csv
text
markdown
html
sink influxdbSink
sink customFormatSink
interval (seconds 10)
folderName "reportsFolder"
fileName "reportFile"
}
// or if none
noReports
...
}
```
|
### Other runner configuration
Fluent API | Computation Expression |
```fsharp
NBomberRunner.registerScenarios []
|> NBomberRunner.withTestName "Test name"
|> NBomberRunner.withTestSuite "Suite name"
|> NBomberRunner.withoutReports
|> NBomberRunner.disableHintsAnalyzer
|> NBomberRunner.loadConfig "loadTestConfig.json"
|> NBomberRunner.loadInfraConfig "infrastructureConfig.json"
|> NBomberRunner.withWorkerPlugins []
|> NBomberRunner.withApplicationType ApplicationType.Console
// |> NBomberRunner.runWithArgs args
|> NBomberRunner.run
|> evaluateStatsFunction
```
|
```fsharp
testSuite "Suite name" {
testName "Test name"
noReports
noHintsAnalyzer
scenarios scenarioBuilderTest
config "loadTestConfig.json"
infraConfig "infrastructureConfig.json"
plugins [ (* plugins list*) ]
runConsole
// runAsProcess
// runWithArgs args
// runWithExitCode
}
```
|
近期下载者:
相关文件:
收藏者: