├── .github
└── workflows
│ └── maven.yml
├── .gitignore
├── CODE_OF_CONDUCT.md
├── LICENSE
├── README.md
├── lombok.config
├── pom.xml
├── src
├── main
│ ├── java
│ │ └── com
│ │ │ └── faisalkhatri
│ │ │ └── okhttppoc
│ │ │ ├── AuthenticationPojo.java
│ │ │ ├── PostData.java
│ │ │ └── TestListener.java
│ └── resources
│ │ └── log4j2.xml
└── test
│ └── java
│ ├── com
│ └── faisalkhatri
│ │ └── okhttppoc
│ │ ├── SetupConfig.java
│ │ ├── TestAuthentication.java
│ │ ├── TestDeleteRequests.java
│ │ ├── TestGetRequestWithRestAssuredConfig.java
│ │ ├── TestGetRequests.java
│ │ ├── TestPatchRequests.java
│ │ ├── TestPostRequest.java
│ │ ├── TestPostRequestBuilderExample.java
│ │ └── TestPutRequests.java
│ └── data
│ └── UserData.java
└── testng.xml
/.github/workflows/maven.yml:
--------------------------------------------------------------------------------
1 | # This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
3 |
4 | name: Java CI with Maven
5 |
6 | on:
7 | push:
8 | branches:
9 | - master
10 | - issue-*
11 |
12 | permissions:
13 | contents: write
14 |
15 | jobs:
16 | build_and_test:
17 | name: Build and Test
18 | runs-on: ubuntu-latest
19 |
20 | steps:
21 | - name: checkout Git repository
22 | uses: actions/checkout@v4
23 |
24 | - name: Install Java and Maven
25 | uses: actions/setup-java@v4
26 | with:
27 | java-version: '21'
28 | distribution: 'adopt'
29 | cache: maven
30 |
31 | - name: Build the Project and run tests
32 | run: mvn clean install
33 |
34 | - name: Test Report
35 | uses: dorny/test-reporter@v2
36 | if: success() || failure()
37 | with:
38 | name: Test Results
39 | path: ${{ github.workspace }}/target/surefire-reports/TEST-TestSuite.xml
40 | reporter: java-junit
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | target/
2 | !.mvn/wrapper/maven-wrapper.jar
3 | !**/src/main/**/target/
4 | !**/src/test/**/target/
5 | test-output/
6 |
7 | ### IntelliJ IDEA ###
8 | .idea/
9 | .idea/modules.xml
10 | .idea/jarRepositories.xml
11 | .idea/compiler.xml
12 | .idea/libraries/
13 | *.iws
14 | *.iml
15 | *.ipr
16 |
17 | ### Eclipse ###
18 | .apt_generated
19 | .classpath
20 | .factorypath
21 | .project
22 | .settings
23 | .springBeans
24 | .sts4-cache
25 |
26 | ### NetBeans ###
27 | /nbproject/private/
28 | /nbbuild/
29 | /dist/
30 | /nbdist/
31 | /.nb-gradle/
32 | build/
33 | !**/src/main/**/build/
34 | !**/src/test/**/build/
35 |
36 | ### VS Code ###
37 | .vscode/
38 |
39 | ### Mac OS ###
40 | .DS_Store
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Contributor Covenant Code of Conduct
2 |
3 | ## Our Pledge
4 |
5 | We as members, contributors, and leaders pledge to make participation in our
6 | community a harassment-free experience for everyone, regardless of age, body
7 | size, visible or invisible disability, ethnicity, sex characteristics, gender
8 | identity and expression, level of experience, education, socio-economic status,
9 | nationality, personal appearance, race, religion, or sexual identity
10 | and orientation.
11 |
12 | We pledge to act and interact in ways that contribute to an open, welcoming,
13 | diverse, inclusive, and healthy community.
14 |
15 | ## Our Standards
16 |
17 | Examples of behavior that contributes to a positive environment for our
18 | community include:
19 |
20 | * Demonstrating empathy and kindness toward other people
21 | * Being respectful of differing opinions, viewpoints, and experiences
22 | * Giving and gracefully accepting constructive feedback
23 | * Accepting responsibility and apologizing to those affected by our mistakes,
24 | and learning from the experience
25 | * Focusing on what is best not just for us as individuals, but for the
26 | overall community
27 |
28 | Examples of unacceptable behavior include:
29 |
30 | * The use of sexualized language or imagery, and sexual attention or
31 | advances of any kind
32 | * Trolling, insulting or derogatory comments, and personal or political attacks
33 | * Public or private harassment
34 | * Publishing others' private information, such as a physical or email
35 | address, without their explicit permission
36 | * Other conduct which could reasonably be considered inappropriate in a
37 | professional setting
38 |
39 | ## Enforcement Responsibilities
40 |
41 | Community leaders are responsible for clarifying and enforcing our standards of
42 | acceptable behavior and will take appropriate and fair corrective action in
43 | response to any behavior that they deem inappropriate, threatening, offensive,
44 | or harmful.
45 |
46 | Community leaders have the right and responsibility to remove, edit, or reject
47 | comments, commits, code, wiki edits, issues, and other contributions that are
48 | not aligned to this Code of Conduct, and will communicate reasons for moderation
49 | decisions when appropriate.
50 |
51 | ## Scope
52 |
53 | This Code of Conduct applies within all community spaces, and also applies when
54 | an individual is officially representing the community in public spaces.
55 | Examples of representing our community include using an official e-mail address,
56 | posting via an official social media account, or acting as an appointed
57 | representative at an online or offline event.
58 |
59 | ## Enforcement
60 |
61 | Instances of abusive, harassing, or otherwise unacceptable behavior may be
62 | reported to the community leaders responsible for enforcement at
63 | mohammadfaisalkhatri@gmail.com.
64 | All complaints will be reviewed and investigated promptly and fairly.
65 |
66 | All community leaders are obligated to respect the privacy and security of the
67 | reporter of any incident.
68 |
69 | ## Enforcement Guidelines
70 |
71 | Community leaders will follow these Community Impact Guidelines in determining
72 | the consequences for any action they deem in violation of this Code of Conduct:
73 |
74 | ### 1. Correction
75 |
76 | **Community Impact**: Use of inappropriate language or other behavior deemed
77 | unprofessional or unwelcome in the community.
78 |
79 | **Consequence**: A private, written warning from community leaders, providing
80 | clarity around the nature of the violation and an explanation of why the
81 | behavior was inappropriate. A public apology may be requested.
82 |
83 | ### 2. Warning
84 |
85 | **Community Impact**: A violation through a single incident or series
86 | of actions.
87 |
88 | **Consequence**: A warning with consequences for continued behavior. No
89 | interaction with the people involved, including unsolicited interaction with
90 | those enforcing the Code of Conduct, for a specified period of time. This
91 | includes avoiding interactions in community spaces as well as external channels
92 | like social media. Violating these terms may lead to a temporary or
93 | permanent ban.
94 |
95 | ### 3. Temporary Ban
96 |
97 | **Community Impact**: A serious violation of community standards, including
98 | sustained inappropriate behavior.
99 |
100 | **Consequence**: A temporary ban from any sort of interaction or public
101 | communication with the community for a specified period of time. No public or
102 | private interaction with the people involved, including unsolicited interaction
103 | with those enforcing the Code of Conduct, is allowed during this period.
104 | Violating these terms may lead to a permanent ban.
105 |
106 | ### 4. Permanent Ban
107 |
108 | **Community Impact**: Demonstrating a pattern of violation of community
109 | standards, including sustained inappropriate behavior, harassment of an
110 | individual, or aggression toward or disparagement of classes of individuals.
111 |
112 | **Consequence**: A permanent ban from any sort of public interaction within
113 | the community.
114 |
115 | ## Attribution
116 |
117 | This Code of Conduct is adapted from the [Contributor Covenant][homepage],
118 | version 2.0, available at
119 | https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
120 |
121 | Community Impact Guidelines were inspired by [Mozilla's code of conduct
122 | enforcement ladder](https://github.com/mozilla/diversity).
123 |
124 | [homepage]: https://www.contributor-covenant.org
125 |
126 | For answers to common questions about this code of conduct, see the FAQ at
127 | https://www.contributor-covenant.org/faq. Translations are available at
128 | https://www.contributor-covenant.org/translations.
129 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "[]"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright [yyyy] [name of copyright owner]
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 | [](https://opensource.org/licenses/Apache-2.0)
3 | [](https://github.com/mfaisalkhatri/OkHttpRestAssuredExamples/actions/workflows/maven.yml)
4 |
5 | ## Don't forget to give a :star: to make the project popular.
6 |
7 | ## :question: What is this Repository about?
8 |
9 | This project is the outcome of my self-learning the API Testing Automation frameworks - Rest-assured and OkHttp.
10 | I heard a lot about Rest-Assured and OkHttp and how it made the QA's life easier by helping them to run all the tedious API tests in an efficient way.
11 |
12 | Hence, I started learning about these frameworks and have documented all my learnings in this repository.
13 |
14 | Checkout my blog [API Testing using RestAssured and OkHttp](https://mfaisalkhatri.github.io/2020/05/29/restassuredokhttp/) where I talk about these frameworks in details
15 | and which one to choose for testing your APIs.
16 |
17 |
18 | ## Details about this Project:
19 |
20 | - This repo contains example codes of API Tests using Rest-Assured and OkHttp.
21 | - Hamcrest Matchers and TestNG asserts are used for assertions.
22 | - TestNG Listeners are used to capture the events in log.
23 | - Log4j is used to capture logs.
24 | - Lombok has been used to generate Getter and Setters automatically for post body requests.
25 | - Rest APIs on https://reqres.in/ have been used for testing.
26 |
27 | ## :writing_hand: Blog Links
28 |
29 | - [What is API Testing?](https://mfaisalkhatri.github.io/2020/08/08/apitesting/)
30 | - [End to End API Testing using Rest-Assured](https://medium.com/@iamfaisalkhatri/end-to-end-api-testing-using-rest-assured-a58c4ea80255)
31 |
32 | ## :movie_camera: Tutorial Video
33 |
34 | [](https://www.youtube.com/watch?v=xLKpdQE0oKY&t=1s)
35 | [](https://www.youtube.com/live/AFQSolEeu74?si=8WROMbunjUuzqqQj&t=1)
36 |
37 |
38 | ## :question: Need Assistance?
39 |
40 | - Discuss your queries by writing to me @ `mohammadfaisalkhatri@gmail.com`
41 | OR ping me on any of the social media sites using the below link:
42 | - [Linktree](https://linktr.ee/faisalkhatri)
43 |
44 | ## :computer: Paid Trainings
45 |
46 | Contact me for Paid trainings related to Test Automation and Software Testing,
47 | mail me @`mohammadfaisalkhatri@gmail.com` or ping me on [LinkedIn](https://www.linkedin.com/in/faisalkhatri/)
48 |
49 | ## :thought_balloon: Checkout the blogs related to Software Testing and Test Automation on the following links:
50 | - [Medium Blogs](https://medium.com/@iamfaisalkhatri)
51 | - [LambdaTest Blogs](https://www.lambdatest.com/blog/author/mfaisalkhatri/)
52 | - [My Website](https://mfaisalkhatri.github.io)
53 |
54 | ## Subscribe to my [YouTube Channel](https://www.youtube.com/@faisalkhatriqa)
--------------------------------------------------------------------------------
/lombok.config:
--------------------------------------------------------------------------------
1 | config.stopBubbling = true
2 | lombok.addLombokGeneratedAnnotation = true
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 | 4.0.0
7 |
8 | com.faisalkhatri
9 | okhttppoc
10 | 0.0.1-SNAPSHOT
11 |
12 | okhttppoc
13 | https://mfaisalkhatri.github.io
14 |
15 |
16 | 7.11.0
17 | 4.9.3
18 | 5.5.5
19 | 1.3
20 | 2.25.1
21 | 2.25.1
22 | 1.1.1
23 | 1.18.38
24 | 2.19.2
25 | 20250517
26 | 1.0.2
27 | 3.14.0
28 | 3.5.3
29 | -Dfile.encoding=UTF-8 -Xdebug -Xnoagent
30 | 3.8.1
31 | 17
32 | UTF-8
33 | testng.xml
34 | UTF-8
35 |
36 |
37 |
38 | org.testng
39 | testng
40 | ${testng.version}
41 |
42 |
43 | com.squareup.okhttp3
44 | okhttp
45 | ${okhttp3.version}
46 | provided
47 |
48 |
49 | io.rest-assured
50 | rest-assured
51 | ${restassured.version}
52 |
53 |
54 | org.hamcrest
55 | hamcrest-all
56 | ${hamcrest.version}
57 |
58 |
59 | org.apache.logging.log4j
60 | log4j-core
61 | ${log4j.core.version}
62 |
63 |
64 | org.apache.logging.log4j
65 | log4j-api
66 | ${log4j.api.version}
67 |
68 |
69 | com.googlecode.json-simple
70 | json-simple
71 | ${jsonsimple.version}
72 |
73 |
74 | org.projectlombok
75 | lombok
76 | ${lombok.version}
77 | provided
78 |
79 |
80 | com.fasterxml.jackson.core
81 | jackson-databind
82 | ${jackson.databind.version}
83 |
84 |
85 | org.json
86 | json
87 | ${orgjson.version}
88 |
89 |
90 | com.github.javafaker
91 | javafaker
92 | ${javafaker.version}
93 |
94 |
95 |
96 |
97 |
98 | org.apache.maven.plugins
99 | maven-compiler-plugin
100 | ${maven.compiler.version}
101 |
102 | ${java.release.version}
103 | ${maven.source.encoding}
104 | true
105 |
106 |
107 |
108 | org.apache.maven.plugins
109 | maven-surefire-plugin
110 | ${surefire-version}
111 |
112 |
113 |
114 | test
115 |
116 |
117 |
118 |
119 | false
120 |
121 |
122 | usedefaultlisteners
123 | false
124 |
125 |
126 |
127 | ${suite-xml}
128 |
129 | ${argLine}
130 |
131 |
132 |
133 | org.apache.maven.plugins
134 | maven-dependency-plugin
135 | ${maven.dependency.version}
136 |
137 |
138 | copy-dependencies
139 | package
140 |
141 | copy-dependencies
142 |
143 |
144 | lombok
145 |
146 |
147 |
148 |
149 |
150 |
151 |
--------------------------------------------------------------------------------
/src/main/java/com/faisalkhatri/okhttppoc/AuthenticationPojo.java:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright (c) 2022 Mohammad Faisal Khatri
3 |
4 | Licensed under the Apache License, Version 2.0 (the "License");
5 | you may not use this file except in compliance with the License.
6 | You may obtain a copy of the License at
7 |
8 | http://www.apache.org/licenses/LICENSE-2.0
9 |
10 | Unless required by applicable law or agreed to in writing, software
11 | distributed under the License is distributed on an "AS IS" BASIS,
12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | See the License for the specific language governing permissions and
14 | limitations under the License.
15 | */
16 |
17 | package com.faisalkhatri.okhttppoc;
18 |
19 | import lombok.Data;
20 |
21 | /**
22 | * @author Faisal Khatri
23 | * @since Aug 2, 2020
24 | */
25 | @Data
26 | public class AuthenticationPojo {
27 |
28 | private String email;
29 | private String password;
30 |
31 | /**
32 | * @param email
33 | * @param password
34 | *
35 | * @author Faisal Khatri
36 | */
37 | public AuthenticationPojo (String email, String password) {
38 | this.email = email;
39 | this.password = password;
40 | }
41 | }
--------------------------------------------------------------------------------
/src/main/java/com/faisalkhatri/okhttppoc/PostData.java:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright (c) 2022 Mohammad Faisal Khatri
3 |
4 | Licensed under the Apache License, Version 2.0 (the "License");
5 | you may not use this file except in compliance with the License.
6 | You may obtain a copy of the License at
7 |
8 | http://www.apache.org/licenses/LICENSE-2.0
9 |
10 | Unless required by applicable law or agreed to in writing, software
11 | distributed under the License is distributed on an "AS IS" BASIS,
12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | See the License for the specific language governing permissions and
14 | limitations under the License.
15 | */
16 |
17 | package com.faisalkhatri.okhttppoc;
18 |
19 | import lombok.Getter;
20 | import lombok.Setter;
21 |
22 | /**
23 | * @since Mar 7, 2020
24 | */
25 | @Getter
26 | @Setter
27 | public class PostData {
28 |
29 | private final String job;
30 | private final String name;
31 |
32 | /**
33 | * @param name
34 | * @param job
35 | *
36 | * @author Faisal Khatri
37 | */
38 | public PostData (final String name, final String job) {
39 | this.name = name;
40 | this.job = job;
41 |
42 | }
43 | }
--------------------------------------------------------------------------------
/src/main/java/com/faisalkhatri/okhttppoc/TestListener.java:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright (c) 2022 Mohammad Faisal Khatri
3 |
4 | Licensed under the Apache License, Version 2.0 (the "License");
5 | you may not use this file except in compliance with the License.
6 | You may obtain a copy of the License at
7 |
8 | http://www.apache.org/licenses/LICENSE-2.0
9 |
10 | Unless required by applicable law or agreed to in writing, software
11 | distributed under the License is distributed on an "AS IS" BASIS,
12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | See the License for the specific language governing permissions and
14 | limitations under the License.
15 | */
16 |
17 | package com.faisalkhatri.okhttppoc;
18 |
19 | import static org.apache.commons.lang3.StringUtils.repeat;
20 |
21 | import org.apache.logging.log4j.LogManager;
22 | import org.apache.logging.log4j.Logger;
23 | import org.testng.ITestContext;
24 | import org.testng.ITestListener;
25 | import org.testng.ITestResult;
26 |
27 | /**
28 | * @since Mar 8, 2020
29 | */
30 | public class TestListener implements ITestListener {
31 | Logger log = LogManager.getLogger (TestListener.class);
32 |
33 | @Override
34 | public void onFinish (final ITestContext context) {
35 | logMessage ("Test Execution Completed Successfully for all tests!!" + context.getSuite ()
36 | .getAllMethods ());
37 |
38 | }
39 |
40 | @Override
41 | public void onTestFailure (final ITestResult result) {
42 | logMessage ("Test Failed!!!!" + result.getName ());
43 | }
44 |
45 | @Override
46 | public void onTestStart (final ITestResult result) {
47 | logMessage ("Test Execution Started...." + result.getName ());
48 | }
49 |
50 | @Override
51 | public void onTestSuccess (final ITestResult result) {
52 | logMessage ("Test Passed Successfully." + result.getName ());
53 |
54 | }
55 |
56 | private void logMessage (final String message) {
57 | this.log.info ("\n");
58 | this.log.info (repeat ("=", 75));
59 | this.log.info (message);
60 | this.log.info (repeat ("=", 75));
61 | this.log.info ("\n");
62 | }
63 | }
--------------------------------------------------------------------------------
/src/main/resources/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/test/java/com/faisalkhatri/okhttppoc/SetupConfig.java:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright (c) 2022 Mohammad Faisal Khatri
3 |
4 | Licensed under the Apache License, Version 2.0 (the "License");
5 | you may not use this file except in compliance with the License.
6 | You may obtain a copy of the License at
7 |
8 | http://www.apache.org/licenses/LICENSE-2.0
9 |
10 | Unless required by applicable law or agreed to in writing, software
11 | distributed under the License is distributed on an "AS IS" BASIS,
12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | See the License for the specific language governing permissions and
14 | limitations under the License.
15 | */
16 |
17 | package com.faisalkhatri.okhttppoc;
18 |
19 | import static org.hamcrest.Matchers.lessThan;
20 |
21 | import io.restassured.RestAssured;
22 | import io.restassured.builder.RequestSpecBuilder;
23 | import io.restassured.builder.ResponseSpecBuilder;
24 | import io.restassured.filter.log.RequestLoggingFilter;
25 | import io.restassured.filter.log.ResponseLoggingFilter;
26 | import io.restassured.specification.RequestSpecification;
27 | import io.restassured.specification.ResponseSpecification;
28 | import org.testng.annotations.BeforeClass;
29 |
30 | public class SetupConfig {
31 |
32 | @BeforeClass
33 | public void setup () {
34 | RestAssured.baseURI = "https://reqres.in/";
35 | RequestSpecification request = new RequestSpecBuilder ().addHeader ("Content-Type", "application/json")
36 | .addHeader ("Accept", "application/json")
37 | .addFilter (new RequestLoggingFilter ())
38 | .addFilter (new ResponseLoggingFilter ())
39 | .build ();
40 |
41 | ResponseSpecification response = new ResponseSpecBuilder ().expectResponseTime (lessThan (5000L))
42 | .build ();
43 |
44 | RestAssured.requestSpecification = request;
45 | RestAssured.responseSpecification = response;
46 |
47 | }
48 | }
--------------------------------------------------------------------------------
/src/test/java/com/faisalkhatri/okhttppoc/TestAuthentication.java:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright (c) 2022 Mohammad Faisal Khatri
3 |
4 | Licensed under the Apache License, Version 2.0 (the "License");
5 | you may not use this file except in compliance with the License.
6 | You may obtain a copy of the License at
7 |
8 | http://www.apache.org/licenses/LICENSE-2.0
9 |
10 | Unless required by applicable law or agreed to in writing, software
11 | distributed under the License is distributed on an "AS IS" BASIS,
12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | See the License for the specific language governing permissions and
14 | limitations under the License.
15 | */
16 |
17 | package com.faisalkhatri.okhttppoc;
18 |
19 | import static io.restassured.RestAssured.given;
20 | import static org.hamcrest.Matchers.notNullValue;
21 |
22 | import java.util.ArrayList;
23 | import java.util.HashMap;
24 | import java.util.Iterator;
25 | import java.util.List;
26 | import java.util.Map;
27 |
28 | import io.restassured.http.ContentType;
29 | import org.json.JSONObject;
30 | import org.testng.annotations.DataProvider;
31 | import org.testng.annotations.Test;
32 |
33 | /**
34 | * @author Faisal Khatri
35 | * @since Aug 2, 2020
36 | */
37 | public class TestAuthentication {
38 |
39 | private static final String URL = "https://reqres.in";
40 |
41 | /**
42 | * @param email
43 | * @param password
44 | *
45 | * @return auth details
46 | *
47 | * @author Faisal Khatri
48 | * @since Aug 2, 2020
49 | */
50 | public static Map getToken (String email, String password) {
51 | final AuthenticationPojo requestBody = new AuthenticationPojo (email, password);
52 | final String response = given ().contentType (ContentType.JSON)
53 | .header ("x-api-key", "reqres-free-v1")
54 | .body (requestBody)
55 | .when ()
56 | .log ()
57 | .all ()
58 | .post (URL + "/api/register")
59 | .then ()
60 | .assertThat ()
61 | .statusCode (200)
62 | .log ()
63 | .all ()
64 | .body ("id", notNullValue ())
65 | .and ()
66 | .body ("token", notNullValue ())
67 | .and ()
68 | .extract ()
69 | .response ()
70 | .asString ();
71 |
72 | final JSONObject responseObject = new JSONObject (response);
73 | final Map responseMap = new HashMap<> ();
74 | responseMap.put ("id", responseObject.getInt ("id"));
75 | responseMap.put ("token", responseObject.getString ("token"));
76 | return responseMap;
77 | }
78 |
79 | /**
80 | * @return test data
81 | *
82 | * @author Faisal Khatri
83 | * @since Aug 2, 2020
84 | */
85 | @DataProvider
86 | public Iterator