自动化测试项目实战

目录

1.熟悉项目

2.针对核心流程设计手工测试用例

3.手工测试用例转换为自动化测试用例

前置工作 

测试工作

登陆界面

博客列表页数量

博客详情页检验

写博客并发布

 校验标题,时间

删除博客

注销博客 


针对博客系统进行自动化测试

1.熟悉项目

2.针对核心流程设计手工测试用例

3.手工测试用例转换为自动化测试用例

前置工作 

初始化工作:@BeforeAll   创建驱动

退出工作:@AfterAll    退出浏览器

public class InitAndEnd {
    static WebDriver webDriver;
    @BeforeAll
    static void SetUp(){
        webDriver = new ChromeDriver();
    }
    @AfterAll
    static void TearDown(){
        webDriver.quit();
    }
}

测试工作

登陆界面

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvFileSource;
import org.openqa.selenium.By;

import java.util.concurrent.TimeUnit;

import static java.lang.Thread.sleep;

public class BlogCases extends InitAndEnd{
    /*
    输入正确的账号密码,登陆成功
     */
    @ParameterizedTest
    @CsvFileSource(resources = "LoginCSv.csv")
    void LoginSuccess(String username,String password,String blogList_URL){
        //打开博客登录页面
        webDriver.get("http://localhost:8080/login.html");
//        sleep(3000);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        //输入账号zhangsan
        webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        //输入密码123456
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        //点击提交按钮
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        webDriver.findElement(By.cssSelector("#submit")).click();
        //跳转到列表页,获取URL,如果url为列表页面的,测试通过,否则不通过
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        String cur_url = webDriver.getCurrentUrl();
        Assertions.assertEquals(blogList_URL,cur_url);
    }
}

 

 错误情况

博客列表页数量

  /*
    博客数量
     */
    @Test
    void BlogList() {
        //打开博客列表页
        webDriver.get("http://localhost:8080/myblog_list.html");
        //获取页面所有博客标题对应的元素
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        int title_num = webDriver.findElements(By.cssSelector(".title")).size();
        //元素数量为0测试不通过
        Assertions.assertNotEquals(0,title_num);
    }

博客详情页检验

url 博客标题 详情页title是否是博客详情页

    /*
       博客详情页检验
       url
       博客标题
       详情页title是否是博客详情页
     */
    @ParameterizedTest
    @MethodSource("Generator")
    void BlogDetail(String expected_url,String expected_title,String expected_blog_title){
        //找到第一篇博客的查看全文按钮
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        webDriver.findElement(By.xpath("//*[@id=\"articleList\"]/div[1]/a[1]")).click();
        //获取url
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        String cur_url = webDriver.getCurrentUrl();
        //获取当前页面title
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        String cur_title = webDriver.getTitle();
        //获取博客标题
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        String cur_blog_title = webDriver.findElement(By.cssSelector("#title")).getText();
        //断言
        Assertions.assertEquals(expected_url,cur_url);
        Assertions.assertEquals(expected_title,cur_title);
        Assertions.assertEquals(expected_blog_title,cur_blog_title);


    }
    public static Stream<Arguments> Generator() {
        return Stream.of(Arguments.arguments("http://localhost:8080/blog_content.html?id=10",
                "博客详情页","Java数据结构基础——泛型、通配符"));
    }

写博客并发布

    @Order(3)
    @Test
    void EditBolg(){
        //点击写博客按钮
        webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
        //输入标题,通过Jscript也能输入
        webDriver.findElement(By.cssSelector("#title")).sendKeys("软件测试");
        //点击发布
        webDriver.findElement(By.cssSelector("body > div.blog-edit-container > div.title > button")).click();
    }

 校验标题,时间

    @Order(3)
    @Test
    void BlogInfoChecked() throws InterruptedException {
        webDriver.get("http://localhost:8080/blog_list.html");
        sleep(3000);
        //获取第一篇文章标题
        String cur_blog_title =  webDriver.findElement(By.cssSelector("#articleList > div:nth-child(1) > div.title")).getText();
        //获取博客发布时间
        sleep(3000);
        String cur_blog_time= webDriver.findElement(By.xpath("//*[@id=\"articleList\"]/div[1]/div[2]")).getText();
        //判断
        Assertions.assertEquals("软件测试",cur_blog_title);
        if(cur_blog_time.equals("2023-07-20")){
            System.out.println("测试通过");
        }else {
            System.out.println("测试不通过");
        }
    }

删除博客

并确认是否删除成功,第一篇文章是否已经改变

@Order(3)
    @Test
    void deleteBlog() throws InterruptedException {
        webDriver.get("http://localhost:8080/myblog_list.html");
        //点击第一篇文章删除按钮
        webDriver.findElement(By.xpath("//*[@id=\"articleList\"]/div[1]/a[3]")).click();
        //确认删除
        webDriver.switchTo().alert().accept();
//        webDriver.findElement(By.xpath("//*[@id=\"articleList\"]/div[1]/div[1]")).click();
        //删除成功确认
        sleep(3000);//确认
        webDriver.switchTo().alert().accept();
        //获取第一篇文章是否是Java数据结构基础——泛型、通配符
        String cur_blog_title = webDriver.findElement(By.cssSelector("#articleList > div:nth-child(1) > div.title")).getText();
        //断言
        Assertions.assertEquals("Java数据结构基础——泛型、通配符",cur_blog_title);
    }

注销博客 

并判断是否跳转到登陆页面,输入框是否清空 

   /*
    注销博客
     */
    @Test
    @Order(3)
    void exit(){
        //注销操作
        webDriver.get("http://localhost:8080/myblog_list.html");
        webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();
        webDriver.switchTo().alert().accept();
        //是否跳转到登陆页面
        //获取url
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        String cur_url = webDriver.getCurrentUrl();
        //判断
        Assertions.assertEquals("http://localhost:8080/login.html",cur_url);
        //判断输入框是否为空
        String input_name = webDriver.findElement(By.cssSelector("#username")).getText();
        String input_pwd = webDriver.findElement(By.cssSelector("#password")).getText();
        Assertions.assertEquals("",input_name);
        Assertions.assertEquals("",input_pwd);
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在接口自动化测试项目实战中,我们可以采用以下步骤: 1. 确定测试目标和需求:在开始接口自动化测试之前,我们需要明确测试的目标和需求。这包括确定要测试的接口以及预期的结果。 2. 设计测试用例:根据测试目标和需求,我们可以设计测试用例,包括输入数据、预期结果和验证方法等。测试用例应该覆盖各种可能的情况,以确保接口的正确性和稳定性。 3. 选择合适的工具:根据项目的需求和团队的技术栈,选择合适的接口自动化测试工具。开源工具包括 JMeter、Postman,也可以使用内部开发的自动化测试平台,如 WeJestAPITest。 4. 编写测试脚本:根据设计的测试用例,使用选定的工具编写测试脚本。测试脚本应该能够模拟接口的请求和验证返回结果,可以使用工具提供的接口测试库或编程语言的相关库来实现。 5. 执行测试脚本:执行编写好的测试脚本,发送请求并验证返回结果。可以使用工具提供的命令行界面或图形化界面来执行测试。 6. 分析和报告结果:根据测试脚本的执行结果,分析接口的功能和性能。将测试结果进行整理和报告,包括通过的测试用例、失败的测试用例以及异常情况的处理。 7. 修复和重复测试:如果测试发现了问题或者异常情况,将问题报告给开发团队进行修复。修复完成后,重新执行测试脚本进行验证。 通过以上步骤,我们可以在接口自动化测试项目实战出一个高效、稳定的测试流程,以确保后台服务的平稳运行。引用<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [接口自动化测试实战经验分享,测试用例也能自动生成](https://blog.csdn.net/m0_67695717/article/details/131415817)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YoLo♪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值