0530-3433334

网站建设 APP开发 小程序

知识

分享你我感悟

您当前位置>首页 >> 知识 >> 软件开发

中国信通院发布《中国现状调查报告(2021年)》

发表时间:2023-08-31 21:01:05

文章来源:炫佑科技

浏览次数:160

菏泽炫佑科技

中国信通院发布《中国现状调查报告(2021年)》

2021年中国互联网大会在北京召开,中国信息通信研究院依托云计算开源产业联盟、大数据研究院发布《中国现状调查报告(2021)》。

调查结果显示,敏捷已成为软件开发的主流研发模式,超过一半的企业已经学习或实践了Scrum或; 85.16%的企业选择了持续集成。

想一想,你的公司已经有持续集成流程了吗? 你参与测试了吗? 公司内部进行的自动化测试是否融入到持续集成流程中?

事实上,自动化测试的*佳实践是在项目构建和部署完成后,使用自动化测试作为*终的验证手段,以保证版本的质量。

所以,不要再把自动化测试视为闭门造车,让我们看看如何将自动化测试融入到持续集成流程中。

1. 广泛的自动化测试执行

当你**次学习自动化测试时,代码是这样的吗?

那么当真正在公司开发并完成多个用例的编写时,就需要编写相应数量的类来完成整个流程的测试。 脑子开始肿了吗?

WebDriver driver=new ChromeDriver();
//访问被测网页
driver.get("https://www.baidu.com");
//与get等效
driver.navigate().to("https://music.163.com");
//返回上个页面
driver.navigate().back();
//*大化浏览器窗口
driver.manage().window().maximize();
//1、输入框输入roy
WebElement searchInput = driver.findElement(By.cssSelector("#kw"));
searchInput.sendKeys("roy");
//2、提交搜索
driver.findElement(By.cssSelector("#su")).click();
Thread.sleep(1000);
//3、清理搜索框,重新输入特斯汀进行搜索
//注意由于页面已经刷新了,这是两个不同的搜索框元素
WebElement newSinput = driver.findElement(By.cssSelector("#kw"));
newSinput.clear();
newSinput.sendKeys("特斯汀");
//如果输入框是在form表单中,可以用submit方法完成提交。
newSinput.submit();
Thread.sleep(1000);
//3、断言验证
//1、用title断言
System.out.println(driver.getTitle());
if("特斯汀_百度搜索".equals(driver.getTitle())){
    System.out.println("测试标题断言成功");
}
//2、获取页面html文档判断是否包含特斯汀。
String pageSource = driver.getPageSource();
//        System.out.println("页面源码是"+pageSource);
if(pageSource.contains("特斯汀")){
    System.out.println("断言页面文档成功");
}
//3、获取页面上特定元素的文本或者属性进行断言
WebElement firstRes = driver.findElement(By.xpath("//div[@id='content_left']/div[1]/h3/a"));
System.out.println("文本内容是"+firstRes.getText());
System.out.println("href链接是"+firstRes.getAttribute("href"));
//等待3秒
Thread.sleep(3000);
//关闭浏览器并且杀死chromedriver进程。
driver.quit();

完成这样实现的自动化测试脚本后,运行自动化测试又成了一个大问题。 我们需要一一执行这些自动化测试代码吗? 这不是说如果要运行自动化就得一一运行吗? 是不是意味着很快就会变成手动执行?

为了解决这个问题,首先要从两个角度完成自动化测试的优化和演进:

1.用例编写和维护,简化自动化测试用例的编写过程,使编写自动化测试的门槛更低、更容易理解。

2、用例执行调度,整合自动化测试多个用例的执行,让自动化测试的执行更加优雅、便捷。

2. 自动化测试的演变

上面我们提到了解决自动化测试的维护和运维问题的两个痛点。 让我们看看如何解决它们。

2.1. 关键词驱动的介绍

为了解决用例编写过于复杂的问题,我们可以从关键字驱动的概念入手自动化软件开发,封装常见的自动化测试操作,形成关键字,在编写新用例和维护用例时复用关键字进行调用。 因此,自动化测试脚本可以优化为以下形式:

WebKeyWord web=new WebKeyWord();
web.openBrowser("chrome");
web.setWindowSize();
web.visitWeb("http://www.baidu.com");
web.halt("2");
web.inputByCss("#kw","特斯汀");
web.clickByCss("#su");
//用显式等待,来完成等待标题变成Testing
web.explicitlyWait("特斯汀_百度搜索");
web.assertELeText("//div[@id='content_left']/div[1]/h3/a","特斯汀_百度搜索");
web.halt("2.5");
web.closeBrowser();

显然,原来冗长的代码被简化为关键字方法调用后,测试数据和测试动作被组织和分离,可读性和可维护性大大提高。

但并不是所有的同事都会写代码,而且这种方式管理测试所需的操作数据也不是很通用。 有没有办法进一步降低自动化测试用例的编辑门槛? 并使用例再次更具可读性? 同时,第二个痛点是如何调度多个用例的执行?

2.2. 数据驱动简介

针对以上问题,我们考虑进一步优化,引入数据驱动的设计理念,并使用*常用的用例编辑模式——excel来记录编写好的自动化测试用例。

引入数据驱动的核心就是将代码操作和业务流程数据完全分离。 下面是一个使用数据驱动概念通过excel管理测试用例的例子。 可以直接在excel中依次添加多个测试用例,也可以使用多个sheet页进行交互管理。

当然,用excel写好用例后,必须通过代码来调用,用例才能被执行。 因此,在操作过程中,需要完成excel读写的实现,将excel中填写的用例步骤流程转换为自动化测试脚本执行:

//调用Excel读写操作类,完成用例文件的读取和结果文件的生成与结果写入。
ExcelReader reader = new ExcelReader("Cases\\WebCases.xlsx");
ExcelWriter writer = new ExcelWriter("Cases\\WebCases.xlsx", "Cases\\Result\\result-webCases" + AutoTools.dateTimeStr("MM-dd-HH:mm"));
WebKeyWord web = new WebKeyWord();
//遍历sheet页
for (int i = 0; i < reader.getTotalSheetNo(); i++) {
    reader.useSheetByIndex(i);
    writer.useSheetByIndex(i);
    System.out.println(reader.getSheetName(i));
    for (int rowNO = 0; rowNO < reader.getRowNo(); rowNO++) {
        List rowContent = reader.readLine(rowNO);
        System.out.format("当前执行到第%s行,当前行的内容是%s \r\n", rowNO, rowContent);
        //执行关键字:
        boolean result = false;
        switch (rowContent.get(3)) {
            case "openBrowser":
                result = web.openBrowser(rowContent.get(4));
                break;
            case "visitWeb":
                result = web.visitWeb(rowContent.get(4));
                break;
            case "input":
                result = web.input(rowContent.get(4), rowContent.get(5));
                break;
            case "click":
                result = web.click(rowContent.get(4));
                break;
            case "switchIframeByXpath":
                result = web.switchIframeByXpath(rowContent.get(4));
                break;
            case "saveUniqueParam":
                result = web.saveDateTimeParam(rowContent.get(4), rowContent.get(5), rowContent.get(6));
                break;
            case "selectByText":
                result = web.selectWithText(rowContent.get(4), rowContent.get(5));
                break;
            case "closeBrowser":
                result = web.closeBrowser();
                break;
            case "halt":
                result = web.halt(rowContent.get(4));
                break;
        }
        if (rowContent.get(0).trim().equals("") && rowContent.get(1).trim().equals("")) {
            if (result) {
                writer.writeCell(rowNO, 10, "测试成功");
            } else {
                writer.writeFailCell(rowNO, 10, "测试失败");
            }
        }
    }
}
writer.save();
reader.close();

通过数据驱动的优化,前面提到的两个痛点都得到了解决。 用例用excel编写,更加方便易懂,而批量用例用excel编写后可以直接在数据驱动框架中运行。 调用以完成批处理运行。

至此,我们就完成了自动化测试的优化。 接下来,是时候看看如何将自动化测试引入到持续集成过程中了。

3、持续集成完成自动化测试

持续集成(CI/CD)的含义其实就是在开发过程中,团队开发成员不断地将自己的工作整合成一个完整的流程。 通常每个成员每天至少集成一次,并且每次集成都通过自动化构建(包括编译、发布、自动化测试)来验证,以便尽早发现集成错误。 持续集成的主要流程如下:

因此,自动化测试作为*后一道关卡中国信通院发布《中国现状调查报告(2021年)》,验证每个持续集成过程生成的项目是否符合质量标准,尽早发现项目中的问题。

因此,持续集成过程首先要经过源码构建和项目部署两个过程,然后完成自动化测试。

目前市场占有率*高的持续集成系统就是持续集成系统,那么接下来要做的就是在其上构建完整的持续集成流程。

该流程包括四个核心部分:

源码拉取

在构建任务中配置被测项目的源码仓库地址并完成代码拉取

编译和构建

在构建任务中添加项目对应的构建方法,如使用maven命令构建:

环境部署

通过SSH连接CI使用的测试环境,调用部署脚本完成项目的部署操作

自动化测试

将自动化测试脚本打包为可执行jar,通过命令完成调用执行,或者结合其他测试框架执行。

这样就完成了研发系统的构建过程。 *后,将预定的构建设置添加到构建触发器中,完整的持续集成过程就完成了。

*后,如果您对软件测试感兴趣,欢迎您在百度搜索“软件测试腾讯课堂”或者关注公众号“软件测试”,里面涵盖了许多精彩的免费视频或实用知识。

炫佑科技专注互联网开发小程序开发-app开发-软件开发-网站制作等

相关案例查看更多