Ejemplo n.º 1
0
        public async Task <int> ExecuteScenarioAsync(int numberOfSecondsToRun, int numberOfConcurrentUsers)
        {
            CancellationTokenSource phase2CancellationTokenSource = new CancellationTokenSource();

            phase2CancellationTokenSource.CancelAfter(numberOfSecondsToRun * 1000);
            List <Task> tasks = new List <Task>();

            logger.LogInformation($"Phase 2: Executing end user scenario simulating {numberOfConcurrentUsers} concurrent users.");

            var watcher = new ScopeTimeWatcher((elapsed) =>
            {
                logger.LogInformation($"Phase 2 execution time: {elapsed.TotalSeconds} seconds");
            });

            for (int i = 0; i < numberOfConcurrentUsers; i++)
            {
                tasks.Add(DoSingleUserWorkAsync(phase2CancellationTokenSource.Token));
            }

            try
            {
                await Task.WhenAll(tasks);
            }
            catch (Exception ex)
            {
                ErrorsOccured = true;
                logger.LogError($"An error interrupted phase 2 execution: {ex.Message}");
            }

            watcher.Dispose();
            logger.LogInformation($"Total requests processed: {totalRequests}");
            logger.LogInformation($"Requests per second: {totalRequests / numberOfSecondsToRun}");
            return(totalRequests);
        }
Ejemplo n.º 2
0
        public async virtual Task <TimeSpan> GenerateProductsAsync(int numberOfProducts)
        {
            TimeSpan elapsedTime = TimeSpan.Zero;

            using var watcher = new ScopeTimeWatcher((elapsed) =>
            {
                logger.LogInformation($"Test data generated within {elapsed.TotalSeconds} seconds");
                elapsedTime = elapsed;
            });

            for (int i = 1; i <= numberOfProducts; i++)
            {
                int suppliersCount  = 100;
                int categoriesCount = 100;

                await this.productsApiClient.AddNewProductAsync(new AddProductRequest()
                {
                    ProductName     = $"Test Product Name for testing {i % 10} {i}",
                    QuantityPerUnit = $"{i} - {i + 10}",
                    SupplierId      = (i % suppliersCount) + 1,
                    CategoryId      = (i % categoriesCount) + 1,
                    UnitPrice       = (decimal)(random.Next(100) + random.NextDouble()),
                    UnitsInStock    = random.Next(10),
                    Discontinued    = false
                }, CancellationToken.None);
            }

            watcher.Dispose();
            return(elapsedTime);
        }