我希望能够在运行一些自动化测试时记录spock功能名称和子句标签.当使用无头浏览器进行自动化时,这有助于调试测试问题,特别是幻像.原因是,phantomjs的行为并不总是与使用chrome WebDriver时的行为相同.如果这是可能的话,那也很好.
def "Login logout test"(){
given: "Go to login page"
...
when: "Submit username and password"
...
then: "Dashboard page displayed"
...
when: "logout"
...
then: "Returned to login page"
...
}
Run Code Online (Sandbox Code Playgroud)
例如,如果我可以使用上面的示例spock功能方法来记录这样的标签,那将会很酷.
Login logout test
Go to login page
Submit username and password
logout
Returned to login page
Run Code Online (Sandbox Code Playgroud)
第1步: 创建自己的spock扩展类
package com.example.spock.exetension;
public class MySpockExtension implements IGlobalExtension {
@Override
public void start() {
}
@Override
public void visitSpec(SpecInfo spec) {
spec.addListener(new MyCustomSpockRunListener());
}
@Override
public void stop() {
}
}
Run Code Online (Sandbox Code Playgroud)
第2步:创建一个可以监听spock运行的RunListener
package com.example.spock.exetension;
public class MyCustomSpockRunListener extends AbstractRunListener {
private boolean specFailed;
private boolean featureFailed;
@Override
public void beforeSpec(SpecInfo spec) {
// TODO Auto-generated method stub
specFailed = false;
}
@Override
public void beforeFeature(FeatureInfo feature) {
// TODO Auto-generated method stub
featureFailed = false;
}
@Override
public void beforeIteration(IterationInfo iteration) {
}
@Override
public void afterIteration(IterationInfo iteration) {
}
@Override
public void afterFeature(FeatureInfo feature) {
// TODO Auto-generated method stub
for ( BlockInfo block : feature.getBlocks() ) {
System.out.println(block.getKind().name() + " : " + block.getTexts() );
}
}
@Override
public void afterSpec(SpecInfo spec) {
// TODO Auto-generated method stub
System.out.println(spec.getName() + " : STATUS : " + specFailed != null ? "failure":"success");
}
@Override
public void error(ErrorInfo error) {
specFailed = true;
FeatureInfo feature = error.getMethod().getFeature();
if (feature != null) {
featureFailed = true;
System.out.println(error.getMethod().getName() + " : " + error.getException());
}else {
}
}
@Override
public void specSkipped(SpecInfo spec) {
}
@Override
public void featureSkipped(FeatureInfo feature) {
}
}
Run Code Online (Sandbox Code Playgroud)
第3步:注册新的Spock扩展
META-INF/services/org.spockframework.runtime.extension.IGlobalExtensioncom.example.spock.exetension.MySpockExtensionStep4:运行你的spock测试,你应该看到这样的输出.
given: "Go to login page"
when: "Submit username and password"
then: "Dashboard page displayed"
when: "logout"
then: "Returned to login page"
Login logout test : STATUS : success
Run Code Online (Sandbox Code Playgroud)
经过不断搜索,我找到了这个获取测试名称的解决方案。但似乎在“何时”和“然后”标签上找不到任何内容。现在还可以。
import org.junit.Rule
import org.junit.rules.TestName
class MySpec extends Specification {
@Rule TestName name = new TestName()
def "some test"() {
expect: name.methodName == "some test"
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1509 次 |
| 最近记录: |