收银台项目(测试)

收银台项目

一、项目介绍

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、测试总结
本次收银台项目的测试过程,首先对项目实现的功能进行分析,根据项目确定测试流程,并设计测试用例;然后先对各部分分开测试,然后组合进行系统测试,最后实现自动化测试。收银台项目能够实现注册账号、切换账号、上架商品、浏览商品、更新商品、浏览订单、购买商品等功能。
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值