为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
回首忆惘然 2021-11-22 19:29:57
最近我一直在玩 golang 和谷歌的应用引擎。在实现存储库时,我遇到了非常缓慢的单元测试执行。我所做的就是ctx,_ := aetest.NewContext(nil)在每个测试中调用以获得一个干净的数据库。这会在每次测试中启动一个新服务器,从而导致测试缓慢。最近我一直试图通过在 TestMain 中启动它来解决这个问题。var ctx aetest.Contextfunc 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 bashPATH=$1cd $PATHecho "Cleaning datastore..."/usr/bin/sqlite3 datastore "delete from \"dev~testapp!!EntitiesByProperty\";"/usr/bin/sqlite3 datastore "delete from \"dev~testapp!!Entities\";"echo "Datastore is clean."是我想要做的有意义的事情还是有更简单的方法来实现更好的测试时间。
查看完整描述

1 回答

?
MYYA

TA贡献1868条经验 获得超4个赞

无种类的仅键查询(获取所有实体的键,无论种类如何)应该会有所帮助:


   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,但是,在本地数据存储上,我怀疑这不会产生可测量的差异。


查看完整回答
反对 回复 2021-11-22
  • 1 回答
  • 0 关注
  • 185 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信