@tanben/generator-nrsynthetics-workspace v0.1.11
generator-nrsynthetics-workspace
Generate local workspace for creating/testing NR Synthetics ScriptedBrowse and API Tests.
Requirementes
- Node.js/NPM
 - Chrome Browser
 - Git CLI (optional, for local repo)
 
Installation
First, install Yeoman and generator-nrsynthetics-workspace using npm.
npm install -g yo
npm install -g @tanben/generator-nrsynthetics-workspaceThen generate your new project:
yo @tanben/nrsynthetics-workspaceGenerating a NR Synthetics workspace
Run
yo @tanben/nrsynthetics-workspacefrom commandlineSelect
Yes(default) when prompted? Enable Download/Upload of Synthetics scripts to your account?Enter your Admin API Key when prompted, if you answered
Yesfrom step-1.
This generator can also be run with: yo @tanben/nrsynthetics-workspace
     _-----_     ╭──────────────────────────╮
    |       |    │      Welcome to the      │
    |--(o)--|    │   bedazzling Synthetics  │
   `---------´   │        generator!        │
    ( _´U`_ )    ╰──────────────────────────╯
    /___A___\   /
     |  ~  |
   __'.___.'__
 ´   `  |° ´ Y `
? Enable Download/Upload of Synthetics scripts to your account? Yes
? Enter your admin Api Key NRAA-XXXXXXXXXXXXXXXXXXXXXXXXXXX
? Initialize local Git repo? YesA workspace is created called synthetics-local, the admin key will be stored in .nrconfig.json.
Note: A local repo is setup for you, which would allow you to track and manage your local changes. To configure your local Git repo see Customizing Git Configuration.
Files
./synthetics-local
|
|── .vscode
|    ├── launch.json
|
├── apps
│   ├── deleteScripts.js
│   ├── downloadConfig.js
│   ├── downloadScripts.js
│   ├── listLocalScripts.js
│   └── updateSettings.js
│   └── uploadLocalScripts.js
│   └── uploadScripts.js
|
├── examples
│   ├── apiTest.js
│   └── scriptedBrowser.js
├── lib
│   ├── simulator.js  // mock New Relic Synthetics implicit objects
|
├── LICENSE
├── monitors            // created after downloading a monitor
│   ├── nr-monitor.json // holds the account monitor configurations
│   └── scriptedBrowser-test1.js // downloaded script
|
├── package.json
└── package-lock.jsonVerify local repo
btan@local:~//synthetics-local$ git status
On branch master
No commits yet
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	.editorconfig
	.gitignore
	.vscode/
	LICENSE
	README.md
	apps/
	examples/
	lib/
	monitors/
	package-lock.json
	package.jsonNote: The admin key is stored in .nrconfig.json and is not commited see .gitignore
Download / Upload & Manage monitor
Note:  This option is only avaiabable if you opted  Yes  to Enable Download/Upload of Synthetics scripts.
- Change directory into 
synthetics-local. - Download monitor by running this command: 
npm run download; to uploadnpm run upload. You can also run any of the following commands: 
- To create a monitor: 
npm run create - To delete a monitor: 
npm run delete - To update a monitor's settings: 
npm run update:settings 
- You will be presented with a list for Scripted Browser and API test.
You can select single or multiple monitors or select 
ALL. 
> npm run download
Using apiKey: "XXXX-XXXXXXXXXXXXXXXXXXXXXXXXX"
? Select Monitors (Press <space> to select, <a> to toggle all, <i> to invert selection)
❯ ◯ ALL
   = Scripted Browsers =
  ◯ scriptedBrowser-test1
  ◯ scriptedBrowser-test2
   = API Tests =
  ◯ apiTest-test1
  ◯ apiTest-test2Files are downloaded to ./monitors directory which also includes the Synthetics monitor configurations for your arccount, these are saved in nr-monitor.json.
NOTE: Do not rename the monitor file name(s) or update the configuration file.
Running script locally
- Add this to the top of your script, the library mimcs the Synthetics API and implements most common commands in Synthetics.
 
It's important that
global._isApiTestis set tofalse, for scripted browser tests.
    if (typeof $env === "undefined" || $env === null) {
      global._isApiTest = true;  // false, for Scripted Browser
      require("../lib/simulator");
    }- Execute the script by hitting F5 from VScode or open a terminal, run 
node <filename>.jsin the./monitorsdirectory. 
monitors>  node <filename>.jsRunning Examples
API Test
Open the file examples/apiTest.js and F5 to execute.
Go to troubleshooting section if you received an error:
Can't find Node.js binary "node": path does not exist. Make sure Node.js is installed and in your PATH, or set the "runtimeExecutable" in your launch.json
btan@local:~/synthetics-local$ node examples/apiTest.js
Response: { widgetCount: 10, widgetType: 'gear' }Scripted Browser
Open the file examples/apiTest.js and F5 to execute.
Go to troubleshooting section if you received an error:
Can't find Node.js binary "node": path does not exist. Make sure Node.js is installed and in your PATH, or set the "runtimeExecutable" in your launch.json
btan@local:~/synthetics-local$ node examples/scriptedBrowser.jsBrowser opens

Troubelshooting
Error Message
TypeError: $browser.get is not a function. When running scripted browsers.
Make sure that you've set:
global._isApiTest = false
Can't find Node.js binary "node": path does not exist. Make sure Node.js is installed and in your PATH, or set the "runtimeExecutable" in your launch.json
Edit the file
.vscode/launch.json, and add the "runtimeExecutable" property with the Node path:"runtimeExecutable": "<Node binary absolute path>",Example:
{ "version": "0.2.0", "configurations": [ { "type": "node", "request": "launch", "name": "Launch Program", "skipFiles": ["<node_internals>/**"], "runtimeExecutable": "/Users/btan/.nvm/versions/node/v12.13.0/bin/node", "program": "${file}" } ] }
License
Apache-2.0