收银台项目
一、项目介绍
1、项目背景
该项目主要是仿照超市收银台系统,主要包括注册账号、切换账号、上架商品、浏览商品、更新商品、浏览订单、购买商品七个模块。

2、项目功能
2.1注册账号
首次进入收银台界面时,需要先注册账号。

2.2切换账号
进行切换账号,并登录。

2.3上架商品
在该界面,可上架商品,输入商品名称、库存、介绍、单位、价格、折扣,最后点击添加,即可上架商品。

2.4浏览商品
点击浏览商品,就可以看见商品信息。

2.5更新商品
点击更新商品,输入要更新商品的id,输入更改后的名称、库存、介绍、单位、价格、折扣,点击添加即可更新商品信息。

2.6浏览订单
点击浏览订单,即可看到订单界面。

2.7购买商品
点击购买商品,输入商品id及购买数量,点击购买即可。


二、项目测试
对收银台项目进行测试,设计测试用例,编写测试代码,对收银台系统的界面及功能等进行测试。
1、测试工具
主要使用了selenium自动化测试工具和Junit单元测试框架。导入selenium和Junit的依赖。
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<version>1.8.2</version>
<scope>test</scope>
</dependency>
</dependencies>
2、测试流程

3、测试部分
3.1测试用例思维导图

3.2测试用例代码

3.2.1 首页测试
static void getUrl(){
driver.get("输入URL");
}
//校验首页是否正确展示功能
@Test
@Order(1)
void checkFunctionExits() throws IOException {
getScreenshot(getClass().getName());
String zhuceText=driver.findElement(By.cssSelector("body > div.导航栏 > a:nth-child(2)")).getText();
Assertions.assertEquals("注册账号",zhuceText);
String qiehuanText=driver.findElement(By.xpath("/html/body/div[1]/a[2]")).getText();
Assertions.assertEquals("切换账号",qiehuanText);
String shangjiaText=driver.findElement(By.cssSelector("body > div.导航栏 > a:nth-child(4)")).getText();
Assertions.assertEquals("上架商品",shangjiaText);
String liulanText=driver.findElement(By.xpath("/html/body/div[1]/a[4]")).getText();
Assertions.assertEquals("浏览商品",liulanText);
String gengxinText=driver.findElement(By.cssSelector("body > div.导航栏 > a:nth-child(6)")).getText();
Assertions.assertEquals("更新商品",gengxinText);
String orderText=driver.findElement(By.xpath("/html/body/div[1]/a[6]")).getText();
Assertions.assertEquals(orderText,"浏览订单");
String goumaiText=driver.findElement(By.cssSelector("body > div.导航栏 > a:nth-child(8)")).getText();
Assertions.assertEquals("购买商品",goumaiText);
}
测试结果:首页展示正确,可以正确点击对应功能部分。
3.2.2 注册切换账号测试
1、校验注册页面元素
//校验注册页面是否正确
@Test
@Order(1)
void functionIsRight(){
//点击注册账号入口,进入注册账号
driver.findElement(By.cssSelector("body > div.导航栏 > a:nth-child(2)")).click();
String logonText=driver.findElement(By.cssSelector("body > div.内容区域 > form > button")).getText();
Assertions.assertEquals("注册",logonText);
String userName=driver.findElement(By.cssSelector("body > div.内容区域 > form > div:nth-child(2) > input[type=text]")).getAttribute("placeholder");
Assertions.assertEquals("用户名",userName);
}
2、测试注册功能
//注册账号
@Test
@Order(2)
void register(){
driver.findElement(By.xpath("/html/body/div[1]/a[1]")).click();
//输入用户名
driver.findElement(By.cssSelector("body > div.内容区域 > form > div:nth-child(2) > input[type=text]")).sendKeys("婷婷");
//输入密码
driver.findElement(By.xpath("/html/body/div[2]/form/div[2]/input")).sendKeys("12345");
//点击注册
driver.findElement(By.xpath("/html/body/div[2]/form/button")).click();
}
3、测试切换(登录)账号
//用户登录
@Test
@Order(3)
void logon(){
driver.findElement(By.xpath("/html/body/div[1]/a[2]")).click();
driver.findElement(By.xpath("/html/body/div[2]/form/div[1]/input")).sendKeys("小鹿");
driver.findElement(By.xpath("/html/body/div[2]/form/div[2]/input")).sendKeys("12345");
driver.findElement(By.xpath("/html/body/div[2]/form/button")).click();
}
测试结果:注册页面元素正确,可以注册并登录账号。
3.2.3 上架商品测试
1、为上架商品测试创建一个工具类
public class paramsUtil {
private String[] goods=new String[]{"梨子","杏子","葡萄","柚子","草莓","荔枝","面包","月饼"};
public String getGoodsname(){
//随机返回一个水果
int index = (int)(Math.random()*goods.length);
System.out.println(index);
return goods[index];
}
/**
* 返回商品价格:原价+折扣价
*/
public List<Integer> getPrices(){
int index = (int)(Math.random()*goods.length);
int discount = index<1?1:index;
int price = discount+1;
List<Integer> list = new ArrayList<>();
list.add(price);
list.add(discount);
return list;
}
}
2、进行上架商品的测试
//校验上架商品页面是否正确
@Test
@Order(2)
void inboundIsRight(){
String introduce=driver.findElement((By.cssSelector("body > div.内容区域 > form > div:nth-child(4) > input[type=text]"))).getAttribute("placeholder");
Assertions.assertEquals("介绍",introduce);
String add=driver.findElement(By.xpath("/html/body/div[2]/form/button")).getText();
Assertions.assertEquals("添加",add);
}
//正确填写并添加商品,添加后会跳转到浏览商品页面
@Order(3)
@ParameterizedTest
@MethodSource
void addGoods(String goodsName,int price,int discount) throws IOException {
//商品名称
driver.findElement(By.cssSelector("body > div.内容区域 > form > div:nth-child(2) > input[type=text]")).sendKeys(goodsName);
//商品库存
driver.findElement(By.cssSelector("body > div.内容区域 > form > div:nth-child(3) > input[type=text]")).sendKeys("100");
//商品介绍
driver.findElement(By.cssSelector("body > div.内容区域 > form > div:nth-child(4) > input[type=text]")).sendKeys("味道很不错");
//商品单位
driver.findElement(By.xpath("/html/body/div[2]/form/div[4]/input")).sendKeys("斤");
//价格
driver.findElement(By.cssSelector("body > div.内容区域 > form > div:nth-child(6) > input[type=text]")).sendKeys(String.valueOf(price));
//折扣
driver.findElement(By.cssSelector("body > div.内容区域 > form > div:nth-child(7) > input[type=text]")).sendKeys(String.valueOf(discount));
getScreenshot(getClass().getName());
//点击添加商品
driver.findElement(By.xpath("/html/body/div[2]/form/button")).click();
//校验添加商品后是否跳转到浏览商品页面
String skim1=driver.findElement(By.cssSelector("body > div.内容区域 > div.展示列表 > h2")).getText();
Assertions.assertEquals("浏览商品",skim1);
}
/**
* 在这里给addGoods方法提供数据来源
*/
static Stream<Arguments> addGoods(){
paramsUtil goodsParams = new paramsUtil();
List<Integer> list1 = goodsParams.getPrices();
// List<Integer> list2 = goodsParams.getPrices();
return Stream.of(Arguments.arguments(goodsParams.getGoodsname(),list1.get(0),list1.get(1)));
}
测试结果:上架商品界面元素正确展示,并且可以实现上架商品。
3.2.4 浏览商品测试
//校验浏览商品页面及下架功能
@Test
@Order(2)
void checkSkim() throws IOException {
getScreenshot(getClass().getName());
driver.findElement(By.xpath("/html/body/div[1]/a[4]")).click();
String skim=driver.findElement(By.xpath("/html/body/div[2]/div[1]/h2")).getText();
Assertions.assertEquals("浏览商品",skim);
String down=driver.findElement(By.xpath("/html/body/div[2]/div[1]/table/tbody/tr[1]/td[8]")).getText();
Assertions.assertEquals("下架",down);
driver.findElement(By.xpath("/html/body/div[2]/div[1]/table/tbody/tr[1]/td[8]")).click();
}
测试结果:浏览商品页面可以正确展示,并且可以实现下架功能。
3.2.5 更新商品测试
1、为更新商品测试创建工具类
public class updateParamsUtil {
private String[] newName=new String[]{"梨","西瓜1","苹果2","香蕉3","橙子","蛋黄派"};
public String updateName(){
//随机返回一个名字
int index = (int)(Math.random()*newName.length);
System.out.println(index);
return newName[index];
}
public List<Integer> getNumber(){
int index = (int)(Math.random()*newName.length);
int discount = index<1?1:index;
int price = discount+1;
int id= (int)(Math.random()*newName.length);
int stockNumber= (int) (Math.random()*200);
List<Integer> list = new ArrayList<>();
list.add(id);
list.add(stockNumber);
list.add(price);
list.add(discount);
return list;
}
}
2、对更新商品功能进行测试
//检查更新商品页面是否正确
@Test
@Order(2)
void updateIsRight(){
driver.findElement(By.xpath("/html/body/div[1]/a[5]")).click();
String updateGoods=driver.findElement(By.xpath("/html/body/div[2]/form/h2")).getText();
Assertions.assertEquals("更新商品",updateGoods);
}
//能否更新商品
@ParameterizedTest
@MethodSource
@Order(3)
void updateGoods(int id, String newName, int stockNumber, int price, int discount)throws Exception {
driver.findElement(By.xpath("/html/body/div[2]/form/div[1]/input")).sendKeys(String.valueOf(id));
driver.findElement(By.xpath("/html/body/div[2]/form/div[2]/input")).sendKeys(newName);
driver.findElement(By.xpath("/html/body/div[2]/form/div[3]/input")).sendKeys(String.valueOf(stockNumber));
driver.findElement(By.xpath("/html/body/div[2]/form/div[5]/input")).sendKeys("斤");
driver.findElement(By.xpath("/html/body/div[2]/form/div[4]/input")).sendKeys("更加可口");
driver.findElement(By.xpath("/html/body/div[2]/form/div[6]/input")).sendKeys(String.valueOf(price));
driver.findElement(By.xpath("/html/body/div[2]/form/div[7]/input")).sendKeys(String.valueOf(discount));
driver.findElement(By.xpath("/html/body/div[2]/form/button")).click();
}
static Stream<Arguments> updateGoods(){
updateParamsUtil newName=new updateParamsUtil();
List<Integer> list1=newName.getNumber();
return Stream.of(Arguments.arguments(list1.get(0),newName.updateName(),list1.get(1),list1.get(2),list1.get(3)));
}
测试结果:更新商品页面元素正确展示,实现了更新商品功能。
3.2.6 购买商品及浏览订单测试
@Test
@Order(1)
void buyGoods() throws IOException {
driver.findElement(By.xpath("/html/body/div[1]/a[7]")).click();
String buygoods=driver.findElement(By.xpath("/html/body/div[2]/form/h2")).getText();
Assertions.assertEquals("购买商品",buygoods);
driver.findElement(By.xpath("/html/body/div[2]/form/div/input")).sendKeys("10-2");
getScreenshot(getClass().getName());
driver.findElement(By.xpath("/html/body/div[2]/form/button")).click();
}
//校验待支付是否可以正常点击
@Test
@Order(2)
void checkPay(){
driver.findElement(By.xpath("/html/body/div[1]/a[6]")).click();
//driver.findElement(By.xpath("/html/body/div[2]/div[1]/a[1]")).click();
String glance1=driver.findElement(By.xpath("/html/body/div[2]/div[1]/h2")).getText();
Assertions.assertEquals("浏览订单",glance1);
}
测试结果:能够实现购买商品功能,浏览订单页面正确展示。
3.2.7 综合测试
1、使用套件将各部分组合起来,实现自动化测试。
@Suite()
@SelectClasses({firstPageTest.class,registerTest.class,inboundTest.class,
goodsBrowseTest.class, payTest.class,updateTest.class,driverQuitTest.class,})
public class runSuite {
}
测试结果:能够将各部分成功组合,并且实现自动化测试。
2、测试总结
本次收银台项目的测试过程,首先对项目实现的功能进行分析,根据项目确定测试流程,并设计测试用例;然后先对各部分分开测试,然后组合进行系统测试,最后实现自动化测试。收银台项目能够实现注册账号、切换账号、上架商品、浏览商品、更新商品、浏览订单、购买商品等功能。
本文含有隐藏内容,请 开通VIP 后查看