RESTful APIs and Testing
A software application product has various software layers such, as the user interface (UI), the business logic layer, middleware, and a database. Testing and certification primarily focuses on data integration tests on the Business layer. API testing is software testing that involves direct API testing, unlike other generic tests, which primarily involve the UI:
The preceding diagram depicts the typical layers of software, with API testing on the Business layer and the functional or UI testing on the Presentation layer.
Understanding API testing approaches
Agreeing on an approach for API testing when beginning API development is an essential API strategy. Let’s look at a few principles of API testing:
- Clear definition of the scope and a good understanding of the functionality of the API
- Common testing methodologies such as boundary analysis and equivalence classes are part of API test cases
- Plan, define, and be ready with input parameters, zero, and sample data for the API
- Determine and compare expected and actual results, and ensure that there are no differences
API testing types
In this section, we will review the various categories of API testing.
Unit tests
Tests that involve the validation of individual operations are unit tests. The following is one of the sample code snippets of a specific unit test case that validates getting all the investors from the API:
@Test
public void fetchAllInvestors() throws Exception{
RequestBuilder requestBuilder =
MockMvcRequestBuilders.get(
"/investors").accept(
MediaType.APPLICATION_JSON);
MvcResult result =
mockMvc.perform(requestBuilder).andReturn();
MockHttpServletResponse response =
result.getResponse();
}
API validation tests
All software needs quick evaluation and to assert its purpose of creation. The validation tests need to be run for every function that is developed, at the end of the development process. Unlike unit tests, which focus on particular pieces or functions of the API, validation tests are a higher-level consideration, answering a set of questions so that the development can move on to the next phase.
A set of questions for validation tests could be the following:
- A product-specific question, such as, is it the necessary function that is asked for?
- A behavioral question, such as, is the developed function doing what is intended?
- An efficiency-related question, such as, is the intended function using the necessary code, in an independent and optimized manner?
All of these questions, in essence, serve to validate the API in line with the agreed acceptance criteria and also to ensure its adherence to standards regarding the delivery of expected end goals and meeting user needs and requirements flawlessly.
Functional tests
Tests that involve specific functions of the APIs and their code base are functional tests. Validating the count of active users through the API, regression tests, and test case execution come under functional tests. The following screenshot demonstrates one such functional testing example of investor service validation for user authentication:
UI or end-to-end tests
Tests that involve and assert end-to-end scenarios, including GUI functions and API functions, which in most of the cases, validate every transaction of an application, are grouped under end-to-end tests.
Load testing
As we know, an increase in the number of end users should not affect the performance of the functions of an application. Load testing will uncover such issues and also validate the performance of an API in normal conditions too.
Runtime error detection tests
Tests that help monitor the application and detect problems such as race conditions, exceptions, and resource leaks belong in the runtime error tests category. The following points capture a brief about those factors.
Monitoring APIs
Tests for various implementation errors, handler failures, and other inherent concerns inside the API code base and ensures it does not have any holes that would lead to application insecurity.
Execution errors
Valid requests to the API return responses and asserting them for expected valid responses is common; however, asserting invalid requests for expected failures is also essential as part of an API testing strategy and those tests come under execution errors:
The preceding screenshot depicts an example of expecting an error when the user gives an ID that is not present on the system.
Resource leaks
Negative tests to validate the underlying API resource malfunctions by submitting invalid requests to the API. The resources, in this case, are memory, data, insecurities, timeout operations, and so on.
Error detection
Detect network communication failures. Authentication failures from giving the wrong credentials is an example error detection scenario. These are tests ensure the errors are captured and then resolved as well:
Here’s an authentication error, and the previous screenshot depicts this, as the code returns 401 (as it should); this is an example of an error detection test.
If you found this article interesting, you can explore Hands-On RESTful API Design Patterns and Best Practices to build effective RESTful APIs for enterprise with design patterns and REST framework’s out-of-the-box capabilities. Hands-On RESTful API Design Patterns and Best Practices helps you explore the concepts of service-oriented architecture (SOA), event-driven architecture (EDA), and resource-oriented architecture (ROA).
Theme Development in Liferay
LiferayUI blog will help you make you own theme to customize your liferay’s portal appearance and impression. With themes, you can alter the user interface completely that it becomes difficult yet impossible to identify that the site is running on Liferay.
Liferay’s theme inherits the styling, images, and templates from any of the built-in themes. This saves your time and keeps your themes smaller and less cluttered, because your theme contains only its own resources, using defaults for the rest, like Templates,Js,Images and CSS.
Theme Development in liferay is easy to create. You can start by making changes in the CSS files. When you need to customize themes more extensively, you can change the HTML Templates.
If you hope to become a Liferay theme development and customization expert, there are several technologies you should know:
- CSS: Create a new theme simply by modifying a CSS file.
- Velocity: Customize the markup generated by the theme.
- JavaScript: Add special behaviors to your theme.
- XML: Some theme settings are specified in XML.
Creating a Theme
Our theme will be named HM Blue, so the project name (without spaces) is hm-blue, and the display name (which can have spaces) is HM-Blue. Let’s create the theme using Liferay Developer Studio first, and then with the terminal (Command Prompt).
Using Developer Studio:
- Go to File → New → Liferay Project.
- Fill in HM-blue for the Project name and HM Blue for the Display name.
- Select the build type, Plugins SDK, and Liferay runtime.
See this link if you Using Liferay IDE with Maven for more information. Otherwise, select the Ant build type.
For more information, see sections Installing the SDK and Setting Up Liferay IDE.
Select Theme for your Plugin type.
Click Next.
Figure 1 : Make sure to select the Theme plugin type for your theme.
Setting a base Theme
Now you have to Select a theme parent. In Liferay you have two base theme, all themes are built on the top of it, which is assign style and unstyled. Your newly created theme is based on these by default, but they contain very limited styling. You can take advantage of an existing theme’s styling by setting the theme of your choice as the base for your theme. styled theme providing the most basic elements. When you set a different base theme, it’s added on top of styled and overrides the default styling wherever there are differences. After the base themes are added, your own custom styling is affixed on top.
Figure 1.1 : Make sure to select the Theme plugin type for your theme.
By Default it’s select _styled theme. Adding together in to the _styled theme, from the unstyled theme you can select the inherit, which includes no styling. There’s also the classic theme that has a smooth look and feel and works well. For now, select _styled as the theme parent.
Select your theme’s framework. You can select the Freemarker or Velocity template frameworks for your theme. Or you can select JSP as your theme’s framework. For now, select _Velocity framework template framework. See figure 1.1
Click Finish.
To specify a base theme, edit the build.xml file for your theme and change _styled in to the name of any existing theme that’s installed or in your Plugins SDK. Now that your base theme is set, let’s deploy the theme to your portal instance.
Theme Deployment
If you’re already familiar with portlet deployment then theme deployment will be a piece of cake! You can deploy your theme in Developer Studio or the terminal (Command Prompt).
Deploying in Developer Studio: Click and drag your theme project onto your server.
After deploying, your server outputs messages in console to indicating your plugin is available for use.
- Reading plugin package for hm-blue-theme
- Registering themes for hm-blue-theme
- 1 theme for hm-blue-theme is available for use
Let’s apply your theme to a page:
- Go to your web browser and log in to the portal.
- Hover over Manage at the top of the page and click on Page.
- Directly underneath the words Manage Pages, select the Look and Feel tab. Click on your theme to activate it.
Now that you’ve built and redeployed a theme, let’s see the hierarchy of theme.