<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Automatic Testing Archives - Blog IT</title>
	<atom:link href="https://blogit.create.pt/category/development/automatic-testing/feed/" rel="self" type="application/rss+xml" />
	<link>https://blogit.create.pt/category/development/automatic-testing/</link>
	<description>Create IT blogger community</description>
	<lastBuildDate>Tue, 02 Apr 2024 16:05:30 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>
	<item>
		<title>Integration Tests in .NET WebApi</title>
		<link>https://blogit.create.pt/andresantos/2024/04/01/integration-tests-in-net-webapi/</link>
					<comments>https://blogit.create.pt/andresantos/2024/04/01/integration-tests-in-net-webapi/#respond</comments>
		
		<dc:creator><![CDATA[André Santos]]></dc:creator>
		<pubDate>Mon, 01 Apr 2024 12:47:41 +0000</pubDate>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Automatic Testing]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[inmemorydatabase]]></category>
		<category><![CDATA[integrated]]></category>
		<category><![CDATA[Testing]]></category>
		<guid isPermaLink="false">https://blogit.create.pt/?p=13472</guid>

					<description><![CDATA[<p>In software development, testing is an essential aspect that ensures the stability and reliability of applications. Three primary types of tests are commonly used: unit tests, integration tests, and end-to-end tests. In this blog post, we will discuss these testing types in the context of a .NET WebAPI project and provide an example implementation of integration testing using an in-memory database.</p>
<p>The post <a href="https://blogit.create.pt/andresantos/2024/04/01/integration-tests-in-net-webapi/">Integration Tests in .NET WebApi</a> appeared first on <a href="https://blogit.create.pt">Blog IT</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>In software development, testing is an essential aspect that ensures the stability and reliability of applications. Three primary types of tests are commonly used: unit tests, integration tests, and end-to-end tests. In this blog post, we will discuss these testing types in the context of a .NET WebAPI project and provide an example implementation of integration testing using an in-memory database.</p>



<hr class="wp-block-separator has-alpha-channel-opacity" />



<h2 class="wp-block-heading">Unit Tests, Integration Tests, and End-to-End Tests: What&#8217;s the Difference?</h2>



<ul class="wp-block-list">
<li><strong>Unit tests</strong> focus on testing individual units or components of your application in isolation. This type of test verifies whether the unit/component works correctly and adheres to its business logic.</li>



<li><strong>Integration tests</strong> aim to test multiple units or components together, ensuring that they interact properly. Integration tests can uncover issues related to data flow, communication between components, and external dependencies like databases.</li>



<li><strong>End-to-end (E2E)</strong> tests simulate a complete user scenario by testing the entire application from start to finish. E2E tests can help identify issues related to multiple components, external APIs, and user interfaces.</li>
</ul>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<h2 class="wp-block-heading">Example Implementation in .NET</h2>



<p>To perform integration tests, we will use an in-memory database and the <em>WebApplicationFactory </em>feature of ASP.NET Core. This approach allows us to test our WebAPI application with a real web server in memory, simulating how the components interact with each other when making requests.</p>



<p>First, let&#8217;s create an InMemoryDbAppFactory that sets up our in-memory web server and database:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: csharp; title: ; notranslate">
public class InMemoryDbAppFactory : WebApplicationFactory&lt;Program&gt;
{
    private readonly string _environment;

    public InMemoryDbAppFactory()
    {
        _environment = &quot;IntegrationTests&quot;;
    }

    protected override void ConfigureWebHost(IWebHostBuilder builder)
    {
        Environment.SetEnvironmentVariable(&quot;ASPNETCORE_ENVIRONMENT&quot;, _environment);
        builder.UseEnvironment(_environment);
        builder.UseSetting(&quot;https_port&quot;, &quot;8080&quot;);

        builder.ConfigureTestServices(services =&gt;
        {
            services.RemoveAll&lt;ITestRepository&gt;();
            services.TryAddTransient&lt;ITestRepository, TestRepositoryTest&gt;();

            // Anonymous authentication
            services
                .AddAuthentication(&quot;Test&quot;)
                .AddScheme&lt;AuthenticationSchemeOptions, TestAuthenticationHandler&gt;(&quot;Test&quot;, options =&gt; { });
        });
    }
}
</pre></div>


<p>In order to use an in-memory database, we will override the connection string injection in our <em>ServiceCollectionExtensions</em>:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: csharp; title: ; notranslate">
public static partial class ServiceCollectionExtensions
{
    public static IServiceCollection AddDbContexts(
        this IServiceCollection services,
        IConfiguration configuration,
        IWebHostEnvironment environment
    )
    {
        if (environment.IsEnvironment(&quot;IntegrationTests&quot;))
        {
            var connDb = new SqliteConnection(&quot;DataSource=db;mode=memory;cache=shared&quot;);
            connDb.Open();
            services.AddDbContext&lt;dbContext&gt;(options =&gt; options.UseSqlite(connDb));
        }
        else
        {
            services.AddDbContext&lt;dbContext&gt;(
                options =&gt; options.UseSqlServer(configuration.GetConnectionString(&quot;ConnectionString&quot;)).UseExceptionProcessor(),
                ServiceLifetime.Scoped
            );
        }

        return services;
    }
}
</pre></div>


<p>Finally, this is how a test looks like:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: csharp; title: ; notranslate">
&#x5B;Collection(&quot;MemoryDbIntegrationTests&quot;)]
public class ApiTests : IClassFixture&lt;InMemoryDbAppFactory&gt;
{
    private readonly InMemoryDbAppFactory _factory;
    private readonly HttpClient _client;

    public ApiTests(InMemoryDbAppFactory factory)
    {
        _factory = factory;
        _client = factory.CreateClient();

        // Ensures a clean database before each test
        factory.ResetDb();
    }

    &#x5B;Fact]
    public async Task GetList_Should_Return_List()
    {
        // Arrange

        // Act
        var response = await _client.GetAsync(&quot;/api/list&quot;);
        var content = await response.Content.ReadFromJsonAsync&lt;IEnumerable&lt;Dto&gt;&gt;();

        // Assert
        response.EnsureSuccessStatusCode(); // Status Code 200-299
        content.Should().NotBeNull();
        content.Should().HaveCount(2);
    }
}

</pre></div></div>
</div>



<hr class="wp-block-separator has-alpha-channel-opacity" />



<h2 class="wp-block-heading">Using an in-memory database for integration tests has both advantages and disadvantages:</h2>



<h3 class="wp-block-heading">Advantages:</h3>



<ul class="wp-block-list">
<li><strong>Faster test execution</strong>: In-memory databases provide quicker test execution times since the data is stored in memory instead of on disk. This can significantly improve your overall testing performance and help you find issues faster.</li>



<li><strong>Easy to set up and tear down</strong>: In-memory databases are easy to create, modify, and delete without the need for external dependencies or configuration changes. This makes it easier to write, run, and maintain your tests.</li>



<li><strong>Consistent test data</strong>: In-memory databases allow you to create a known set of data for your tests, ensuring that each test starts with the same initial conditions. This can help reduce the likelihood of inconsistent test results and make it easier to identify issues related to data flow or dependencies between tests.</li>
</ul>



<h3 class="wp-block-heading">Disadvantages:</h3>



<ul class="wp-block-list">
<li><strong>Limited scalability</strong>: In-memory databases have limited capacity and may not be suitable for testing large datasets or complex scenarios that require high levels of concurrency.</li>



<li><strong>Lack of realism</strong>: In-memory databases may not accurately represent the behavior or performance of a production database, especially when dealing with complex queries or data modification operations. This can make it difficult to identify issues related to database schema, indexing, and query optimization.</li>



<li><strong>Limited support for advanced features</strong>: using SQLite as our in memory database we don&#8217;t have support for multiple schemas and some advanced query features.</li>



<li><strong>Seed data</strong>: the need to create seed data can be tedious and time consuming.</li>
</ul>



<p>When deciding whether to use an in-memory database, mock data, or a real web server in memory for your integration tests, consider the specific requirements of your project and weigh the advantages and disadvantages of each approach. In many cases, using a combination of testing types and approaches can help you ensure the stability, reliability, and performance of your .NET WebAPI application.</p>
<p>The post <a href="https://blogit.create.pt/andresantos/2024/04/01/integration-tests-in-net-webapi/">Integration Tests in .NET WebApi</a> appeared first on <a href="https://blogit.create.pt">Blog IT</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogit.create.pt/andresantos/2024/04/01/integration-tests-in-net-webapi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Performance Testing An API, How To Start Doing It With JMeter?</title>
		<link>https://blogit.create.pt/diogocoelho/2021/04/23/performance-testing-an-api-how-to-start-doing-it-with-jmeter/</link>
					<comments>https://blogit.create.pt/diogocoelho/2021/04/23/performance-testing-an-api-how-to-start-doing-it-with-jmeter/#respond</comments>
		
		<dc:creator><![CDATA[Diogo Coelho]]></dc:creator>
		<pubDate>Fri, 23 Apr 2021 16:15:09 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Automatic Testing]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Performance Test]]></category>
		<category><![CDATA[Testing]]></category>
		<guid isPermaLink="false">https://blogit.create.pt/?p=12241</guid>

					<description><![CDATA[<p>This article will talk about how to start using JMeter for Testing an API. How to install JMeter, what are the components of it and how to use it. It will, also, show a short introduction of what is performance testing. First&#160;of&#160;all,&#160;let&#8217;s&#160;talk&#160;about&#160;Performance&#160;Testing.&#160;What&#160;is&#160;Performance&#160;Testing? Performance&#160;Testing&#160;is&#160;a&#160;software&#160;testing&#160;process&#160;used&#160;for&#160;testing&#160;the&#160;speed,&#160;response&#160;time,&#160;stability,&#160;reliability,&#160;scalability&#160;and&#160;resource&#160;usage&#160;of&#160;a&#160;software&#160;application&#160;under&#160;a particular&#160;workload.&#160;&#160;The&#160;focus&#160;of&#160;Performance&#160;Testing&#160;is&#160;checking&#160;a&#160;software&#160;program&#8217;s Speed&#160;&#8211;&#160;Determines&#160;whether&#160;the&#160;application&#160;responds&#160;quickly Scalability&#160;&#8211;&#160;Determines&#160;the maximum user load&#160;the&#160;software&#160;application&#160;can&#160;handle. Stability&#160;&#8211;&#160;Determines&#160;if&#160;the&#160;application&#160;is&#160;stable&#160;under&#160;varying&#160;loads What&#160;is&#160;the&#160;Purpose&#160;of&#160;doing&#160;it? The&#160;main&#160;purpose&#160;of&#160;performance&#160;testing&#160;is&#160;to&#160;identify&#160;and&#160;eliminate&#160;the&#160;performance&#160;bottlenecks&#160;in&#160;the&#160;software&#160;application. Now let&#8217;s introduce [&#8230;]</p>
<p>The post <a href="https://blogit.create.pt/diogocoelho/2021/04/23/performance-testing-an-api-how-to-start-doing-it-with-jmeter/">Performance Testing An API, How To Start Doing It With JMeter?</a> appeared first on <a href="https://blogit.create.pt">Blog IT</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>This article will talk about how to start using JMeter for Testing an API. </p>



<p>How to install JMeter, what are the components of it and how to use it. It will, also, show a short introduction of what is performance testing. </p>



<h2 class="wp-block-heading"><strong>First&nbsp;of&nbsp;all,&nbsp;let&#8217;s&nbsp;talk&nbsp;about&nbsp;Performance&nbsp;Testing.&nbsp;What&nbsp;is&nbsp;Performance&nbsp;Testing?</strong></h2>



<p>Performance&nbsp;Testing&nbsp;is&nbsp;a&nbsp;software&nbsp;testing&nbsp;process&nbsp;used&nbsp;for&nbsp;testing&nbsp;the&nbsp;speed,&nbsp;response&nbsp;time,&nbsp;stability,&nbsp;reliability,&nbsp;scalability&nbsp;and&nbsp;resource&nbsp;usage&nbsp;of&nbsp;a&nbsp;software&nbsp;application&nbsp;under&nbsp;a particular&nbsp;workload.&nbsp;&nbsp;<br>The&nbsp;focus&nbsp;of&nbsp;Performance&nbsp;Testing&nbsp;is&nbsp;checking&nbsp;a&nbsp;software&nbsp;program&#8217;s</p>



<ul class="wp-block-list"><li>Speed&nbsp;&#8211;&nbsp;Determines&nbsp;whether&nbsp;the&nbsp;application&nbsp;responds&nbsp;quickly</li><li>Scalability&nbsp;&#8211;&nbsp;Determines&nbsp;the maximum user load&nbsp;the&nbsp;software&nbsp;application&nbsp;can&nbsp;handle.</li><li>Stability&nbsp;&#8211;&nbsp;Determines&nbsp;if&nbsp;the&nbsp;application&nbsp;is&nbsp;stable&nbsp;under&nbsp;varying&nbsp;loads</li></ul>



<h3 class="wp-block-heading"><strong>What&nbsp;is&nbsp;the&nbsp;Purpose&nbsp;of&nbsp;doing&nbsp;it?</strong></h3>



<p>The&nbsp;main&nbsp;purpose&nbsp;of&nbsp;performance&nbsp;testing&nbsp;is&nbsp;to&nbsp;identify&nbsp;and&nbsp;eliminate&nbsp;the&nbsp;performance&nbsp;bottlenecks&nbsp;in&nbsp;the&nbsp;software&nbsp;application.</p>



<h2 class="wp-block-heading">Now let&#8217;s introduce JMeter</h2>



<h3 class="wp-block-heading">How to install it?</h3>



<p>JMeter&nbsp;is&nbsp;an&nbsp;application&nbsp;base&nbsp;in&nbsp;java.&nbsp;This&nbsp;means,&nbsp;that&nbsp;every&nbsp;computer&nbsp;with&nbsp;java&nbsp;installed&nbsp;can&nbsp;run&nbsp;this&nbsp;application.&nbsp;So&nbsp;let&#8217;s&nbsp;see&nbsp;how&nbsp;to&nbsp;install&nbsp;it.</p>



<h3 class="wp-block-heading">1- Download Java.</h3>



<p>&nbsp;First&nbsp;of&nbsp;all,&nbsp;you&nbsp;will&nbsp;need&nbsp;to&nbsp;install&nbsp;Java&nbsp;on&nbsp;your&nbsp;computer.&nbsp;Here&nbsp;you&nbsp;can&nbsp;download&nbsp;and&nbsp;Install&nbsp;the&nbsp;latest&nbsp;version&nbsp;of&nbsp;Java&nbsp;SE&nbsp;Development&nbsp;Kit <a href="https://www.oracle.com/java/technologies/javase-downloads.html">https://www.oracle.com/java/technologies/javase-downloads.html</a>.</p>



<h3 class="wp-block-heading">2- Download JMeter. </h3>



<p>At&nbsp;the&nbsp;point&nbsp;of&nbsp;writing,&nbsp;the&nbsp;latest&nbsp;version&nbsp;is&nbsp;Apache&nbsp;JMeter&nbsp;5.4.1&nbsp;(Requires&nbsp;Java&nbsp;8+)&nbsp;and&nbsp;you&nbsp;can&nbsp;download&nbsp;it here <a href="http://jmeter.apache.org/download_jmeter.cgi">http://jmeter.apache.org/download_jmeter.cgi</a>. Choose&nbsp;the&nbsp;Binaries&nbsp;file&nbsp;(either&nbsp;apache-jmeter-5.4.1.zip&nbsp;or&nbsp;apache-jmeter-5.4.1.tgz).</p>



<h3 class="wp-block-heading">3- Installation.</h3>



<p>Installing&nbsp;Jmeter&nbsp;is&nbsp;easy!&nbsp;You&nbsp;only&nbsp;need&nbsp;to&nbsp;unzip&nbsp;the&nbsp;file&nbsp;to&nbsp;a&nbsp;directory&nbsp;of&nbsp;your&nbsp;choice&nbsp;and&nbsp;that&#8217;s&nbsp;it!</p>



<h3 class="wp-block-heading">4- Start JMeter </h3>



<p>JMeter can be used in 3 modes. These 3 modes are: </p>



<ol class="wp-block-list"><li>GUI Mode</li><li>Server Mode</li><li>Command Line Mode</li></ol>



<p>In&nbsp;this&nbsp;article,&nbsp;we&nbsp;will&nbsp;focus&nbsp;on&nbsp;<strong>GUI&nbsp;Mode</strong>.&nbsp;So,&nbsp;to&nbsp;start&nbsp;the&nbsp;GUI&nbsp;Mode,&nbsp;you&nbsp;will&nbsp;need&nbsp;to&nbsp;execute&nbsp;the&nbsp;following&nbsp;file&nbsp;<strong>/bin/ApacheJMeter.jar</strong>.&nbsp;This&nbsp;will&nbsp;open&nbsp;the&nbsp;application&nbsp;as&nbsp;the&nbsp;following&nbsp;example.</p>



<figure class="wp-block-image size-large is-resized"><img fetchpriority="high" decoding="async" src="https://blogit.create.pt/wp-content/uploads/2021/04/AppOpen-1024x560.png" alt="" class="wp-image-12245" width="1070" height="586" srcset="https://blogit.create.pt/wp-content/uploads/2021/04/AppOpen-1024x560.png 1024w, https://blogit.create.pt/wp-content/uploads/2021/04/AppOpen-300x164.png 300w, https://blogit.create.pt/wp-content/uploads/2021/04/AppOpen-768x420.png 768w, https://blogit.create.pt/wp-content/uploads/2021/04/AppOpen-1536x840.png 1536w, https://blogit.create.pt/wp-content/uploads/2021/04/AppOpen-696x381.png 696w, https://blogit.create.pt/wp-content/uploads/2021/04/AppOpen-1068x584.png 1068w, https://blogit.create.pt/wp-content/uploads/2021/04/AppOpen.png 1920w" sizes="(max-width: 1070px) 100vw, 1070px" /></figure>



<h2 class="wp-block-heading">How to use JMeter?</h2>



<p>Now&nbsp;that&nbsp;we&nbsp;have&nbsp;JMeter&nbsp;installed&nbsp;and&nbsp;running,&nbsp;we&nbsp;need&nbsp;to&nbsp;understand&nbsp;the&nbsp;components&nbsp;that&nbsp;are&nbsp;used&nbsp;to&nbsp;create&nbsp;a&nbsp;Test&nbsp;Plan.</p>



<p>When&nbsp;we&nbsp;open&nbsp;JMeter,&nbsp;we&nbsp;can&nbsp;see&nbsp;that&nbsp;there&nbsp;is&nbsp;already&nbsp;a&nbsp;&#8220;Test&nbsp;Plan&#8221;&nbsp;component.&nbsp;This&nbsp;component&nbsp;is&nbsp;where&nbsp;we&nbsp;add&nbsp;components&nbsp;for&nbsp;our&nbsp;JMeter&nbsp;Test.&nbsp;Here&nbsp;is&nbsp;an&nbsp;image&nbsp;of&nbsp;how&nbsp;these&nbsp;components&nbsp;are&nbsp;organized.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="742" height="290" src="https://blogit.create.pt/wp-content/uploads/2021/04/Jmeter.png" alt="" class="wp-image-12246" srcset="https://blogit.create.pt/wp-content/uploads/2021/04/Jmeter.png 742w, https://blogit.create.pt/wp-content/uploads/2021/04/Jmeter-300x117.png 300w, https://blogit.create.pt/wp-content/uploads/2021/04/Jmeter-696x272.png 696w" sizes="(max-width: 742px) 100vw, 742px" /></figure>



<p>The&nbsp;components&nbsp;that&nbsp;we&nbsp;are&nbsp;gonna&nbsp;talk&nbsp;here&nbsp;will&nbsp;be:</p>



<ul class="wp-block-list"><li>Thread Group</li><li>Samplers </li><li>Listeners </li><li>Config Elements</li></ul>



<h4 class="wp-block-heading">Thread Group</h4>



<p>Thread&nbsp;group&nbsp;is&nbsp;a&nbsp;collection&nbsp;of&nbsp;threads.&nbsp;This&nbsp;is&nbsp;the&nbsp;component&nbsp;where&nbsp;you&nbsp;define&nbsp;how&nbsp;many&nbsp;threads&nbsp;will&nbsp;run.&nbsp;Essentially,&nbsp;each&nbsp;thread represents&nbsp;a&nbsp;user&nbsp;using&nbsp;the&nbsp;application&nbsp;under&nbsp;test.</p>



<p>The&nbsp;thread&nbsp;group&nbsp;let&#8217;s&nbsp;you&nbsp;set&nbsp;the&nbsp;value&nbsp;of&nbsp;threads&nbsp;that&nbsp;you&nbsp;want&nbsp;to&nbsp;run(simulating&nbsp;the&nbsp;number&nbsp;of&nbsp;users, that&nbsp;you&nbsp;to&nbsp;test,&nbsp;using&nbsp;your&nbsp;app).For&nbsp;example,&nbsp;if&nbsp;you&nbsp;set&nbsp;threads&nbsp;number&nbsp;to&nbsp;100.&nbsp;JMeter&nbsp;will&nbsp;create&nbsp;and&nbsp;make&nbsp;100&nbsp;request&nbsp;to&nbsp;the&nbsp;application&nbsp;under&nbsp;test.</p>



<h4 class="wp-block-heading">Samplers</h4>



<p>JMeter&nbsp;supports&nbsp;testing&nbsp;HTTP,&nbsp;FTP,&nbsp;JDBC&nbsp;and&nbsp;many&nbsp;other&nbsp;protocols.</p>



<p>We&nbsp;already&nbsp;know&nbsp;that&nbsp;Thread&nbsp;Groups&nbsp;simulate&nbsp;user&nbsp;request&nbsp;to&nbsp;the&nbsp;server, but&nbsp;how&nbsp;does&nbsp;a&nbsp;Thread&nbsp;Group&nbsp;know&nbsp;which&nbsp;type&nbsp;of&nbsp;requests&nbsp;(HTTP,&nbsp;FTP&nbsp;etc.)&nbsp;it&nbsp;needs&nbsp;to&nbsp;make?&nbsp;The&nbsp;answer&nbsp;is&nbsp;Samplers.</p>



<p>The&nbsp;user&nbsp;request&nbsp;could&nbsp;be&nbsp;FTP&nbsp;Request,&nbsp;HTTP&nbsp;Request,&nbsp;JDBC&nbsp;Request, etc. In&nbsp;this&nbsp;example, we&nbsp;will&nbsp;concentrate&nbsp;in<strong> HTTP&nbsp;Request</strong>.</p>



<h4 class="wp-block-heading">Listeners</h4>



<p>Listeners&nbsp;shows&nbsp;the&nbsp;results&nbsp;of&nbsp;the&nbsp;test&nbsp;execution.&nbsp;They&nbsp;can&nbsp;show&nbsp;results&nbsp;in&nbsp;a&nbsp;different&nbsp;format&nbsp;such&nbsp;as&nbsp;a&nbsp;tree,&nbsp;table,&nbsp;graph&nbsp;or&nbsp;log&nbsp;file.</p>



<p>Graph&nbsp;result&nbsp;listeners&nbsp;display&nbsp;the&nbsp;server&nbsp;response&nbsp;times&nbsp;on&nbsp;a&nbsp;Graph.</p>



<p>View&nbsp;Result&nbsp;Tree&nbsp;show&nbsp;results&nbsp;of&nbsp;the&nbsp;user&nbsp;request&nbsp;in&nbsp;basic&nbsp;HTML&nbsp;format.</p>



<p>Table&nbsp;Result&nbsp;show&nbsp;summary&nbsp;of&nbsp;a&nbsp;test&nbsp;result&nbsp;in&nbsp;table&nbsp;format.</p>



<p>Log&nbsp;show&nbsp;summary&nbsp;of&nbsp;a&nbsp;test&nbsp;result&nbsp;in&nbsp;the&nbsp;text&nbsp;file.</p>



<h4 class="wp-block-heading">Config Elements</h4>



<p>Set&nbsp;up&nbsp;defaults&nbsp;and&nbsp;variables&nbsp;for&nbsp;later&nbsp;use&nbsp;by&nbsp;samplers.</p>



<p>The&nbsp;figure&nbsp;below&nbsp;shows&nbsp;some&nbsp;commonly&nbsp;used&nbsp;configuration&nbsp;elements&nbsp;in&nbsp;JMeter.</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://blogit.create.pt/wp-content/uploads/2021/04/ConfigurationElements.png" alt="" class="wp-image-12248" width="1058" height="277" srcset="https://blogit.create.pt/wp-content/uploads/2021/04/ConfigurationElements.png 632w, https://blogit.create.pt/wp-content/uploads/2021/04/ConfigurationElements-300x78.png 300w" sizes="(max-width: 1058px) 100vw, 1058px" /></figure>



<h3 class="wp-block-heading">Let&#8217;s create a test</h3>



<p>As&nbsp;was&nbsp;shown&nbsp;before,&nbsp;JMeter&nbsp;starts&nbsp;with&nbsp;a&nbsp;Test&nbsp;Plan&nbsp;Component&nbsp;already&nbsp;created&nbsp;(you&nbsp;can&nbsp;change&nbsp;the&nbsp;name&nbsp;to&nbsp;anything&nbsp;more&nbsp;suitable&nbsp;to&nbsp;your&nbsp;case).&nbsp;</p>



<p>Now&nbsp;let&#8217;s&nbsp;start&nbsp;creating&nbsp;our&nbsp;test.&nbsp;In&nbsp;this&nbsp;case&nbsp;we&nbsp;will&nbsp;use&nbsp;<a href="https://my-json-server.typicode.com/">https://my-json-server.typicode.com/</a>&nbsp;to&nbsp;simulate&nbsp;an&nbsp;API. </p>



<p>Initially,&nbsp;let&#8217;s&nbsp;add&nbsp;a&nbsp;Thread&nbsp;Group.&nbsp;Right&nbsp;click&nbsp;on&nbsp;the&nbsp;test&nbsp;plan,&nbsp;then&nbsp;<strong>Add&nbsp;-&gt;&nbsp;Threads(Users)&nbsp;-&gt;&nbsp;Thread&nbsp;Group</strong>.</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://blogit.create.pt/wp-content/uploads/2021/04/ThreadGroup-1024x576.png" alt="" class="wp-image-12250" width="1069" height="602" srcset="https://blogit.create.pt/wp-content/uploads/2021/04/ThreadGroup-1024x576.png 1024w, https://blogit.create.pt/wp-content/uploads/2021/04/ThreadGroup-300x169.png 300w, https://blogit.create.pt/wp-content/uploads/2021/04/ThreadGroup-768x432.png 768w, https://blogit.create.pt/wp-content/uploads/2021/04/ThreadGroup-1536x864.png 1536w, https://blogit.create.pt/wp-content/uploads/2021/04/ThreadGroup-696x392.png 696w, https://blogit.create.pt/wp-content/uploads/2021/04/ThreadGroup-1068x601.png 1068w, https://blogit.create.pt/wp-content/uploads/2021/04/ThreadGroup-747x420.png 747w, https://blogit.create.pt/wp-content/uploads/2021/04/ThreadGroup.png 1920w" sizes="(max-width: 1069px) 100vw, 1069px" /></figure>



<p>You&nbsp;can&nbsp;see&nbsp;that&nbsp;there&nbsp;is&nbsp;some&nbsp;settings&nbsp;that&nbsp;we&nbsp;need&nbsp;to&nbsp;adjust.&nbsp;At&nbsp;the&nbsp;top,&nbsp;there&nbsp;is&nbsp;a&nbsp;setting&nbsp;that&nbsp;says&nbsp;Action&nbsp;to&nbsp;be&nbsp;taken&nbsp;after&nbsp;a&nbsp;Sampler&nbsp;Error.&nbsp;Normally,&nbsp;I&nbsp;always&nbsp;use&nbsp;this&nbsp;in&nbsp;<strong>Continue</strong>&nbsp;but&nbsp;you&nbsp;can&nbsp;use&nbsp;the&nbsp;one&nbsp;that&nbsp;suits&nbsp;your&nbsp;case.</p>



<p>The&nbsp;next&nbsp;3&nbsp;settings&nbsp;will&nbsp;be&nbsp;the&nbsp;ones&nbsp;that&nbsp;we&nbsp;gonna&nbsp;focus&nbsp;for&nbsp;now.</p>



<ul class="wp-block-list"><li>Number&nbsp;of&nbsp;Threads&nbsp;(users)&nbsp;&#8211;&nbsp;is&nbsp;the&nbsp;number&nbsp;of&nbsp;threads(users)&nbsp;that&nbsp;will&nbsp;be&nbsp;running&nbsp;your&nbsp;test&nbsp;plan.</li><li>Ramp-up&nbsp;period&nbsp;(seconds)&nbsp;&#8211;&nbsp;is&nbsp;the&nbsp;value&nbsp;in&nbsp;seconds&nbsp;that&nbsp;defines&nbsp;how&nbsp;much&nbsp;time&nbsp;until&nbsp;all&nbsp;threads&nbsp;are&nbsp;working.&nbsp;Example:&nbsp;100&nbsp;Threads&nbsp;and&nbsp;10&nbsp;seconds&nbsp;of&nbsp;ramp-up&nbsp;period,&nbsp;this&nbsp;means&nbsp;that&nbsp;the&nbsp;threads&nbsp;will&nbsp;start,&nbsp;gradually,&nbsp;until&nbsp;at&nbsp;the&nbsp;point&nbsp;of&nbsp;10&nbsp;seconds&nbsp;all&nbsp;100&nbsp;threads&nbsp;will&nbsp;be&nbsp;working.</li><li>Loop&nbsp;Count&nbsp;&#8211;&nbsp;You&nbsp;can&nbsp;set&nbsp;this&nbsp;to&nbsp;the <strong>Infinite</strong>&nbsp;and&nbsp;will&nbsp;only&nbsp;stop&nbsp;threads&nbsp;when&nbsp;you&nbsp;press&nbsp;the&nbsp;button&nbsp;to&nbsp;stop.&nbsp;Also,&nbsp;you&nbsp;can&nbsp;set&nbsp;a&nbsp;loop&nbsp;count,&nbsp;that&nbsp;is&nbsp;the&nbsp;times&nbsp;that&nbsp;each&nbsp;thread&nbsp;will&nbsp;execute&nbsp;the&nbsp;test&nbsp;plan.&nbsp;Example,&nbsp;if&nbsp;you&nbsp;put&nbsp;the&nbsp;value&nbsp;3,&nbsp;the&nbsp;threads&nbsp;will&nbsp;execute&nbsp;the&nbsp;plan&nbsp;3&nbsp;times&nbsp;and&nbsp;then&nbsp;will&nbsp;stop.</li></ul>



<p>So,&nbsp;in&nbsp;our&nbsp;example&nbsp;lets&nbsp;try&nbsp;10&nbsp;threads,&nbsp;with&nbsp;5&nbsp;seconds&nbsp;of&nbsp;Ramp-up&nbsp;Time&nbsp;and&nbsp;the&nbsp;value&nbsp;3&nbsp;in&nbsp;the&nbsp;loop&nbsp;count.&nbsp;I&nbsp;will&nbsp;also&nbsp;change&nbsp;the&nbsp;name&nbsp;of&nbsp;the&nbsp;thread&nbsp;group&nbsp;to&nbsp;know&nbsp;how&nbsp;many&nbsp;threads&nbsp;I&nbsp;am&nbsp;using.&nbsp;It&nbsp;Should&nbsp;look&nbsp;like&nbsp;this.</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://blogit.create.pt/wp-content/uploads/2021/04/10Threads-1024x576.png" alt="" class="wp-image-12251" width="1068" height="602" srcset="https://blogit.create.pt/wp-content/uploads/2021/04/10Threads-1024x576.png 1024w, https://blogit.create.pt/wp-content/uploads/2021/04/10Threads-300x169.png 300w, https://blogit.create.pt/wp-content/uploads/2021/04/10Threads-768x432.png 768w, https://blogit.create.pt/wp-content/uploads/2021/04/10Threads-1536x864.png 1536w, https://blogit.create.pt/wp-content/uploads/2021/04/10Threads-696x392.png 696w, https://blogit.create.pt/wp-content/uploads/2021/04/10Threads-1068x601.png 1068w, https://blogit.create.pt/wp-content/uploads/2021/04/10Threads-747x420.png 747w, https://blogit.create.pt/wp-content/uploads/2021/04/10Threads.png 1920w" sizes="(max-width: 1068px) 100vw, 1068px" /></figure>



<p>Let&#8217;s&nbsp;continue&nbsp;adding&nbsp;more&nbsp;components.&nbsp;This&nbsp;time, let&#8217;s&nbsp;add&nbsp;a&nbsp;way&nbsp;to&nbsp;define&nbsp;variables.&nbsp;Right-click&nbsp;on&nbsp;the&nbsp;Thread&nbsp;Group,&nbsp;then&nbsp;<strong>Add&nbsp;-&gt;&nbsp;Config-Element&nbsp;-&gt;&nbsp;User&nbsp;Defined&nbsp;Variables</strong>.&nbsp;</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://blogit.create.pt/wp-content/uploads/2021/04/Variables-1024x251.png" alt="" class="wp-image-12252" width="1067" height="262" srcset="https://blogit.create.pt/wp-content/uploads/2021/04/Variables-1024x251.png 1024w, https://blogit.create.pt/wp-content/uploads/2021/04/Variables-300x73.png 300w, https://blogit.create.pt/wp-content/uploads/2021/04/Variables-768x188.png 768w, https://blogit.create.pt/wp-content/uploads/2021/04/Variables-1536x376.png 1536w, https://blogit.create.pt/wp-content/uploads/2021/04/Variables-696x170.png 696w, https://blogit.create.pt/wp-content/uploads/2021/04/Variables-1068x261.png 1068w, https://blogit.create.pt/wp-content/uploads/2021/04/Variables-1716x420.png 1716w, https://blogit.create.pt/wp-content/uploads/2021/04/Variables.png 1920w" sizes="(max-width: 1067px) 100vw, 1067px" /></figure>



<p>This&nbsp;component&nbsp;will&nbsp;let&nbsp;you&nbsp;define&nbsp;some&nbsp;variable&nbsp;to&nbsp;use&nbsp;afterwards.&nbsp;Let&#8217;s&nbsp;define&nbsp;some.</p>



<ul class="wp-block-list"><li>url:&nbsp;my-json-server.typicode.com</li><li>postId:&nbsp;1</li></ul>



<p>&nbsp;Now,&nbsp;to&nbsp;use&nbsp;these&nbsp;variables&nbsp;in&nbsp;other&nbsp;components&nbsp;you&nbsp;will&nbsp;need&nbsp;to&nbsp;do&nbsp;it&nbsp;in&nbsp;the&nbsp;following&nbsp;way.</p>



<ul class="wp-block-list"><li>${url}&nbsp;for&nbsp;the&nbsp;<strong>url</strong>&nbsp;Value&nbsp;</li><li>${postId}&nbsp;for&nbsp;the&nbsp;<strong>postId</strong>&nbsp;Value</li></ul>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://blogit.create.pt/wp-content/uploads/2021/04/userVariable-1024x203.png" alt="" class="wp-image-12253" width="1069" height="213" srcset="https://blogit.create.pt/wp-content/uploads/2021/04/userVariable-1024x203.png 1024w, https://blogit.create.pt/wp-content/uploads/2021/04/userVariable-300x59.png 300w, https://blogit.create.pt/wp-content/uploads/2021/04/userVariable-768x152.png 768w, https://blogit.create.pt/wp-content/uploads/2021/04/userVariable-1536x304.png 1536w, https://blogit.create.pt/wp-content/uploads/2021/04/userVariable-696x138.png 696w, https://blogit.create.pt/wp-content/uploads/2021/04/userVariable-1068x212.png 1068w, https://blogit.create.pt/wp-content/uploads/2021/04/userVariable.png 1923w" sizes="(max-width: 1069px) 100vw, 1069px" /></figure>



<p>Finally,&nbsp;let&#8217;s&nbsp;add&nbsp;some&nbsp;real&nbsp;requests.&nbsp;Here&nbsp;as&nbsp;example&nbsp;we&nbsp;will&nbsp;make&nbsp;3&nbsp;different&nbsp;requests.&nbsp;Http&nbsp;Request&nbsp;to&nbsp;get&nbsp;all&nbsp;posts,&nbsp;Http&nbsp;Request&nbsp;to&nbsp;get&nbsp;one&nbsp;Post,&nbsp;and&nbsp;Http&nbsp;Request&nbsp;to&nbsp;Post&nbsp;a&nbsp;new&nbsp;Post.&nbsp;Remember&nbsp;that&nbsp;the&nbsp;site&nbsp;used&nbsp;in&nbsp;this&nbsp;example&nbsp;has&nbsp;paths&nbsp;to&nbsp;request&nbsp;posts&nbsp;and&nbsp;to&nbsp;add&nbsp;posts.</p>



<p>How&nbsp;to&nbsp;add&nbsp;an&nbsp;HTTP&nbsp;Request&nbsp;?&nbsp;Right-click&nbsp;on&nbsp;the&nbsp;Thread&nbsp;Group,&nbsp;then&nbsp;<strong>Add&nbsp;-&gt;&nbsp;Smapler&nbsp;-&gt;&nbsp;Http&nbsp;Request</strong>.</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://blogit.create.pt/wp-content/uploads/2021/04/HttpRequest-1024x277.png" alt="" class="wp-image-12255" width="1069" height="290" srcset="https://blogit.create.pt/wp-content/uploads/2021/04/HttpRequest-1024x277.png 1024w, https://blogit.create.pt/wp-content/uploads/2021/04/HttpRequest-300x81.png 300w, https://blogit.create.pt/wp-content/uploads/2021/04/HttpRequest-768x208.png 768w, https://blogit.create.pt/wp-content/uploads/2021/04/HttpRequest-1536x416.png 1536w, https://blogit.create.pt/wp-content/uploads/2021/04/HttpRequest-696x188.png 696w, https://blogit.create.pt/wp-content/uploads/2021/04/HttpRequest-1068x289.png 1068w, https://blogit.create.pt/wp-content/uploads/2021/04/HttpRequest-1551x420.png 1551w, https://blogit.create.pt/wp-content/uploads/2021/04/HttpRequest.png 1935w" sizes="(max-width: 1069px) 100vw, 1069px" /></figure>



<p>Now&nbsp;that&nbsp;we&nbsp;have&nbsp;an&nbsp;Http&nbsp;Request&nbsp;component,&nbsp;let&#8217;s&nbsp;configure&nbsp;to&nbsp;make&nbsp;a&nbsp;Http&nbsp;Request&nbsp;to&nbsp;get&nbsp;all&nbsp;posts.&nbsp;The&nbsp;path&nbsp;to&nbsp;this&nbsp;request&nbsp;is&nbsp;<span style="text-decoration: underline">https://jsonplaceholder.typicode.com/posts</span>. The&nbsp;configurations&nbsp;of&nbsp;this&nbsp;component&nbsp;are:</p>



<ul class="wp-block-list"><li><strong>Protocol</strong>&nbsp;-&gt;&nbsp;&#8220;https&#8221;</li><li><strong>Server&nbsp;Name&nbsp;or&nbsp;IP</strong>&nbsp;-&gt;&nbsp;${url}&nbsp;(because&nbsp;we&nbsp;have&nbsp;this&nbsp;value&nbsp;defined&nbsp;in&nbsp;a&nbsp;variable)</li><li><strong>Port&nbsp;Number</strong> -&gt;&nbsp;in&nbsp;this&nbsp;case, nothing but&nbsp;if&nbsp;you&nbsp;need&nbsp;to&nbsp;your&nbsp;specific&nbsp;case,&nbsp;here&nbsp;is&nbsp;where&nbsp;you&nbsp;put&nbsp;the&nbsp;port&nbsp;number.&nbsp;Example:&nbsp;to&nbsp;make&nbsp;a&nbsp;request&nbsp;to&nbsp;https://localhost:80,&nbsp;you&nbsp;would&nbsp;need&nbsp;to&nbsp;put&nbsp;the&nbsp;value&nbsp;80&nbsp;in&nbsp;here.</li><li><strong>HTTP&nbsp;Request</strong>&nbsp;-&gt;&nbsp;GET</li><li><strong>Path</strong>&nbsp;-&gt;&nbsp;&#8220;/typicode/demo/posts&#8221;</li></ul>



<p>Now&nbsp;that&nbsp;we&nbsp;have&nbsp;everything,&nbsp;let&#8217;s&nbsp;run&nbsp;?&nbsp;Click&nbsp;on&nbsp;the&nbsp;start&nbsp;Button&nbsp;above&nbsp;and&nbsp;see&nbsp;what&nbsp;happens.&nbsp;Nothing&nbsp;?&nbsp;Stop&nbsp;the&nbsp;process&nbsp;and&nbsp;let&#8217;s&nbsp;see&nbsp;what&nbsp;is&nbsp;missing.</p>



<p>The&nbsp;piece&nbsp;that&nbsp;is&nbsp;missing&nbsp;is&nbsp;<strong>listeners</strong>.&nbsp;We&nbsp;need&nbsp;listeners&nbsp;to&nbsp;understand&nbsp;what&nbsp;is&nbsp;happening.&nbsp;In&nbsp;this&nbsp;case,&nbsp;the&nbsp;<strong>View&nbsp;Results&nbsp;Tree</strong>&nbsp;and&nbsp;<strong>Summary&nbsp;Report</strong>.&nbsp;Let&#8217;s&nbsp;add&nbsp;these&nbsp;two&nbsp;listeners&nbsp;by&nbsp;Right-clicking&nbsp;in&nbsp;the&nbsp;Thread&nbsp;Group,&nbsp;then&nbsp;<strong>Add&nbsp;-&gt;&nbsp;Listener&nbsp;-&gt;&nbsp;View&nbsp;Results&nbsp;Tree</strong>&nbsp;and&nbsp;<strong>Add&nbsp;-&gt;&nbsp;Listener&nbsp;-&gt;&nbsp;Summary&nbsp;Report</strong>.</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://blogit.create.pt/wp-content/uploads/2021/04/Listeners-1024x246.png" alt="" class="wp-image-12256" width="1070" height="258" srcset="https://blogit.create.pt/wp-content/uploads/2021/04/Listeners-1024x246.png 1024w, https://blogit.create.pt/wp-content/uploads/2021/04/Listeners-300x72.png 300w, https://blogit.create.pt/wp-content/uploads/2021/04/Listeners-768x184.png 768w, https://blogit.create.pt/wp-content/uploads/2021/04/Listeners-1536x369.png 1536w, https://blogit.create.pt/wp-content/uploads/2021/04/Listeners-696x167.png 696w, https://blogit.create.pt/wp-content/uploads/2021/04/Listeners-1750x420.png 1750w, https://blogit.create.pt/wp-content/uploads/2021/04/Listeners.png 1908w" sizes="(max-width: 1070px) 100vw, 1070px" /></figure>



<p>Now,&nbsp;if&nbsp;you&nbsp;start&nbsp;the&nbsp;process,&nbsp;you&nbsp;will&nbsp;see&nbsp;that&nbsp;these&nbsp;listeners&nbsp;represent&nbsp;information&nbsp;about&nbsp;the&nbsp;request.&nbsp;</p>



<p>The&nbsp;View&nbsp;Results&nbsp;Tree&nbsp;show&nbsp;every&nbsp;request&nbsp;information.&nbsp;In&nbsp;here,&nbsp;you&nbsp;can&nbsp;see&nbsp;the&nbsp;request&nbsp;body&nbsp;and&nbsp;headers,&nbsp;and&nbsp;the&nbsp;response&nbsp;body&nbsp;and&nbsp;headers.</p>



<p>In&nbsp;this&nbsp;example,&nbsp;when&nbsp;we&nbsp;choose&nbsp;the&nbsp;<strong>Response&nbsp;Body</strong>&nbsp;of&nbsp;one&nbsp;request&nbsp;we&nbsp;will&nbsp;see&nbsp;that&nbsp;there&nbsp;will&nbsp;be&nbsp;a&nbsp;JSON&nbsp;with&nbsp;data&nbsp;relative&nbsp;to&nbsp;what&nbsp;they&nbsp;call&nbsp;as&nbsp;posts.</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://blogit.create.pt/wp-content/uploads/2021/04/PostsExample-1024x551.png" alt="" class="wp-image-12257" width="1072" height="578" srcset="https://blogit.create.pt/wp-content/uploads/2021/04/PostsExample-1024x551.png 1024w, https://blogit.create.pt/wp-content/uploads/2021/04/PostsExample-300x161.png 300w, https://blogit.create.pt/wp-content/uploads/2021/04/PostsExample-768x413.png 768w, https://blogit.create.pt/wp-content/uploads/2021/04/PostsExample-1536x827.png 1536w, https://blogit.create.pt/wp-content/uploads/2021/04/PostsExample-696x375.png 696w, https://blogit.create.pt/wp-content/uploads/2021/04/PostsExample-1068x575.png 1068w, https://blogit.create.pt/wp-content/uploads/2021/04/PostsExample-780x420.png 780w, https://blogit.create.pt/wp-content/uploads/2021/04/PostsExample.png 1906w" sizes="(max-width: 1072px) 100vw, 1072px" /></figure>



<p>The&nbsp;Summary&nbsp;Report&nbsp;Aggregates&nbsp;the&nbsp;information&nbsp;of&nbsp;different&nbsp;types&nbsp;of&nbsp;request.&nbsp;In&nbsp;this&nbsp;case,&nbsp;we&nbsp;only&nbsp;have&nbsp;one&nbsp;request,&nbsp;so,&nbsp;it&nbsp;will&nbsp;show&nbsp;informations&nbsp;about&nbsp;that&nbsp;request.What&nbsp;are&nbsp;the&nbsp;informations&nbsp;that&nbsp;this&nbsp;will&nbsp;show&nbsp;?&nbsp;</p>



<ul class="wp-block-list"><li>#Samples&nbsp;&#8211;&nbsp;are&nbsp;the&nbsp;number&nbsp;of&nbsp;requests&nbsp;made&nbsp;</li><li>Average&nbsp;&#8211;&nbsp;shows&nbsp;&nbsp;the&nbsp;average&nbsp;time&nbsp;needed&nbsp;to&nbsp;make&nbsp;these&nbsp;requests&nbsp;</li><li>Min&nbsp;&#8211;&nbsp;shows&nbsp;the&nbsp;value&nbsp;of&nbsp;the&nbsp;request&nbsp;that&nbsp;take&nbsp;less&nbsp;time&nbsp;to&nbsp;finish</li><li>Max&nbsp;&#8211;&nbsp;shows&nbsp;the&nbsp;value&nbsp;of&nbsp;the&nbsp;request&nbsp;that&nbsp;take&nbsp;more&nbsp;time&nbsp;to&nbsp;finish</li><li>Std.&nbsp;Dev.&nbsp;&#8211;&nbsp;shows&nbsp;the&nbsp;standard&nbsp;deviation&nbsp;of&nbsp;the&nbsp;request&nbsp;times&nbsp;to&nbsp;the&nbsp;average</li><li>Error&nbsp;%&nbsp;&#8211;&nbsp;shows&nbsp;the&nbsp;percentage&nbsp;of&nbsp;requests&nbsp;that&nbsp;failed</li><li>Throughput&nbsp;&#8211;&nbsp;shows&nbsp;the&nbsp;number&nbsp;of&nbsp;requests&nbsp;processed&nbsp;by&nbsp;time&nbsp;</li><li>Received&nbsp;KB/sec&nbsp;&#8211;&nbsp;&nbsp;shows&nbsp;the&nbsp;amount&nbsp;of&nbsp;data&nbsp;downloaded&nbsp;from&nbsp;the&nbsp;server&nbsp;&nbsp;time</li><li>Sent&nbsp;KB/sec&nbsp;&#8211;&nbsp;shows&nbsp;the&nbsp;amount&nbsp;of&nbsp;data&nbsp;uploaded&nbsp;to&nbsp;the&nbsp;server&nbsp;time&nbsp;</li><li>Avg.&nbsp;Bytes&nbsp;&#8211;&nbsp;shows&nbsp;the&nbsp;average&nbsp;size&nbsp;of&nbsp;the&nbsp;response&nbsp;sample</li></ul>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://blogit.create.pt/wp-content/uploads/2021/04/SummaryReport-1024x181.png" alt="" class="wp-image-12259" width="1069" height="190" srcset="https://blogit.create.pt/wp-content/uploads/2021/04/SummaryReport-1024x181.png 1024w, https://blogit.create.pt/wp-content/uploads/2021/04/SummaryReport-300x53.png 300w, https://blogit.create.pt/wp-content/uploads/2021/04/SummaryReport-768x136.png 768w, https://blogit.create.pt/wp-content/uploads/2021/04/SummaryReport-1536x271.png 1536w, https://blogit.create.pt/wp-content/uploads/2021/04/SummaryReport-696x123.png 696w, https://blogit.create.pt/wp-content/uploads/2021/04/SummaryReport-1068x189.png 1068w, https://blogit.create.pt/wp-content/uploads/2021/04/SummaryReport.png 1920w" sizes="(max-width: 1069px) 100vw, 1069px" /></figure>



<p>We&nbsp;have&nbsp;all&nbsp;we&nbsp;need,&nbsp;let&#8217;s&nbsp;add&nbsp;more&nbsp;Requests.&nbsp;Let&#8217;s&nbsp;create&nbsp;a&nbsp;request&nbsp;that&nbsp;creates&nbsp;a&nbsp;post,&nbsp;and&nbsp;create&nbsp;a&nbsp;request&nbsp;that&nbsp;obtains&nbsp;only&nbsp;one&nbsp;post.&nbsp;Also,&nbsp;change&nbsp;the&nbsp;name&nbsp;of&nbsp;the&nbsp;Http&nbsp;Request&nbsp;components&nbsp;to&nbsp;now&nbsp;what&nbsp;is&nbsp;the&nbsp;correspondent&nbsp;request.&nbsp;Remember&nbsp;to&nbsp;put&nbsp;the&nbsp;Http&nbsp;Request&nbsp;before&nbsp;the&nbsp;listeners.&nbsp;The&nbsp;Listeners&nbsp;will&nbsp;only&nbsp;listen&nbsp;to&nbsp;what&nbsp;are&nbsp;before&nbsp;them.&nbsp;Remember&nbsp;this!&nbsp;</p>



<p>The&nbsp;create&nbsp;a&nbsp;post&nbsp;request&nbsp;configurations&nbsp;are:</p>



<ol class="wp-block-list"><li><strong>Protocol</strong>&nbsp;-&gt;&nbsp;&#8220;https&#8221;</li><li><strong>Server&nbsp;Name&nbsp;or&nbsp;IP</strong>&nbsp;-&gt;&nbsp;${url}&nbsp;(because&nbsp;we&nbsp;have&nbsp;this&nbsp;value&nbsp;defined&nbsp;in&nbsp;a&nbsp;variable)</li><li><strong>HTTP&nbsp;Request</strong>&nbsp;-&gt;&nbsp;Post</li><li><strong>Path</strong>&nbsp;-&gt;&nbsp;&#8220;/typicode/demo/posts&#8221;</li><li><strong>Body&nbsp;Data</strong>&nbsp;&#8211;&nbsp;we&nbsp;will&nbsp;put&nbsp;a&nbsp;JSON&nbsp;like&nbsp;this&nbsp;{&#8220;title&#8221;:&nbsp;&#8220;Car&nbsp;Crash&#8221;}</li></ol>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://blogit.create.pt/wp-content/uploads/2021/04/CreatePost-1024x306.png" alt="" class="wp-image-12261" width="1086" height="326" srcset="https://blogit.create.pt/wp-content/uploads/2021/04/CreatePost-1024x306.png 1024w, https://blogit.create.pt/wp-content/uploads/2021/04/CreatePost-300x90.png 300w, https://blogit.create.pt/wp-content/uploads/2021/04/CreatePost-1536x459.png 1536w, https://blogit.create.pt/wp-content/uploads/2021/04/CreatePost-696x208.png 696w" sizes="(max-width: 1086px) 100vw, 1086px" /></figure>



<p>And,&nbsp;The&nbsp;get&nbsp;one&nbsp;post&nbsp;request&nbsp;configurations&nbsp;are:</p>



<ol class="wp-block-list" id="block-add80d93-dc9f-41db-9cbc-14ed3602e60e"><li><strong>Protocol</strong>&nbsp;-&gt;&nbsp;&#8220;https&#8221;</li><li><strong>Server&nbsp;Name&nbsp;or&nbsp;IP</strong>&nbsp;-&gt;&nbsp;${url}&nbsp;(because&nbsp;we&nbsp;have&nbsp;this&nbsp;value&nbsp;defined&nbsp;in&nbsp;a&nbsp;variable)</li><li><strong>HTTP&nbsp;Request</strong>&nbsp;-&gt;&nbsp;Get</li><li><strong>Path</strong>&nbsp;-&gt;&nbsp;&#8220;/typicode/demo/posts/${postId}&#8221;</li></ol>



<p>Run&nbsp;the&nbsp;test&nbsp;plan&nbsp;and&nbsp;see&nbsp;the&nbsp;results.&nbsp;Try&nbsp;to&nbsp;do&nbsp;it&nbsp;for&nbsp;another&nbsp;API.&nbsp;</p>



<p>These&nbsp;are&nbsp;the&nbsp;basic&nbsp;examples&nbsp;that&nbsp;we&nbsp;have&nbsp;for&nbsp;you&nbsp;right&nbsp;now.&nbsp;More&nbsp;advanced&nbsp;tips&nbsp;will&nbsp;come.&nbsp;</p>



<p>See&nbsp;you&nbsp;next&nbsp;time.</p>



<h3 class="wp-block-heading">References</h3>



<ul class="wp-block-list"><li><a href="https://www.guru99.com/jmeter-element-reference.html ">https://www.guru99.com/jmeter-element-reference.html</a></li><li><a href="https://www.guru99.com/hands-on-with-jmeter-gui.html">https://www.guru99.com/hands-on-with-jmeter-gui.html</a></li></ul>



<p></p>
<p>The post <a href="https://blogit.create.pt/diogocoelho/2021/04/23/performance-testing-an-api-how-to-start-doing-it-with-jmeter/">Performance Testing An API, How To Start Doing It With JMeter?</a> appeared first on <a href="https://blogit.create.pt">Blog IT</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogit.create.pt/diogocoelho/2021/04/23/performance-testing-an-api-how-to-start-doing-it-with-jmeter/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Sending an email with attachments using Outlook and PowerShell</title>
		<link>https://blogit.create.pt/andresilva/2017/12/07/sending-an-email-with-attachments-using-outlook-and-powershell/</link>
					<comments>https://blogit.create.pt/andresilva/2017/12/07/sending-an-email-with-attachments-using-outlook-and-powershell/#comments</comments>
		
		<dc:creator><![CDATA[André Silva]]></dc:creator>
		<pubDate>Thu, 07 Dec 2017 17:54:38 +0000</pubDate>
				<category><![CDATA[Scripting]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Outlook]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Automatic Testing]]></category>
		<category><![CDATA[Office]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Automation]]></category>
		<guid isPermaLink="false">http://blogit.create.pt/andresilva/?p=174</guid>

					<description><![CDATA[<p>A few days ago, I had to find a way to automatically send an email with attachments, at a predetermined time, using Outlook and PowerShell. I decided to use a Windows Scheduled Task, that would wake up at that time and invoke a PowerShell script. The script below is the result of a collection of [&#8230;]</p>
<p>The post <a href="https://blogit.create.pt/andresilva/2017/12/07/sending-an-email-with-attachments-using-outlook-and-powershell/">Sending an email with attachments using Outlook and PowerShell</a> appeared first on <a href="https://blogit.create.pt">Blog IT</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>A few days ago, I had to find a way to automatically send an email with attachments, at a predetermined time, using Outlook and PowerShell. I decided to use a Windows Scheduled Task, that would wake up at that time and invoke a PowerShell script.</p>
<p>The script below is the result of a collection of snippets and bits of code I found in various places around the Internet that allowed me to solve this problem.</p>
<p>For this example, I only want to send the files which have a specific extension (<strong>.html</strong>) and that exist in a specific folder (passed as parameter to the PowerShell script). Of course, you are free to remove this extension filtering for your own purposes.</p>
<p>Also, note that Outlook must have a configured email account for the sending process to succeed.</p>
<pre class="brush: powershell; title: ; notranslate">
# Check to see we have all the arguments
if($args.Count -lt 1)
{
Write-Host &quot;Use: SendMail.ps1 &lt;Path&gt;&quot;
Write-Host
Write-Host &quot; &lt;Path&gt;: Full path for the folder which contains the files&quot;
Write-Host
exit
}

$FullPath=$args&#x5B;0]

#Get an Outlook application object

$o = New-Object -com Outlook.Application

$mail = $o.CreateItem(0)

#2 = High importance message
$mail.importance = 2

$mail.subject = &quot;This is the subject of the mail&quot;
$mail.body = &quot;This is the body of the email. It has been automatically generated by a script.&quot;

#separate multiple recipients with a &quot;;&quot;
$mail.To = &lt;INSERT THE RECIPIENT HERE&gt;
#$mail.CC = &lt;OTHER RECIPIENT 1&gt;;&lt;OTHER RECIPIENT 2&gt;

# Iterate over all files and only add the ones that have an .html extension
$files = Get-ChildItem $FullPath

for ($i=0; $i -lt $files.Count; $i++) {

$outfileName = $files&#x5B;$i].FullName
$outfileNameExtension = $files&#x5B;$i].Extension

# if the extension is the one we want, add to attachments
if($outfileNameExtension -eq &quot;.html&quot;)
{
$mail.Attachments.Add($outfileName);
}
}

$mail.Send()

# give time to send the email
Start-Sleep 20

# quit Outlook
$o.Quit()

#end the script
exit
</pre>
<p>You can invoke the script presented above, by using a simple command window and giving the following command:</p>
<p><a href="http://blogit-create.com/wp-content/uploads/2017/12/PowerShellCommand.png"><img decoding="async" class="aligncenter size-full wp-image-224" src="http://blogit-create.com/wp-content/uploads/2017/12/PowerShellCommand.png" alt="PowerShell Command" width="544" height="75" srcset="https://blogit.create.pt/wp-content/uploads/2017/12/PowerShellCommand.png 544w, https://blogit.create.pt/wp-content/uploads/2017/12/PowerShellCommand-300x41.png 300w, https://blogit.create.pt/wp-content/uploads/2017/12/PowerShellCommand-534x75.png 534w" sizes="(max-width: 544px) 100vw, 544px" /></a></p>
<p>I hope this helps!</p>
<p>The post <a href="https://blogit.create.pt/andresilva/2017/12/07/sending-an-email-with-attachments-using-outlook-and-powershell/">Sending an email with attachments using Outlook and PowerShell</a> appeared first on <a href="https://blogit.create.pt">Blog IT</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogit.create.pt/andresilva/2017/12/07/sending-an-email-with-attachments-using-outlook-and-powershell/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
		<item>
		<title>Automatic Testing with People Picker in SharePoint 2007</title>
		<link>https://blogit.create.pt/andresilva/2010/01/04/automatic-testing-with-people-picker-in-sharepoint-2007/</link>
					<comments>https://blogit.create.pt/andresilva/2010/01/04/automatic-testing-with-people-picker-in-sharepoint-2007/#respond</comments>
		
		<dc:creator><![CDATA[André Silva]]></dc:creator>
		<pubDate>Mon, 04 Jan 2010 17:23:00 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Automatic Testing]]></category>
		<category><![CDATA[SharePoint]]></category>
		<guid isPermaLink="false">http://blogcreate.azurewebsites.net/andresilva/?p=41</guid>

					<description><![CDATA[<p>I have been working on automatic testing for SharePoint 2007 web applications. In our tests, user interaction with the web interface is simulated by clicking links, selecting entries in combo boxes, typing text and so on, just as a normal user would do. Initially, it is up to a human user to interact with the [&#8230;]</p>
<p>The post <a href="https://blogit.create.pt/andresilva/2010/01/04/automatic-testing-with-people-picker-in-sharepoint-2007/">Automatic Testing with People Picker in SharePoint 2007</a> appeared first on <a href="https://blogit.create.pt">Blog IT</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p align="justify">I have been working on automatic testing for SharePoint 2007 web applications. In our tests, user interaction with the web interface is simulated by clicking links, selecting entries in combo boxes, typing text and so on, just as a normal user would do.    <br />Initially, it is up to a human user to interact with the web application while an external program records all his steps. If all goes well, it is possible to “play” the recorded steps and thus simulate another interaction.     <br />It is also the automatic test’s responsibility to assert that all the expected conditions are met in the end of the test. These assertions determine if a test has passed or if it has failed. This way, repeating previously run tests to ensure backwards compatibility becomes trivial.</p>
<p align="justify">To do this, we’ve been using <a href="http://www.telerik.com/products/web-testing-tools.aspx">Telerik’s WebUI Test Studio</a>. Although this tool is not exactly SharePoint-oriented, it still allows us to test our SharePoint components in a very satisfactory way.     <br />This does not mean, however, that we are able to use all the recorded steps in an unmodified way. In fact, sometimes we have to tweak the recorded steps manually in order to select the proper UI element. For instance, sometimes the recording tool will assume that we are clicking on an html div element instead of the table cell that is contained in it. Thus, what we usually do is try to narrow down the search criteria of the automation framework by using specific attributes of that table cell or if all else fails, we convert that particular recorded step into manual C# code, which we can manipulate the way we see fit.</p>
<p align="justify">In this case, I was trying to simulate a text insertion into the SharePoint people picker control, but the recording tool was not capturing the events correctly.    </p>
<p align="center"><a href="http://img294.imageshack.us/img294/2848/peoplepicker.png" target="_blank"><img decoding="async" style="border-right-width: 0px;float: none;border-top-width: 0px;border-bottom-width: 0px;margin-left: auto;border-left-width: 0px;margin-right: auto" title="People Picker" border="0" alt="People Picker" src="http://img294.imageshack.us/img294/2848/peoplepicker.png" width="356" height="120"></a></p>
<p align="justify">After exhausting all automatic possibilities (by tweaking the automation framework’s search logic of element attributes) I decided to use manual C# code to solve the problem. </p>
<p align="justify"><strong>Step 1:</strong> I recorded an automatic step, by clicking anywhere on the page. This gave me a step that I could transform into code. Then I converted the recorded step into a coded step. </p>
<p align="justify">&#160;</p>
<p align="center"><a title="Convert to Code" href="http://img222.imageshack.us/img222/5394/concerttocode.png" target="_blank"><img decoding="async" style="border-right-width: 0px;float: none;border-top-width: 0px;border-bottom-width: 0px;margin-left: auto;border-left-width: 0px;margin-right: auto" title="Convert to code" border="0" alt="Convert to code" src="http://img222.imageshack.us/img222/5394/concerttocode.png" width="403" height="182"></a></p>
<p>&#160;</p>
<p align="justify">This creates an automatic C# code file which we can edit to suit our needs. The automatic generated code looks something like this: </p>
<pre class="code"><span style="background: #333333;color: #efefef">[CodedStep(</span><span style="background: #333333;color: #ffb66c">@&quot;Click 'td_73'&quot;</span><span style="background: #333333;color: #efefef">)]
</span><span style="background: #333333;color: #6fd0ff">public void </span><span style="background: #333333;color: #efefef">Click_td_73_CodedStep()
{
    </span><span style="background: #333333;color: #00de00">// Click 'td_73'
    </span><span style="background: #333333;color: #efefef">HtmlTableCell td_73 </span><span style="background: #333333;color: #dcdced">= </span><span style="background: #333333;color: #efefef">Pages</span><span style="background: #333333;color: #dcdced">.</span><span style="background: #333333;color: #efefef">Home__AutoTests</span><span style="background: #333333;color: #dcdced">.</span><span style="background: #333333;color: #efefef">td_73;
    td_73</span><span style="background: #333333;color: #dcdced">.</span><span style="background: #333333;color: #efefef">Wait</span><span style="background: #333333;color: #dcdced">.</span><span style="background: #333333;color: #efefef">ForExists(</span><span style="background: #333333;color: red">10000</span><span style="background: #333333;color: #efefef">);
    td_73</span><span style="background: #333333;color: #dcdced">.</span><span style="background: #333333;color: #efefef">Click(</span><span style="background: #333333;color: #6fd0ff">false</span><span style="background: #333333;color: #efefef">);
}</span></pre>
<p><a href="http://11011.net/software/vspaste"></a><a href="http://11011.net/software/vspaste"></a></p>
<p align="justify"><strong>Step 2:</strong> In this case, I wanted to simulate the insertion of text into the people picker. Thus, I used WebUI Test Studio’s Overlay Surface feature to correctly identify the element I was trying to manipulate. </p>
<p align="justify">&#160;</p>
<p align="center"><a href="http://img222.imageshack.us/img222/4909/overlaysurfaceedomexplo.png" target="_blank"><img decoding="async" style="border-right-width: 0px;float: none;border-top-width: 0px;border-bottom-width: 0px;margin-left: auto;border-left-width: 0px;margin-right: auto" title="Overlay Surface and Dom Explorer" border="0" alt="Overlay Surface and Dom Explorer" src="http://img222.imageshack.us/img222/4909/overlaysurfaceedomexplo.png" width="724" height="445"></a> </p>
<p align="justify">&#160;</p>
<p align="justify">By checking the page’s DOM tree, I was able to determine that the element I was trying to manipulate was an HTML textarea, with a div before it. However, when we try to insert text into the textarea element, nothing happens. </p>
<p align="justify"><strong>Step 3:</strong> After a few tests and after discussing the issue in the Telerik support forums, I was able to work around the problem. </p>
<p align="justify">In fact, the element that we want to manipulate isn’t the textarea itself, but the div above it. So, we start by adding the div element to the project Elements pane so we can reference it freely in the C# code. </p>
<p align="justify">&#160;<a href="http://img511.imageshack.us/img511/8789/addtoprojectelements.png" target="_blank"><img decoding="async" style="border-right-width: 0px;float: none;border-top-width: 0px;border-bottom-width: 0px;margin-left: auto;border-left-width: 0px;margin-right: auto" title="Add to Project Elements" border="0" alt="Add to Project Elements" src="http://img511.imageshack.us/img511/8789/addtoprojectelements.png" width="398" height="190"></a> </p>
<p align="justify"><strong>Step 4:</strong> After that, we must insert the following code into the recorded step that was converted to manual C# code ( the idea is to replace the automatically generated C# code that was presented in Step 1). <a href="http://11011.net/software/vspaste"></a></p>
<p align="justify">&#160;</p>
<pre class="code"><span style="background: #333333;color: #efefef">[CodedStep(</span><span style="background: #333333;color: #ffb66c">@&quot;Insert into people picker&quot;</span><span style="background: #333333;color: #efefef">)]
</span><span style="background: #333333;color: #6fd0ff">public void </span><span style="background: #333333;color: #efefef">InsertItemInPeoplePicker_CodedStep()
{
    </span><span style="background: #333333;color: #00de00">//Note: the div_PlaceHolder__UpLevelDiv object represents the div we want to 
    //manipulate. It was added to the Project Elements in Step 3.
    </span><span style="background: #333333;color: #efefef">HtmlControl peoplePicker </span><span style="background: #333333;color: #dcdced">= </span><span style="background: #333333;color: #efefef">Pages</span><span style="background: #333333;color: #dcdced">.</span><span style="background: #333333;color: #efefef">Customize_Workflow</span><span style="background: #333333;color: #dcdced">.</span><span style="background: #333333;color: #efefef">div_PlaceHolder__UpLevelDiv;
    peoplePicker</span><span style="background: #333333;color: #dcdced">.</span><span style="background: #333333;color: #efefef">Wait</span><span style="background: #333333;color: #dcdced">.</span><span style="background: #333333;color: #efefef">ForExists(</span><span style="background: #333333;color: red">10000</span><span style="background: #333333;color: #efefef">);
    peoplePicker</span><span style="background: #333333;color: #dcdced">.</span><span style="background: #333333;color: #efefef">ScrollToVisible(ArtOfTest</span><span style="background: #333333;color: #dcdced">.</span><span style="background: #333333;color: #efefef">WebAii</span><span style="background: #333333;color: #dcdced">.</span><span style="background: #333333;color: #efefef">Core</span><span style="background: #333333;color: #dcdced">.</span><span style="background: #333333;color: #efefef">ScrollToVisibleType</span><span style="background: #333333;color: #dcdced">.</span><span style="background: #333333;color: #efefef">ElementTopAtWindowTop);
    ActiveBrowser</span><span style="background: #333333;color: #dcdced">.</span><span style="background: #333333;color: #efefef">Window</span><span style="background: #333333;color: #dcdced">.</span><span style="background: #333333;color: #efefef">SetFocus();
    peoplePicker</span><span style="background: #333333;color: #dcdced">.</span><span style="background: #333333;color: #efefef">MouseClick();
    Manager</span><span style="background: #333333;color: #dcdced">.</span><span style="background: #333333;color: #efefef">Desktop</span><span style="background: #333333;color: #dcdced">.</span><span style="background: #333333;color: #efefef">KeyBoard</span><span style="background: #333333;color: #dcdced">.</span><span style="background: #333333;color: #efefef">TypeText(</span><span style="background: #333333;color: #ffa448">&quot;testDeveloper&quot;</span><span style="background: #333333;color: #efefef">, </span><span style="background: #333333;color: red">200</span><span style="background: #333333;color: #efefef">);
}</span></pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p align="justify">&#160;</p>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p align="justify">After the replacement of the automatic code with the code presented above, it is possible to insert the text “testDeveloper” into the people picker. And that’s it. </p>
<p align="justify">Hope this helps.</p>
<p>The post <a href="https://blogit.create.pt/andresilva/2010/01/04/automatic-testing-with-people-picker-in-sharepoint-2007/">Automatic Testing with People Picker in SharePoint 2007</a> appeared first on <a href="https://blogit.create.pt">Blog IT</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogit.create.pt/andresilva/2010/01/04/automatic-testing-with-people-picker-in-sharepoint-2007/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
