DEV Community

Wen Ping
Wen Ping

Posted on Originally published at anguskit.com

What AngusTester is: a test automation platform, one YAML to test anything, plans and results together

AngusTester is a test automation platform: one YAML to test anything, with plans and results together. You arrange plans and cases in the console. The part that should run by itself is one AngusScript 2.0 YAML. It describes APIs, performance, Web, mobile, and model calls. An agent on an execution node runs that script. The console process in the browser does not. Results hang back on the cases, and they can be collected into a report you can freeze. Data stays on this install.

The main problems it solves

  • API, performance, Web, mobile, and model calls are each written as a separate project. Every new kind of test means another script to maintain. One AngusScript YAML holds those steps. People review the plan and the cases. The run itself is the Agent on an execution node, not the console process in the browser.
  • The share of automated tests stays low because every script is written from scratch. The AI agent in the header is the Tester assistant bound in AngusAI, and it drafts the YAML. Generation returns a preview first. The script is saved into the project only after you confirm. Before it is saved, a person still reviews the plan and the cases. Once more cases have a script, repeating the run no longer depends on clicking through by hand.
  • Switching environment means copying the script. When the address, headers, and secrets are written into the YAML, a new environment or a new secret means another copy. Those live in an environment. The same YAML pointed at another environment is another system under test. When you test a model call, the provider secret stays there too, and is not written into the script.
  • The report is still changing with the source data, so an archive no longer matches the conclusion you had. The execution detail shows the expected value and the actual value for this run. The copy you need to keep is frozen into a snapshot after you confirm it. When the source data changes later, that archive stays as it was.

Note: It does not scan code, secrets, dependencies, or images. Those checks belong to the security product. A security test inside a script is a read-only check of a host, container, port, or API that is already running. There is no separate Security item in the sidebar. Results are under Executions. testType: SECURITY does not replace the security product's gate, and it does not push results there. The platform does not ship a model and does not proxy any LLM. To test a model call, put the provider key in an environment. With no execution node in the ONLINE state, automation does not run inside the platform process.

What it includes

AngusTester architecture

The first screen after sign-in is Overview. Todos, case quality, defects, and test runs are what this screen is for.

Overview. The line under the title is about todos, case quality, defects, and test runs. The main area has todos, Core Features (Plans, Cases, Issues, API, Reports, Scripts, Executions), Core Metrics, My Projects, and Risk Assessment. The header shows AI Agent and English. The left side is a collapsed icon rail.

Lists are isolated by the current project. Read the project switcher before you read the numbers on the page. After you change projects, plans, cases, and executions are that project's.

Plans, cases, and issues. A plan is one round of testing. A plan can contain iterations. An iteration is a time box inside the plan. A release test and a regression both sit in a plan. They do not need two products. A case writes preconditions, steps, and the expected result. What a person reviews is that case. Cases to Review and Cases to Test are reachable from Overview. Issues keep defects. After an execution fails, a defect can be attached to that execution. Manual cases and automated scripts count coverage separately. An automated result hangs back on the case when the run finishes.

API. API holds collections and endpoints. You can debug online, and you can import or export OpenAPI. Debug confirms the address and the parameters. A check that must run again, enter a plan, or be left for a pipeline is still a script. One debug session is not a regression.

Scripts and the designer. A script is one AngusScript 2.0 YAML file. The designer assembles the same automation step by step. Scripts have versions and can be scheduled. Protocol steps include HTTP, WebSocket, gRPC, JDBC, and Kafka. Web uses Playwright or Selenium. Mobile uses Appium. A performance step writes concurrency, ramp-up, and thresholds such as P99 and error rate. An LLM step calls your own provider and asserts latency, tokens, and JSON shape.

The node needs the browser and the driver installed first. Appium also needs the device attached to that node machine. The LLM key lives in the environment, not in the YAML body.

A security test is created from Scripts. It has no route of its own. It checks a running host, container, a single host's ports, a mobile snapshot, existing model output, and Nuclei results, and it is read-only. It answers whether this run still matches the baseline. It does not answer whether the code repository has a known vulnerability.

Executions. An execution is one run of a script. Statuses include queued, dispatched, running, completed, failed, cancelled, rejected, and scheduled. On failure, an assertion is a field. You can see the expected value and the actual value, not only a red mark. Execution detail is the live page for this run. An execution report is the document for a readout. They are not the same page.

At least one execution node must be ONLINE before scripts, Web, mobile, and LLM runs are picked up. The execution node runs the agent. The default agent port is 7100. The script runs on that machine. An application node only monitors the system under test. It does not take scripts. A device can be online, offline, busy, or in maintenance. A busy device is not taken by another execution.

Data, environments, and the bridge. Data holds files, variables, and database connections for parameterization. An environment switches variables, headers, and secrets. The same YAML pointed at another environment is another system under test. You do not copy the script. Bridge is DevBridge. It treats a service on your machine as the target for a joint debug, without deploying that service next to the node first.

Reports. A report summarizes one execution or a batch. A live report still follows the source data. After you confirm the content, Freeze turns the data state into a snapshot (SNAPSHOT). It no longer follows the source. Freeze cannot be undone on the page. A frozen report cannot be generated again. To publish a newer conclusion, create another report and freeze that one. Deleting a report cannot be undone. The copy you need to keep is the one you froze. Do not delete it.

AI Agent in the header. It embeds the Tester assistant bound in AngusAI. It is not a second model configuration under this product's system settings. The header entry can still be visible when that assistant is not connected. The conversation then says authentication failed. An assistant can draft a script. A person still reviews the plan and the cases before it is saved into the project.

Where it is used

  • One release candidate has to show both the API contract and the key pages. Those used to be two projects and two reports. In the current project, create one plan and put both kinds of cases in the same round. Review the ones that need review first. HTTP assertions and Playwright steps go in the same YAML. At least one execution node is ONLINE, or the script is never picked up. Pass and fail hang back on the matching cases. Open the failed execution and match expected against actual. When a pipeline should use the result, call REST to start this script and poll this execution. A failed assertion makes this execution failed. completed=false while it is still running is not a pass.

  • Cases stay manual because the YAML is written from scratch. The AI agent in the header uses the Tester assistant bound in AngusAI to draft the script. tester_generate_script returns a preview and does not save. After you confirm, call tester_invoke with the confirmationId. Only then does the script show up in the console. A person still reviews the plan and the cases before it is saved into the project. If the assistant is not connected, the conversation says authentication failed, and the cases do not become automated on their own.

  • Staging and production each have a copy of the script. A new address or a new secret splits the copies. Addresses, headers, and secrets live in an environment. The same YAML pointed at another environment is another system under test. When you test a model call, the provider secret stays there too, and is not written into the YAML. The platform does not host a model.

  • The load-test numbers were confirmed, and the report then changed with the source data, so the archive no longer matches that conclusion. Add concurrency, ramp-up, P99, and error rate to the same YAML. The run is on an execution node, not in the browser process. Collect the result into a report. After the numbers are confirmed, click Freeze. The data state becomes a snapshot. A freeze cannot be undone on the page, and the report cannot be generated again. For a new conclusion, create another report and freeze that one.

What is sharp about it

  • People review the plan and the cases. The run is the same YAML. The step you skip is one project for APIs, another for pages, and a third for load. The case states what should happen. Assertions in the script compare against that. A failure is written on the execution detail, with expected and actual fields. The plan and the report do not have to be exported into a spreadsheet to match a row number.

  • The first screen is Overview, not a menu tree. With the sidebar collapsed, an icon rail remains. The title is Overview. You can read the four todos, and Core Features: Plans, Cases, Issues, API, Reports, Scripts, and Executions. The time range is at the top right. The header has AI Agent, English, and the theme control. Percentages and project names change. They are not the feature list.

  • Changing the environment does not copy the script. Address, headers, and secrets live under Environments. Pointing the same YAML at another environment points it at another system. The LLM provider key lives there too. The platform does not hold the model, and it does not put the key in the script body.

  • Without an ONLINE node, the script does not run itself. The agent on the execution node picks the script up. An application node only watches the system under test. Web and mobile also need the browser and the driver already on the node, and a mobile device attached to that machine. That is a runtime condition. It is not a second console to install.

  • A report can be frozen into a snapshot that no longer changes. Execution detail is this run. The report is for the person who must keep a record. After Freeze, the content is fixed. It cannot be undone on the page, and it cannot be generated again. A new conclusion is a new report, then another freeze.

  • A security script only checks a system that is already running. Create it from Scripts. Read it under Executions. It is a read-only check of hosts, containers, ports, and APIs. A gate on code and images is not decided here. A pass on this script is not a pass of the repository scan.

How you install it

This package installs AngusTester 2.0.0 and the sign-in portal. Open the portal first, then this product. With Docker, the wizard defaults to Docker Compose. Without Docker, use the host ZIP. If the machine cannot reach the public network, use the offline install. The Kubernetes Helm chart is a preview. Do not treat it as a production install.

Production is Linux x86_64. macOS is fine for a trial. docker compose version must print a version. On macOS, run the wizard as the user you are logged in as. Do not prefix it with sudo. To use /opt/angus on Linux, give the directory to the current user first.

Port 80 must be free. Port 443 must be free if you will use HTTPS. The agent uses 7100 to run scripts. 8807 and 8801 belong to the applications. The proxy forwards them. Do not publish 9528. gm.<your-domain> and tester.<your-domain> must resolve to this machine. Download the package from raw-public on https://repo.anguskit.com. The unpacked directory is AngusTester-2.0.0.

unzip <package>.zip
cd AngusTester-2.0.0
./install.sh
Enter fullscreen mode Exit fullscreen mode

On Windows, with Docker Desktop, run .\install.bat. The wizard prompts are in English.

Prompt What you enter What it decides
Install mode Press Enter Docker Compose. If Docker is missing, use the host ZIP
Access Type 2 The bundled reverse proxy and subdomains. Enter stays on access by port
Reverse proxy Press Enter Caddy. Let's Encrypt can be configured only with Caddy
Certificate Type a number. There is no default 1 is your PEM, 2 is a self-signed certificate from the package, 3 is Let's Encrypt, 4 is HTTP only
Database Press Enter Compose starts MySQL 8 on this machine
Install directory Press Enter The unpacked directory, which becomes $ANGUS_HOME
Apex domain An apex such as example.com tester.example.com adds an extra label. An IP address or localhost stops the wizard

The administrator password must be at least 8 characters. Do not keep the public default database password the wizard offers. The data directory takes that password only the first time it is created. Changing the env files later, without changing the password already stored in the database, makes the applications fail to connect. The default string is not printed here.

Certificates 1, 2, or 3 open https://gm.<your-domain>/, then https://tester.<your-domain>/. Certificate 4 opens both with http://. A self-signed certificate makes the browser warn. On the current package, Let's Encrypt still requests certificates for all seven product hostnames, even when this machine only has this product and the portal. Those seven names must resolve here, or use a wildcard certificate. HTTP only, certificate 4, does not request them.

Success is two lines at the end of the log: doctor: OK and Install finished. The log is $ANGUS_HOME/logs/install.log. Check again with ./bin/angusctl.sh doctor. A finished console is not enough to run automation. You still need an ONLINE execution node. The agent port is 7100.

MCP

Through the gateway the address is https://<gateway-host>/tester/mcp. On a private install with no product prefix, use https://<tester-host>/mcp. Put the token in ANGUS_TESTER_TOKEN. The header is Authorization: Bearer. Issue the token under My from the avatar menu. It must be a user access token from this portal. A token from another product returns 401, and the response has no tool list. Do not commit the token.

While MCP is left on, the endpoint follows the deployment notes. The write switch defaults to on. Set it to false and write tools disappear. Turning MCP off does not change the existing REST API. Outbound requests carry X-Angus-Client-Source: mcp. User-token administration, and deleting a project or a node, are not callable tools. MCP does not widen this account's permissions.

Writes preview first. tester_generate_script drafts and validates a script from a name and a project. It returns a preview and does not save. After you confirm, call tester_invoke with the confirmationId. Only then does the script show up in the console. tester_report_defect is also preview-only until it carries a confirmationId. tester_run_and_wait runs an existing script in dryrun, execute, or debug, and waits about 30 seconds at most. If it has not finished, the result is an executionId and completed=false. Query it with tester_invoke_read. Do not start it again. tester_explain_failure returns the expected and actual values of the failed assertions. tester_schema_validate checks the YAML against the built-in schema. The pipeline's gate is still configured in the platform. MCP does not change it for you.

SDK

The official REST SDK is version 2.0.0. The Java artifact is angus-tester-sdk, package cloud.xcan.angus.sdk.tester. npm is @anguskit/angus-tester-sdk. PyPI is angus-tester-sdk. The Go module is github.com/anguskit/angus-sdk-tester. There is no official NuGet package.

The header is Authorization: Bearer <access_token>. The gateway base URL is https://bj-c1-prod-apis.anguskit.com/tester. The prefix is /api/v1/**. The smoke call is GET /api/v1/user/profile. Listing plans is GET /api/v1/test-plans. Fields follow the OpenAPI document in the API reference. /innerapi is not in the official SDK.

The script language stays YAML. The SDK starts runs and reads plans and executions. It does not replace AngusScript. A pipeline that should stop a release calls the execution API, then checks whether this execution failed.

FAQ

Can the browser finish a script when there is no node?

No. Automation runs on the agent of an execution node. The node state has to be ONLINE. An application node only monitors. It does not take scripts.

What can one YAML cover?

APIs (HTTP, WebSocket, gRPC, JDBC, Kafka), performance, Web, mobile, and model calls are all AngusScript. A security test is another kind of script. It read-only checks a system that is already running.

Where do I look after a failure?

Open this execution's detail. A failed assertion carries expected and actual values. To keep a record, freeze the report into a snapshot. Freeze cannot be undone on the page.

The assistant generated a script, but the console does not show it.

tester_generate_script only previews. Call tester_invoke with the returned confirmationId to save it.

Can the SDK replace the test script?

No. The SDK calls REST. Steps that must run again are written in YAML.

Where do I sign in?

Open gm.<your-domain>, then tester.<your-domain>. Do not use 8807 as the public entry.

Further reading

Top comments (0)