Performance 如何加速谷歌应用引擎Go单元测试?
我目前正在为运行在GAE-Go上的包编写许多单元测试。讨论中的软件包主要用于保存数据并从appengine/datastore加载数据。因此,我有大约20个单元测试文件,看起来有点像这样:Performance 如何加速谷歌应用引擎Go单元测试?,performance,unit-testing,google-app-engine,optimization,go,Performance,Unit Testing,Google App Engine,Optimization,Go,我目前正在为运行在GAE-Go上的包编写许多单元测试。讨论中的软件包主要用于保存数据并从appengine/datastore加载数据。因此,我有大约20个单元测试文件,看起来有点像这样: package Data import ( "appengine" "appengine/aetest" . "gopkg.in/check.v1" "testing" ) func TestUsers(t *testing.T) { TestingT(t) } type
package Data
import (
"appengine"
"appengine/aetest"
. "gopkg.in/check.v1"
"testing"
)
func TestUsers(t *testing.T) { TestingT(t) }
type UsersSuite struct{}
var _ = Suite(&UsersSuite{})
const UserID string = "UserID"
func (s *UsersSuite) TestSaveLoad(cc *C) {
c, err := aetest.NewContext(nil)
cc.Assert(err, IsNil)
defer c.Close()
...
因此,每个单独的测试文件似乎都在启动自己的devappserver版本:
重复20次,我的单元测试运行10分钟以上
我想知道,如何加快测试套件的执行速度?我应该只有一个文件来创建aetest.NewContext并通过它,还是因为我为每个单元测试使用了单独的套件?如何加快速度?您可以使用自定义的
TestMain
函数:
var ctx aetest.Context
var c aetest.Context
func TestMain(m *testing.M) {
var err error
ctx, err = aetest.NewContext(nil)
if err != nil {
panic(err)
}
code := m.Run() // this runs the tests
ctx.Close()
os.Exit(code)
}
func TestUsers(t *testing.T) {
// use ctx here
}
这样,所有测试都会启动一次dev服务器。有关TestMain的更多详细信息,请参见:。您可以复制更多日志,尤其是占用大部分时间的部分吗?我不使用GAE,所以您应该自己调试它,但是在@EmilDavtyan中似乎有几个地方会出现15秒的超时等待,大多数日志看起来像附加的日志。只是有很多日志。我猜创建上下文的每个函数也会要求关闭上下文,所以这可能是导致它变慢的原因…为什么您要有效地测试另一个包?@freeformz我不是在测试另一个包,而是在测试一个使用appengine包的包。谢谢!这使我的测试速度提高了约100万%。