For publishing, in the wallet go to transactions -> ATs, then click Create AT. Set any name and description, paste the bytecode into the code field. If your at expects any data to be already set when it starts you can use the the data field, otherwise leave it blank. data pages * 256 is the number of bytes of space your at has. all variable are 64bit, so you get 32 variables per data page, so pick an appropriate number. call stack pages is only needed if you use call/ret opcodes for subroutines, but same idea as data pages, except its how deep you can nest calls. user stack is only needed for push/pop opcodes, and same idea as call stack. Min activation amount is the minimum amount which must be sent to an at to wake it back up to avoid dust transaction from wasting all its funds on step fees. The fee is the number of pages total(code pages is calculated automatically). if you set it too low it'll say in an error what the min fee for those settings is, so you might as well just submit it with 1, and see what it says and set that. Nothing will run until you send your at some funds for step fees, so after it has confirmed check the list of your ats in the wallet(transactions -> ats) and send it some coins.
There is no dedicated test environment(yet), so for now what we've been doing is taking the wallet source, editing Constants.java and setting DIGITAL_GOODS_STORE_BLOCK, AUTOMATED_TRANSACTION_BLOCK, AT_FIX_BLOCK_2 all to 0, and setting INITIAL_BASE_TARGET higher(add at least 2 0s to the end), edit the config file to remove the seed nodes, and recompile and you'll have a wallet you can instamine on and supports ATs.