Browse Source

Added Jmeter test

pull/6772/head
Halil İbrahim Kalkan 6 years ago
parent
commit
9332ca780e
  1. 2
      test/AbpPerfTest/AbpPerfTest.WithAbp/AppModule.cs
  2. 6
      test/AbpPerfTest/AbpPerfTest.WithAbp/Controllers/BookController.cs
  3. 6
      test/AbpPerfTest/AbpPerfTest.WithoutAbp/Controllers/BookController.cs
  4. 128
      test/AbpPerfTest/SimpleTestPlan.jmx
  5. BIN
      test/AbpPerfTest/_results/get-insert-with-transaction-auto.png
  6. BIN
      test/AbpPerfTest/_results/get-insert-with-transaction-disabled.png
  7. BIN
      test/AbpPerfTest/_results/get-insert-with-transaction-enabled.png

2
test/AbpPerfTest/AbpPerfTest.WithAbp/AppModule.cs

@ -33,7 +33,7 @@ namespace AbpPerfTest.WithAbp
Configure<AbpUnitOfWorkDefaultOptions>(options =>
{
options.TransactionBehavior = UnitOfWorkTransactionBehavior.Disabled;
options.TransactionBehavior = UnitOfWorkTransactionBehavior.Auto;
});
}

6
test/AbpPerfTest/AbpPerfTest.WithAbp/Controllers/BookController.cs

@ -22,7 +22,7 @@ namespace AbpPerfTest.WithAbp.Controllers
[HttpGet]
public async Task<List<BookDto>> GetListAsync()
{
var books = await _bookRepository.GetListAsync();
var books = await _bookRepository.GetPagedListAsync(0, 10, "Id");
return books
.Select(b => new BookDto
@ -51,7 +51,7 @@ namespace AbpPerfTest.WithAbp.Controllers
}
[HttpPost]
public async Task<Guid> CreateAsync(CreateUpdateBookDto input)
public async Task<Guid> CreateAsync([FromBody] CreateUpdateBookDto input)
{
var book = new Book
{
@ -67,7 +67,7 @@ namespace AbpPerfTest.WithAbp.Controllers
[HttpPut]
[Route("{id}")]
public async Task UpdateAsync(Guid id, CreateUpdateBookDto input)
public async Task UpdateAsync(Guid id, [FromBody] CreateUpdateBookDto input)
{
var book = await _bookRepository.GetAsync(id);

6
test/AbpPerfTest/AbpPerfTest.WithoutAbp/Controllers/BookController.cs

@ -23,7 +23,7 @@ namespace AbpPerfTest.WithoutAbp.Controllers
[HttpGet]
public async Task<List<BookDto>> GetListAsync()
{
var books = await _bookDbContext.Books.ToListAsync();
var books = await _bookDbContext.Books.OrderBy(x => x.Id).Take(10).ToListAsync();
return books
.Select(b => new BookDto
@ -52,7 +52,7 @@ namespace AbpPerfTest.WithoutAbp.Controllers
}
[HttpPost]
public async Task<Guid> CreateAsync(CreateUpdateBookDto input)
public async Task<Guid> CreateAsync([FromBody] CreateUpdateBookDto input)
{
var book = new Book
{
@ -69,7 +69,7 @@ namespace AbpPerfTest.WithoutAbp.Controllers
[HttpPut]
[Route("{id}")]
public async Task UpdateAsync(Guid id, CreateUpdateBookDto input)
public async Task UpdateAsync(Guid id, [FromBody] CreateUpdateBookDto input)
{
var book = await _bookDbContext.Books.SingleAsync(b => b.Id == id);

128
test/AbpPerfTest/SimpleTestPlan.jmx

@ -0,0 +1,128 @@
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.4">
<hashTree>
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Plan" enabled="true">
<stringProp name="TestPlan.comments"></stringProp>
<boolProp name="TestPlan.functional_mode">false</boolProp>
<boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
<boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
<elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="TestPlan.user_define_classpath"></stringProp>
</TestPlan>
<hashTree>
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
<boolProp name="LoopController.continue_forever">false</boolProp>
<stringProp name="LoopController.loops">100</stringProp>
</elementProp>
<stringProp name="ThreadGroup.num_threads">100</stringProp>
<stringProp name="ThreadGroup.ramp_time">10</stringProp>
<boolProp name="ThreadGroup.scheduler">false</boolProp>
<stringProp name="ThreadGroup.duration"></stringProp>
<stringProp name="ThreadGroup.delay"></stringProp>
<boolProp name="ThreadGroup.same_user_on_next_iteration">true</boolProp>
</ThreadGroup>
<hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Get Books" enabled="true">
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="HTTPSampler.domain">localhost</stringProp>
<stringProp name="HTTPSampler.port">5001</stringProp>
<stringProp name="HTTPSampler.protocol">https</stringProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.path">/api/books</stringProp>
<stringProp name="HTTPSampler.method">GET</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
<stringProp name="HTTPSampler.response_timeout"></stringProp>
</HTTPSamplerProxy>
<hashTree/>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Create Book" enabled="true">
<boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
<elementProp name="HTTPsampler.Arguments" elementType="Arguments">
<collectionProp name="Arguments.arguments">
<elementProp name="" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">{&#xd;
&quot;name&quot;: &quot;My book&quot;,&#xd;
&quot;price&quot;: &quot;33&quot;,&#xd;
&quot;isAvailable&quot;: &quot;true&quot;&#xd;
}&#xd;
</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
</elementProp>
</collectionProp>
</elementProp>
<stringProp name="HTTPSampler.domain">localhost</stringProp>
<stringProp name="HTTPSampler.port">5001</stringProp>
<stringProp name="HTTPSampler.protocol">https</stringProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.path">/api/books/</stringProp>
<stringProp name="HTTPSampler.method">POST</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
<stringProp name="HTTPSampler.response_timeout"></stringProp>
</HTTPSamplerProxy>
<hashTree/>
<ResultCollector guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report" enabled="true">
<boolProp name="ResultCollector.error_logging">false</boolProp>
<objProp>
<name>saveConfig</name>
<value class="SampleSaveConfiguration">
<time>true</time>
<latency>true</latency>
<timestamp>true</timestamp>
<success>true</success>
<label>true</label>
<code>true</code>
<message>true</message>
<threadName>true</threadName>
<dataType>true</dataType>
<encoding>false</encoding>
<assertions>true</assertions>
<subresults>true</subresults>
<responseData>false</responseData>
<samplerData>false</samplerData>
<xml>false</xml>
<fieldNames>true</fieldNames>
<responseHeaders>false</responseHeaders>
<requestHeaders>false</requestHeaders>
<responseDataOnError>false</responseDataOnError>
<saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
<assertionsResultsToSave>0</assertionsResultsToSave>
<bytes>true</bytes>
<sentBytes>true</sentBytes>
<url>true</url>
<threadCounts>true</threadCounts>
<idleTime>true</idleTime>
<connectTime>true</connectTime>
</value>
</objProp>
<stringProp name="filename"></stringProp>
</ResultCollector>
<hashTree/>
</hashTree>
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
<collectionProp name="HeaderManager.headers">
<elementProp name="" elementType="Header">
<stringProp name="Header.name">Content-Type</stringProp>
<stringProp name="Header.value">application/json</stringProp>
</elementProp>
</collectionProp>
</HeaderManager>
<hashTree/>
</hashTree>
</hashTree>
</jmeterTestPlan>

BIN
test/AbpPerfTest/_results/get-insert-with-transaction-auto.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
test/AbpPerfTest/_results/get-insert-with-transaction-disabled.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
test/AbpPerfTest/_results/get-insert-with-transaction-enabled.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Loading…
Cancel
Save