我对Java,Selenium和TestNG还是相当陌生,如果问题很基本,请和我一起裸露。我正在寻找一种捕获发生TestNG的内部断言的方法。考虑以下结构
@WebTest
@Test(groups = {"main_feature"} )
public void Check_Home_page () {
flow.login(); //Inside login() we do assertion to find login was successful
flow.ValidateProfilePic(); //Inside ValidateProfilePic() we do assertion to find picture section is available
}
我们将按如下方式运行xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Smoke Result" parallel="false" thread-count="0">
<parameter name="seleniumHub" value="false" />
<parameter name="hubUrl" value="http://someurl:1144/wd/hub" />
<test name="Test Run">
<parameter name="webPageUrl" value="http://mttesting.com" />
<parameter name="browser" value="chrome" />
<groups>
<run>
<include name="main_feature" />
</run>
</groups>
<classes>
<class name="test.HomeTest" />
</classes>
</test>
<listeners>
<listener class-name="selenium.DefaultCapability"></listener>
<listener class-name="selenium.WebCapability"></listener>
</listeners>
</suite>
一旦执行结束,在报表we should
中就可以看到
测试用例运行:2,失败:0 Check_Home_page
登录(通过)
ValidateProfilePic(通过)
现在,当我跑步时,我得到Testcase Run : 1
,并且内部断言(我不知道该怎么称呼)根本不在画面中。
如果有实现此目标的方法,请提出建议。
我能理解你想说什么。在TestNg中,@Test
表示1个测试用例。您期望如果在一个@Test
方法/测试用例中对2个功能进行断言,它将在Result中显示为测试用例中的2个。这不是真的。
Testng或其他测试框架无法根据您所应用的断言数量起作用。他们看到我们有多少@Test
个方法。
让我们来解决。您可以将您的一个测试用例划分为两个测试用例,如下所示,并对每个应用特定的断言。标准做法是@Test
应该只包含一个断言。请看下面的代码:
测试-1:
@Test(groups = {"main_feature"} )
public void testHomePage () {
flow.login(); //we do assertion to find login was successful
}
Test -2:
@Test(groups = {"main_feature"} )
public void testProfilePicture () {
flow.login(); // I think login is required to access Profile Picture and not necessary to apply assertion again here. As we have separate test case for it.
flow.ValidateProfilePic(); //we do assertion to find picture section is available
}
我希望它会有所帮助。