{"id":22374508,"url":"https://github.com/kevcui/testing-toolbox","last_synced_at":"2026-05-05T11:31:25.154Z","repository":{"id":132198087,"uuid":"162045108","full_name":"KevCui/testing-toolbox","owner":"KevCui","description":"🛠️ Handy single-file scripts to help with testing, or daily hacking","archived":false,"fork":false,"pushed_at":"2020-11-26T09:50:37.000Z","size":33,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-24T10:31:47.128Z","etag":null,"topics":["bash","bash-script","bash-scripting","cli","puppeteer","script","testing","testing-toolbox","toolbox"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/KevCui.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-12-16T22:03:11.000Z","updated_at":"2025-01-05T22:45:47.000Z","dependencies_parsed_at":null,"dependency_job_id":"df7f5d06-41a8-4636-991c-5af70168397e","html_url":"https://github.com/KevCui/testing-toolbox","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/KevCui/testing-toolbox","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KevCui%2Ftesting-toolbox","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KevCui%2Ftesting-toolbox/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KevCui%2Ftesting-toolbox/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KevCui%2Ftesting-toolbox/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/KevCui","download_url":"https://codeload.github.com/KevCui/testing-toolbox/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KevCui%2Ftesting-toolbox/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271636017,"owners_count":24794144,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-22T02:00:08.480Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bash","bash-script","bash-scripting","cli","puppeteer","script","testing","testing-toolbox","toolbox"],"created_at":"2024-12-04T21:17:19.676Z","updated_at":"2026-05-05T11:31:25.117Z","avatar_url":"https://github.com/KevCui.png","language":"Shell","funding_links":["https://www.buymeacoffee.com/kevcui"],"categories":[],"sub_categories":[],"readme":"# testing-toolbox\n\nA toolbox of handy single-file scripts to help with testing, or daily hacking.\n\n- List of scripts\n    - :hear_no_evil: [jwtDecoder.sh](#jwtDecodersh): decode JWT token\n    - :link: [urlCoder.sh](#urlCodersh): encode or decode URL\n    - :id: [uuidValidator.sh](#uuidValidatorsh): validate GUID/UUID\n    - :scroll: [fileGenerator.sh](#fileGeneratorsh): generate file with specific file name and file size\n    - :floppy_disk: [letterCounter.sh](#letterCountersh): count letters and words in sentence\n    - :a: [caseConverter.sh](#caseConvertersh): convert text to lower case, upper case, capitalized case, sentence case, alternating case and inverse case\n    - :phone: [phoneNumVerifier.sh](#phoneNumVerifiersh): use [numverify](https://numverify.com) API to verify phone number\n    - :signal_strength: [androidNetworkConfigure.sh](#androidNetworkConfiguresh): configure Android network security setting to trust custom CA on Android 7 and above. More details [here](https://developer.android.com/training/articles/security-config).\n    - :euro: [showCurrencyCode.sh](#showCurrencyCodesh): show list of currency country, name and code. Use `grep` to filter out information\n    - :clipboard: [loremGenerator.sh](#loremGeneratorsh): generate lorem ipsum\n    - :mag: [antideo.sh](#antideosh): call [Antideo](http://www.antideo.com) APIs to validate IP address, phone number or Email address\n    - :mailbox_with_no_mail: [tempmail.js](#tempmailjs): fetch a temp email address from [Tempmail](https://www.temp-mail.org)\n\n## jwtDecoder.sh\n\n**[`^        back to top        ^`](#)**\n\n```bash\n$ ./jwtDecoder.sh 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM'\nJWT token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM\n{\n  \"typ\": \"JWT\",\n  \"alg\": \"HS256\"\n}\n{\n  \"userId\": \"b08f86af-35da-48f2-8fab-cef3904660bd\"\n}\nSignature: -xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM\n```\n\n## urlCoder.sh\n\n**[`^        back to top        ^`](#)**\n\n```bash\n$ ./urlCoder.sh 'https://www.w3schools.com/action_page2.php?text=Hello Günter'\nhttps%3A%2F%2Fwww.w3schools.com%2Faction_page2.php%3Ftext%3DHello+G%C3%BCnter\n\n$ ./urlCoder.sh -d 'https%3A%2F%2Fwww.w3schools.com%2Faction_page2.php%3Ftext%3DHello+G%C3%BCnter'\nhttps://www.w3schools.com/action_page2.php?text=Hello+Günter\n```\n\n## uuidValidator.sh\n\n**[`^        back to top        ^`](#)**\n\n```bash\n$ ./uuidValidator.sh 'x56a4180-h5aa-42ec-a945-5fd21dec0538'\nx56a4180-h5aa-42ec-a945-5fd21dec0538\nfalse\n\n$ ./uuidValidator.sh '{C56a418065aa426ca9455fd21deC0538}'\nC56a4180-65aa-426c-a945-5fd21deC0538\ntrue\n```\n\n## fileGenerator.sh\n\n**[`^        back to top        ^`](#)**\n\n```bash\n1. Generate a 128k txt file, file name contains only numbers:\n$ ./fileGenerator.sh -o \"0-9\" -e \".txt\" -s 128k\n\n2. Generate a jpg file, flie name has 12 characters:\n$ ./fileGenerator.sh -l 12 -e \".jpg\"\n\n3. Generate a 5m mp4 file, flie name has 8 characters, contains capital letters:\n$ ./fileGenerator.sh -o \"A-Z\" -l 8 -e \".mp4\" -s 5m\n```\n\n## letterCounter.sh\n\n**[`^        back to top        ^`](#)**\n\n```bash\n$ ./letterCounter.sh 'So God created man in his own image, in the image of God created he him; male and female created he them.'\nCharacter: 105\nWord: 22\n```\n## caseConverter.sh\n\n**[`^        back to top        ^`](#)**\n\n```bash\n$ ./caseCoverter.sh -t 'across the dragoon and the fate' -A\n\nUpper case:\nACROSS THE DRAGOON AND THE FATE\n\n$ ./caseCoverter.sh -t 'across the dragoon and the fate' -C\n\nCapitalized case:\nAcross The Dragoon And The Fate\n\n$ ./caseCoverter.sh -t 'So God created man in his own image, in the image of God created he him; male and female created he them.' -aAcCsi\n\nUpper case:\nSO GOD CREATED MAN IN HIS OWN IMAGE, IN THE IMAGE OF GOD CREATED HE HIM; MALE AND FEMALE CREATED HE THEM.\n\nLower case:\nso god created man in his own image, in the image of god created he him; male and female created he them.\n\nCapitalized case:\nSo God Created Man In His Own Image, In The Image Of God Created He Him; Male And Female Created He Them.\n\nSentence case:\nSo God created man in his own image, in the image of God created he him; male and female created he them.\n\nAlternating case:\nSo gOd CrEaTeD MaN iN hIs oWn ImAgE, iN tHe iMaGe oF GoD CrEaTeD hE hIm; mAlE AnD FeMaLe cReAtEd He ThEm.\n\nInverse case:\nsO gOD CREATED MAN IN HIS OWN IMAGE, IN THE IMAGE OF gOD CREATED HE HIM; MALE AND FEMALE CREATED HE THEM.\n\n```\n\n## phoneNumVerifier.sh\n\n**[`^        back to top        ^`](#)**\n\nTo use this script, it needs to register an API from numverify. And set global variable `NUMVERIFY_KEY`\n```bash\nexport NUMVERIFY_KEY='\u003cyour-access-key\u003e'\n```\n\n```bash\n1. Query a phone number:\n$ ./phoneNumVerifier.sh 14158586273\n{\n  \"valid\": true,\n  \"number\": \"14158586273\",\n  \"local_format\": \"4158586273\",\n  \"international_format\": \"+14158586273\",\n  \"country_prefix\": \"+1\",\n  \"country_code\": \"US\",\n  \"country_name\": \"United States of America\",\n  \"location\": \"Novato\",\n  \"carrier\": \"AT\u0026T Mobility LLC\",\n  \"line_type\": \"mobile\"\n}\n\n\n2. List country codes:\n$ ./phoneNumVerifier.sh\n{\n  \"AF\": {\n    \"country_name\": \"Afghanistan\",\n    \"dialling_code\": \"+93\"\n  },\n  \"AL\": {\n    \"country_name\": \"Albania\",\n    \"dialling_code\": \"+355\"\n  },\n  \"DZ\": {\n    \"country_name\": \"Algeria\",\n    \"dialling_code\": \"+213\"\n  },\n  \"AS\": {\n    \"country_name\": \"American Samoa\",\n    \"dialling_code\": \"+1\"\n  },\n  ...\n}\n```\n\n## androidNetworkConfigure.sh\n\n**[`^        back to top        ^`](#)**\n\n```bash\n$ ./androidNetworkConfigure.sh \u003cpath_to_AndroidManifest.xml\u003e\n```\n\n## showCurrencyCode.sh\n\n**[`^        back to top        ^`](#)**\n\n```bash\n$ ./showCurrencyCode.sh | grep -i \"\u003csearch_keyword\u003e\"\n```\n\n## loremGenerator.sh\n\n**[`^        back to top        ^`](#)**\n\n```bash\n$ ./loremGenerator.sh -p \u003cparagraph_num\u003e -l \u003cmax_line_length\u003e\n```\n\n## antideo.sh\n\n**[`^        back to top        ^`](#)**\n\n:warning: Antideo provides only **10 requests/hour for free account**, need more requests? [Pay it](https://www.antideo.com/pricing), or tor it.\n\nValidate IP address:\n\n```bash\n$ ./antideo.sh -i 1.1.1.1\n{\n  \"IP\": \"1.1.1.1\",\n  \"health\": {\n    \"toxic\": false,\n    \"proxy\": {\n      \"type\": \"open\",\n      \"last_seen\": \"2019-04-21 00:40:04\"\n    },\n    \"spam\": {\n      \"times_reported\": 12,\n      \"last_seen\": \"2019-03-13 11:40:09\"\n    }\n  }\n}\n```\n\nValidate Phone number:\n\n```bash\n$ ./antideo.sh -p +33143253700\n{\n  \"phone\": \"+33143253700\",\n  \"valid\": true,\n  \"type\": \"FIXED_LINE\",\n  \"location\": \"Paris\",\n  \"timezones\": [\n    \"Europe/Paris\"\n  ],\n  \"formats\": {\n    \"E164\": \"+33143253700\",\n    \"national\": \"01 43 25 37 00\",\n    \"international\": \"+33 1 43 25 37 00\"\n  }\n}\n```\n\nValidate Email address:\n\n```bash\n$ ./antideo.sh -m ads@gmail.com\n{\n  \"email\": \"ads@gmail.com\",\n  \"free_provider\": true,\n  \"spam\": false,\n  \"scam\": false,\n  \"disposable\": false\n}\n```\n\n## tempmail.js\n\n**[`^        back to top        ^`](#)**\n\n```bash\n$ node tempmail.js\n```\n\n---\n\n\u003ca href=\"https://www.buymeacoffee.com/kevcui\" target=\"_blank\"\u003e\u003cimg src=\"https://cdn.buymeacoffee.com/buttons/v2/default-orange.png\" alt=\"Buy Me A Coffee\" height=\"60px\" width=\"217px\"\u003e\u003c/a\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkevcui%2Ftesting-toolbox","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkevcui%2Ftesting-toolbox","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkevcui%2Ftesting-toolbox/lists"}