我在TestNG套件中的MyListener类的@OnStart方法中调用了一个参数化方法(ReadConfig_1(String path)
)
下面是我编写的参数化方法,它实际上需要一个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套件中,我需要调用上面的方法传递一个参数,然后它才能继续运行在其他类中编写的测试。
<?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套件读取特定的config.xml文件,该文件将在执行测试之前设置自己的值,如Env、URL、browser等。我有什么办法可以做到这一点吗?
--根据其他帖子的建议,我认为将readConfig_1添加到@BeforeClass注释中可以解决这个问题。但还有更多的----
我的侦听器类有@onstart注释,它需要配置文件在套件开始时运行。如下所示,我的侦听器类具有来自配置文件的变量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()在Listener类之前或与Listener类一起运行,并且无法向onStart(isuitearg0)添加参数。我也不能在@BeforeClass中运行readConfig方法
尝试了几件事:
>
甚至在可以调用侦听器类之前,就在testng.xml中运行readConfig_1()作为第一个方法。
在侦听器类中添加一个@BeforeClass注释,其中参数化了readconfig_1()
方法-希望在执行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);
}
}
但没有一个奏效。现在有办法解决这个问题吗?
---把我以前的问题转过来---
将您的公共静态void readConfig_1(String configXmlPath)
放入类中,在
<listener>
之前进行测试并调用测试,然后在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类
,它类似于您的ReadConfig_1
package firsttestngpackage;
public class customParameter {
public static String getParams() {
return new String ("testParam1");
}
}
和侦听器类
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);
}
上面的指纹
gotoURL传递的方法和自定义参数是testParam1
gotourl
是我的测试类中的一个方法,这里没有展示。您应该能够使用readconfig_1
方法执行上述操作,并在您的侦听器类中调用它,如YourClass.readconfig_1
为了实现BrowserStack自动化,我已经将testNG与cucumber集成在一起,我希望在初始化浏览器之前为其设置功能。因此,当我通过testing.xml文件将功能作为参数传递给@before方法时,我会得到以下错误- *io.cucumber.java.invalidMethodSignatureException:用Before、After、BeforeStep或AfterStep注
onStart: Function 当动画开始渲染时执行此事件函数,有可能会被执行多次,因为动画是可以重复开始的。 TweenMax.to('.box', 2, { x: 500, onStart:function(){ ... } }); onStart适用于TweenMaxTweenLite onStart的参数 onStart 示例 .box
onStart: Function 当时间轴开始时执行的回调函数。 当前时间轴设置的delay会影响onStart的执行,但时间轴内的动画的delay不会影响动画在时间轴的开始时间。 new TimelineMax({onStart: myFunction}); onStart适用于TimelineMaxTimelineLite onStart的参数 onStart 示例 .box {
方法调用'get view().findviewbyid(r.id.datePurchased)'可能会生成'java.lang.NullPointerException'
错误:不兼容的类型:DrawerListItem不能转换为Cap#1,其中Cap#1是一个新的类型变量:Cap#1从capture的capture扩展了BaseListItem?扩展基线 我不明白为什么这是错误的。,。我试着阅读了其他关于泛型类型和类型参数的文章,但它们似乎都没有解决这个问题。
问题内容: 我正在尝试在RMI方法中添加参数。当我添加例如一切正常。但是我不确定是否可以传递我创建的对象。我是RMI的新手,所以我的代码非常简单: HelloIF 你好 RMI服务器 RMI客户端 最后是我的课堂上下文 我应该怎么做才能使传递上下文成为可能? 问题答案: 您的对象应实现。如我所见,这将是一个问题。之所以需要这样做是因为两个部分之间的通信是使用序列化完成的,因此需要发送给另一部分的每