Tests.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using System;
  2. using System.Diagnostics;
  3. using System.IO;
  4. using System.Linq;
  5. using NUnit.Framework;
  6. using QuestPDF.Fluent;
  7. using QuestPDF.ReportSample.Layouts;
  8. namespace QuestPDF.ReportSample
  9. {
  10. public class ReportGeneration
  11. {
  12. [Test]
  13. public void GenerateAndShow()
  14. {
  15. var reportModel = DataSource.GetReport();
  16. var report = new StandardReport(reportModel);
  17. var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"test_result.pdf");
  18. report.GeneratePdf(path);
  19. Process.Start("explorer.exe", path);
  20. }
  21. [Test]
  22. public void PerformanceBenchmark()
  23. {
  24. // target document length should be around 100 pages
  25. // test size
  26. const int testSize = 10;
  27. const decimal performanceTarget = 1; // documents per second
  28. // create report models
  29. var reports = Enumerable
  30. .Range(0, testSize)
  31. .Select(x =>
  32. {
  33. var reportModel = DataSource.GetReport();
  34. return new StandardReport(reportModel);
  35. })
  36. .ToList();
  37. // generate documents
  38. var sw = new Stopwatch();
  39. sw.Start();
  40. var totalSize = reports.Select(x => x.GeneratePdf()).Sum(x => (long)x.Length);
  41. sw.Stop();
  42. // show summary
  43. Console.WriteLine($"Total size: {totalSize:N0} bytes");
  44. var performance = sw.ElapsedMilliseconds / (decimal)testSize;
  45. var speed = 1000M / performance;
  46. Console.WriteLine($"Test time: {sw.ElapsedMilliseconds} ms");
  47. Console.WriteLine($"Time per document: {performance:N} ms");
  48. Console.WriteLine($"Documents per second: {speed:N} d/s");
  49. //if (speed < performanceTarget)
  50. // throw new Exception("Rendering algorithm is too slow.");
  51. }
  52. }
  53. }