设为首页 收藏本站
查看: 1472|回复: 0

[经验分享] ginkgo在windows下的安装使用

[复制链接]

尚未签到

发表于 2017-6-29 09:57:24 | 显示全部楼层 |阅读模式
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 package's 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 bootstrap
Generating ginkgo test suite bootstrap for go_test_go in:
go_test_go_suite_test.go
$ ginkgo generate



  查看下生成的文件




$ ls -lrt
total 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 generate
Generating ginkgo test for Aaa in:
aaa_test.go

D:\workspace\hellogo\src\aaa>go test
testing: warning: no tests to run
PASS
ok      _/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"))
    })
    //  })
    })
    $ ginkgo
    Running Suite: K8sdemo Suite
    ============================
    Random Seed: 1472957391
    Will run 2 of 2 specs
    666200+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"))
    })
    //  })
    })
    $ ginkgo
    Running Suite: K8sdemo Suite
    ============================
    Random Seed: 1472957580
    Will run 2 of 2 specs
    666200+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"));
    })
    //  })
    })
    $ ginkgo
    Running Suite: K8sdemo Suite
    ============================
    Random Seed: 1472956009
    Will run 1 of 2 specs

    +
    ------------------------------
    P [PENDING]
    Node
    D:/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 seconds
    SUCCESS! -- 1 Passed | 0 Failed | 1 Pending | 0 Skipped PASS



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




    Running Suite: K8sdemo Suite
    ============================
    Random Seed: 1472956139
    Will run 1 of 2 specs

    S
    ------------------------------
    + Failure [0.001 seconds]
    Node
    D:/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 fail
    D:/workspace/k8sdemo/src/node_test.go:23
    Ran 1 of 2 Specs in 0.001 seconds
    FAIL! -- 0 Passed | 1 Failed | 0 Pending | 1 Skipped --- FAIL: TestK8sdemo (0.00s)
    FAIL
    Ginkgo ran 1 suite in 2.8093489s
    Test 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=SEED
    focus和skip
    --skipMeasurements
    --focus=REGEXP
    --skip=REGXP
    coverage
    -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=SEED
    focus和skip
    --skipMeasurements
    --focus=REGEXP
    --skip=REGXP
    coverage
    -race
    -cover
    失败动作
    --failOnPending 有pending的specs就认为是fail
    --failFast 失败就停止suite的运行
    其他
    -dryRun 只是遍历,非真实运行
    -keepGoing 多个suite有一个失败了仍能继续
    -untilItFails 一直运行知道失败
    --slowSpecThreshold=TIME_IN_SECONDS 标记运行缓慢的spec
    预编译
    ginkgo build xxxx
    生成xxxx.test
    ginkgo -p xxxx.test
    将xuint的转为ginkogo
    ginkgo convert xxxx
    benchmark tests
  •   TABLE DRIVEN TESTS

    使用Entry、DescrieTable将数据抽离出来传给函数去执行,这个有点像TestNg的DataProvider


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-389215-1-1.html 上篇帖子: Spark在Windows下的环境搭建 下篇帖子: windows下远程连接Mysql
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表