博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
testng.xml说明文档(TestNG基本模板、TestNG中配置按顺序执行Case、TestNG中配置组合测试)...
阅读量:5033 次
发布时间:2019-06-12

本文共 7178 字,大约阅读时间需要 23 分钟。

注意:1、当在 测试类 中直接单击运行的时候则会用默认的.xml来运行该测试方法;必须在.xml中点击运行的时候则该TestNG.xml才有效

          2、在创建TestNG测试类时可以自动生成对应的TestNG.xml文件,在创建类时生成xml文件和手动自己创建的xml文件都有效

testng说明文档:http://testng.org/doc/documentation-main.html

1、基本的testng.xml文档:

 2、TestNG按照顺序执行Case

 

方法一:不同的类及类中所包含的方法都分别在xml中配置,然后按顺序执行Case,这样可以让不同类中的多个方法都可以按照顺序执行Case

java代码:

public class TestPlan1 extends BrowserOption{	WebDriver dr=null;	String url=Demo.getprop("url");	String fcurl=Demo.getprop("fcurl");	String frameid="right_iframe";	MenuJump mj=new MenuJump();	int index=1;//index为sheet页,从0开始	     @BeforeMethod	public void beforeMethod(){		dr=Init.initchrome(dr);		System.out.println("1111111111111111111111111111111111111111111111");		Login.LoginChrom(dr, fcurl);				Demo.slp(3000);	}	     @AfterMethod	public void afterMethod(){		dr.quit();		//dr.close();	}		/**	 * 添加计划	 */	@Test(enabled=true)	public void addPlan(){		mj.jumpfinancePlan(dr);		mj.jumpfinancePlanT_1(dr);		Demo.slp(1000);				mj.toFram(dr, frameid);		int colNum=2;//第二列				String js="document.getElementById(\'addFinancePlan\').click()";		exeJS(dr, js);		Demo.slp(3000);				//计划模板名称	    Select s_tp=fSelect(dr, By.id("templateSelect"));	    s_tp.selectByIndex(1);	    	    /**	     * 取参数时可以用多种方式,可以从excel中读取,可以从.properties文件中读取,也可以直接赋值	     */	    //计划名称	    WebElement w_p_name=fFind(dr, By.name("financePlan.name"));	    w_p_name.clear();	    w_p_name.sendKeys(Demo.getExcel(index, 2, colNum));}}

 

/**	 * 更新草稿	 */	@Test(enabled=true)public void updatePlanC(){	mj.jumpfinancePlan(dr);	Demo.slp(1000);	mj.jumpfinancePlanT_1(dr);	Demo.slp(1000);	toFram(dr, frameid);		/**	 * 进入到修改计划界面(草稿)	 */	if(!isExist(dr,By.className("datagrid-cell-check "))){//根据第一行的复选框		addPlan();	}else {//有记录时执行修改操作(循环翻看每一页来获得需要修改的产品)		//获取显示总页数的那串字符		String Lnum=fFind(dr, By.xpath("//*[@id='planlist']/div[1]/div/div[3]")).findElement(By.xpath("//*[@id='planlist']/div[1]/div/div[3]/table/tbody/tr/td[8]/span")).getText();//		System.out.println(Lnum);		String number=Demo.getNUm(Lnum).get(0);//获取总页数		int number1=Integer.parseInt(number);//转换成int类型		//外层循环的是是否要翻页,某一页是否又符合的项,里面再调用对比是否有符合项的循环		for (int i = 0; i < number1; i++) {              //获取每一页所有的tr对象			List
trs=fFind(dr, By.xpath("//*[@id='planlist']/div[1]/div/div[2]/div[2]/div[2]/table")).findElements(By.tagName("tr"));// System.out.println("aaaaaaa"+trs.size()); WebElement wbtr=Demo.getpoduct(trs, dr, By.className("datagrid-cell "));//获得具体的tr对象 if(wbtr!=null){ if(!wbtr.isSelected()){ wbtr.click();//返回对应的对象并点击选中 }else { System.err.println("选中计划时出错!!"); } break; }else {//执行翻页操作 WebElement btn_next=fFind(dr, By.xpath("//*[@id='planlist']/div[1]/div/div[3]/table/tbody/tr/td[10]/a/span/span")); btn_next.click(); Demo.slp(3000); continue; } } //点击修改计划按钮 String js="document.getElementById(\"updateFinancePlan\").click()"; exeJS(dr, js); Demo.slp(5000); /** * 修改计划界面 */

java代码说明:以上用的是  @BeforeMethod、@AfterMethod这两个注解,指的是在执行每一个测试方法前/后 都执行公共方法,这样的缺点是每当执行一个测试方法时都要重新的登陆,造成反复登陆的缺陷

 

TestNG.xml中配置:在testng.xml中,可以控制测试用例按顺序执行。  当preserve-order="true"是,可以保证节点下面的方法是按顺序执行的

 

方法二:用TestNG的组合测试 

注意:组合测试时,例如计划修改和更新,更新界面和修改界面的标签的name等属性一般都是保持一致的,所以当用组合测试时,很容易报找不到标签的问题,因为新增界面和修改界面都可以找到该属性值元素,但程序无法正确判断要调用哪一个,所以会出现非组合测试时程序可以正常运行,当组合测试时就会报错误,所以当想用组合测试时在更新界面需要获取上一级的元素对象(这也是分层获取元素对象的好处)然后再获该界面的对应的元素就可以避免该问题出现(参照例子:修改计划和更新计划)

java代码:

 

public class TestPlan1 extends BrowserOption{	WebDriver dr=null;	String url=Demo.getprop("url");	String fcurl=Demo.getprop("fcurl");	String frameid="right_iframe";	MenuJump mj=new MenuJump();	int index=1;//index为sheet页,从0开始	//     @BeforeMethod	 @BeforeGroups(groups={"grps"})	public void beforeMethod(){		dr=Init.initchrome(dr);		System.out.println("1111111111111111111111111111111111111111111111");		Login.LoginChrom(dr, fcurl);				Demo.slp(3000);				mj.jumpfinancePlan(dr);		Demo.slp(1000);		mj.jumpfinancePlanT_1(dr);		Demo.slp(1000);		toFram(dr, frameid);			}	//     @AfterMethod	 @AfterGroups(groups={"grps"})	public void afterMethod(){		dr.quit();		//dr.close();	}		/**	 * 添加计划	 */	@Test(enabled=true,groups={"grps"})	public void addPlan(){//		mj.jumpfinancePlan(dr);//		mj.jumpfinancePlanT_1(dr);//		Demo.slp(1000);//		//		mj.toFram(dr, frameid);		int colNum=2;//第二列				String js="document.getElementById(\'addFinancePlan\').click()";		exeJS(dr, js);		Demo.slp(3000);				//计划模板名称	    Select s_tp=fSelect(dr, By.id("templateSelect"));	    s_tp.selectByIndex(1);	    	    /**	     * 取参数时可以用多种方式,可以从excel中读取,可以从.properties文件中读取,也可以直接赋值	     */	    //计划名称	    WebElement w_p_name=fFind(dr, By.name("financePlan.name"));	    w_p_name.clear();	    w_p_name.sendKeys(Demo.getExcel(index, 2, colNum));}}
/**	 * 更新草稿	 */	@Test(enabled=true,groups={"grps"})public void updatePlanC(){//	mj.jumpfinancePlan(dr);//	Demo.slp(1000);//	mj.jumpfinancePlanT_1(dr);//	Demo.slp(1000);//	toFram(dr, frameid);		/**	 * 进入到修改计划界面(草稿)	 */	if(!isExist(dr,By.className("datagrid-cell-check "))){//根据第一行的复选框		addPlan();	}else {//有记录时执行修改操作(循环翻看每一页来获得需要修改的产品)		//获取显示总页数的那串字符		String Lnum=fFind(dr, By.xpath("//*[@id='planlist']/div[1]/div/div[3]")).findElement(By.xpath("//*[@id='planlist']/div[1]/div/div[3]/table/tbody/tr/td[8]/span")).getText();//		System.out.println(Lnum);		String number=Demo.getNUm(Lnum).get(0);//获取总页数		int number1=Integer.parseInt(number);//转换成int类型		//外层循环的是是否要翻页,某一页是否又符合的项,里面再调用对比是否有符合项的循环		for (int i = 0; i < number1; i++) {              //获取每一页所有的tr对象			List
trs=fFind(dr, By.xpath("//*[@id='planlist']/div[1]/div/div[2]/div[2]/div[2]/table")).findElements(By.tagName("tr"));// System.out.println("aaaaaaa"+trs.size()); WebElement wbtr=Demo.getpoduct(trs, dr, By.className("datagrid-cell "));//获得具体的tr对象 if(wbtr!=null){ if(!wbtr.isSelected()){ wbtr.click();//返回对应的对象并点击选中 }else { System.err.println("选中计划时出错!!"); } break; }else {//执行翻页操作 WebElement btn_next=fFind(dr, By.xpath("//*[@id='planlist']/div[1]/div/div[3]/table/tbody/tr/td[10]/a/span/span")); btn_next.click(); Demo.slp(3000); continue; } } //点击修改计划按钮 String js="document.getElementById(\"updateFinancePlan\").click()"; exeJS(dr, js); Demo.slp(5000);

java代码说明:以上用的是  @BeforeGroups、 @AfterGroups这两个注解,@BeforeGroups指的是 被配置的方法将在列表中的gourp前运行。这个方法保证在第一个属于这些组的测试方法调用前立即执行。

@AfterGroups指的是 被配置的方法将在列表中的gourp后运行。这个方法保证在最后一个属于这些组的测试方法调用后立即执行。

该方法 的好处是当执行完该组内所有的测试方法后才会退出操作,避免反复登陆的缺陷

TestNG.xml中配置:在testng.xml中,可以控制测试用例按顺序执行。 可以保证节点下面的方法是按顺序执行的

  

 

 

 

 

 

转载于:https://www.cnblogs.com/baixiaozheng/p/4992494.html

你可能感兴趣的文章
Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
查看>>
在Vs2012 中使用SQL Server 2012 Express LocalDB打开Sqlserver2012数据库
查看>>
Excel催化剂开源第42波-与金融大数据TuShare对接实现零门槛零代码获取数据
查看>>
【转】常用的latex宏包
查看>>
[TMS320C674x] 一、GPIO认识
查看>>
酷狗的皮肤文件存放在哪
查看>>
C++的引用
查看>>
T-SQL查询进阶--深入浅出视图
查看>>
MapKeyboard 键盘按键映射 机械革命S1 Pro-02
查看>>
Android读取url图片保存及文件读取
查看>>
完整ASP.Net Excel导入
查看>>
判断CPU大小端示例代码
查看>>
ARTS打卡第13周
查看>>
循环队列的运用---求K阶斐波那契序列
查看>>
pta 编程题14 Huffman Codes
查看>>
初始化bootstrap treeview树节点
查看>>
JS常用坐标
查看>>
关于git的认证方式
查看>>
keepalived介绍
查看>>
css3 标签 background-size
查看>>