Skip to content

Commit 9597f88

Browse files
committed
initialize the bs helper
0 parents  commit 9597f88

File tree

6 files changed

+215
-0
lines changed

6 files changed

+215
-0
lines changed

.DS_Store

6 KB
Binary file not shown.

.gitignore

+61
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# Logs
2+
logs
3+
*.log
4+
npm-debug.log*
5+
yarn-debug.log*
6+
yarn-error.log*
7+
8+
# Runtime data
9+
pids
10+
*.pid
11+
*.seed
12+
*.pid.lock
13+
14+
# Directory for instrumented libs generated by jscoverage/JSCover
15+
lib-cov
16+
17+
# Coverage directory used by tools like istanbul
18+
coverage
19+
20+
# nyc test coverage
21+
.nyc_output
22+
23+
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
24+
.grunt
25+
26+
# Bower dependency directory (https://bower.io/)
27+
bower_components
28+
29+
# node-waf configuration
30+
.lock-wscript
31+
32+
# Compiled binary addons (https://nodejs.org/api/addons.html)
33+
build/Release
34+
35+
# Dependency directories
36+
node_modules/
37+
jspm_packages/
38+
39+
# TypeScript v1 declaration files
40+
typings/
41+
42+
# Optional npm cache directory
43+
.npm
44+
45+
# Optional eslint cache
46+
.eslintcache
47+
48+
# Optional REPL history
49+
.node_repl_history
50+
51+
# Output of 'npm pack'
52+
*.tgz
53+
54+
# Yarn Integrity file
55+
.yarn-integrity
56+
57+
# dotenv environment variables file
58+
.env
59+
60+
# next.js build output
61+
.next

LICENSE

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2019 PeterNgTr
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

index.js

+88
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
/**
2+
* Browserstack Helper for Codeceptjs
3+
*
4+
* @author PeterNgTr
5+
*/
6+
class BrowserstackHelper extends Helper {
7+
8+
constructor(config) {
9+
super(config);
10+
}
11+
12+
/**
13+
*
14+
* @param sessionId Session ID for current Test browser session
15+
* @param data Test name, etc
16+
* @private
17+
*/
18+
_updateBuild(sessionId, data) {
19+
this.helpers['REST']._executeRequest({
20+
url: `https://api.browserstack.com/automate/sessions/${sessionId}.json`,
21+
method: 'put',
22+
data: data,
23+
auth: {
24+
'username': this.config.user,
25+
'password': this.config.key
26+
}
27+
});
28+
29+
this._exposeBuildLink(sessionId);
30+
}
31+
32+
/**
33+
*
34+
* @param sessionId Session ID for current Test browser session
35+
* @private
36+
*/
37+
_exposeBuildLink(sessionId) {
38+
this.helpers['REST']._executeRequest({
39+
url: `https://api.browserstack.com/automate/sessions/${sessionId}.json`,
40+
method: 'get',
41+
auth: {
42+
'username': this.config.user,
43+
'password': this.config.key
44+
}
45+
}).then(res => {
46+
const bs_url = `Test finished. Link to job: ${res.data.automation_session.public_url}`;
47+
console.log(bs_url);
48+
});
49+
}
50+
51+
/**
52+
* Helper function gets called if the test is passing
53+
* @param test
54+
* @private
55+
*/
56+
_passed(test) {
57+
console.log("Test has Passed");
58+
const sessionId = this._getSessionId();
59+
this._updateBuild(sessionId, { 'status': 'passed', 'name': test.title });
60+
}
61+
62+
/**
63+
* Helper function gets called if the test execution fails
64+
* @param test
65+
* @param error
66+
* @private
67+
*/
68+
_failed(test, error) {
69+
console.log("Test has failed");
70+
const sessionId = this._getSessionId();
71+
this._updateBuild(sessionId, { 'status': 'failed', 'name': test.title });
72+
}
73+
74+
_getSessionId() {
75+
if (this.helpers['WebDriver']) {
76+
return this.helpers['WebDriver'].browser.sessionId;
77+
}
78+
if (this.helpers['Appium']) {
79+
return this.helpers['Appium'].browser.sessionId;
80+
}
81+
if (this.helpers['WebDriverIO']) {
82+
return this.helpers['WebDriverIO'].browser.requestHandler.sessionID;
83+
}
84+
throw new Error('No matching helper found. Supported helpers: WebDriver/Appium/WebDriverIO');
85+
}
86+
}
87+
88+
module.exports = BrowserstackHelper;

package.json

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"name": "codeceptjs-bshelper",
3+
"version": "1.0.0",
4+
"description": "Browserstack Result Publisher for Codecept JS tests",
5+
"repository": {
6+
"type": "git",
7+
"url": "git@github.com:PeterNgTr/codeceptjs-bshelper.git"
8+
},
9+
"keywords": [
10+
"codeceptJS",
11+
"codeceptjs",
12+
"browserstack",
13+
"codeceptjs-browserstack",
14+
"codeceptjs-bs"
15+
],
16+
"author": "Thanh Nguyen <peter.nguyentr@gmail.com>",
17+
"license": "MIT"
18+
}

readme.md

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# codeceptjs-bshelper
2+
CodeceptJS Browserstack helper, to update Test Names, Test Results after execution
3+
4+
codeceptjs-bshelper is [CodeceptJS](https://codecept.io/) helper which is to complete tests results on Browserstack after execution. The helper allows to update test name and
5+
test results on Browserstack using the `_passed` and `_failed` hooks accessible in the helper.
6+
7+
NPM package: https://www.npmjs.com/package/codeceptjs-bshelper
8+
9+
### Configuration
10+
11+
This helper should be added in codecept.json/codecept.conf.js
12+
13+
Example:
14+
15+
```json
16+
{
17+
"helpers": {
18+
"BrowserstackHelper": {
19+
"require": "codeceptjs-bshelper",
20+
"user": "BROWSERSTACK_USERNAME",
21+
"key": "BROWSERSTACK_ACCESS_KEY"
22+
},
23+
"REST: {}
24+
}
25+
}
26+
```
27+
To use this helper, users must provide the Browserstack User, Key & Host as part of the configuration.

0 commit comments

Comments
 (0)