Automation can be achieved via the various export and import scripts available within Assure's server-util directory. There are individual scripts to export and import various Assure definitions, such as controls, layouts and results actions.
We have documentation on these scripts within the System Administration guide, which is part of the All Assure Documentation download. The chapter named Exporting and Importing Definitions contains sections for each type of definition, the related script and the available script parameters.
I'll let other end-users weight in on best practices that they follow. Although, something that I've seen is in regards to promoting controls that have been re-coded from scratch. Assure classifies controls by UUIDs (hidden on the back-end) rather than the display name. When a control is migrated to another environment, the UUID is carried over. If you have the same control in DEV and TEST environments, and the control is deleted and recreated in DEV with the same name, a new UUID is created for the new control. You won't be able to import the control into the TEST environment because a different control (a different UUID) already has that name taken. If controls are commonly deleted and recreated, then you'd need to delete the control in higher environments before importing it again. This only matters if controls are deleted and recreated with the same name. If the UUIDs matched, such as making edits to a control without deleting the entire control, then the scripts will override with the new code, as expected.