webUI自动化测试框架(四):代码分层-操作层及用例层

前面将基础打好了,接下来就是具体的使用了,业务层主要是页面中的各种业务操作,如登录,修改用户信息等,我们把这些操作都封装在业务类中,如登录操作,我们把它封装成一个类,登录的大致流程为打开登录页,输入用户名密码,点击登录按钮,这样一个完整的登录业务就算完成了。

那为什么不直接写在测试类中呢,这样是为了将业务操作与测试用例分离,因为多个用例可能是对应一个业务操作的,这样,我业务代码是不用动的,只需要修改用例就好了,这样也是为了代码的可读性,重用性和易维护性。

如下,进入正题:

先看代码分层:


1.业务层:登录类Login:

package com.etyero.action;

import org.openqa.selenium.WebDriver;

import com.etyero.object.BasePage;


public class Login {
	private WebDriver driver;
	private BasePage loginPage;

	public Login(WebDriver driver) {
		this.driver = driver;
	}

	// 登录操作
	public void login(String username, String pwd) throws Exception {
		loginPage = new BasePage(driver, "loginPage");//这里的pageName要对应page.xml文件中的page标签值
		loginPage.sendKey("登录输入账号框", username);//登录输入账号框对应的是page.xml中设置的元素名称
		loginPage.sendKey("登录输入密码框", pwd);
		loginPage.click("登录");
	}
}


2.用例层,也是实际的测试脚本,调用业务层中的各项业务操作并断言结果是否符合预期.

登录测试类:LoginTest

package com.etyero.testcase;

import org.openqa.selenium.WebDriver;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Listeners;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

import com.etyero.action.Login;
import com.etyero.object.BasePage;
import com.etyero.utils.BrowserUtil;
import com.etyero.utils.TestNGListener;

@Listeners({TestNGListener.class})
public class LoginTest {
	private WebDriver driver;
	private Login login;
	@DataProvider(name = "loginParams")
	public Object[][] loginParams(){
		return new Object[][]{{"li","1111","用户名或密码错误"},{"li","","请输入登录密码!"},{"","123456","请输入登录账户!"}};
	}

	@BeforeClass
	@Parameters({"browserDriverUrl","url"})
	public void beforeClass(String browserDriverUrl,String url) {
		driver = BrowserUtil.chrome(browserDriverUrl,30);
		//在内存中运行,不用启用浏览器,使用该方法无法使用截图功能
		//driver = new HtmlUnitDriver();
		driver.get(url);
	}
	@BeforeMethod
	public void BeforeMethod(){
		login = new Login(driver);
		TestNGListener.setDriver(driver);
	}

	
	@Test(dataProvider = "loginParams",description = "异常用户信息登录")
	public void login02(String username,String pwd,String expectedTip) throws Exception{
		login.login(username, pwd);
		String tip = new BasePage(driver, "loginPage").getText("错误提示");
		Assert.assertEquals(tip, expectedTip);
	}
	
	@Test(dependsOnMethods = "login02",description = "正常用户登录")
	@Parameters({ "username", "pwd" })
	public void login(String username,String pwd) throws Exception {
		login.login(username, pwd);
		String tip = new BasePage(driver, "mainPage").getText("客服热线");
		Assert.assertEquals(tip, "客服热线:0755-2309674");

	}
	
	
	@AfterClass
	public void afterClass() {

	}
	@AfterTest
	public void afterTest(){
	    driver.quit();
	}
}

testNG配置文件:.xml。这里我用到了testNG的两种参数化方式,1.在测试类中通过注解@DataProvider定义测试参数;2.通过xml文件parameter标签定义测试参数,关于testNG教程,有兴趣的童鞋可以看笔者的另一篇博客:http://blog.csdn.net/u010798968/article/details/73549612

<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite2">
    <parameter name="username" value="li" />
	<parameter name="pwd" value="123456" />
	<parameter name="browserDriverUrl" value="D:\work\workplace\webUITest\browserDriver\chromedriver.exe"/>
	<parameter name="url" value="http://XXXXX/login.html"/>
	<test name="test">
		<classes>
		  <class name="com.etyero.testcase.LoginTest"/>
		</classes>
	</test>
</suite>


以上,从第二章到此章,代码方面的内容基本讲完了,当然笔者这样写也许不是最好的,有啥想法和建议欢迎讨论交流,共同进步,我的资料中有我的各种联系方式,欢迎骚扰。下一章,持续集成和测试报告输出,敬请期待。


  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值