Agent 系列(21):Harness 测试工程——45 个测试怎么设计,以及它发现了什么 bug 📅 2026/6/17 22:10:23 为什么 Harness 需要专属测试套件普通业务逻辑测试覆盖"应该发生什么",Harness 测试还要覆盖"不应该发生什么":未注册动作不能被执行IRREVERSIBLE 动作不能在审批前运行预算耗尽后所有动作都必须被拦截注入载荷必须被检测出来这类负向测试用业务逻辑测试框架很难自然写出来;专门的 Harness 测试套件才是第一公民。套件结构tests/ ├── conftest.py 共享夹具和 mock handlers ├── test_functional.py 19 个功能测试 ├── test_adversarial.py 17 个对抗测试 └── test_chaos.py 9 个混沌测试加上run_tests.py——带进度栏和汇总表的自定义运行器,适合 CI 或人工检查。设计模式一:conftest 共享夹具所有测试共享同一套 mock handlers 和AgentHarness工厂:# tests/conftest.py_store:dict[str,str]={}_sent_reports:list[str]=[]_deleted:list[str]=[]defmock_read(key:str)-str:return_store.get(key,f"{key}: (empty)")defmock_write(key:str,value:str)-str:_store[key]=valuereturnf"written{key}={value!r}"defmock_send(to:str,body:str)-str:_sent_reports.append(f"{to}:{body}")returnf"sent to{to}"defmock_delete(key:str)-str:_deleted.append(key)_store.pop(key,None)returnf"deleted{key}"defmake_harness(budget:int=100,log_suffix:str="")-AgentHarness:h=AgentHarness(budget=budget,log_path=f"/tmp/harness_test{log_suffix}.jsonl")h.registry.register(RegisteredAction(