Zoxive.HttpLoadTesting.Framework

HttpLoadTesting http load generator framework


Keywords
load, tests, performance, http, rest, benchmark, test, testing, dotnetcore, load-testing
License
GPL-3.0
Install
Install-Package Zoxive.HttpLoadTesting.Framework -Version 0.0.13

Documentation

HttpLoadTesting

HTTP Load testing when single HTTP endpoint is not enough.

Allows you to write test scenarios.

Install via nuget

Install-Package Zoxive.HttpLoadTesting.Client

// Test
public class ReadAPost : ILoadTest
{
    public string Name => "ReadAPost";

    public Task Initialize(ILoadTestHttpClient loadTestHttpClient)
    {
    	// nothing to initialize
        return Task.FromResult(0);
    }

	public async Task Execute(ILoadTestHttpClient loadTestHttpClient)
	{
        // Simulate user delay in clicking (User think time)
		await loadTestHttpClient.DelayUserClick();

		// User had to open the post
		await loadTestHttpClient.Get("posts/1");

		// User thinking and typing
		await loadTestHttpClient.DelayUserThink()

		var comment = new Dictionary<string, object>
		{
			{"name", "HttpLoadTesting"},
			{"email", "vel+minus+molestias+voluptatum@omnis.com"},
			{"body", "Comment body"}
		};

		await loadTestHttpClient.Post("posts/1/comments", comment);
	}
}

// Console Application
public class Program
{
    public static void Main(string[] args)
    {
        // Specify schedules. Add a few users run for a while and remove them. You can run any schedule in any order.
        // As long as you have active users!
        var schedule = new List<ISchedule>
        {    
            // Add Users over a period of time
            new AddUsers(totalUsers: 10, usersEvery: 2, seconds: 5),
            // Run for a duration of time
            new Duration(0.25m),
            // Remove Users over a period of time
            new RemoveUsers(usersToRemove: 10, usersEvery:2, seconds: 1)
        };

        // Create as many tests as you want to run
        // These are the tests each User will run round robin style
        var tests = new List<ILoadTest>
        {
            new ReadAPost()
        };

        // Create one or more "HttpUsers".
        // This is essentually the HTTP Connection each simulated user will use. Round robin style
        var users = new List<IHttpUser>
        {
            new HttpUser("https://jsonplaceholder.typicode.com/", tests)
            {
                // Specify any properties i need on HttpClient. Like header values!
                AlterHttpClient = SetHttpClientProperties,
                // Specify any properties i need on HttpClientHandler. Like Cookies!
                AlterHttpClientHandler = SetHttpClientHandlerProperties
            }
        };

        var testExecution = new LoadTestExecution(users);
        
        // Run the Tests!
        WebClient.Run(testExecution, schedule);
    }
}