簡體   English   中英

如何將參數傳遞給MyListener類中的@onStart方法或如何在@onStart之前運行方法

[英]How to pass a parameter to @onStart method in MyListener Class or to run a method before @onStart

我有一個參數化方法( readConfig_1(String path) )在TestNG Suite的MyListener類的@onStart方法中被調用

這是我編寫的參數化方法,實際上需要一個存儲XML文件的路徑。

public static void readConfig_1(String configXmlPath) 
{

            browser = CoreLib.fGetNodeText(configXmlPath, "config",
                    "browser");
             env = CoreLib.fGetNodeText(configXmlPath, "config", "env");
             release = CoreLib.fGetNodeText(configXmlPath, "config", "release");
            serverName = CoreLib.fGetNodeText(configXmlPath, env,
                    "serverName");
             host = CoreLib.fGetNodeText(configXmlPath, env, "host");
            userName = CoreLib.fGetNodeText(configXmlPath, env, "userName");
            passWord = CoreLib.fGetNodeText(configXmlPath, env, "passWord");
            portNumber = CoreLib.fGetNodeText(configXmlPath, env,
                    "portNumber");
            schema = CoreLib.fGetNodeText(configXmlPath, env, "schema");
            url = CoreLib.fGetNodeText(configXmlPath, env, "url");
            screenShotForPass=CoreLib.fGetNodeText(configXmlPath, env, "SCreenShotForPass");

            screenShotForFail=CoreLib.fGetNodeText(configXmlPath, env, "SCreenShotForFail");


            CoreLib.LOGGER.info("****************************************************");
            CoreLib.LOGGER.info("           Configuration Details                    ");
            CoreLib.LOGGER.info("****************************************************");

            CoreLib.LOGGER.info("Browser ::" + browser);
            CoreLib.LOGGER.info("env ::" + env);
            CoreLib.LOGGER.info("serverName ::" + serverName);
            CoreLib.LOGGER.info("host ::" + host);
            CoreLib.LOGGER.info("userName ::" + userName);
            CoreLib.LOGGER.info("passWord ::" + passWord);
            CoreLib.LOGGER.info("portNumber ::" + portNumber);
            CoreLib.LOGGER.info("schema ::" + schema);
            CoreLib.LOGGER.info("url::" + url);
            CoreLib.LOGGER.info("ScreenSnapShotForPass::"+screenShotForPass );
            CoreLib.LOGGER.info("ScreenSnapShotForFail::"+screenShotForFail );

        }

在下面看到的這個TestNG Suite中,我需要調用上面的方法,將一個參數傳遞給它,然后它才能繼續運行其他類編寫的測試。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Smoke Suite" parallel="false" preserve-order="true">

    <listeners>
        <listener class-name="com.healthcare.reports.MyListener"></listener>
    </listeners>



    <test name="XYZ Tests">
        <classes>

            <class name="com.healthcare.utility.Config">
                <methods>
                    <include name="readConfig_1"></include>
                </methods>
            </class>

            <class name="com.healthcare.businessLib.xyz.AddUserTests" />

        </classes>

    </test>


</suite> 

因此,我打算限制TestNG Suite讀取特定的Config.XML文件,該文件將具有其自己的值,例如Env,URL,瀏覽器等,可以在執行測試之前進行設置。 有沒有辦法可以做到這一點?

-根據其他帖子的建議,我認為將readConfig_1添加到@BeforeClass批注將解決此問題。 但是還有更多的東西----

我的偵聽器類具有@onStart批注,該批注需要在Suite的開頭運行配置文件。 正如您在下面看到的,我的偵聽器類具有來自配置文件的變量release_1

 public class MyListener implements ITestListener, ISuiteListener {

        // This belongs to ISuiteListener and will execute before the Suite start

        ReportLib report=new ReportLib();

        @Override
        public void onStart(ISuite arg0) {

            Config.readConfig_1(configXlsPath);
            ExportTestResults export = new ExportTestResults();
            export.exportExcelHeader(Config.release_1);
            CoreLib.fCreateLogger(Config.release_1);

        }

但是,如果我將其放在TestClass的@BeforeClass中,則這些變量( Config.release_1 )將返回null,因為它們將在測試類之前運行。 因此,我需要readconfig_1() 在偵聽器類之前或與之一起運行,並且無法向onStart(ISuite arg0)添加參數。 我也不能在@BeforeClass中運行readConfig方法

通過以下方式嘗試了一些方法:

  1. 即使在調用偵聽器類之前,也要以第一種方法運行TestNG.XML中的readConfig_1()。

  2. 使用參數化的readConfig_1()方法在偵聽器類中添加@BeforeClass批注-希望在執行onStart()之前調用readConfig。

     public class MyListener2 implements ITestListener, ISuiteListener{ 

    ReportLib report = new ReportLib();

      @BeforeClass @Parameters("configXlsPath") public void beforeSuite(String configXlsPath) { Config.readConfig_1(configXlsPath); } @Override public void onStart(ISuite arg0) { ExportTestResults export = new ExportTestResults(); System.out.println("In onStart(Listener_2)"+ Config.release_1); export.exportExcelHeader(Config.release_1); CoreLib.fCreateLogger(Config.release_1); } } 

但是沒有一個有效。 現在有辦法解決嗎?

---從我以前的問題轉貼此問題-

將您的public static void readConfig_1(String configXmlPath)放在一個類中,進行測試並在<listener>之前調用該測試,並在該偵聽器類中讀取該方法,如下所示

<suite name="Default suite" thread-count="5" group-by-instances="false" verbose="1" allow-return-values="false" parallel="false" data-provider-thread-count="10" junit="false" configfailurepolicy="skip" preserve-order="true" skipfailedinvocationcounts="false">
  <test verbose="2" name="pTest">

    <classes>
      <class name="firsttestngpackage.customParameter">
          <methods>
            <include name="getParams"/>
         </methods>
       </class>
    </classes>
  </test>
  <listeners>
      <listener class-name = "firsttestngpackage.myListener1" />
   </listeners>
  ...
  ...

下面是customeParameter class ,類似於您的readConfig_1

package firsttestngpackage;



public class customParameter {

    public static String getParams()  {

        return new String ("testParam1");
      }
}

listener class

package firsttestngpackage;

import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;
import firsttestngpackage.customParameter;

public class myListener1 implements ITestListener {

    String tParam = customParameter.getParams();
    @Override
    public void onTestSuccess(ITestResult result) {


        System.out.println("the method"  + "  "+result.getMethod().getMethodName() +"  "+ "passed and custom parameter is " + tParam);
    }

以上印刷品

the method gotoURL passed and custom parameter is testParam1

gotoURL是我的測試類中的一種方法,這里沒有顯示。 您應該能夠使用readConfig_1方法完成上述操作,並在您的偵聽器類(如yourClass.readConfig_1調用它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM