2013-09-05 122 views
5

Tôi có một tập hợp các kiểm tra Spec mà tôi đang thực hiện trong một dự án Grails.Thực hiện các xét nghiệm Geb cụ thể theo môi trường

Tôi cần phải thực hiện một số thông số kỹ thuật nhất định khi tôi ở địa phương và một bộ Spec khác khi tôi chạy môi trường trước sản phẩm. Cấu hình hiện tại của tôi đang thực hiện tất cả thông số kỹ thuật của tôi cùng một lúc cho cả hai môi trường, đó là điều tôi muốn tránh.

Tôi có nhiều môi trường, mà tôi đã cấu hình trong GebConfig tôi:

environments { 
    local { 
     baseUrl = "http://localhost:8090/myApp/login/auth" 
    } 

    pre-prod { 
     baseUrl = "https://preprod/myApp/login/auth" 
    } 

} 

Trả lời

4

Bạn có thể sử dụng một tập tin Spock config.

Tạo chú thích cho hai loại thử nghiệm - @Local@PreProd, ví dụ như trong Groovy:

import java.lang.annotation 

@Retention(RetentionPolicy.RUNTIME) 
@Target([ElementType.TYPE, ElementType.METHOD]) 
@Inherited 
public @interface Local {} 

Bước tiếp theo là để chú thích thông số kỹ thuật của bạn cho phù hợp, ví dụ:

@Local 
class SpecificationThatRunsLocally extends GebSpec { ... } 

Sau đó tạo a SpockConfig.groovy tệp bên cạnh tệp GebConfig.groovy của bạn với các nội dung sau:

def gebEnv = System.getProperty("geb.env") 
if (gebEnv) { 
    switch(gebEnv) { 
     case 'local': 
      runner { include Local } 
      break 
     case 'pre-prod': 
      runner { include PreProd } 
      break 
    } 
} 

EDIT: Có vẻ như Grails đang sử dụng nhân vật thử nghiệm riêng của nó có nghĩa là SpockConfig.groovy không được tính đến khi chạy thông số kỹ thuật từ Grails. Nếu bạn cần nó để làm việc dưới Grails thì bạn nên sử dụng @ IgnoreIf/@ Require chú thích mở rộng được xây dựng trong Spock.

Trước tiên, hãy tạo một lớp Đóng với logic khi có một thông số cụ thể được cho phép. Bạn có thể đặt logic trực tiếp như là một đối số đóng cửa cho các chú thích mở rộng nhưng nó có thể gây phiền nhiễu để sao chép mã bit đó khắp nơi nếu bạn muốn chú thích nhiều thông số kỹ thuật.

class Local extends Closure<Boolean> { 
    public Local() { super(null) } 
    Boolean doCall() { 
     System.properties['geb.env'] == 'local' 
    } 
} 

class PreProd extends Closure<Boolean> { 
    public PreProd() { super(null) } 
    Boolean doCall() { 
     System.properties['geb.env'] == 'pre-prod' 
    } 
} 

Và rồi chú thích thông số kỹ thuật của bạn:

@Requires(Local) 
class SpecificationThatRunsLocally extends GebSpec { ... } 

@Requires(PreProd) 
class SpecificationThatRunsInPreProd extends GebSpec { ... } 
+0

Cảm ơn erdi cho bạn phản ứng, nhưng làm thế nào để tôi tạo chú thích xin vui lòng, bạn có ví dụ? Tx – ErEcTuS

+0

Xem phản hồi được cập nhật của tôi – erdi

+0

erdi, SockConfig của tôi không được 'nhìn thấy' bởi ứng dụng grails của tôi..và tôi đặt nó ở cùng gói với gebConfig. Trong khi gỡ lỗi, mã bên trong spockconfig không bao giờ đạt được – ErEcTuS