TestNG的.在所有测试之前需要运行特定方法并在所有测试之后进行特定测试

use*_*807 2 testng maven

使用Selenium + TestNG + Maven.

我想使用OWASP ZAP自动测试漏洞.为此,我需要在所有测试之前启动ZAProxyScanner - 在所有测试之前执行方法.

public void initZap(){
        zapScanner = new ZAProxyScanner(ZAP_PROXYHOST,ZAP_PROXYPORT,ZAP_APIKEY);
        zapScanner.clear(); //Start a new session
        zapSpider = (Spider)zapScanner;
}
Run Code Online (Sandbox Code Playgroud)

并且当执行所有功能测试时 - 运行测试以搜索漏洞

@Test
public void scanning() throws ClientApiException{
    spiderWithZap();
    setAlertAndAttackStrength();
    zapScanner.setEnablePassiveScan(true);
    scanWithZap();
}
Run Code Online (Sandbox Code Playgroud)

方法和测试位于一个类中,例如 public class TestSecurity

以下是包含功能测试的包的testng.xml示例

<suite name="Chrome" thread-count="1" parallel="tests" configfailurepolicy="continue">
<test name="chrome">
    <parameter name="browser" value="chrome"/>
    <packages>
        <package name="tests.suiteLogIn"></package>
        <package name="tests.suiteSettings"></package>
        <package name="tests.suiteSearch"></package>
    </packages>    
</test>
Run Code Online (Sandbox Code Playgroud)

UPD.在其中发布带有AfterTest的修改代码.我只使用Before/AfterMethod注释

    @BeforeMethod(alwaysRun=true)
@Parameters({"browser", "environment"})
public void setUp(@Optional ("firefox") String browser, @Optional ("local") String environment, Method method) throws IOException {
    System.out.println("Test name: " + method.getName());  
    WebDriver driver = getMyDriver(browser, environment);
    System.setProperty(ESCAPE_PROPERTY, "false");
}

@AfterMethod(alwaysRun=true)
@Parameters("browser")
public void tearDown(@Optional ("firefox") String browser){
    DriverMaster.stopDriver();
}

@BeforeSuite
@Parameters("browser")
public void startZap(@Optional ("firefox") String browser){
    if(browser.equals("firefox")){
        sec.initZap();
    }
}

@AfterSuite
@Parameters("browser")
public void scanZap(@Optional ("firefox") String browser) throws ClientApiException{
    if(browser.equals("firefox")){
        LoginPage lp = new LoginPage(getDriverInstance()).load();
        lp.login("name", "pass");
        sec.scanning();
    }
}
Run Code Online (Sandbox Code Playgroud)

nih*_*neo 6

你基本上有两个选择:

  1. 使用@BeforeSuite和@AfterSuite并将其包含在要运行的文件中或使所有类扩展它

  2. 使用ITestListenerISuiteListener并将setup和teardown代码放在​​before和after方法中.

对于听众来说,我能看到的一个好处是,如果你想根据一些测试结果进行有条件的拆解(扫描),你也可以控制它.