首页 > 代码库 > ginkgo在windows下的安装使用

ginkgo在windows下的安装使用

 

<style></style>

ginkgo在windows下的安装使用

ginkgo是GOLANG的一个测试框架

https://github.com/onsi/ginkgo

安装

建一个自己的文件夹,如D:\workspace\go-test-go
在计算机->环境变量中设置GOPATH
打开git bash
执行

go get github.com/onsi/ginkgo/ginkgo
go get github.com/onsi/gomega

在git bash中cd到该目录

然后运行下ginkgo help,看下参数列表

Usage of ginkgo:  -a    Force rebuilding of packages that are already up-to-date.  -afterSuiteHook string        Run a command when a suite test run completes  -asmflags string        Arguments to pass on each go tool asm invocation.  -blockprofilerate int        Control the detail provided in goroutine blocking profiles by calling runtime.SetBlockProfileRate with the given value. (default 1)  -buildmode string        Build mode to use. See go help buildmode for more.  -compiler string        Name of compiler to use, as in runtime.Compiler (gccgo or gc).  -compilers int        The number of concurrent compilations to run (0 will autodetect)  -cover        Run tests with coverage analysis, will generate coverage profiles with the package name in the current directory.  -covermode string        Set the mode for coverage analysis.  -coverpkg string        Run tests with coverage on the given external modules.  -coverprofile string        Write a coverage profile to the specified file after all tests have passed.  -cpuprofile string        Write a CPU profile to the specified file before exiting.  -dryRun        If set, ginkgo will walk the test hierarchy without actually running anything.  Best paired with -v.  -failFast        If set, ginkgo will stop running a test suite after a failure occurs.  -failOnPending        If set, ginkgo will mark the test suite as failed if any specs are pending.  -flakeAttempts int        Make up to this many attempts to run each spec. Please note that if any of the attempts succeed, the suite will not be failed. But any failures will still be recorded. (default 1)  -focus string        If set, ginkgo will only run specs that match this regular expression.  -gccgoflags string        Arguments to pass on each gccgo compiler/linker invocation.  -gcflags string        Arguments to pass on each go tool compile invocation.  -installsuffix string        A suffix to use in the name of the package installation directory.  -keepGoing        When true, failures from earlier test suites do not prevent later test suites from running  -ldflags string        Arguments to pass on each go tool link invocation.  -linkshared        Link against shared libraries previously created with -buildmode=shared.  -memprofile string        Write a memory profile to the specified file after all tests have passed.  -memprofilerate int        Enable more precise (and expensive) memory profiles by setting runtime.MemProfileRate.  -msan        Enable interoperation with memory sanitizer.  -n go test        Have go test print the commands but do not run them.  -noColor        If set, suppress color output in default reporter.  -nodes int        The number of parallel test nodes to run (default 1)  -noisyPendings        If set, default reporter will shout about pending tests. (default true)  -outputdir string        Place output files from profiling in the specified directory.  -p    Run in parallel with auto-detected number of nodes  -pkgdir string        install and load all packages from the given dir instead of the usual locations.  -progress        If set, ginkgo will emit progress information as each spec runs to the GinkgoWriter.  -r    Find and run test suites under the current directory recursively.  -race        Run tests with race detection enabled.  -randomizeAllSpecs        If set, ginkgo will randomize all specs together.  By default, ginkgo only randomizes the top level Describe/Context groups.  -randomizeSuites        When true, Ginkgo will randomize the order in which test suites run  -regexScansFilePath        If set, ginkgo regex matching also will look at the file path (code location).  -seed int        The seed used to randomize the spec suite. (default 1471744764)  -skip string        If set, ginkgo will only run specs that do not match this regular expression.  -skipMeasurements        If set, ginkgo will skip any measurement specs.  -skipPackage string        A comma-separated list of package names to be skipped.  If any part of the packages path matches, that package is ignored.  -slowSpecThreshold float        (in seconds) Specs that take longer to run than this threshold are flagged as slow by the default reporter. (default 5)  -stream        stream parallel test output in real time: less coherent, but useful for debugging (default true)  -succinct        If set, default reporter prints out a very succinct report  -tags string        A list of build tags to consider satisfied during the build.  -toolexec string        a program to use to invoke toolchain programs like vet and asm.  -trace        If set, default reporter prints out the full stack trace when a failure occurs  -untilItFails        When true, Ginkgo will keep rerunning tests until a failure occurs  -v    If set, default reporter print out all specs as they begin.  -work        Print the name of the temporary work directory and do not delete it when exiting.  -x go test        Have go test print the commands.

 

 

生成一个测试套

$ ginkgo bootstrapGenerating ginkgo test suite bootstrap for go_test_go in:        go_test_go_suite_test.go$ ginkgo generate


查看下生成的文件

$ ls -lrttotal 2-rw-r--r-- 1 opama None 199 Aug 21 02:06 go_test_go_suite_test.go-rw-r--r-- 1 opama None 162 Aug 21 02:07 go_test_go_test.go
 

可以在一个已有工程为其添加test文件

D:\workspace\hellogo\src\aaa>ginkgo generateGenerating ginkgo test for Aaa in:  aaa_test.goD:\workspace\hellogo\src\aaa>go testtesting: warning: no tests to runPASSok      _/D_/workspace/hellogo/src/aaa  0.309s


用法摘要

ginko的测试代码由一些代码块组成:Describe 代码块描述了被测代码的行为,Context代码块则表示在不同环境下运用这些行为

  • 通常情况下,container块(Describe、Context块)内应该是个It块、BeforeEach、AfterEach或变量声明,而不应该放置断言。在container块中初始化了变量,如果其中一个It改变了它的值,后续的It取到的就是改变了的值,此时初始化变量总是应该在BeforeEach块中

    var _ = Describe("Node", func() {    //  Context("Context test",func() {    ret := node.GetNode("123")    result := comm.GetHttp("456")    //fmt.Print(ret);    BeforeEach(func() {        ret = 666        fmt.Print(ret);    })    It("just test suc", func() {        ret=200        fmt.Print(ret);        Expect(ret).Should(Equal(200))        Expect(result).Should(Equal("456"))    })    It("just test fail", func() {        fmt.Print(ret);        Expect(ret).Should(Equal("123"))        Expect(result).Should(Equal("4566"))    })    //  })})$ ginkgoRunning Suite: K8sdemo Suite============================Random Seed: 1472957391Will run 2 of 2 specs666200+666666
     
  • JustBeforeEach在所有BeforeEach块运行完之后并在It块运行之前运行

    var _ = Describe("Node", func() {    //  Context("Context test",func() {    ret := node.GetNode("123")    result := comm.GetHttp("456")    //fmt.Print(ret);    BeforeEach(func() {        ret = 666        fmt.Print(ret);    })    JustBeforeEach(func(){        ret=777    })    It("just test suc", func() {        ret=200        fmt.Print(ret);        Expect(ret).Should(Equal(200))        Expect(result).Should(Equal("456"))    })    It("just test fail", func() {        fmt.Print(ret);        Expect(ret).Should(Equal("123"))        Expect(result).Should(Equal("4566"))    })    //  })})$ ginkgoRunning Suite: K8sdemo Suite============================Random Seed: 1472957580Will run 2 of 2 specs666200+666777

     

  • By用于梳理和标记复杂的流程和步骤,成功了不会显示,失败则将步骤打印出来,通过在Describe、Context、It等加上P或X来标记其为pending

    var _ = Describe("Node", func() {//  Context("Context test",func() {        ret :=  node.GetNode("123");        result := comm.GetHttp("456");        It("just test suc", func() {            Expect(ret).Should(Equal(200));            Expect(result).Should(Equal("456"));        })        PIt("just test fail", func() {            Expect(ret).Should(Equal("123"));            Expect(result).Should(Equal("4566"));        })//  })})$ ginkgoRunning Suite: K8sdemo Suite============================Random Seed: 1472956009Will run 1 of 2 specs+------------------------------P [PENDING]NodeD:/workspace/k8sdemo/src/node_test.go:27  just test fail  D:/workspace/k8sdemo/src/node_test.go:25------------------------------Ran 1 of 2 Specs in 0.000 secondsSUCCESS! -- 1 Passed | 0 Failed | 1 Pending | 0 Skipped PASS

     



  • Focused Specs,只运行F开头的用例,也可以使用–focus=REGEXP, 注意该特若在ci中使用会造成exitcode非0

     
    Running Suite: K8sdemo Suite============================Random Seed: 1472956139Will run 1 of 2 specsS------------------------------+ Failure [0.001 seconds]NodeD:/workspace/k8sdemo/src/node_test.go:27  just test fail [It]  D:/workspace/k8sdemo/src/node_test.go:25  Expected      <int>: 200  to equal      <string>: 123  D:/workspace/k8sdemo/src/node_test.go:23------------------------------Summarizing 1 Failure:[Fail] Node [It] just test failD:/workspace/k8sdemo/src/node_test.go:23Ran 1 of 2 Specs in 0.001 secondsFAIL! -- 0 Passed | 1 Failed | 0 Pending | 1 Skipped --- FAIL: TestK8sdemo (0.00s)FAILGinkgo ran 1 suite in 2.8093489sTest Suite Failed

     

     
  • 同步方式的使用:SynchronizedBeforeSuite()传入两个func,第一个必须返回[]byte,第二个必须接受这个[]byte,如一个func是在一个节点起一个server返回endpoint,第二个函数是所有节点client接受endpoint并进行连接,并发时clinet需要等待sever启动再进行连接

    同理SynchronizedAfterSuite()传入两个func,第一个func需要全部节点都执行完成,再执行由第一个节点执行第二个func。如在上述的基础上第一个func关闭所有的client,第二个func停止server

    ginko对并发异步也能很好的支持测试,在非container块(its,BeforeEach)等增加了一个可选的参数func(done Done),ginkgo检查到done Done参数,遍用goroutine的方式运行body函数,需要通过关闭done channel或发送消息到channel来告诉ginkgo运行完成。如果超时了运行还未结束,ginkgo将把它标记为fail。运行下一个。

  • ginkgo常用命令:

    并行gingkgo 快速启动测试-p 并行--nodes=Node_total 指定并发节点数控制-r 遍历目录-skipPackage skip目录输出--noColor 无颜色--succinct 精简打印一行--v 详细打印用例的文本和位置--noisyPending 对pending的specs也给出信息--trace 失败打印堆栈信息--progress 将进入和运行每个部分的日志都打印出来 随机--seed=SEEDfocus和skip--skipMeasurements--focus=REGEXP--skip=REGXPcoverage-race-cover失败动作--failOnPending 有pending的specs就认为是fail--failFast 失败就停止suite的运行其他-dryRun 只是遍历,非真实运行-keepGoing 多个suite有一个失败了仍能继续-untilItFails 一直运行知道失败--slowSpecThreshold=TIME_IN_SECONDS 标记运行缓慢的spec并行gingkgo 快速启动测试-p 并行--nodes=Node_total 指定并发节点数控制-r 遍历目录-skipPackage skip目录输出--noColor 无颜色--succinct 精简打印一行--v 详细打印用例的文本和位置--noisyPending 对pending的specs也给出信息--trace 失败打印堆栈信息--progress 将进入和运行每个部分的日志都打印出来 随机--seed=SEEDfocus和skip--skipMeasurements--focus=REGEXP--skip=REGXPcoverage-race-cover失败动作--failOnPending 有pending的specs就认为是fail--failFast 失败就停止suite的运行其他-dryRun 只是遍历,非真实运行-keepGoing 多个suite有一个失败了仍能继续-untilItFails 一直运行知道失败--slowSpecThreshold=TIME_IN_SECONDS 标记运行缓慢的spec预编译ginkgo build xxxx生成xxxx.testginkgo -p xxxx.test将xuint的转为ginkogoginkgo convert xxxxbenchmark tests
  • TABLE DRIVEN TESTS
    使用Entry、DescrieTable将数据抽离出来传给函数去执行,这个有点像TestNg的DataProvider

 

ginkgo在windows下的安装使用