go/appengine:更快的数据存储测试

最近我一直在玩 golang 和谷歌的应用引擎。


在实现存储库时,我遇到了非常缓慢的单元测试执行。


我所做的就是ctx,_ := aetest.NewContext(nil)在每个测试中调用以获得一个干净的数据库。这会在每次测试中启动一个新服务器,从而导致测试缓慢。


最近我一直试图通过在 TestMain 中启动它来解决这个问题。


var ctx aetest.Context


func TestMain(m *testing.M) {

    ctx,_ = aetest.NewContext(nil)

    code := m.Run()

    ctx.Close()

    os.Exit(code)

}


func TestMyRepository(t *testing.T){

    cleanDatastore()

    repo := &MyRepository{ctx}

    repo.DoSomething()

}

在函数cleanDatastore 中,我一直在执行一个 bash 脚本,该脚本基本上运行一个 SQLite 命令来清理保存在 /tmp 中的本地数据库。


#!/usr/bin/env bash


PATH=$1

cd $PATH


echo "Cleaning datastore..."


/usr/bin/sqlite3 datastore "delete from \"dev~testapp!!EntitiesByProperty\";"

/usr/bin/sqlite3 datastore "delete from \"dev~testapp!!Entities\";"


echo "Datastore is clean."

是我想要做的有意义的事情还是有更简单的方法来实现更好的测试时间。


回首忆惘然
浏览 186回答 1
1回答

MYYA

无种类的仅键查询(获取所有实体的键,无论种类如何)应该会有所帮助:   q := datastore.NewQuery("").KeysOnly()然后,您遍历所有这些键并删除它们中的每一个,例如:   for t := q.Run(ctx); ; {        key, err := t.Next(nil)        if err == datastore.Done {            break        }        if err != nil {            serveError(c, w, err)            return        }        datastore.Delete(ctx, key)    }将键放入数组并使用可能会稍微快一些DeleteMulti,但是,在本地数据存储上,我怀疑这不会产生可测量的差异。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go