1

我正在尝试使用Gikngo为 appengine 编写一些测试。

我的测试设置如下:

套件测试.go:

BeforeSuite() {
  inst, err = aetest.NewInstance(options)
  if err != nil {
    Fail(fmt.Sprintf("%s", err))
  }
}

var(
  req *http.Request
  ctx context.Context
)
BeforeEach() {
  req = inst.NewRequest()
  ctx = appengine.NewContext(req)

  // Clean up local datastore using the context.
}

验证测试.go

Describe("Some Test", func() {
  It("ValidateFoo", func() {
    // Access ctx here
  })
  ...
  It("ValidateBar", func() {
    // Access ctx here.
  })
})

我看到我们的测试一直挂着类型的错误:

Expected success, but got an error:
    <*url.Error | 0xc8210570b0>: {
        Op: "Post",
        URL: "http://localhost:59072",
        Err: {s: "EOF"},
    }
    Post http://localhost:59072: EOF

这似乎表明 API 服务器已变得不可访问。但是,测试输出似乎并未表明这一点。

我们可以通过哪些方式调试 goapp 测试?

4

1 回答 1

0

事实证明,Ginkgo 或 Golang 与此无关。每秒可以从 dev_appserver.py 读取的字段数似乎有一些限制。(我怀疑它可能与 dev_appserver 内部使用的数据库 SQLite 有关)。

下面的代码指出了问题:

package preorder

import (
    "fmt"
    "testing"

    "google.golang.org/appengine"
    "google.golang.org/appengine/aetest"
    "google.golang.org/appengine/datastore"
)

func TestLoad(t *testing.T) {
    opts := aetest.Options{StronglyConsistentDatastore: true}
    inst, _ := aetest.NewInstance(&opts)
    defer inst.Close()

    for i := 0; i < 10000; i++ {
        req, _ := inst.NewRequest("GET", "/", nil)
        ctx := appengine.NewContext(req)

        k := datastore.NewKey(ctx, ENTITY_NAME, "", 12345, nil)
        var entity Entity
        datastore.Get(ctx, k, &entity)
        fmt.Println("Iteration Count: ", i)
        ctx.Done()
    }
}

任何有关如何解决 240 次操作限制的帮助将不胜感激。我能想到的一种技术是人为地注入延迟。

于 2017-05-09T06:01:52.713 回答