软件包 aetest 提供了一个用于运行 dev_appserver 的 API,以便在测试中使用。
测试文件示例:
package foo_test import ( "testing" "google.golang.org/appengine/memcache" "google.golang.org/appengine/aetest" ) func TestFoo(t *testing.T) { ctx, done, err := aetest.NewContext() if err != nil { t.Fatal(err) } defer done() it := &memcache.Item{ Key: "some-key", Value: []byte("some-value"), } err = memcache.Set(ctx, it) if err != nil { t.Fatalf("Set err: %v", err) } it, err = memcache.Get(ctx, "some-key") if err != nil { t.Fatalf("Get err: %v; want no error", err) } if g, w := string(it.Value), "some-value" ; g != w { t.Errorf("retrieved Item.Value = %q, want %q", g, w) } }
环境变量 APPENGINE_DEV_APPSERVER 指定要使用的 dev_appserver.py 可执行文件的位置。如果未设置,则查询系统 PATH。
变量
PrepareDevAppserver
var PrepareDevAppserver func() error
PrepareDevAppserver 是钩子,如果设置,则将在每次启动 dev_appserver.py 之前都会调用它。如果从 goapp 测试工具调用 aetest.NewContext,则不需要此钩子。
函数
func Login
Login 让提供的 Request 表现得就像给定用户发出的一样。
func Logout
Logout 让提供的 Request 表现得就像已注销的用户发出的一样。
func NewContext
NewContext 启动开发 API 服务器的实例,并返回将所有 API 调用路由到该服务器的上下文,以及在不再需要 Context 时必须调用的闭包。
Instance
type Instance interface {
// Close kills the child api_server.py process, releasing its resources.
io.Closer
// NewRequest returns an *http.Request associated with this instance.
NewRequest(method, urlStr string, body io.Reader) (*http.Request, error)
}
Instance 表示开发 API 服务器的运行实例。
func NewInstance
NewInstance 启动 api_server.py 的运行实例,该实例可用于将所有 App Engine API 调用委托给该实例的多个测试 Context。 如果 opts 为 nil,则使用默认值。
Options
type Options struct {
// AppID specifies the App ID to use during tests.
// By default, "testapp".
AppID string
// StronglyConsistentDatastore is whether the local datastore should be
// strongly consistent. This will diverge from production behaviour.
StronglyConsistentDatastore bool
// SupportDatastoreEmulator is whether use Cloud Datastore Emulator or
// use old SQLite based Datastore backend or use default settings.
SupportDatastoreEmulator *bool
// SuppressDevAppServerLog is whether the dev_appserver running in tests
// should output logs.
SuppressDevAppServerLog bool
// StartupTimeout is a duration to wait for instance startup.
// By default, 15 seconds.
StartupTimeout time.Duration
}
Options 用于在创建 Instance 时指定选项。