├── .gitignore
├── .tartufo
└── exclude-patterns.txt
├── LICENSE
├── README.md
├── bin
├── postman-runner-1.0.3-jar-with-dependencies.jar
├── postman-runner-2.0.2-jar-with-dependencies.jar
├── postman-runner.sh
├── postman-tools
└── stub.sh
├── build.sh
├── pom.xml
├── src
├── main
│ ├── java
│ │ └── co
│ │ │ └── poynt
│ │ │ └── postman
│ │ │ ├── CmdBase.java
│ │ │ ├── Main.java
│ │ │ ├── PostmanRunnerTools.java
│ │ │ ├── VersionProvider.java
│ │ │ ├── js
│ │ │ └── PostmanJsVariables.java
│ │ │ ├── model
│ │ │ ├── PostmanBody.java
│ │ │ ├── PostmanCollection.java
│ │ │ ├── PostmanEnvValue.java
│ │ │ ├── PostmanEnvironment.java
│ │ │ ├── PostmanEvent.java
│ │ │ ├── PostmanFolder.java
│ │ │ ├── PostmanHeader.java
│ │ │ ├── PostmanInfo.java
│ │ │ ├── PostmanItem.java
│ │ │ ├── PostmanReader.java
│ │ │ ├── PostmanRequest.java
│ │ │ ├── PostmanScript.java
│ │ │ ├── PostmanUrl.java
│ │ │ ├── PostmanUrlEncoded.java
│ │ │ ├── PostmanVariables.java
│ │ │ └── PoyntHttpHeaders.java
│ │ │ ├── runner
│ │ │ ├── HaltTestFolderException.java
│ │ │ ├── PostmanCollectionRunner.java
│ │ │ ├── PostmanHttpResponse.java
│ │ │ ├── PostmanRequestRunner.java
│ │ │ └── PostmanRunResult.java
│ │ │ └── testrail
│ │ │ ├── NewmanTestrailRunReporter.java
│ │ │ ├── PostmanTestrailSyncer.java
│ │ │ ├── TestRailConstants.java
│ │ │ └── TestRailUtil.java
│ └── resources
│ │ └── logback.xml
└── test
│ ├── java
│ └── co
│ │ └── poynt
│ │ └── postman
│ │ └── test
│ │ ├── TestPostman.java
│ │ └── TestPostmanVariables.java
│ └── resources
│ ├── PostmanRunnerRegression.postman_collection.json
│ └── PostmanRunnerRegression.postman_environment.json
└── tartufo.toml
/.gitignore:
--------------------------------------------------------------------------------
1 | target/
2 | .settings
3 | .classpath
4 | .project
5 | .idea/*
6 | test-output/*
--------------------------------------------------------------------------------
/.tartufo/exclude-patterns.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdcorp-commerce/postman-runner/997b31625338418381bfd24899768c8e1e8d940c/.tartufo/exclude-patterns.txt
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 |
2 | Apache License
3 | Version 2.0, January 2004
4 | http://www.apache.org/licenses/
5 |
6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7 |
8 | 1. Definitions.
9 |
10 | "License" shall mean the terms and conditions for use, reproduction,
11 | and distribution as defined by Sections 1 through 9 of this document.
12 |
13 | "Licensor" shall mean the copyright owner or entity authorized by
14 | the copyright owner that is granting the License.
15 |
16 | "Legal Entity" shall mean the union of the acting entity and all
17 | other entities that control, are controlled by, or are under common
18 | control with that entity. For the purposes of this definition,
19 | "control" means (i) the power, direct or indirect, to cause the
20 | direction or management of such entity, whether by contract or
21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
22 | outstanding shares, or (iii) beneficial ownership of such entity.
23 |
24 | "You" (or "Your") shall mean an individual or Legal Entity
25 | exercising permissions granted by this License.
26 |
27 | "Source" form shall mean the preferred form for making modifications,
28 | including but not limited to software source code, documentation
29 | source, and configuration files.
30 |
31 | "Object" form shall mean any form resulting from mechanical
32 | transformation or translation of a Source form, including but
33 | not limited to compiled object code, generated documentation,
34 | and conversions to other media types.
35 |
36 | "Work" shall mean the work of authorship, whether in Source or
37 | Object form, made available under the License, as indicated by a
38 | copyright notice that is included in or attached to the work
39 | (an example is provided in the Appendix below).
40 |
41 | "Derivative Works" shall mean any work, whether in Source or Object
42 | form, that is based on (or derived from) the Work and for which the
43 | editorial revisions, annotations, elaborations, or other modifications
44 | represent, as a whole, an original work of authorship. For the purposes
45 | of this License, Derivative Works shall not include works that remain
46 | separable from, or merely link (or bind by name) to the interfaces of,
47 | the Work and Derivative Works thereof.
48 |
49 | "Contribution" shall mean any work of authorship, including
50 | the original version of the Work and any modifications or additions
51 | to that Work or Derivative Works thereof, that is intentionally
52 | submitted to Licensor for inclusion in the Work by the copyright owner
53 | or by an individual or Legal Entity authorized to submit on behalf of
54 | the copyright owner. For the purposes of this definition, "submitted"
55 | means any form of electronic, verbal, or written communication sent
56 | to the Licensor or its representatives, including but not limited to
57 | communication on electronic mailing lists, source code control systems,
58 | and issue tracking systems that are managed by, or on behalf of, the
59 | Licensor for the purpose of discussing and improving the Work, but
60 | excluding communication that is conspicuously marked or otherwise
61 | designated in writing by the copyright owner as "Not a Contribution."
62 |
63 | "Contributor" shall mean Licensor and any individual or Legal Entity
64 | on behalf of whom a Contribution has been received by Licensor and
65 | subsequently incorporated within the Work.
66 |
67 | 2. Grant of Copyright License. Subject to the terms and conditions of
68 | this License, each Contributor hereby grants to You a perpetual,
69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70 | copyright license to reproduce, prepare Derivative Works of,
71 | publicly display, publicly perform, sublicense, and distribute the
72 | Work and such Derivative Works in Source or Object form.
73 |
74 | 3. Grant of Patent License. Subject to the terms and conditions of
75 | this License, each Contributor hereby grants to You a perpetual,
76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77 | (except as stated in this section) patent license to make, have made,
78 | use, offer to sell, sell, import, and otherwise transfer the Work,
79 | where such license applies only to those patent claims licensable
80 | by such Contributor that are necessarily infringed by their
81 | Contribution(s) alone or by combination of their Contribution(s)
82 | with the Work to which such Contribution(s) was submitted. If You
83 | institute patent litigation against any entity (including a
84 | cross-claim or counterclaim in a lawsuit) alleging that the Work
85 | or a Contribution incorporated within the Work constitutes direct
86 | or contributory patent infringement, then any patent licenses
87 | granted to You under this License for that Work shall terminate
88 | as of the date such litigation is filed.
89 |
90 | 4. Redistribution. You may reproduce and distribute copies of the
91 | Work or Derivative Works thereof in any medium, with or without
92 | modifications, and in Source or Object form, provided that You
93 | meet the following conditions:
94 |
95 | (a) You must give any other recipients of the Work or
96 | Derivative Works a copy of this License; and
97 |
98 | (b) You must cause any modified files to carry prominent notices
99 | stating that You changed the files; and
100 |
101 | (c) You must retain, in the Source form of any Derivative Works
102 | that You distribute, all copyright, patent, trademark, and
103 | attribution notices from the Source form of the Work,
104 | excluding those notices that do not pertain to any part of
105 | the Derivative Works; and
106 |
107 | (d) If the Work includes a "NOTICE" text file as part of its
108 | distribution, then any Derivative Works that You distribute must
109 | include a readable copy of the attribution notices contained
110 | within such NOTICE file, excluding those notices that do not
111 | pertain to any part of the Derivative Works, in at least one
112 | of the following places: within a NOTICE text file distributed
113 | as part of the Derivative Works; within the Source form or
114 | documentation, if provided along with the Derivative Works; or,
115 | within a display generated by the Derivative Works, if and
116 | wherever such third-party notices normally appear. The contents
117 | of the NOTICE file are for informational purposes only and
118 | do not modify the License. You may add Your own attribution
119 | notices within Derivative Works that You distribute, alongside
120 | or as an addendum to the NOTICE text from the Work, provided
121 | that such additional attribution notices cannot be construed
122 | as modifying the License.
123 |
124 | You may add Your own copyright statement to Your modifications and
125 | may provide additional or different license terms and conditions
126 | for use, reproduction, or distribution of Your modifications, or
127 | for any such Derivative Works as a whole, provided Your use,
128 | reproduction, and distribution of the Work otherwise complies with
129 | the conditions stated in this License.
130 |
131 | 5. Submission of Contributions. Unless You explicitly state otherwise,
132 | any Contribution intentionally submitted for inclusion in the Work
133 | by You to the Licensor shall be under the terms and conditions of
134 | this License, without any additional terms or conditions.
135 | Notwithstanding the above, nothing herein shall supersede or modify
136 | the terms of any separate license agreement you may have executed
137 | with Licensor regarding such Contributions.
138 |
139 | 6. Trademarks. This License does not grant permission to use the trade
140 | names, trademarks, service marks, or product names of the Licensor,
141 | except as required for reasonable and customary use in describing the
142 | origin of the Work and reproducing the content of the NOTICE file.
143 |
144 | 7. Disclaimer of Warranty. Unless required by applicable law or
145 | agreed to in writing, Licensor provides the Work (and each
146 | Contributor provides its Contributions) on an "AS IS" BASIS,
147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148 | implied, including, without limitation, any warranties or conditions
149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150 | PARTICULAR PURPOSE. You are solely responsible for determining the
151 | appropriateness of using or redistributing the Work and assume any
152 | risks associated with Your exercise of permissions under this License.
153 |
154 | 8. Limitation of Liability. In no event and under no legal theory,
155 | whether in tort (including negligence), contract, or otherwise,
156 | unless required by applicable law (such as deliberate and grossly
157 | negligent acts) or agreed to in writing, shall any Contributor be
158 | liable to You for damages, including any direct, indirect, special,
159 | incidental, or consequential damages of any character arising as a
160 | result of this License or out of the use or inability to use the
161 | Work (including but not limited to damages for loss of goodwill,
162 | work stoppage, computer failure or malfunction, or any and all
163 | other commercial damages or losses), even if such Contributor
164 | has been advised of the possibility of such damages.
165 |
166 | 9. Accepting Warranty or Additional Liability. While redistributing
167 | the Work or Derivative Works thereof, You may choose to offer,
168 | and charge a fee for, acceptance of support, warranty, indemnity,
169 | or other liability obligations and/or rights consistent with this
170 | License. However, in accepting such obligations, You may act only
171 | on Your own behalf and on Your sole responsibility, not on behalf
172 | of any other Contributor, and only if You agree to indemnify,
173 | defend, and hold each Contributor harmless for any liability
174 | incurred by, or claims asserted against, such Contributor by reason
175 | of your accepting any such warranty or additional liability.
176 |
177 | END OF TERMS AND CONDITIONS
178 |
179 | APPENDIX: How to apply the Apache License to your work.
180 |
181 | To apply the Apache License to your work, attach the following
182 | boilerplate notice, with the fields enclosed by brackets "[]"
183 | replaced with your own identifying information. (Don't include
184 | the brackets!) The text should be enclosed in the appropriate
185 | comment syntax for the file format. We also recommend that a
186 | file or class name and description of purpose be included on the
187 | same "printed page" as the copyright notice for easier
188 | identification within third-party archives.
189 |
190 | Copyright [2016] [Poynt Co]
191 |
192 | Licensed under the Apache License, Version 2.0 (the "License");
193 | you may not use this file except in compliance with the License.
194 | You may obtain a copy of the License at
195 |
196 | http://www.apache.org/licenses/LICENSE-2.0
197 |
198 | Unless required by applicable law or agreed to in writing, software
199 | distributed under the License is distributed on an "AS IS" BASIS,
200 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201 | See the License for the specific language governing permissions and
202 | limitations under the License.
203 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Postman Tools
2 |
3 | A module to work with [POSTMAN](https://www.getpostman.com/) collections.
4 |
5 | [TestRail](https://www.gurock.com/testrail/) test case sync integration was added as of version 3.x.x.
6 |
7 | # Command-Line Runner
8 |
9 | ## Postman Runner
10 |
11 | To run a POSTMAN collection:
12 |
13 | ```
14 | cd bin
15 | ./postman-tools run --collection=[POSTMAN_COLLECTION_FILE] --environment=[POSTMAN_ENVIRONMENT_FILE] --folder="[POSTMAN_FOLDER_TO_RUN]" --haltonerror=false
16 | ```
17 |
18 | Run `postman-tools` without any argument to see all the options.
19 |
20 | ## TestRail
21 |
22 | To sync your postman collection to TestRail, run the following:
23 |
24 | ```
25 | cd bin
26 | ./postman-tools sync-testrail --testrail=[TR_HOST] --collection=my_postman_collection.json --project=[TR_PROJECT_ID] --user=[TR_USERNAME] --api-key=[TR_API_KEY]
27 | ```
28 |
29 | The only requirement is that you have already created your TestRail project and you know the ID. Note remove the `P` prefix from your project id when specifying it in the `--project` argument.
30 |
31 | The mapping between postman and TestRails are as follow:
32 |
33 | |*Postman*|*TestRail*|
34 | |---------|----------|
35 | |Collection|Suite|
36 | |Folder|Section|
37 | |Request|Case|
38 | |Request body|Case custom field `custom_steps`|
39 | |Request Test|Case custom field `custom_expected`|
40 |
41 | Unfortunately, since TestRail API does not permit external ID assignment for any of their API object model, all matching are based on the object name.
42 |
43 | **IMPORTANT**: since we are matching all objects by name with the above structure, you must NOT:
44 |
45 | 1. Have multiple request with same name in a single folder.
46 | 2. Have folder-in-folder structure.
47 |
48 | ## Newman to TestRail Run Reporting
49 |
50 | If you are using `newman` to run your collections, you can use postman-tools to parse the resulting JSON report and send the results to TestRail. This is similar to the existing node impl of [newman-reporter-testrail](https://www.npmjs.com/package/newman-reporter-testrail). However, this tool does not require you to modify your collection's test at all since it maps all results to the name of the request in your collection.
51 |
52 | ```
53 | cd bin
54 | ./postman-tools newman-report-testrail --testrail=[TR_HOST] --project=[TR_PROJECT_ID] --user=[TR_USERNAME] --api-key=[TR_API_KEY] --collection=my_postman_collection.json --newman=/path/to/newman-run-report.json
55 | ```
56 | **IMPORTANT**: again, since the tool is trying to match your run result with the cases in your TestRail. The following is important:
57 |
58 | 1. The ordering of your request in postman must match the ordering of the cases in your test suite in TestRail.
59 | 2. The number of request must match exactly number of cases in your test suite in TestRail. And all names of request and cases must match.
60 |
61 | # Invoking from Java
62 |
63 | Add the following maven dependency:
64 |
65 | ```xml
66 |
67 | co.poynt.postman.runner
68 | postman-runner
69 | X.X.X
70 | test
71 |
72 | ```
73 | where X.X.X is the latest version of this artifact.
74 |
75 | 3.0.0 is currently the latest version of postman-runner.
76 |
77 | From your test driver class, make the following call:
78 |
79 | ```java
80 | public void testRunPostman() throws Exception {
81 | PostmanCollectionRunner cr = new PostmanCollectionRunner();
82 |
83 | boolean isSuccessful = cr.runCollection(
84 | "classpath:MyTestCollection.postman_collection",
85 | "classpath:MyTestCollection.postman_environment",
86 | "My use cases", false).isSuccessful();
87 |
88 | Assert.assertTrue(isSuccessful);
89 | }
90 | ```
91 | # Postman Compatibility
92 |
93 | The current version of postman-runner is compatible with the Postman Collection v2.1 format. However, the support for certain global variables in test scripts introduced in the latest version of Postman (i.e. `pm`) is not yet available. There is a git issue (#10) open for it and we will add support for this as soon as we can.
94 |
--------------------------------------------------------------------------------
/bin/postman-runner-1.0.3-jar-with-dependencies.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdcorp-commerce/postman-runner/997b31625338418381bfd24899768c8e1e8d940c/bin/postman-runner-1.0.3-jar-with-dependencies.jar
--------------------------------------------------------------------------------
/bin/postman-runner-2.0.2-jar-with-dependencies.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdcorp-commerce/postman-runner/997b31625338418381bfd24899768c8e1e8d940c/bin/postman-runner-2.0.2-jar-with-dependencies.jar
--------------------------------------------------------------------------------
/bin/postman-runner.sh:
--------------------------------------------------------------------------------
1 | #/bin/bash!
2 | java -jar postman-runner-2.0.2-jar-with-dependencies.jar co.poynt.postman.PostmanCollectionRunner $1 $2 $3 $4 $5 $6 $7
3 |
--------------------------------------------------------------------------------
/bin/postman-tools:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gdcorp-commerce/postman-runner/997b31625338418381bfd24899768c8e1e8d940c/bin/postman-tools
--------------------------------------------------------------------------------
/bin/stub.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | MYSELF=`which "$0" 2>/dev/null`
3 | [ $? -gt 0 -a -f "$0" ] && MYSELF="./$0"
4 | java=java
5 | if test -n "$JAVA_HOME"; then
6 | java="$JAVA_HOME/bin/java"
7 | fi
8 | exec "$java" $java_args -jar $MYSELF "$@"
9 | exit $
--------------------------------------------------------------------------------
/build.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | mvn -Pexec clean install assembly:single
3 |
4 | rm ./bin/postman-tools 2> /dev/null # ignore if not there
5 | cat ./bin/stub.sh ./target/postman-runner-3.0.1-SNAPSHOT-jar-with-dependencies.jar > ./bin/postman-tools
6 | chmod +x ./bin/postman-tools
7 |
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 | co.poynt.postman.runner
3 | postman-runner
4 | 3.0.1-SNAPSHOT
5 | 4.0.0
6 | jar
7 | Poynt Running Postman
8 | A module to run a POSTMAN collections.
9 | https://github.com/poynt/postman-runner
10 |
11 |
12 | The Apache Software License, Version 2.0
13 | http://www.apache.org/licenses/LICENSE-2.0.txt
14 |
15 |
16 |
17 |
18 | Victor Chau
19 | victor@poynt.co
20 | Poynt Co.
21 | https://poynt.com
22 |
23 |
24 |
25 | https://github.com/poynt/postman-runner
26 | scm:git:ssh://git@github.com/poynt/postman-runner
27 | scm:git:ssh://git@github.com/poynt/postman-runner
28 | HEAD
29 |
30 |
31 |
32 | ossrh
33 | https://oss.sonatype.org/content/repositories/snapshots
34 |
35 |
36 | ossrh
37 | https://oss.sonatype.org/service/local/staging/deploy/maven2/
38 |
39 |
40 |
41 | 1.7.5
42 | 1.2.3
43 | UTF-8
44 | UTF-8
45 | 2.11.0
46 | 6.8.8
47 |
48 |
49 |
50 |
51 | org.slf4j
52 | slf4j-api
53 | ${slf4j.version}
54 | jar
55 |
56 |
57 | com.fasterxml.jackson.core
58 | jackson-core
59 | ${jackson.version}
60 |
61 |
62 | com.fasterxml.jackson.core
63 | jackson-databind
64 | ${jackson.version}
65 |
66 |
67 | org.testng
68 | testng
69 | ${testng.version}
70 | test
71 |
72 |
73 | org.mozilla
74 | rhino
75 | 1.7R3
76 |
77 |
78 | commons-io
79 | commons-io
80 | 2.7
81 |
82 |
83 | org.apache.httpcomponents
84 | httpclient
85 | 4.5.13
86 |
87 |
88 | commons-logging
89 | commons-logging
90 |
91 |
92 |
93 |
94 | commons-logging
95 | commons-logging
96 | 1.2
97 | test
98 |
99 |
100 | info.picocli
101 | picocli
102 | 3.5.2
103 |
104 |
105 | com.mashape.unirest
106 | unirest-java
107 | 1.4.9
108 |
109 |
110 |
111 |
112 |
113 | org.apache.maven.plugins
114 | maven-jar-plugin
115 | 3.0.2
116 |
117 |
118 | true
119 |
120 | true
121 |
122 |
123 | ${project.artifactId}
124 | ${maven.build.timestamp}
125 | ${project.version}
126 |
127 |
128 |
129 |
130 |
131 | org.apache.maven.plugins
132 | maven-assembly-plugin
133 | 3.1.0
134 |
135 |
136 | jar-with-dependencies
137 |
138 |
139 |
140 | co.poynt.postman.Main
141 |
142 |
143 | ${project.artifactId}
144 | ${maven.build.timestamp}
145 | ${project.version}
146 |
147 |
148 |
149 |
150 |
151 | maven-compiler-plugin
152 | 3.8.0
153 |
154 | 1.8
155 | 1.8
156 |
157 |
158 |
159 | org.apache.maven.plugins
160 | maven-release-plugin
161 | 2.5.3
162 |
163 | forked-path
164 |
165 |
166 |
167 | org.apache.maven.plugins
168 | maven-source-plugin
169 | 2.2.1
170 |
171 |
172 | attach-sources
173 |
174 | jar-no-fork
175 |
176 |
177 |
178 |
179 |
180 | org.apache.maven.plugins
181 | maven-javadoc-plugin
182 | 3.2.0
183 |
184 |
185 | attach-javadocs
186 |
187 | jar
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 | exec
197 |
198 |
199 | ch.qos.logback
200 | logback-classic
201 | ${logback.version}
202 |
203 |
204 | commons-logging
205 | commons-logging
206 | 1.2
207 |
208 |
209 |
210 |
211 | gpg
212 |
213 |
214 |
215 | org.apache.maven.plugins
216 | maven-gpg-plugin
217 | 1.5
218 |
219 |
220 | sign-artifacts
221 | verify
222 |
223 | sign
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
--------------------------------------------------------------------------------
/src/main/java/co/poynt/postman/CmdBase.java:
--------------------------------------------------------------------------------
1 | package co.poynt.postman;
2 |
3 | import com.fasterxml.jackson.databind.DeserializationFeature;
4 | import com.fasterxml.jackson.databind.ObjectMapper;
5 | import com.fasterxml.jackson.databind.SerializationFeature;
6 | import com.fasterxml.jackson.databind.util.ISO8601DateFormat;
7 |
8 | import java.io.IOException;
9 |
10 | import com.fasterxml.jackson.annotation.JsonInclude;
11 | import com.fasterxml.jackson.core.JsonProcessingException;
12 |
13 | public abstract class CmdBase {
14 | static protected ObjectMapper om = new ObjectMapper();
15 | static com.mashape.unirest.http.ObjectMapper uniOm;
16 |
17 | static {
18 | om.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
19 |
20 | om.setDateFormat(new ISO8601DateFormat());
21 | om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
22 | om.configure(DeserializationFeature.ACCEPT_FLOAT_AS_INT, false);
23 | om.setSerializationInclusion(JsonInclude.Include.NON_NULL);
24 |
25 | uniOm = new com.mashape.unirest.http.ObjectMapper() {
26 | @Override
27 | public T readValue(String s, Class aClass) {
28 | try {
29 | return om.readValue(s, aClass);
30 | } catch (IOException e) {
31 | e.printStackTrace();
32 | }
33 | return null;
34 | }
35 |
36 | @Override
37 | public String writeValue(Object o) {
38 | try {
39 | return om.writeValueAsString(o);
40 | } catch (JsonProcessingException e) {
41 | e.printStackTrace();
42 | }
43 | return null;
44 | }
45 | };
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/src/main/java/co/poynt/postman/Main.java:
--------------------------------------------------------------------------------
1 | package co.poynt.postman;
2 |
3 | import picocli.CommandLine;
4 |
5 | public class Main {
6 | public static void main(String[] args) {
7 | PostmanRunnerTools tools = new PostmanRunnerTools();
8 | try {
9 | CommandLine cmd = new CommandLine(tools);
10 |
11 | cmd.parseWithHandlers(
12 | new CommandLine.RunLast().useOut(System.out).useAnsi(CommandLine.Help.Ansi.ON),
13 | CommandLine.defaultExceptionHandler().useErr(System.err).useAnsi(CommandLine.Help.Ansi.OFF),
14 | args);
15 | } catch (Exception e) {
16 | CommandLine.usage(tools, System.err);
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/co/poynt/postman/PostmanRunnerTools.java:
--------------------------------------------------------------------------------
1 | package co.poynt.postman;
2 |
3 | import co.poynt.postman.runner.PostmanCollectionRunner;
4 | import co.poynt.postman.testrail.NewmanTestrailRunReporter;
5 | import co.poynt.postman.testrail.PostmanTestrailSyncer;
6 | import picocli.CommandLine;
7 |
8 | @CommandLine.Command(name = "postman-tools", mixinStandardHelpOptions = true, versionProvider = VersionProvider.class,
9 | //@formatter:off
10 | subcommands = {
11 | PostmanCollectionRunner.class,
12 | PostmanTestrailSyncer.class,
13 | NewmanTestrailRunReporter.class
14 | //@formatteer:on
15 | })
16 | public class PostmanRunnerTools implements Runnable {
17 |
18 | @Override
19 | public void run() {
20 | CommandLine.usage(this, System.out);
21 | }
22 | }
--------------------------------------------------------------------------------
/src/main/java/co/poynt/postman/VersionProvider.java:
--------------------------------------------------------------------------------
1 | package co.poynt.postman;
2 |
3 | import picocli.CommandLine;
4 |
5 | import java.io.IOException;
6 | import java.net.JarURLConnection;
7 | import java.net.URL;
8 | import java.util.jar.Attributes;
9 | import java.util.jar.Manifest;
10 |
11 | public class VersionProvider implements CommandLine.IVersionProvider {
12 | private static final String MANIFEST_BUILD_TIMESTAMP = "BuildTimestamp";
13 | private static final String MANIFEST_TOOLS_VERSION = "ToolsVersion";
14 | private static final String MANIFEST_ARTIFACT_ID = "ArtifactId";
15 |
16 | private String buildInfo;
17 | private String artifactId;
18 |
19 | @Override
20 | public String[] getVersion() {
21 |
22 | try {
23 | String className = getClass().getSimpleName() + ".class";
24 | String classPath = getClass().getResource(className).toString();
25 | if (!classPath.startsWith("jar")) {
26 | return new String[0];
27 | }
28 |
29 | URL url = new URL(classPath);
30 | JarURLConnection jarConnection = (JarURLConnection) url.openConnection();
31 |
32 | Manifest manifest = jarConnection.getManifest();
33 | Attributes attributes = manifest.getMainAttributes();
34 |
35 | buildInfo = attributes.getValue(MANIFEST_TOOLS_VERSION);
36 | String timestamp = attributes.getValue(MANIFEST_BUILD_TIMESTAMP);
37 | if (timestamp != null && !timestamp.isEmpty()) {
38 | buildInfo += "-" + timestamp;
39 | }
40 | artifactId = attributes.getValue(MANIFEST_ARTIFACT_ID);
41 | return new String[] {artifactId, buildInfo};
42 | } catch (IOException e) {
43 | System.err.println("Failed to load manifest version info.");
44 | throw new IllegalStateException("Failed to load manifest version info.");
45 | }
46 |
47 | }
48 | }
--------------------------------------------------------------------------------
/src/main/java/co/poynt/postman/js/PostmanJsVariables.java:
--------------------------------------------------------------------------------
1 | package co.poynt.postman.js;
2 |
3 | import java.util.ArrayList;
4 | import java.util.List;
5 | import java.util.Map;
6 | import java.util.Set;
7 |
8 | import org.mozilla.javascript.Context;
9 | import org.mozilla.javascript.NativeArray;
10 | import org.mozilla.javascript.NativeObject;
11 | import org.mozilla.javascript.Scriptable;
12 | import org.mozilla.javascript.ScriptableObject;
13 |
14 | import co.poynt.postman.model.PostmanEnvValue;
15 | import co.poynt.postman.model.PostmanEnvironment;
16 | import co.poynt.postman.runner.PostmanHttpResponse;
17 |
18 | public class PostmanJsVariables {
19 | // ============================================================
20 | // The members of this class are equivalent to the POSTMAN
21 | // global variables available inside a POSTMAN test script.
22 | // As defined here http://www.getpostman.com/docs/jetpacks_writing_tests
23 | public Object responseBody;
24 | public NativeArray responseHeaders;
25 | public Object responseTime;
26 | public NativeObject responseCode;
27 | public Object iteration;
28 | public Object postman;
29 | public NativeObject environment;
30 | public NativeObject tests;
31 | public NativeObject preRequestScript;
32 | // ============================================================
33 |
34 | private Context ctx;
35 | private Scriptable scope;
36 | private PostmanEnvironment env;
37 |
38 | public PostmanJsVariables(Context ctx, Scriptable scope, PostmanEnvironment env) {
39 | this.ctx = ctx;
40 | this.scope = scope;
41 | this.env = env;
42 | }
43 |
44 | public void prepare(PostmanHttpResponse httpResponse) {
45 | this.prepareJsVariables(httpResponse);
46 | this.injectJsVariablesToScope();
47 | }
48 |
49 | private void prepareJsVariables(PostmanHttpResponse httpResponse) {
50 |
51 | this.responseCode = new NativeObject();
52 | if (httpResponse != null) {
53 | List