2017-05-06 99 views
1

我正在尝试使用Gikngo来为appengine编写一些测试。Gikngo测试在goapp测试期间挂起

我为测试设置如下:

suite_test.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. 
} 

validation_test.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测试的方式有哪些?

回答

0

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

下面的代码指出了问题:

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个业务限额任何帮助,将不胜感激。我能想到的一种技术是人工注入延迟。